15 Commits

Author SHA1 Message Date
Motschen
37e5789081 VisualOverhaul 4.1.0 - 1.18.2, colored lilypads and improvements
Fix #29
Fix #27
Fix #26
Fix #25
Fix #24
2022-03-10 20:59:02 +01:00
Motschen
01f894a184 VisualOverhaul 4.0.0 - Update to 1.18, Smoker, Blast Furnace, Toggle Potion Glint
- Update to 1.18
- Overhaul Smoker
- Overhaul Blast Furnace
- Add toggle to disable potion glint
2021-12-18 15:46:40 +01:00
Motschen
775d3bd6b2 Merge pull request #19 from RDKRACZ/oxipng
Optimized assets.
2021-09-15 21:04:53 +02:00
K0RR
042c68d81e Update README.md 2021-09-09 12:48:54 +02:00
K0RR
eb778de237 Update gradle.properties 2021-09-09 12:47:43 +02:00
K0RR
2fb840a19d Update gradle-wrapper.properties 2021-09-09 12:47:31 +02:00
K0RR
316caf8a95 Optimized assets.
Lossless compression.
2021-08-02 01:07:44 +02:00
Motschen
1bcba33aaa VisualOverhaul 3.3.0 - 1.17 and small Refactor
Update to 1.17-pre1 and Java 16
Upgrade to MidnightLib, making the config more clean and accessible without modmenu
(Please ignore the commits before)
2021-05-30 13:25:44 +02:00
Motschen
88e5c38337 Revert "VisualOverhaul 3.1.0 - 1.17 and small Refactor"
This reverts commit 98dee343e1.
2021-05-30 13:22:52 +02:00
Motschen
98dee343e1 VisualOverhaul 3.1.0 - 1.17 and small Refactor
Update to 1.17-pre1 and Java 16
Upgrade to MidnightLib, making the config more clean and accessible without modmenu
2021-05-30 13:15:12 +02:00
Motschen
8f51167982 VisualOverhaul 3.2.0 - Compat & Stability
- Overhaul Phonos's Radio Jukebox
-Added compat with Biome Makeover, Desolation, Dynamic Discs, Extra Discs and Phonos discs

- Fixed crash with Charm
- Way smoother biome-colored items
- Biome colored items for more vanilla items
- Serverside method to get music discs is now prioritized, clientside method only applies if the ItemStack is empty

- Move puddles into a seperate mod
2021-03-30 20:35:17 +02:00
Motschen
afac024e9e Client side implementation of the jukebox overhaul
Uses a mixin into the sound system to determine the sound played at the position of the jukebox, then tries to get the record item of the sound.
If it fails it will fall back to the server side implementation.
2021-03-28 12:07:47 +02:00
Motschen
f802e803b9 Fix #9 2021-03-15 13:43:38 +01:00
Motschen
0d008e40d9 Fix puddles connecting weirdly
The cause of the bug cannot be easily fixed and would cause issues with certain renderers, so I just made puddles unable to be placed when the corners or sides of the block above or below already have a fluid.
2021-03-15 13:32:28 +01:00
Motschen
e43e483567 VisualOverhaul 3.0.0 - Puddles & Colors
Switched to MidnightConfig
(No need to seperately download AutoConfig & ClothConfig anymore)

Adds puddles which spawn during rain and can be used to fill a water bottle.
(Game rule: "puddleSpawnRate")
Also, snow layers can now pile up during snow storms.
(Game rule: "snowStackChance")

Items which are colored in their block form also show the color corresponding to the biome as an item. (Toggleable via config)
2021-03-14 21:22:06 +01:00
167 changed files with 2767 additions and 430 deletions

0
.gitignore vendored Normal file → Executable file
View File

0
LICENSE Normal file → Executable file
View File

2
README.md Normal file → Executable file
View File

@@ -1,2 +1,4 @@
# VisualOverhaul # VisualOverhaul
https://www.curseforge.com/minecraft/mc-mods/visual-overhaul
Revamps the visual aspect of certain vanilla blocks. Revamps the visual aspect of certain vanilla blocks.

68
build.gradle Normal file → Executable file
View File

@@ -1,10 +1,10 @@
plugins { plugins {
id 'fabric-loom' version '0.5-SNAPSHOT' id 'fabric-loom' version '0.10-SNAPSHOT'
id 'maven-publish' id 'maven-publish'
} }
sourceCompatibility = JavaVersion.VERSION_1_8 sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_1_8 targetCompatibility = JavaVersion.VERSION_17
archivesBaseName = project.archives_base_name archivesBaseName = project.archives_base_name
version = project.mod_version version = project.mod_version
@@ -15,57 +15,51 @@ minecraft {
repositories { repositories {
maven { url "https://jitpack.io" } maven { url "https://jitpack.io" }
maven { url "https://api.modrinth.com/maven" }
} }
dependencies { dependencies {
//to change the versions see the gradle.properties file //to change the versions see the gradle.properties file
minecraft "com.mojang:minecraft:${project.minecraft_version}" minecraft "com.mojang:minecraft:${project.minecraft_version}"
mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2" mappings "net.fabricmc:yarn:${project.yarn_mappings}:v2"
modCompile "net.fabricmc:fabric-loader:${project.loader_version}" modImplementation "net.fabricmc:fabric-loader:${project.loader_version}"
modCompile "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}" modImplementation "net.fabricmc.fabric-api:fabric-api:${project.fabric_version}"
modImplementation ("me.sargunvohra.mcmods:autoconfig1u:${project.auto_config_version}") { modImplementation "maven.modrinth:midnightlib:${project.midnightlib_version}"
exclude group: "net.fabricmc.fabric-api" include "maven.modrinth:midnightlib:${project.midnightlib_version}"
}
modImplementation ("me.shedaniel.cloth:config-2:${project.cloth_config_version}") {
exclude group: "net.fabricmc.fabric-api"
}
modImplementation ("io.github.prospector:modmenu:${project.mod_menu_version}") {
exclude group: "net.fabricmc.fabric-api"
}
} }
processResources { processResources {
inputs.property "version", project.version inputs.property "version", project.version
from(sourceSets.main.resources.srcDirs) { filesMatching("fabric.mod.json") {
include "fabric.mod.json"
expand "version": project.version expand "version": project.version
} }
from(sourceSets.main.resources.srcDirs) {
exclude "fabric.mod.json"
}
} }
// ensure that the encoding is set to UTF-8, no matter what the system default is tasks.withType(JavaCompile).configureEach {
// this fixes some edge cases with special characters not displaying correctly // ensure that the encoding is set to UTF-8, no matter what the system default is
// see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html // this fixes some edge cases with special characters not displaying correctly
tasks.withType(JavaCompile) { // see http://yodaconditions.net/blog/fix-for-java-file-encoding-problems-with-gradle.html
options.encoding = "UTF-8" // If Javadoc is generated, this must be specified in that task too.
it.options.encoding = "UTF-8"
// Minecraft 1.17 (21w19a) upwards uses Java 16.
it.options.release = 16
} }
// Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task java {
// if it is present. // Loom will automatically attach sourcesJar to a RemapSourcesJar task and to the "build" task
// If you remove this task, sources will not be generated. // if it is present.
task sourcesJar(type: Jar, dependsOn: classes) { // If you remove this line, sources will not be generated.
classifier = "sources" withSourcesJar()
from sourceSets.main.allSource
} }
jar { jar {
from "LICENSE" from("LICENSE") {
rename { "${it}_${project.archivesBaseName}"}
}
} }
// configure the maven publication // configure the maven publication
@@ -82,9 +76,11 @@ publishing {
} }
} }
// select the repositories you want to publish to // See https://docs.gradle.org/current/userguide/publishing_maven.html for information on how to set up publishing.
repositories { repositories {
// uncomment to publish to the local maven // Add repositories to publish to here.
// mavenLocal() // Notice: This block does NOT have the same function as the block in the top level.
// The repositories here will be used for publishing your artifact, not for
// retrieving dependencies.
} }
} }

17
gradle.properties Normal file → Executable file
View File

@@ -1,21 +1,18 @@
# Done to increase the memory available to gradle. # Done to increase the memory available to gradle.
org.gradle.jvmargs=-Xmx1G org.gradle.jvmargs=-Xmx2G
# Fabric Properties # Fabric Properties
# check these on https://fabricmc.net/use # check these on https://fabricmc.net/use
minecraft_version=1.16.5 minecraft_version=1.18.2
yarn_mappings=1.16.5+build.3 yarn_mappings=1.18.2+build.2
loader_version=0.11.1 loader_version=0.13.3
# Mod Properties # Mod Properties
mod_version = 2.0.1 mod_version = 4.1.0
maven_group = eu.midnightdust maven_group = eu.midnightdust
archives_base_name = visualoverhaul archives_base_name = visualoverhaul
# Dependencies # Dependencies
# currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api # currently not on the main fabric site, check on the maven: https://maven.fabricmc.net/net/fabricmc/fabric-api/fabric-api
fabric_version=0.29.4+1.16 fabric_version=0.47.10+1.18.2
midnightlib_version=0.4.0
auto_config_version = 3.2.0-unstable
cloth_config_version = 4.7.0-unstable
mod_menu_version = 1.14.6+build.31

BIN
gradle/wrapper/gradle-wrapper.jar vendored Normal file → Executable file

Binary file not shown.

2
gradle/wrapper/gradle-wrapper.properties vendored Normal file → Executable file
View File

@@ -1,5 +1,5 @@
distributionBase=GRADLE_USER_HOME distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5.1-bin.zip distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.2-bin.zip
zipStoreBase=GRADLE_USER_HOME zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists zipStorePath=wrapper/dists

270
gradlew vendored Normal file → Executable file
View File

@@ -1,7 +1,7 @@
#!/usr/bin/env sh #!/bin/sh
# #
# Copyright 2015 the original author or authors. # Copyright © 2015-2021 the original authors.
# #
# Licensed under the Apache License, Version 2.0 (the "License"); # Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License. # you may not use this file except in compliance with the License.
@@ -17,78 +17,113 @@
# #
############################################################################## ##############################################################################
## #
## Gradle start up script for UN*X # Gradle start up script for POSIX generated by Gradle.
## #
# Important for running:
#
# (1) You need a POSIX-compliant shell to run this script. If your /bin/sh is
# noncompliant, but you have some other compliant shell such as ksh or
# bash, then to run this script, type that shell name before the whole
# command line, like:
#
# ksh Gradle
#
# Busybox and similar reduced shells will NOT work, because this script
# requires all of these POSIX shell features:
# * functions;
# * expansions «$var», «${var}», «${var:-default}», «${var+SET}»,
# «${var#prefix}», «${var%suffix}», and «$( cmd )»;
# * compound commands having a testable exit status, especially «case»;
# * various built-in commands including «command», «set», and «ulimit».
#
# Important for patching:
#
# (2) This script targets any POSIX shell, so it avoids extensions provided
# by Bash, Ksh, etc; in particular arrays are avoided.
#
# The "traditional" practice of packing multiple parameters into a
# space-separated string is a well documented source of bugs and security
# problems, so this is (mostly) avoided, by progressively accumulating
# options in "$@", and eventually passing that to Java.
#
# Where the inherited environment variables (DEFAULT_JVM_OPTS, JAVA_OPTS,
# and GRADLE_OPTS) rely on word-splitting, this is performed explicitly;
# see the in-line comments for details.
#
# There are tweaks for specific operating systems such as AIX, CygWin,
# Darwin, MinGW, and NonStop.
#
# (3) This script is generated from the Groovy template
# https://github.com/gradle/gradle/blob/master/subprojects/plugins/src/main/resources/org/gradle/api/internal/plugins/unixStartScript.txt
# within the Gradle project.
#
# You can find Gradle at https://github.com/gradle/gradle/.
#
############################################################################## ##############################################################################
# Attempt to set APP_HOME # Attempt to set APP_HOME
# Resolve links: $0 may be a link # Resolve links: $0 may be a link
PRG="$0" app_path=$0
# Need this for relative symlinks.
while [ -h "$PRG" ] ; do # Need this for daisy-chained symlinks.
ls=`ls -ld "$PRG"` while
link=`expr "$ls" : '.*-> \(.*\)$'` APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path
if expr "$link" : '/.*' > /dev/null; then [ -h "$app_path" ]
PRG="$link" do
else ls=$( ls -ld "$app_path" )
PRG=`dirname "$PRG"`"/$link" link=${ls#*' -> '}
fi case $link in #(
/*) app_path=$link ;; #(
*) app_path=$APP_HOME$link ;;
esac
done done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >/dev/null APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit
APP_HOME="`pwd -P`"
cd "$SAVED" >/dev/null
APP_NAME="Gradle" APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"` APP_BASE_NAME=${0##*/}
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
# Use the maximum available, or set MAX_FD != -1 to use that value. # Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum" MAX_FD=maximum
warn () { warn () {
echo "$*" echo "$*"
} } >&2
die () { die () {
echo echo
echo "$*" echo "$*"
echo echo
exit 1 exit 1
} } >&2
# OS specific support (must be 'true' or 'false'). # OS specific support (must be 'true' or 'false').
cygwin=false cygwin=false
msys=false msys=false
darwin=false darwin=false
nonstop=false nonstop=false
case "`uname`" in case "$( uname )" in #(
CYGWIN* ) CYGWIN* ) cygwin=true ;; #(
cygwin=true Darwin* ) darwin=true ;; #(
;; MSYS* | MINGW* ) msys=true ;; #(
Darwin* ) NONSTOP* ) nonstop=true ;;
darwin=true
;;
MINGW* )
msys=true
;;
NONSTOP* )
nonstop=true
;;
esac esac
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM. # Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables # IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java" JAVACMD=$JAVA_HOME/jre/sh/java
else else
JAVACMD="$JAVA_HOME/bin/java" JAVACMD=$JAVA_HOME/bin/java
fi fi
if [ ! -x "$JAVACMD" ] ; then if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
@@ -97,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the
location of your Java installation." location of your Java installation."
fi fi
else else
JAVACMD="java" JAVACMD=java
which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
Please set the JAVA_HOME variable in your environment to match the Please set the JAVA_HOME variable in your environment to match the
@@ -105,84 +140,95 @@ location of your Java installation."
fi fi
# Increase the maximum file descriptors if we can. # Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then
MAX_FD_LIMIT=`ulimit -H -n` case $MAX_FD in #(
if [ $? -eq 0 ] ; then max*)
if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then MAX_FD=$( ulimit -H -n ) ||
MAX_FD="$MAX_FD_LIMIT" warn "Could not query maximum file descriptor limit"
fi esac
ulimit -n $MAX_FD case $MAX_FD in #(
if [ $? -ne 0 ] ; then '' | soft) :;; #(
warn "Could not set maximum file descriptor limit: $MAX_FD" *)
fi ulimit -n "$MAX_FD" ||
else warn "Could not set maximum file descriptor limit to $MAX_FD"
warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
fi
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
JAVACMD=`cygpath --unix "$JAVACMD"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac esac
fi fi
# Escape application args # Collect all arguments for the java command, stacking in reverse order:
save () { # * args from the command line
for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done # * the main class name
echo " " # * -classpath
} # * -D...appname settings
APP_ARGS=$(save "$@") # * --module-path (only if needed)
# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables.
# Collect all arguments for the java command, following the shell quoting and substitution rules # For Cygwin or MSYS, switch paths to Windows format before running java
eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" if "$cygwin" || "$msys" ; then
APP_HOME=$( cygpath --path --mixed "$APP_HOME" )
CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" )
# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong JAVACMD=$( cygpath --unix "$JAVACMD" )
if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then
cd "$(dirname "$0")" # Now convert the arguments - kludge to limit ourselves to /bin/sh
for arg do
if
case $arg in #(
-*) false ;; # don't mess with options #(
/?*) t=${arg#/} t=/${t%%/*} # looks like a POSIX filepath
[ -e "$t" ] ;; #(
*) false ;;
esac
then
arg=$( cygpath --path --ignore --mixed "$arg" )
fi
# Roll the args list around exactly as many times as the number of
# args, so each arg winds up back in the position where it started, but
# possibly modified.
#
# NB: a `for` loop captures its iteration list before it begins, so
# changing the positional parameters here affects neither the number of
# iterations, nor the values presented in `arg`.
shift # remove old arg
set -- "$@" "$arg" # push replacement arg
done
fi fi
# Collect all arguments for the java command;
# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of
# shell script including quotes and variable substitutions, so put them in
# double quotes to make sure that they get re-expanded; and
# * put everything else in single quotes, so that it's not re-expanded.
set -- \
"-Dorg.gradle.appname=$APP_BASE_NAME" \
-classpath "$CLASSPATH" \
org.gradle.wrapper.GradleWrapperMain \
"$@"
# Use "xargs" to parse quoted args.
#
# With -n1 it outputs one arg per line, with the quotes and backslashes removed.
#
# In Bash we could simply go:
#
# readarray ARGS < <( xargs -n1 <<<"$var" ) &&
# set -- "${ARGS[@]}" "$@"
#
# but POSIX shell has neither arrays nor command substitution, so instead we
# post-process each arg (as a line of input to sed) to backslash-escape any
# character that might be a shell metacharacter, then use eval to reverse
# that process (while maintaining the separation between arguments), and wrap
# the whole thing up as a single "set" statement.
#
# This will of course break if any of these variables contains a newline or
# an unmatched quote.
#
eval "set -- $(
printf '%s\n' "$DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS" |
xargs -n1 |
sed ' s~[^-[:alnum:]+,./:=@_]~\\&~g; ' |
tr '\n' ' '
)" '"$@"'
exec "$JAVACMD" "$@" exec "$JAVACMD" "$@"

25
gradlew.bat vendored Normal file → Executable file
View File

@@ -29,6 +29,9 @@ if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0 set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME% set APP_HOME=%DIRNAME%
@rem Resolve any "." and ".." in APP_HOME to make it shorter.
for %%i in ("%APP_HOME%") do set APP_HOME=%%~fi
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
@@ -37,7 +40,7 @@ if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1 %JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init if "%ERRORLEVEL%" == "0" goto execute
echo. echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
@@ -51,7 +54,7 @@ goto fail
set JAVA_HOME=%JAVA_HOME:"=% set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init if exist "%JAVA_EXE%" goto execute
echo. echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
@@ -61,28 +64,14 @@ echo location of your Java installation.
goto fail goto fail
:init
@rem Get command-line arguments, handling Windows variants
if not "%OS%" == "Windows_NT" goto win9xME_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
:execute :execute
@rem Setup the command line @rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle @rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS% "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %*
:end :end
@rem End local scope for the variables with windows NT shell @rem End local scope for the variables with windows NT shell

0
settings.gradle Normal file → Executable file
View File

View File

@@ -3,7 +3,9 @@ package eu.midnightdust.visualoverhaul;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
public class VisualOverhaul { public class VisualOverhaul {
public static final Identifier UPDATE_POTION_BOTTLES = new Identifier("visualoverhaul", "brewingstand"); public static final String MOD_ID = "visualoverhaul";
public static final Identifier UPDATE_RECORD = new Identifier("visualoverhaul", "record");
public static final Identifier UPDATE_FURNACE_ITEMS = new Identifier("visualoverhaul", "furnace"); public static final Identifier UPDATE_POTION_BOTTLES = new Identifier(MOD_ID, "brewingstand");
public static final Identifier UPDATE_RECORD = new Identifier(MOD_ID, "record");
public static final Identifier UPDATE_FURNACE_ITEMS = new Identifier(MOD_ID, "furnace");
} }

View File

@@ -1,29 +1,35 @@
package eu.midnightdust.visualoverhaul; package eu.midnightdust.visualoverhaul;
import eu.midnightdust.visualoverhaul.block.JukeboxTop; import eu.midnightdust.visualoverhaul.block.JukeboxTop;
import eu.midnightdust.visualoverhaul.block.model.FurnaceWoodenPlanksModel;
import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRenderer; import eu.midnightdust.visualoverhaul.block.renderer.BrewingStandBlockEntityRenderer;
import eu.midnightdust.visualoverhaul.block.renderer.FurnaceBlockEntityRenderer; import eu.midnightdust.visualoverhaul.block.renderer.FurnaceBlockEntityRenderer;
import eu.midnightdust.visualoverhaul.block.renderer.JukeboxBlockEntityRenderer; import eu.midnightdust.visualoverhaul.block.renderer.JukeboxBlockEntityRenderer;
import eu.midnightdust.visualoverhaul.config.VOConfig; import eu.midnightdust.visualoverhaul.config.VOConfig;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import me.sargunvohra.mcmods.autoconfig1u.serializer.JanksonConfigSerializer;
import net.fabricmc.api.ClientModInitializer; import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.fabric.api.client.rendereregistry.v1.BlockEntityRendererRegistry; import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientTickEvents;
import net.fabricmc.fabric.api.client.rendering.v1.ColorProviderRegistry;
import net.fabricmc.fabric.api.client.rendering.v1.EntityModelLayerRegistry;
import net.fabricmc.fabric.api.item.v1.FabricItemSettings;
import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry; import net.fabricmc.fabric.api.object.builder.v1.client.model.FabricModelPredicateProviderRegistry;
import net.fabricmc.fabric.api.resource.ResourceManagerHelper; import net.fabricmc.fabric.api.resource.ResourceManagerHelper;
import net.fabricmc.fabric.api.resource.ResourcePackActivationType;
import net.fabricmc.fabric.impl.blockrenderlayer.BlockRenderLayerMapImpl; import net.fabricmc.fabric.impl.blockrenderlayer.BlockRenderLayerMapImpl;
import net.fabricmc.fabric.impl.client.rendering.BlockEntityRendererRegistryImpl;
import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl; import net.fabricmc.fabric.impl.networking.ClientSidePacketRegistryImpl;
import net.fabricmc.loader.api.FabricLoader; import net.fabricmc.loader.api.FabricLoader;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.Blocks; import net.minecraft.block.Blocks;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.*;
import net.minecraft.block.entity.BrewingStandBlockEntity;
import net.minecraft.block.entity.FurnaceBlockEntity;
import net.minecraft.block.entity.JukeboxBlockEntity;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.color.world.BiomeColors;
import net.minecraft.client.render.*;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.item.Items;
import net.minecraft.item.MusicDiscItem; import net.minecraft.item.MusicDiscItem;
import net.minecraft.potion.PotionUtil;
import net.minecraft.potion.Potions;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.collection.DefaultedList; import net.minecraft.util.collection.DefaultedList;
import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.BlockPos;
@@ -32,33 +38,45 @@ import net.minecraft.util.registry.Registry;
import static eu.midnightdust.visualoverhaul.VisualOverhaul.*; import static eu.midnightdust.visualoverhaul.VisualOverhaul.*;
public class VisualOverhaulClient implements ClientModInitializer { public class VisualOverhaulClient implements ClientModInitializer {
public static VOConfig VO_CONFIG;
public static Block JukeBoxTop = new JukeboxTop();
public static Block JukeBoxTop = new JukeboxTop();
public static Item RoundDiscDummy = new Item(new FabricItemSettings());
private final MinecraftClient client = MinecraftClient.getInstance();
@Override @Override
public void onInitializeClient() { public void onInitializeClient() {
AutoConfig.register(VOConfig.class, JanksonConfigSerializer::new); VOConfig.init("visualoverhaul", VOConfig.class);
VO_CONFIG = AutoConfig.getConfigHolder(VOConfig.class).getConfig();
// Block only registered on client, because it's just used for the renderer // // Block only registered on client, because it's just used for the renderer //
Registry.register(Registry.BLOCK, new Identifier("visualoverhaul","jukebox_top"), JukeBoxTop); Registry.register(Registry.BLOCK, new Identifier("visualoverhaul","jukebox_top"), JukeBoxTop);
Registry.register(Registry.ITEM, new Identifier("visualoverhaul","round_disc"), RoundDiscDummy);
EntityModelLayerRegistry.registerModelLayer(FurnaceWoodenPlanksModel.WOODEN_PLANKS_MODEL_LAYER, FurnaceWoodenPlanksModel::getTexturedModelData);
BlockRenderLayerMapImpl.INSTANCE.putBlock(Blocks.JUKEBOX, RenderLayer.getCutout()); BlockRenderLayerMapImpl.INSTANCE.putBlock(Blocks.JUKEBOX, RenderLayer.getCutout());
BlockRenderLayerMapImpl.INSTANCE.putBlock(JukeBoxTop, RenderLayer.getCutout()); BlockRenderLayerMapImpl.INSTANCE.putBlock(JukeBoxTop, RenderLayer.getCutout());
BlockRenderLayerMapImpl.INSTANCE.putBlock(Blocks.FURNACE, RenderLayer.getCutout()); BlockRenderLayerMapImpl.INSTANCE.putBlock(Blocks.FURNACE, RenderLayer.getCutout());
BlockRenderLayerMapImpl.INSTANCE.putBlock(Blocks.SMOKER, RenderLayer.getCutout());
BlockRenderLayerMapImpl.INSTANCE.putBlock(Blocks.BLAST_FURNACE, RenderLayer.getCutout());
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new); BlockEntityRendererRegistryImpl.register(BlockEntityType.BREWING_STAND, BrewingStandBlockEntityRenderer::new);
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new); BlockEntityRendererRegistryImpl.register(BlockEntityType.JUKEBOX, JukeboxBlockEntityRenderer::new);
BlockEntityRendererRegistry.INSTANCE.register(BlockEntityType.FURNACE, FurnaceBlockEntityRenderer::new); BlockEntityRendererRegistryImpl.register(BlockEntityType.FURNACE, FurnaceBlockEntityRenderer::new);
BlockEntityRendererRegistryImpl.register(BlockEntityType.SMOKER, FurnaceBlockEntityRenderer::new);
BlockEntityRendererRegistryImpl.register(BlockEntityType.BLAST_FURNACE, FurnaceBlockEntityRenderer::new);
// // Phonos Compat //
// if (FabricLoader.getInstance().isModLoaded("phonos")) {
// PhonosCompatInit.init();
// BlockEntityRendererRegistry.INSTANCE.register(PhonosBlocks.RADIO_JUKEBOX_ENTITY, RadioJukeboxBlockEntityRenderer::new);
// }
Registry.ITEM.forEach((item) -> { Registry.ITEM.forEach((item) -> {
if(item instanceof MusicDiscItem) { if(item instanceof MusicDiscItem || item.getName().getString().toLowerCase().contains("music_disc") || item.getName().getString().toLowerCase().contains("dynamic_disc")) {
FabricModelPredicateProviderRegistry.register(item, new Identifier("round"), (stack, world, entity) -> stack.getCount() == 2 ? 1.0F : 0.0F); FabricModelPredicateProviderRegistry.register(item, new Identifier("round"), (stack, world, entity, seed) -> stack.getCount() == 2 ? 1.0F : 0.0F);
} }
}); });
ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_POTION_BOTTLES, ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_POTION_BOTTLES,
(packetContext, attachedData) -> { (packetContext, attachedData) -> {
BlockPos pos = attachedData.readBlockPos(); BlockPos pos = attachedData.readBlockPos();
@@ -67,12 +85,13 @@ public class VisualOverhaulClient implements ClientModInitializer {
inv.set(i, attachedData.readItemStack()); inv.set(i, attachedData.readItemStack());
} }
packetContext.getTaskQueue().execute(() -> { packetContext.getTaskQueue().execute(() -> {
BrewingStandBlockEntity blockEntity = (BrewingStandBlockEntity) MinecraftClient.getInstance().world.getBlockEntity(pos); if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof BrewingStandBlockEntity blockEntity) {
blockEntity.setStack(0,inv.get(0)); blockEntity.setStack(0, inv.get(0));
blockEntity.setStack(1,inv.get(1)); blockEntity.setStack(1, inv.get(1));
blockEntity.setStack(2,inv.get(2)); blockEntity.setStack(2, inv.get(2));
blockEntity.setStack(3,inv.get(3)); blockEntity.setStack(3, inv.get(3));
blockEntity.setStack(4,inv.get(4)); blockEntity.setStack(4, inv.get(4));
}
}); });
}); });
ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_RECORD, ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_RECORD,
@@ -80,8 +99,9 @@ public class VisualOverhaulClient implements ClientModInitializer {
BlockPos pos = attachedData.readBlockPos(); BlockPos pos = attachedData.readBlockPos();
ItemStack record = attachedData.readItemStack(); ItemStack record = attachedData.readItemStack();
packetContext.getTaskQueue().execute(() -> { packetContext.getTaskQueue().execute(() -> {
JukeboxBlockEntity blockEntity = (JukeboxBlockEntity)MinecraftClient.getInstance().world.getBlockEntity(pos); if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof JukeboxBlockEntity blockEntity) {
blockEntity.setRecord(record); blockEntity.setRecord(record);
}
}); });
}); });
ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_FURNACE_ITEMS, ClientSidePacketRegistryImpl.INSTANCE.register(UPDATE_FURNACE_ITEMS,
@@ -92,16 +112,79 @@ public class VisualOverhaulClient implements ClientModInitializer {
inv.set(i, attachedData.readItemStack()); inv.set(i, attachedData.readItemStack());
} }
packetContext.getTaskQueue().execute(() -> { packetContext.getTaskQueue().execute(() -> {
FurnaceBlockEntity blockEntity = (FurnaceBlockEntity)MinecraftClient.getInstance().world.getBlockEntity(pos); if (client.world != null && client.world.getBlockEntity(pos) != null && client.world.getBlockEntity(pos) instanceof AbstractFurnaceBlockEntity blockEntity) {
blockEntity.setStack(0,inv.get(0)); blockEntity.setStack(0, inv.get(0));
blockEntity.setStack(1,inv.get(1)); blockEntity.setStack(1, inv.get(1));
blockEntity.setStack(2,inv.get(2)); blockEntity.setStack(2, inv.get(2));
}
}); });
}); });
// Register builtin resourcepacks
FabricLoader.getInstance().getModContainer("visualoverhaul").ifPresent(modContainer -> { FabricLoader.getInstance().getModContainer("visualoverhaul").ifPresent(modContainer -> {
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul:nobottles"), "resourcepacks/nobrewingbottles", modContainer, true); ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul","nobrewingbottles"), modContainer, ResourcePackActivationType.DEFAULT_ENABLED);
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul:fancyfurnace"), "resourcepacks/fancyfurnace", modContainer, true); ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul","fancyfurnace"), modContainer, ResourcePackActivationType.DEFAULT_ENABLED);
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul","coloredwaterbucket"), modContainer, ResourcePackActivationType.DEFAULT_ENABLED);
ResourceManagerHelper.registerBuiltinResourcePack(new Identifier("visualoverhaul","rounddiscs"), modContainer, ResourcePackActivationType.ALWAYS_ENABLED);
}); });
// Biome-colored Items
if (VOConfig.coloredItems) {
ClientTickEvents.END_CLIENT_TICK.register(client -> {
int waterColor;
int foliageColor;
int grassColor;
if (client.world != null && client.player != null) {
waterColor = BiomeColors.getWaterColor(client.world, client.player.getBlockPos());
foliageColor = BiomeColors.getFoliageColor(client.world, client.player.getBlockPos());
grassColor = BiomeColors.getGrassColor(client.world, client.player.getBlockPos());
}
else {
waterColor = 4159204;
foliageColor = -8934609;
grassColor = -8934609;
}
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.WATER_BUCKET);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.AXOLOTL_BUCKET);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.COD_BUCKET);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.PUFFERFISH_BUCKET);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.TROPICAL_FISH_BUCKET);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> tintIndex == 0 ? -1 : waterColor, Items.SALMON_BUCKET);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.GRASS_BLOCK);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.GRASS);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.TALL_GRASS);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.FERN);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> grassColor, Items.LARGE_FERN);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.ACACIA_LEAVES);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.DARK_OAK_LEAVES);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.JUNGLE_LEAVES);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.OAK_LEAVES);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.VINE);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.SUGAR_CANE);
if (VOConfig.coloredLilypad) ColorProviderRegistry.ITEM.register((stack, tintIndex) -> foliageColor, Items.LILY_PAD);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> {
if ((PotionUtil.getPotion(stack) == Potions.WATER || PotionUtil.getPotion(stack) == Potions.MUNDANE || PotionUtil.getPotion(stack) == Potions.THICK || PotionUtil.getPotion(stack) == Potions.AWKWARD) && tintIndex == 0) {
return waterColor;
}
return tintIndex > 0 ? -1 : PotionUtil.getColor(stack);
}, Items.POTION);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> {
if ((PotionUtil.getPotion(stack) == Potions.WATER || PotionUtil.getPotion(stack) == Potions.MUNDANE || PotionUtil.getPotion(stack) == Potions.THICK || PotionUtil.getPotion(stack) == Potions.AWKWARD) && tintIndex == 0) {
return waterColor;
}
return tintIndex > 0 ? -1 : PotionUtil.getColor(stack);
}, Items.SPLASH_POTION);
ColorProviderRegistry.ITEM.register((stack, tintIndex) -> {
if ((PotionUtil.getPotion(stack) == Potions.WATER || PotionUtil.getPotion(stack) == Potions.MUNDANE || PotionUtil.getPotion(stack) == Potions.THICK || PotionUtil.getPotion(stack) == Potions.AWKWARD) && tintIndex == 0) {
return waterColor;
}
return tintIndex > 0 ? -1 : PotionUtil.getColor(stack);
}, Items.LINGERING_POTION);
});
}
if (VOConfig.coloredLilypad) {
ColorProviderRegistry.BLOCK.register((state, world, pos, tintIndex) -> world != null ? world.getColor(pos, BiomeColors.FOLIAGE_COLOR) : 0, Blocks.LILY_PAD);
}
} }
} }

View File

@@ -9,15 +9,14 @@ import net.minecraft.state.property.BooleanProperty;
import net.minecraft.state.property.Properties; import net.minecraft.state.property.Properties;
public class JukeboxTop extends Block { public class JukeboxTop extends Block {
private static final BooleanProperty HAS_RECORD = Properties.HAS_RECORD;
private static final BooleanProperty HAS_RECORD = Properties.HAS_RECORD; public JukeboxTop() {
super(FabricBlockSettings.copy(Blocks.JUKEBOX));
public JukeboxTop() { this.setDefaultState(this.stateManager.getDefaultState().with(HAS_RECORD,false));
super(FabricBlockSettings.copy(Blocks.JUKEBOX));
this.setDefaultState(this.stateManager.getDefaultState().with(HAS_RECORD,false));
}
@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(HAS_RECORD);
}
} }
@Override
protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
builder.add(HAS_RECORD);
}
}

View File

@@ -0,0 +1,39 @@
package eu.midnightdust.visualoverhaul.block.model;
import net.minecraft.client.model.*;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.entity.model.EntityModelLayer;
import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.util.Identifier;
public class FurnaceWoodenPlanksModel extends Model {
private static ModelPart bb_main;
public static final EntityModelLayer WOODEN_PLANKS_MODEL_LAYER = new EntityModelLayer(new Identifier("visualoverhaul", "wooden_planks"), "main");
public FurnaceWoodenPlanksModel(ModelPart root) {
super(RenderLayer::getEntitySolid);
bb_main = root;
bb_main.setPivot(0.0F, 24.0F, 0.0F);
}
public ModelPart getPart() {
return bb_main;
}
public static TexturedModelData getTexturedModelData() {
return TexturedModelData.of(getModelData(), 16, 16);
}
public static ModelData getModelData(){
ModelData modelData = new ModelData();
ModelPartData modelPartData = modelData.getRoot();
modelPartData.addChild("cube_r1", ModelPartBuilder.create().uv(0, 0).cuboid(-10.0F, -3.0F, 0.0F, 10.0F, 1.0F, 1.0F), ModelTransform.of(6.0F, 1.0F, -2.0F,0.0F, -0.5672F, 0.0F));
modelPartData.addChild("cube_r2", ModelPartBuilder.create().uv(0, 0).cuboid(-10.0F, -2.5F, 0.0F, 10.0F, 2.0F, 2.0F), ModelTransform.of(5.0F, 0.0F, -5.0F,0.0F, -0.1309F, 0.0F));
modelPartData.addChild("cube_r3", ModelPartBuilder.create().uv(0, 0).cuboid(-10.0F, -2.0F, 0.0F, 10.0F, 2.0F, 2.0F), ModelTransform.of(5.0F, -1.0F, -7.0F,0.0F, 0.2618F, 0.0F));
return modelData;
}
public void render(MatrixStack matrices, VertexConsumer vertices, int light, int overlay, float red, float green, float blue, float alpha) {
bb_main.render(matrices, vertices, light, overlay, red, green, blue, alpha);
}
}

View File

@@ -1,60 +1,67 @@
package eu.midnightdust.visualoverhaul.block.renderer; package eu.midnightdust.visualoverhaul.block.renderer;
import eu.midnightdust.visualoverhaul.VisualOverhaulClient; import eu.midnightdust.visualoverhaul.config.VOConfig;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.block.entity.BrewingStandBlockEntity; import net.minecraft.block.entity.BrewingStandBlockEntity;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.util.math.Vec3f;
import java.util.Objects;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class BrewingStandBlockEntityRenderer extends BlockEntityRenderer<BrewingStandBlockEntity> { public class BrewingStandBlockEntityRenderer implements BlockEntityRenderer<BrewingStandBlockEntity> {
public BrewingStandBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { public BrewingStandBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {
super(blockEntityRenderDispatcher);
} }
@Override @Override
public void render(BrewingStandBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { public void render(BrewingStandBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
if (VisualOverhaulClient.VO_CONFIG.brewingstand) { if (VOConfig.brewingstand) {
int lightAtBlock = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos()); int lightAtBlock = WorldRenderer.getLightmapCoordinates(Objects.requireNonNull(blockEntity.getWorld()), blockEntity.getPos());
ItemStack item1 = blockEntity.getStack(0); ItemStack item1 = blockEntity.getStack(0);
ItemStack item2 = blockEntity.getStack(1); ItemStack item2 = blockEntity.getStack(1);
ItemStack item3 = blockEntity.getStack(2); ItemStack item3 = blockEntity.getStack(2);
matrices.push(); if (!item1.isEmpty()) {
matrices.push();
matrices.translate(0.86f, 0.23f, 0.5f); matrices.translate(0.86f, 0.23f, 0.5f);
matrices.scale(1.15f, 1.15f, 1.15f); matrices.scale(1.15f, 1.15f, 1.15f);
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(180)); matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(180));
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers); MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
matrices.pop(); matrices.pop();
matrices.push(); }
if (!item2.isEmpty()) {
matrices.push();
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(315)); matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(315));
matrices.translate(0.32f, 0.23f, 0f); matrices.translate(0.32f, 0.23f, 0f);
matrices.scale(1.15f, 1.15f, 1.15f); matrices.scale(1.15f, 1.15f, 1.15f);
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers); MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
matrices.pop(); matrices.pop();
matrices.push(); }
if (!item3.isEmpty()) {
matrices.push();
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(45)); matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(45));
matrices.translate(-0.39f, 0.23f, 0.705f); matrices.translate(-0.39f, 0.23f, 0.705f);
matrices.scale(1.15f, 1.15f, 1.15f); matrices.scale(1.15f, 1.15f, 1.15f);
MinecraftClient.getInstance().getItemRenderer().renderItem(item3, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers); MinecraftClient.getInstance().getItemRenderer().renderItem(item3, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
matrices.pop(); matrices.pop();
}
} }
} }
} }

View File

@@ -1,109 +1,87 @@
package eu.midnightdust.visualoverhaul.block.renderer; package eu.midnightdust.visualoverhaul.block.renderer;
import eu.midnightdust.visualoverhaul.VisualOverhaulClient; import eu.midnightdust.visualoverhaul.block.model.FurnaceWoodenPlanksModel;
import eu.midnightdust.visualoverhaul.config.VOConfig;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.block.*; import net.minecraft.block.*;
import net.minecraft.block.entity.FurnaceBlockEntity; import net.minecraft.block.entity.AbstractFurnaceBlockEntity;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.model.ModelPart;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumer; import net.minecraft.client.render.VertexConsumer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.texture.Sprite; import net.minecraft.client.texture.Sprite;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.tag.ItemTags; import net.minecraft.tag.ItemTags;
import net.minecraft.util.Identifier; import net.minecraft.util.Identifier;
import net.minecraft.util.math.Vec3f;
import java.util.Objects;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class FurnaceBlockEntityRenderer extends BlockEntityRenderer<FurnaceBlockEntity> { public class FurnaceBlockEntityRenderer<E extends AbstractFurnaceBlockEntity> implements BlockEntityRenderer<E> {
private static final ModelPart bb_main; private final FurnaceWoodenPlanksModel planks;
private static final ModelPart cube_r1;
private static final ModelPart cube_r2;
private static final ModelPart cube_r3;
static { public FurnaceBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {
bb_main = new ModelPart(16, 16, 0, 0); this.planks = new FurnaceWoodenPlanksModel(ctx.getLayerModelPart(FurnaceWoodenPlanksModel.WOODEN_PLANKS_MODEL_LAYER));
bb_main.setPivot(0.0F, 24.0F, 0.0F);
cube_r1 = new ModelPart(16, 16, 0, 0);
cube_r1.setPivot(6.0F, 1.0F, -2.0F);
bb_main.addChild(cube_r1);
setRotationAngle(cube_r1, 0.0F, -0.5672F, 0.0F);
cube_r1.setTextureOffset(0, 0).addCuboid(-10.0F, -3.0F, 0.0F, 10.0F, 1.0F, 1.0F, 0.0F, false);
cube_r2 = new ModelPart(16, 16, 0, 0);
cube_r2.setPivot(5.0F, 0.0F, -5.0F);
bb_main.addChild(cube_r2);
setRotationAngle(cube_r2, 0.0F, -0.1309F, 0.0F);
cube_r2.setTextureOffset(0, 0).addCuboid(-10.0F, -2.5F, 0.0F, 10.0F, 2.0F, 2.0F, 0.0F, false);
cube_r3 = new ModelPart(16, 16, 0, 0);
cube_r3.setPivot(5.0F, -1.0F, -7.0F);
bb_main.addChild(cube_r3);
setRotationAngle(cube_r3, 0.0F, 0.2618F, 0.0F);
cube_r3.setTextureOffset(0, 0).addCuboid(-10.0F, -2.0F, 0.0F, 10.0F, 2.0F, 2.0F, 0.0F, false);
}
public static void setRotationAngle(ModelPart bone, float x, float y, float z) {
bone.pitch = x;
bone.yaw = y;
bone.roll = z;
} }
public FurnaceBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { public void render(E blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
super(blockEntityRenderDispatcher); if (VOConfig.furnace && blockEntity != null) {
}
@Override
public void render(FurnaceBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
if (VisualOverhaulClient.VO_CONFIG.furnace && blockEntity.getCachedState().getBlock().is(Blocks.FURNACE)) {
BlockState blockState = blockEntity.getCachedState(); BlockState blockState = blockEntity.getCachedState();
int lightAtBlock = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().offset(blockState.get(AbstractFurnaceBlock.FACING))); int lightAtBlock = WorldRenderer.getLightmapCoordinates(Objects.requireNonNull(blockEntity.getWorld()), blockEntity.getPos().offset(blockState.get(AbstractFurnaceBlock.FACING)));
ItemStack item1 = blockEntity.getStack(0); ItemStack item1 = blockEntity.getStack(0);
ItemStack item2 = blockEntity.getStack(1); ItemStack item2 = blockEntity.getStack(1);
float angle = (blockState.get(AbstractFurnaceBlock.FACING)).asRotation(); float angle = (blockState.get(AbstractFurnaceBlock.FACING)).asRotation();
matrices.push(); if(!item1.isEmpty()) {
matrices.translate(0.5f, 0.58f, 0.5f);
matrices.scale(1f, 1f, 1f);
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
matrices.translate(0.0f, 0.0f, -0.4f);
matrices.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(90));
MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers);
matrices.pop();
if (!item2.getItem().isIn(ItemTags.LOGS_THAT_BURN) && !item2.getItem().isIn(ItemTags.PLANKS)) {
matrices.push(); matrices.push();
matrices.translate(0.5f, 0.08f, 0.5f); matrices.translate(0.5f, 0.58f, 0.5f);
if (blockEntity.getCachedState().getBlock().equals(Blocks.SMOKER)) matrices.translate(0f, -0.06f, 0f);
if (blockEntity.getCachedState().getBlock().equals(Blocks.BLAST_FURNACE)) matrices.translate(0f, -0.25f, 0f);
matrices.scale(1f, 1f, 1f); matrices.scale(1f, 1f, 1f);
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180)); matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
matrices.translate(0.0f, 0.0f, -0.4f); matrices.translate(0.0f, 0.0f, -0.4f);
matrices.multiply(Vector3f.POSITIVE_X.getDegreesQuaternion(90)); matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(90));
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers); MinecraftClient.getInstance().getItemRenderer().renderItem(item1, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers, 0);
matrices.pop(); matrices.pop();
} }
if (item2.getItem().isIn(ItemTags.LOGS_THAT_BURN) || item2.getItem().isIn(ItemTags.PLANKS)) { if (!item2.isEmpty() && !item2.isIn(ItemTags.LOGS_THAT_BURN) && !item2.isIn(ItemTags.PLANKS)) {
matrices.push();
matrices.translate(0.5f, 0.08f, 0.5f);
if (blockEntity.getCachedState().getBlock().equals(Blocks.SMOKER)) matrices.translate(0f, 0.06f, 0f);
if (blockEntity.getCachedState().getBlock().equals(Blocks.BLAST_FURNACE)) matrices.translate(0f, 0.24f, 0f);
matrices.scale(1f, 1f, 1f);
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
matrices.translate(0.0f, 0.0f, -0.4f);
matrices.multiply(Vec3f.POSITIVE_X.getDegreesQuaternion(90));
MinecraftClient.getInstance().getItemRenderer().renderItem(item2, ModelTransformation.Mode.GROUND, lightAtBlock, overlay, matrices, vertexConsumers,0);
matrices.pop();
}
else if (!item2.isEmpty()) {
matrices.push(); matrices.push();
BlockState state = Block.getBlockFromItem(item2.getItem()).getDefaultState(); BlockState state = Block.getBlockFromItem(item2.getItem()).getDefaultState();
Sprite texture = MinecraftClient.getInstance().getBlockRenderManager().getModel(state).getSprite(); Sprite texture = MinecraftClient.getInstance().getBlockRenderManager().getModel(state).getParticleSprite();
VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getEntityCutoutNoCull(spriteToTexture(texture))); VertexConsumer vertexConsumer = vertexConsumers.getBuffer(RenderLayer.getEntityCutoutNoCull(spriteToTexture(texture)));
matrices.translate(0.5f, -1.3f, 0.5f); matrices.translate(0.5f, -1.3f, 0.5f);
if (blockEntity.getCachedState().getBlock().equals(Blocks.SMOKER)) matrices.translate(0f, 0.06f, 0f);
if (blockEntity.getCachedState().getBlock().equals(Blocks.BLAST_FURNACE)) matrices.translate(0f, 0.2f, 0f);
matrices.scale(1f, 1f, 1f); matrices.scale(1f, 1f, 1f);
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180)); matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(angle * 3 + 180));
bb_main.render(matrices, vertexConsumer, lightAtBlock, overlay); planks.getPart().render(matrices, vertexConsumer, lightAtBlock, overlay);
matrices.pop(); matrices.pop();
} }
} }

View File

@@ -1,47 +1,82 @@
package eu.midnightdust.visualoverhaul.block.renderer; package eu.midnightdust.visualoverhaul.block.renderer;
import eu.midnightdust.visualoverhaul.VisualOverhaulClient; import eu.midnightdust.visualoverhaul.VisualOverhaulClient;
import eu.midnightdust.visualoverhaul.config.VOConfig;
import eu.midnightdust.visualoverhaul.util.SoundTest;
import net.fabricmc.api.EnvType; import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment; import net.fabricmc.api.Environment;
import net.minecraft.block.SideShapeType;
import net.minecraft.block.entity.JukeboxBlockEntity; import net.minecraft.block.entity.JukeboxBlockEntity;
import net.minecraft.client.MinecraftClient; import net.minecraft.client.MinecraftClient;
import net.minecraft.client.render.RenderLayer; import net.minecraft.client.render.RenderLayer;
import net.minecraft.client.render.VertexConsumerProvider; import net.minecraft.client.render.VertexConsumerProvider;
import net.minecraft.client.render.WorldRenderer; import net.minecraft.client.render.WorldRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
import net.minecraft.client.render.block.entity.BlockEntityRenderer; import net.minecraft.client.render.block.entity.BlockEntityRenderer;
import net.minecraft.client.render.block.entity.BlockEntityRendererFactory;
import net.minecraft.client.render.model.json.ModelTransformation; import net.minecraft.client.render.model.json.ModelTransformation;
import net.minecraft.client.util.math.MatrixStack; import net.minecraft.client.util.math.MatrixStack;
import net.minecraft.client.util.math.Vector3f;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.state.property.Properties; import net.minecraft.state.property.Properties;
import net.minecraft.util.Identifier;
import net.minecraft.util.Util;
import net.minecraft.util.math.Direction;
import net.minecraft.util.math.Vec3f;
import net.minecraft.util.registry.Registry;
import org.apache.logging.log4j.LogManager;
import java.util.Random; import java.util.*;
@Environment(EnvType.CLIENT) @Environment(EnvType.CLIENT)
public class JukeboxBlockEntityRenderer extends BlockEntityRenderer<JukeboxBlockEntity> { public class JukeboxBlockEntityRenderer implements BlockEntityRenderer<JukeboxBlockEntity> {
private ItemStack record;
private Identifier discItem;
public JukeboxBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) { public JukeboxBlockEntityRenderer(BlockEntityRendererFactory.Context ctx) {
super(blockEntityRenderDispatcher);
} }
@Override @Override
public void render(JukeboxBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) { public void render(JukeboxBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
if (VOConfig.jukebox) {
int lightAbove = WorldRenderer.getLightmapCoordinates(Objects.requireNonNull(blockEntity.getWorld()), blockEntity.getPos().up());
if (VisualOverhaulClient.VO_CONFIG.jukebox) { // Tries to get the disc using the serverside method
int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up()); if (blockEntity.getRecord() != ItemStack.EMPTY) {
ItemStack record = blockEntity.getRecord(); record = blockEntity.getRecord().copy();
record.setCount(2); }
// Else gets the record sound played at the position of the jukebox //
else if (SoundTest.getSound(blockEntity.getPos()) != null) {
// Converts the Sound Id to the item id of the approprieate disc (minecraft:music_disc.cat -> minecraft:music_disc_cat) //
discItem = new Identifier(String.valueOf(SoundTest.getSound(blockEntity.getPos())).replace(".", "_"));
matrices.push(); // Tries to get the disc item from the registry //
if (Registry.ITEM.getOrEmpty(discItem).isPresent()) {
matrices.translate(0.5f, 1.03f, 0.5f); record = new ItemStack(Registry.ITEM.get(discItem));
matrices.scale(0.75f, 0.75f, 0.75f); }
matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion((blockEntity.getWorld().getTime() + tickDelta) * 4)); else {
MinecraftClient.getInstance().getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers); LogManager.getLogger("VisualOverhaul").warn("Error getting music disc item for" + SoundTest.getSound(blockEntity.getPos()));
discItem = null;
record = ItemStack.EMPTY;
}
}
// If the sound is stopped or no sound is playing, the stack is set to an empty stack //
else {
discItem = null;
record = ItemStack.EMPTY;
}
matrices.pop(); if (!record.isEmpty()) {
if (VisualOverhaulClient.VO_CONFIG.jukebox_fake_block) { record.setCount(2);
matrices.push();
matrices.translate(0.5f, 1.03f, 0.5f);
matrices.scale(0.75f, 0.75f, 0.75f);
matrices.multiply(Vec3f.POSITIVE_Y.getDegreesQuaternion(Util.getMeasuringTimeMs() / 9.0f));
MinecraftClient.getInstance().getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers, 0);
matrices.pop();
}
if (VOConfig.jukebox_fake_block && !blockEntity.getWorld().getBlockState(blockEntity.getPos().up()).isSideSolid(blockEntity.getWorld(),blockEntity.getPos().up(), Direction.DOWN, SideShapeType.FULL)) {
matrices.push(); matrices.push();
matrices.translate(0f, 1f, 0f); matrices.translate(0f, 1f, 0f);
if (record == ItemStack.EMPTY) { if (record == ItemStack.EMPTY) {

View File

@@ -0,0 +1,25 @@
package eu.midnightdust.visualoverhaul.compat.phonos.block;
//import io.github.foundationgames.phonos.block.PhonosBlocks;
//import io.github.foundationgames.phonos.block.RadioJukeboxBlock;
import net.fabricmc.fabric.api.object.builder.v1.block.FabricBlockSettings;
import net.minecraft.block.Block;
import net.minecraft.block.BlockState;
import net.minecraft.state.StateManager;
import net.minecraft.state.property.BooleanProperty;
import net.minecraft.state.property.IntProperty;
//public class RadioJukeboxTop extends Block {
// public static final BooleanProperty PLAYING = RadioJukeboxBlock.PLAYING;
// public static final IntProperty CHANNEL = RadioJukeboxBlock.CHANNEL;
//
// public RadioJukeboxTop() {
// super(FabricBlockSettings.copy(PhonosBlocks.RADIO_JUKEBOX));
// this.setDefaultState(this.stateManager.getDefaultState());
// }
//
// @Override
// protected void appendProperties(StateManager.Builder<Block, BlockState> builder) {
// builder.add(PLAYING, CHANNEL);
// }
//}

View File

@@ -0,0 +1,74 @@
package eu.midnightdust.visualoverhaul.compat.phonos.block.renderer;
//
//import eu.midnightdust.visualoverhaul.compat.phonos.block.RadioJukeboxTop;
//import eu.midnightdust.visualoverhaul.compat.phonos.init.PhonosCompatInit;
//import eu.midnightdust.visualoverhaul.config.VOConfig;
//import io.github.foundationgames.phonos.block.RadioJukeboxBlock;
//import io.github.foundationgames.phonos.block.entity.RadioJukeboxBlockEntity;
//import net.fabricmc.api.EnvType;
//import net.fabricmc.api.Environment;
//import net.minecraft.block.BlockState;
//import net.minecraft.block.Blocks;
//import net.minecraft.client.MinecraftClient;
//import net.minecraft.client.render.RenderLayer;
//import net.minecraft.client.render.VertexConsumerProvider;
//import net.minecraft.client.render.WorldRenderer;
//import net.minecraft.client.render.block.entity.BlockEntityRenderDispatcher;
//import net.minecraft.client.render.block.entity.BlockEntityRenderer;
//import net.minecraft.client.render.model.json.ModelTransformation;
//import net.minecraft.client.util.math.MatrixStack;
//import net.minecraft.item.ItemStack;
//
//import java.util.Random;
//
//@Environment(EnvType.CLIENT)
//public class RadioJukeboxBlockEntityRenderer implements BlockEntityRenderer<RadioJukeboxBlockEntity> {
// private ItemStack record;
// private float rotation = 0;
// private BlockState blockState;
//
// public RadioJukeboxBlockEntityRenderer(BlockEntityRenderDispatcher blockEntityRenderDispatcher) {
// super();
// }
//
// @Override
// public void render(RadioJukeboxBlockEntity blockEntity, float tickDelta, MatrixStack matrices, VertexConsumerProvider vertexConsumers, int light, int overlay) {
// if (VOConfig.jukebox) {
// int lightAbove = WorldRenderer.getLightmapCoordinates(blockEntity.getWorld(), blockEntity.getPos().up());
//
// // Tries to get the disc using the serverside method
// if (blockEntity.getStack(blockEntity.getPlayingSong()) != ItemStack.EMPTY) {
// record = blockEntity.getStack(blockEntity.getPlayingSong()).copy();
// record.setCount(2);
// }
// // If the sound is stopped or no sound is playing, the stack is set to an empty stack //
// else {
// record = ItemStack.EMPTY;
// }
//
// matrices.push();
//
// matrices.translate(0.5f, 1.03f, 0.5f);
// matrices.scale(0.75f, 0.75f, 0.75f);
//
// if (blockEntity.isPlaying()) {
// rotation = (blockEntity.getWorld().getTime() + tickDelta) * 4;
// }
// matrices.multiply(Vector3f.POSITIVE_Y.getDegreesQuaternion(rotation));
// MinecraftClient.getInstance().getItemRenderer().renderItem(record, ModelTransformation.Mode.GROUND, lightAbove, overlay, matrices, vertexConsumers);
//
// matrices.pop();
// if (VOConfig.jukebox_fake_block && blockEntity.getWorld().getBlockState(blockEntity.getPos().up()).getBlock() == Blocks.AIR) {
// blockState = blockEntity.getWorld().getBlockState(blockEntity.getPos());
// matrices.push();
// matrices.translate(0f, 1f, 0f);
// if (record == ItemStack.EMPTY) {
// MinecraftClient.getInstance().getBlockRenderManager().renderBlock(PhonosCompatInit.RadioJukeboxTop.getDefaultState().with(RadioJukeboxTop.PLAYING, false).with(RadioJukeboxTop.CHANNEL, blockState.get(RadioJukeboxBlock.CHANNEL)), blockEntity.getPos().up(), blockEntity.getWorld(), matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, new Random());
// } else {
// MinecraftClient.getInstance().getBlockRenderManager().renderBlock(PhonosCompatInit.RadioJukeboxTop.getDefaultState().with(RadioJukeboxTop.PLAYING, true).with(RadioJukeboxTop.CHANNEL, blockState.get(RadioJukeboxBlock.CHANNEL)), blockEntity.getPos().up(), blockEntity.getWorld(), matrices, vertexConsumers.getBuffer(RenderLayer.getCutout()), false, new Random());
// }
// matrices.pop();
// }
// }
// }
//}

View File

@@ -0,0 +1,20 @@
package eu.midnightdust.visualoverhaul.compat.phonos.init;
//import eu.midnightdust.visualoverhaul.compat.phonos.block.RadioJukeboxTop;
//import io.github.foundationgames.phonos.block.PhonosBlocks;
import net.fabricmc.fabric.impl.blockrenderlayer.BlockRenderLayerMapImpl;
import net.minecraft.block.Block;
import net.minecraft.client.render.RenderLayer;
import net.minecraft.util.Identifier;
import net.minecraft.util.registry.Registry;
public class PhonosCompatInit {
//public static Block RadioJukeboxTop = new RadioJukeboxTop();
public static void init() {
//Registry.register(Registry.BLOCK, new Identifier("visualoverhaul","radio_jukebox_top"), RadioJukeboxTop);
//BlockRenderLayerMapImpl.INSTANCE.putBlock(PhonosBlocks.RADIO_JUKEBOX, RenderLayer.getCutout());
//BlockRenderLayerMapImpl.INSTANCE.putBlock(RadioJukeboxTop, RenderLayer.getCutout());
}
}

View File

@@ -1,16 +0,0 @@
package eu.midnightdust.visualoverhaul.config;
import io.github.prospector.modmenu.api.ConfigScreenFactory;
import io.github.prospector.modmenu.api.ModMenuApi;
import me.sargunvohra.mcmods.autoconfig1u.AutoConfig;
import net.fabricmc.api.EnvType;
import net.fabricmc.api.Environment;
@Environment(EnvType.CLIENT)
public class ModMenuIntegration implements ModMenuApi {
@Override
public ConfigScreenFactory<?> getModConfigScreenFactory() {
return parent -> AutoConfig.getConfigScreen(VOConfig.class, parent).get();
}
}

View File

@@ -1,13 +1,15 @@
package eu.midnightdust.visualoverhaul.config; package eu.midnightdust.visualoverhaul.config;
import me.sargunvohra.mcmods.autoconfig1u.ConfigData; import eu.midnightdust.lib.config.MidnightConfig;
import me.sargunvohra.mcmods.autoconfig1u.annotation.Config;
@Config(name = "visualoverhaul") public class VOConfig extends MidnightConfig {
public class VOConfig implements ConfigData { @Client @Entry public static boolean brewingstand = true;
@Client @Entry public static boolean jukebox = true;
public boolean brewingstand = true; @Client @Entry public static boolean jukebox_fake_block = true;
public boolean jukebox = true; @Client @Entry public static boolean furnace = true;
public boolean jukebox_fake_block = true; @Client @Entry public static boolean smoker_particles = true;
public boolean furnace = true; @Client @Entry public static boolean blast_furnace_particles = true;
@Client @Entry public static boolean coloredItems = true;
@Client @Entry public static boolean coloredLilypad = true;
@Client @Entry public static boolean potionEnchantmentGlint = true;
} }

View File

@@ -2,16 +2,16 @@ package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.VisualOverhaul; import eu.midnightdust.visualoverhaul.VisualOverhaul;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.server.PlayerStream; import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl; import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl;
import net.minecraft.block.Blocks; import net.minecraft.block.BlockState;
import net.minecraft.block.entity.*; import net.minecraft.block.entity.*;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.collection.DefaultedList; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -22,26 +22,25 @@ import java.util.stream.Stream;
@Mixin(AbstractFurnaceBlockEntity.class) @Mixin(AbstractFurnaceBlockEntity.class)
public abstract class MixinAbstractFurnaceBlockEntity extends LockableContainerBlockEntity { public abstract class MixinAbstractFurnaceBlockEntity extends LockableContainerBlockEntity {
@Shadow protected DefaultedList<ItemStack> inventory; private static boolean invUpdate = true;
Boolean invUpdate = true; private static int playerUpdate = -1;
int playerUpdate = -1;
private MixinAbstractFurnaceBlockEntity(BlockEntityType<?> blockEntityType) {
super(blockEntityType); protected MixinAbstractFurnaceBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
super(blockEntityType, blockPos, blockState);
} }
@Inject(at = @At("TAIL"), method = "tick") @Inject(at = @At("TAIL"), method = "tick")
public void tick(CallbackInfo ci) { private static void tick(World world, BlockPos pos, BlockState state, AbstractFurnaceBlockEntity blockEntity, CallbackInfo ci) {
if (this.world.getBlockState(this.pos).getBlock().is(Blocks.FURNACE)) { if (world.getBlockState(pos).hasBlockEntity()) {
if (!this.world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) { if (!world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) {
Stream<PlayerEntity> watchingPlayers = PlayerStream.watching(world, getPos()); Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer()); PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
passedData.writeBlockPos(pos); passedData.writeBlockPos(pos);
passedData.writeItemStack(inventory.get(0)); passedData.writeItemStack(blockEntity.getStack(0));
passedData.writeItemStack(inventory.get(1)); passedData.writeItemStack(blockEntity.getStack(1));
passedData.writeItemStack(inventory.get(2)); passedData.writeItemStack(blockEntity.getStack(2));
passedData.writeString(String.valueOf(inventory));
watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_FURNACE_ITEMS, passedData)); watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_FURNACE_ITEMS, passedData));
invUpdate = false; invUpdate = false;
} }
@@ -50,7 +49,7 @@ public abstract class MixinAbstractFurnaceBlockEntity extends LockableContainerB
} }
@Inject(at = @At("RETURN"), method = "getStack", cancellable = true) @Inject(at = @At("RETURN"), method = "getStack", cancellable = true)
public void getStack(int slot, CallbackInfoReturnable cir) { public void getStack(int slot, CallbackInfoReturnable<ItemStack> cir) {
this.invUpdate = true; invUpdate = true;
} }
} }

View File

@@ -0,0 +1,41 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.config.VOConfig;
import net.minecraft.block.AbstractFurnaceBlock;
import net.minecraft.block.BlastFurnaceBlock;
import net.minecraft.block.BlockState;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Random;
@Mixin(BlastFurnaceBlock.class)
public abstract class MixinBlastFurnaceBlock extends AbstractFurnaceBlock {
protected MixinBlastFurnaceBlock(Settings settings) {
super(settings);
}
@Inject(at = @At("TAIL"), method = "randomDisplayTick")
public void vo$randomDisplayTick(BlockState state, World world, BlockPos pos, Random random, CallbackInfo ci) {
if (state.get(LIT) && VOConfig.blast_furnace_particles) {
double d = (double)pos.getX() + 0.5D;
double e = pos.getY();
double f = (double)pos.getZ() + 0.5D;
Direction direction = state.get(FACING);
Direction.Axis axis = direction.getAxis();
double h = random.nextDouble() * 0.6D - 0.3D;
double i = axis == Direction.Axis.X ? (double)direction.getOffsetX() * 0.4D : h;
double j = random.nextDouble() * 6.0D / 16.0D;
double k = axis == Direction.Axis.Z ? (double)direction.getOffsetZ() * 0.4D : h;
world.addParticle(ParticleTypes.FLAME, d + i, e + j, f + k, 0.0D, 0.0D, 0.0D);
}
}
}

View File

@@ -2,17 +2,18 @@ package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.VisualOverhaul; import eu.midnightdust.visualoverhaul.VisualOverhaul;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.server.PlayerStream; import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl; import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.BlockEntityType; import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.block.entity.BrewingStandBlockEntity; import net.minecraft.block.entity.BrewingStandBlockEntity;
import net.minecraft.block.entity.LockableContainerBlockEntity; import net.minecraft.block.entity.LockableContainerBlockEntity;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.collection.DefaultedList; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo; import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@@ -23,27 +24,25 @@ import java.util.stream.Stream;
@Mixin(BrewingStandBlockEntity.class) @Mixin(BrewingStandBlockEntity.class)
public abstract class MixinBrewingStandBlockEntity extends LockableContainerBlockEntity { public abstract class MixinBrewingStandBlockEntity extends LockableContainerBlockEntity {
@Shadow private DefaultedList<ItemStack> inventory; private static boolean invUpdate = true;
Boolean invUpdate = true; private static int playerUpdate = -1;
int playerUpdate = -1;
private MixinBrewingStandBlockEntity(BlockEntityType<?> blockEntityType) { protected MixinBrewingStandBlockEntity(BlockEntityType<?> blockEntityType, BlockPos blockPos, BlockState blockState) {
super(blockEntityType); super(blockEntityType, blockPos, blockState);
} }
@Inject(at = @At("TAIL"), method = "tick") @Inject(at = @At("TAIL"), method = "tick")
public void tick(CallbackInfo ci) { private static void tick(World world, BlockPos pos, BlockState state, BrewingStandBlockEntity blockEntity, CallbackInfo ci) {
if (!this.world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) { if (!world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) {
Stream<PlayerEntity> watchingPlayers = PlayerStream.watching(world, getPos()); Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer()); PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
passedData.writeBlockPos(pos); passedData.writeBlockPos(pos);
passedData.writeItemStack(inventory.get(0)); passedData.writeItemStack(blockEntity.getStack(0));
passedData.writeItemStack(inventory.get(1)); passedData.writeItemStack(blockEntity.getStack(1));
passedData.writeItemStack(inventory.get(2)); passedData.writeItemStack(blockEntity.getStack(2));
passedData.writeItemStack(inventory.get(3)); passedData.writeItemStack(blockEntity.getStack(3));
passedData.writeItemStack(inventory.get(4)); passedData.writeItemStack(blockEntity.getStack(4));
passedData.writeString(String.valueOf(inventory));
watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_POTION_BOTTLES, passedData)); watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_POTION_BOTTLES, passedData));
invUpdate = false; invUpdate = false;
} }
@@ -51,7 +50,7 @@ public abstract class MixinBrewingStandBlockEntity extends LockableContainerBloc
} }
@Inject(at = @At("RETURN"), method = "getStack", cancellable = true) @Inject(at = @At("RETURN"), method = "getStack", cancellable = true)
public void getStack(int slot, CallbackInfoReturnable cir) { public void getStack(int slot, CallbackInfoReturnable<ItemStack> cir) {
this.invUpdate = true; invUpdate = true;
} }
} }

View File

@@ -0,0 +1,56 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.VisualOverhaul;
import eu.midnightdust.visualoverhaul.util.JukeboxPacketUpdate;
import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl;
import net.minecraft.block.BlockRenderType;
import net.minecraft.block.BlockState;
import net.minecraft.block.BlockWithEntity;
import net.minecraft.block.JukeboxBlock;
import net.minecraft.block.entity.BlockEntity;
import net.minecraft.block.entity.BlockEntityTicker;
import net.minecraft.block.entity.BlockEntityType;
import net.minecraft.block.entity.JukeboxBlockEntity;
import net.minecraft.network.PacketByteBuf;
import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.jetbrains.annotations.Nullable;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Unique;
import java.util.stream.Stream;
@Mixin(JukeboxBlock.class)
public abstract class MixinJukeboxBlock extends BlockWithEntity {
protected MixinJukeboxBlock(Settings settings) {
super(settings);
}
@Override
public BlockRenderType getRenderType(BlockState state) {
return BlockRenderType.MODEL;
}
@Nullable
public <T extends BlockEntity> BlockEntityTicker<T> getTicker(World world, BlockState state, BlockEntityType<T> type) {
return world.isClient() ? null : checkType(type, BlockEntityType.JUKEBOX, MixinJukeboxBlock::tick);
}
@Unique
private static void tick(World world, BlockPos pos, BlockState state, JukeboxBlockEntity blockEntity) {
if (!world.isClient && (JukeboxPacketUpdate.invUpdate || world.getPlayers().size() == JukeboxPacketUpdate.playerUpdate)) {
Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
passedData.writeBlockPos(pos);
passedData.writeItemStack(blockEntity.getRecord());
watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_RECORD, passedData));
JukeboxPacketUpdate.invUpdate = false;
}
JukeboxPacketUpdate.playerUpdate = world.getPlayers().size();
}
}

View File

@@ -1,16 +1,18 @@
package eu.midnightdust.visualoverhaul.mixin; package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.VisualOverhaul; import eu.midnightdust.visualoverhaul.VisualOverhaul;
import eu.midnightdust.visualoverhaul.util.JukeboxPacketUpdate;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.fabricmc.fabric.api.server.PlayerStream; import net.fabricmc.fabric.api.networking.v1.PlayerLookup;
import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl; import net.fabricmc.fabric.impl.networking.ServerSidePacketRegistryImpl;
import net.minecraft.block.BlockState;
import net.minecraft.block.entity.*; import net.minecraft.block.entity.*;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.item.ItemStack; import net.minecraft.item.ItemStack;
import net.minecraft.network.PacketByteBuf; import net.minecraft.network.PacketByteBuf;
import net.minecraft.util.Tickable; import net.minecraft.server.network.ServerPlayerEntity;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.Unique; import org.spongepowered.asm.mixin.Unique;
import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.Inject;
@@ -19,32 +21,28 @@ import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
import java.util.stream.Stream; import java.util.stream.Stream;
@Mixin(JukeboxBlockEntity.class) @Mixin(JukeboxBlockEntity.class)
public abstract class MixinJukeboxBlockEntity extends BlockEntity implements Tickable { public abstract class MixinJukeboxBlockEntity extends BlockEntity {
@Shadow private ItemStack record; public MixinJukeboxBlockEntity(BlockEntityType<?> type, BlockPos pos, BlockState state) {
Boolean invUpdate = true; super(type, pos, state);
int playerUpdate = -1;
private MixinJukeboxBlockEntity(BlockEntityType<?> blockEntityType) {
super(blockEntityType);
} }
@Unique @Unique
public void tick() { private static void tick(World world, BlockPos pos, BlockState state, JukeboxBlockEntity blockEntity) {
if (!this.world.isClient && (invUpdate || world.getPlayers().size() == playerUpdate)) { if (!world.isClient && (JukeboxPacketUpdate.invUpdate || world.getPlayers().size() == JukeboxPacketUpdate.playerUpdate)) {
Stream<PlayerEntity> watchingPlayers = PlayerStream.watching(world, getPos()); Stream<ServerPlayerEntity> watchingPlayers = PlayerLookup.tracking(blockEntity).stream();
PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer()); PacketByteBuf passedData = new PacketByteBuf(Unpooled.buffer());
passedData.writeBlockPos(pos); passedData.writeBlockPos(pos);
passedData.writeItemStack(record); passedData.writeItemStack(blockEntity.getRecord());
watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_RECORD, passedData)); watchingPlayers.forEach(player -> ServerSidePacketRegistryImpl.INSTANCE.sendToPlayer(player, VisualOverhaul.UPDATE_RECORD, passedData));
invUpdate = false; JukeboxPacketUpdate.invUpdate = false;
} }
playerUpdate = world.getPlayers().size(); JukeboxPacketUpdate.playerUpdate = world.getPlayers().size();
} }
@Inject(at = @At("RETURN"), method = "getRecord", cancellable = true) @Inject(at = @At("RETURN"), method = "getRecord", cancellable = true)
public void getRecord(CallbackInfoReturnable cir) { public void getRecord(CallbackInfoReturnable<ItemStack> cir) {
this.invUpdate = true; JukeboxPacketUpdate.invUpdate = true;
} }
} }

View File

@@ -0,0 +1,22 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.config.VOConfig;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.item.PotionItem;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable;
@Mixin(PotionItem.class)
public abstract class MixinPotionItem extends Item {
public MixinPotionItem(Settings settings) {
super(settings);
}
@Inject(at = @At("HEAD"), method = "hasGlint", cancellable = true)
public void vo$hasGlint(ItemStack stack, CallbackInfoReturnable<Boolean> cir) {
if (!VOConfig.potionEnchantmentGlint) cir.setReturnValue(super.hasGlint(stack));
}
}

View File

@@ -0,0 +1,41 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.config.VOConfig;
import net.minecraft.block.AbstractFurnaceBlock;
import net.minecraft.block.BlockState;
import net.minecraft.block.SmokerBlock;
import net.minecraft.particle.ParticleTypes;
import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.Direction;
import net.minecraft.world.World;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
import java.util.Random;
@Mixin(SmokerBlock.class)
public abstract class MixinSmokerBlock extends AbstractFurnaceBlock {
protected MixinSmokerBlock(Settings settings) {
super(settings);
}
@Inject(at = @At("TAIL"), method = "randomDisplayTick")
public void vo$randomDisplayTick(BlockState state, World world, BlockPos pos, Random random, CallbackInfo ci) {
if (state.get(LIT) && VOConfig.smoker_particles) {
double d = (double)pos.getX() + 0.5D;
double e = pos.getY();
double f = (double)pos.getZ() + 0.5D;
Direction direction = state.get(FACING);
Direction.Axis axis = direction.getAxis();
double h = random.nextDouble() * 0.6D - 0.3D;
double i = axis == Direction.Axis.X ? (double)direction.getOffsetX() * 0.4D : h;
double j = random.nextDouble() * 6.0D / 16.0D;
double k = axis == Direction.Axis.Z ? (double)direction.getOffsetZ() * 0.4D : h;
world.addParticle(ParticleTypes.FLAME, d + i, e + j, f + k, 0.0D, 0.0D, 0.0D);
}
}
}

View File

@@ -0,0 +1,40 @@
package eu.midnightdust.visualoverhaul.mixin;
import eu.midnightdust.visualoverhaul.util.SoundTest;
import net.minecraft.client.sound.SoundInstance;
import net.minecraft.client.sound.SoundSystem;
import net.minecraft.sound.SoundCategory;
import net.minecraft.util.math.BlockPos;
import org.spongepowered.asm.mixin.Mixin;
import org.spongepowered.asm.mixin.Shadow;
import org.spongepowered.asm.mixin.injection.At;
import org.spongepowered.asm.mixin.injection.Inject;
import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
@Mixin(SoundSystem.class)
public abstract class MixinSoundSystem {
@Shadow private boolean started;
private BlockPos jukeboxPos;
@Inject(at = @At("TAIL"),method = "play(Lnet/minecraft/client/sound/SoundInstance;)V")
public void vo$onPlayRecordSound(SoundInstance soundInstance, CallbackInfo ci) {
if (soundInstance.getCategory().equals(SoundCategory.RECORDS) && this.started) {
jukeboxPos = new BlockPos(soundInstance.getX(),soundInstance.getY(),soundInstance.getZ());
SoundTest.soundPos.put(jukeboxPos, soundInstance.getId());
}
}
@Inject(at = @At("HEAD"),method = "stop(Lnet/minecraft/client/sound/SoundInstance;)V")
public void vo$onStopRecordSound(SoundInstance soundInstance, CallbackInfo ci) {
if (soundInstance != null) {
if (soundInstance.getCategory().equals(SoundCategory.RECORDS)) {
jukeboxPos = new BlockPos(soundInstance.getX(), soundInstance.getY(), soundInstance.getZ());
if (SoundTest.soundPos.containsKey(jukeboxPos)) {
SoundTest.soundPos.remove(jukeboxPos, soundInstance.getId());
}
}
}
}
}

View File

@@ -0,0 +1,6 @@
package eu.midnightdust.visualoverhaul.util;
public class JukeboxPacketUpdate {
public static boolean invUpdate = true;
public static int playerUpdate = -1;
}

View File

@@ -0,0 +1,23 @@
package eu.midnightdust.visualoverhaul.util;
import com.google.common.collect.Maps;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import java.util.Map;
public class SoundTest {
public static Map<BlockPos, Identifier> soundPos = Maps.newHashMap();
/**
* Returns the Sound provided in MixinSoundSystem
* {@link eu.midnightdust.visualoverhaul.mixin.MixinSoundSystem}
*/
public static Identifier getSound(BlockPos pos) {
if (soundPos.containsKey(pos)) {
return soundPos.get(pos);
}
return null;
}
}

View File

@@ -0,0 +1,23 @@
package eu.midnightdust.visualoverhaul.util.sound;
import com.google.common.collect.Maps;
import net.minecraft.util.Identifier;
import net.minecraft.util.math.BlockPos;
import java.util.Map;
public class SoundTest {
public static Map<BlockPos, Identifier> soundPos = Maps.newHashMap();
/**
* Returns the Sound provided in MixinSoundSystem
* {@link eu.midnightdust.visualoverhaul.mixin.MixinSoundSystem}
*/
public static Identifier getSound(BlockPos pos) {
if (soundPos.containsKey(pos)) {
return soundPos.get(pos);
}
return null;
}
}

View File

View File

@@ -0,0 +1,44 @@
{
"variants": {
"playing=true,channel=0": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_0"},
"playing=false,channel=0": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_0"},
"playing=true,channel=1": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_1"},
"playing=false,channel=1": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_1"},
"playing=true,channel=2": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_2"},
"playing=false,channel=2": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_2"},
"playing=true,channel=3": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_3"},
"playing=false,channel=3": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_3"},
"playing=true,channel=4": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_4"},
"playing=false,channel=4": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_4"},
"playing=true,channel=5": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_5"},
"playing=false,channel=5": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_5"},
"playing=true,channel=6": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_6"},
"playing=false,channel=6": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_6"},
"playing=true,channel=7": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_7"},
"playing=false,channel=7": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_7"},
"playing=true,channel=8": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_8"},
"playing=false,channel=8": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_8"},
"playing=true,channel=9": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_9"},
"playing=false,channel=9": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_9"},
"playing=true,channel=10": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_10"},
"playing=false,channel=10": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_10"},
"playing=true,channel=11": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_11"},
"playing=false,channel=11": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_11"},
"playing=true,channel=12": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_12"},
"playing=false,channel=12": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_12"},
"playing=true,channel=13": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_13"},
"playing=false,channel=13": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_13"},
"playing=true,channel=14": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_14"},
"playing=false,channel=14": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_14"},
"playing=true,channel=15": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_15"},
"playing=false,channel=15": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_15"},
"playing=true,channel=16": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_16"},
"playing=false,channel=16": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_16"},
"playing=true,channel=17": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_17"},
"playing=false,channel=17": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_17"},
"playing=true,channel=18": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_18"},
"playing=false,channel=18": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_18"},
"playing=true,channel=19": {"model": "visualoverhaul:block/phonos/jukebox_top_playing_19"},
"playing=false,channel=19": {"model": "visualoverhaul:block/phonos/jukebox_top_stopped_19"}
}
}

BIN
src/main/resources/assets/visualoverhaul/icon.png Normal file → Executable file

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

@@ -1,7 +1,14 @@
{ {
"text.autoconfig.visualoverhaul.title":"Visual Overhaul Config", "visualoverhaul.midnightconfig.title":"Visual Overhaul Config",
"text.autoconfig.visualoverhaul.option.brewingstand":"Enable Brewing Stand Enhancements", "visualoverhaul.midnightconfig.brewingstand":"Brewing Stand Enhancements",
"text.autoconfig.visualoverhaul.option.jukebox":"Enable Jukebox Enhancements", "visualoverhaul.midnightconfig.jukebox":"Jukebox Enhancements",
"text.autoconfig.visualoverhaul.option.jukebox_fake_block":"Enable fake block on jukebox top", "visualoverhaul.midnightconfig.jukebox_fake_block":"Fake block on jukebox top",
"text.autoconfig.visualoverhaul.option.furnace":"Enable Furnace Enhancements" "visualoverhaul.midnightconfig.furnace":"Furnace Enhancements",
"visualoverhaul.midnightconfig.smoker_particles":"Smoker Particles",
"visualoverhaul.midnightconfig.blast_furnace_particles":"Blast Furnace Particles",
"visualoverhaul.midnightconfig.coloredItems":"Biome-based item colors",
"visualoverhaul.midnightconfig.coloredItems.tooltip":"§cNeeds restart!",
"visualoverhaul.midnightconfig.coloredLilypad":"Biome-based Lily Pad color",
"visualoverhaul.midnightconfig.coloredLilypad.tooltip":"§cNeeds restart!",
"visualoverhaul.midnightconfig.potionEnchantmentGlint":"Potion enchantment glint"
} }

View File

@@ -0,0 +1,85 @@
{
"credit": "made by Motschen",
"textures": {
"0": "block/glass",
"1": "block/black_concrete",
"2": "block/anvil",
"3": "visualoverhaul:block/vo_jukebox_top",
"4": "phonos:block/speaker_top_0",
"particle": "block/glass"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 0.01, 16],
"faces": {
"up": {"uv": [0, 0, 16, 16], "texture": "#3"}
}
},
{
"from": [0, 0, 0],
"to": [16, 5, 16],
"faces": {
"north": {"uv": [0, 0, 16, 5], "texture": "#0"},
"east": {"uv": [0, 0, 16, 5], "texture": "#0"},
"south": {"uv": [0, 0, 16, 5], "texture": "#0"},
"west": {"uv": [0, 0, 16, 5], "texture": "#0"},
"up": {"uv": [0, 0, 16, 16], "texture": "#0"}
}
},
{
"from": [7.875, 0, 7.875],
"to": [8.125, 1.25, 8.125],
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [5.75, 1, 11.29],
"to": [6, 1.5, 11.54],
"rotation": {"angle": 45, "axis": "y", "origin": [5, 8, 12]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#2"}
}
},
{
"from": [0.875, 0, 14.875],
"to": [1.375, 1.5, 15.375],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [0.65, 1.5, 14.875],
"to": [7.15, 2, 15.375],
"rotation": {"angle": 45, "axis": "y", "origin": [1, 10, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [10, 0.1, 12],
"to": [15, 0.1, 15],
"faces": {
"up": {"uv": [4, 5, 12, 10], "rotation": 180, "texture": "#4"}
}
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_1"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_10"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_11"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_12"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_13"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_14"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_15"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_16"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_17"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_18"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_19"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_2"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_3"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_4"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_5"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_6"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_7"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_8"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_playing_0",
"textures": {
"4": "phonos:block/speaker_top_9"
}
}

View File

@@ -0,0 +1,85 @@
{
"credit": "made by Motschen",
"textures": {
"0": "block/glass",
"1": "block/black_concrete",
"2": "block/anvil",
"3": "visualoverhaul:block/vo_jukebox_top",
"4": "phonos:block/speaker_top_0",
"particle": "block/glass"
},
"elements": [
{
"from": [0, 0, 0],
"to": [16, 0.01, 16],
"faces": {
"up": {"uv": [0, 0, 16, 16], "texture": "#3"}
}
},
{
"from": [0, 0, 0],
"to": [16, 5, 16],
"faces": {
"north": {"uv": [0, 0, 16, 5], "texture": "#0"},
"east": {"uv": [0, 0, 16, 5], "texture": "#0"},
"south": {"uv": [0, 0, 16, 5], "texture": "#0"},
"west": {"uv": [0, 0, 16, 5], "texture": "#0"},
"up": {"uv": [0, 0, 16, 16], "texture": "#0"}
}
},
{
"from": [7.875, 0, 7.875],
"to": [8.125, 1.25, 8.125],
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [6.75, 1, 15],
"to": [7, 1.5, 15.25],
"rotation": {"angle": 0, "axis": "y", "origin": [6, 8, 16]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#2"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#2"}
}
},
{
"from": [0.875, 0, 14.875],
"to": [1.375, 1.5, 15.375],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 8, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [0.65, 1.5, 14.875],
"to": [7.15, 2, 15.375],
"rotation": {"angle": 0, "axis": "y", "origin": [1, 10, 15]},
"faces": {
"north": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"east": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"south": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"west": {"uv": [0, 0, 0.25, 2], "texture": "#1"},
"up": {"uv": [0, 0, 0.25, 0.25], "texture": "#1"}
}
},
{
"from": [10, 0.1, 12],
"to": [15, 0.1, 15],
"faces": {
"up": {"uv": [4, 5, 12, 10], "rotation": 180, "texture": "#4"}
}
}
]
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_1"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_10"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_11"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_12"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_13"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_14"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_15"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_16"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_17"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_18"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_19"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_2"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_3"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_4"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_5"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_6"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_7"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_8"
}
}

View File

@@ -0,0 +1,6 @@
{
"parent": "visualoverhaul:block/phonos/jukebox_top_stopped_0",
"textures": {
"4": "phonos:block/speaker_top_9"
}
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 261 B

After

Width:  |  Height:  |  Size: 226 B

6
src/main/resources/fabric.mod.json Normal file → Executable file
View File

@@ -22,9 +22,6 @@
"entrypoints": { "entrypoints": {
"client": [ "client": [
"eu.midnightdust.visualoverhaul.VisualOverhaulClient" "eu.midnightdust.visualoverhaul.VisualOverhaulClient"
],
"modmenu": [
"eu.midnightdust.visualoverhaul.config.ModMenuIntegration"
] ]
}, },
@@ -34,7 +31,6 @@
"depends": { "depends": {
"fabric": ">=0.28.4", "fabric": ">=0.28.4",
"autoconfig1u": "*", "minecraft": ">=1.18"
"cloth-config2": "*"
} }
} }

View File

@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer1": "item/axolotl_bucket_overlay",
"layer0": "item/axolotl_bucket"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer1": "item/fish_bucket_overlay",
"layer0": "item/cod_bucket"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer1": "item/pufferfish_bucket_overlay",
"layer0": "item/pufferfish_bucket"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer1": "item/fish_bucket_overlay",
"layer0": "item/salmon_bucket"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer1": "item/fish_bucket_overlay",
"layer0": "item/tropical_fish_bucket"
}
}

View File

@@ -0,0 +1,7 @@
{
"parent": "item/generated",
"textures": {
"layer1": "item/water_bucket_overlay",
"layer0": "item/water_bucket"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.9 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.1 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 5.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 181 B

View File

@@ -0,0 +1,6 @@
{
"pack": {
"pack_format": 8,
"description": "§2Makes the water bucket respect biome colors"
}
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 277 B

View File

@@ -0,0 +1,34 @@
{
"variants": {
"facing=east,lit=false": {
"model": "minecraft:block/blast_furnace",
"y": 90
},
"facing=east,lit=true": {
"model": "minecraft:block/blast_furnace_on",
"y": 90
},
"facing=north,lit=false": {
"model": "minecraft:block/blast_furnace"
},
"facing=north,lit=true": {
"model": "minecraft:block/blast_furnace_on"
},
"facing=south,lit=false": {
"model": "minecraft:block/blast_furnace",
"y": 180
},
"facing=south,lit=true": {
"model": "minecraft:block/blast_furnace_on",
"y": 180
},
"facing=west,lit=false": {
"model": "minecraft:block/blast_furnace",
"y": 270
},
"facing=west,lit=true": {
"model": "minecraft:block/blast_furnace_on",
"y": 270
}
}
}

View File

@@ -0,0 +1,34 @@
{
"variants": {
"facing=east,lit=false": {
"model": "minecraft:block/smoker",
"y": 90
},
"facing=east,lit=true": {
"model": "minecraft:block/smoker_on",
"y": 90
},
"facing=north,lit=false": {
"model": "minecraft:block/smoker"
},
"facing=north,lit=true": {
"model": "minecraft:block/smoker_on"
},
"facing=south,lit=false": {
"model": "minecraft:block/smoker",
"y": 180
},
"facing=south,lit=true": {
"model": "minecraft:block/smoker_on",
"y": 180
},
"facing=west,lit=false": {
"model": "minecraft:block/smoker",
"y": 270
},
"facing=west,lit=true": {
"model": "minecraft:block/smoker_on",
"y": 270
}
}
}

Some files were not shown because too many files have changed in this diff Show More