diff --git a/README.md b/README.md new file mode 100644 index 0000000..1c82626 --- /dev/null +++ b/README.md @@ -0,0 +1,9 @@ +

Logo

+

The Mighty Architect
+ Patreon + Supported Versions + License + Discord + CF + +

diff --git a/README.txt b/README.txt deleted file mode 100644 index 86b16fb..0000000 --- a/README.txt +++ /dev/null @@ -1,2 +0,0 @@ -## The Mighty Architect for 1.14.2 -Check out the Wiki to learn about the Tool \ No newline at end of file diff --git a/build.gradle b/build.gradle index 0876fa3..2fa789e 100644 --- a/build.gradle +++ b/build.gradle @@ -1,24 +1,26 @@ buildscript { repositories { - maven { url = 'https://files.minecraftforge.net/maven' } + maven { url = 'https://maven.minecraftforge.net' } jcenter() mavenCentral() + maven { url = 'https://maven.parchmentmc.org' } } dependencies { - classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: '3.+', changing: true + classpath group: 'net.minecraftforge.gradle', name: 'ForgeGradle', version: "${forgegradle_version}", changing: true + classpath "org.parchmentmc:librarian:${librarian_version}" } } + apply plugin: 'net.minecraftforge.gradle' -// Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. +apply plugin: 'org.parchmentmc.librarian.forgegradle' apply plugin: 'eclipse' apply plugin: 'maven-publish' -version = 'mc1.16.5_v0.5' +version = "mc${minecraft_version}_v${mod_version}" group = 'com.simibubi.mightyarchitect' archivesBaseName = 'mightyarchitect' -sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' - +java.toolchain.languageVersion = JavaLanguageVersion.of(17) repositories { maven { @@ -26,10 +28,17 @@ repositories { name = "tterrag maven" url = "https://maven.tterrag.com/" } + maven { + // Location of the maven that hosts JEI files (and TiC) + name 'Progwml6 maven' + url 'https://dvs1.progwml6.com/files/maven' + } } +println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) minecraft { - mappings channel: 'official', version: '1.16.5' + mappings channel: 'parchment', version: "${parchment_version}-${minecraft_version}" + accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') runs { client { @@ -67,7 +76,8 @@ minecraft { } dependencies { - minecraft 'net.minecraftforge:forge:1.16.5-36.2.19' + minecraft "net.minecraftforge:forge:${minecraft_version}-${forge_version}" + runtimeOnly fg.deobf("mezz.jei:jei-${jei_minecraft_version}:${jei_version}") } jar { @@ -84,15 +94,12 @@ jar { } } -// Example configuration to allow publishing using the maven-publish task -// we define a custom artifact that is sourced from the reobfJar output task -// and then declare that to be published -// Note you'll need to add a repository here def reobfFile = file("$buildDir/reobfJar/output.jar") def reobfArtifact = artifacts.add('default', reobfFile) { type 'jar' builtBy 'reobfJar' } + publishing { publications { mavenJava(MavenPublication) { diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..05873fa --- /dev/null +++ b/gradle.properties @@ -0,0 +1,19 @@ +# Sets default memory used for gradle commands. Can be overridden by user or command line properties. +# This is required to provide enough memory for the Minecraft decompilation process. +org.gradle.jvmargs = -Xmx3G +org.gradle.daemon = false + +# mod version info +mod_version = 0.6 +minecraft_version = 1.18.2 +forge_version = 40.1.60 + +# build dependency versions +forgegradle_version = 5.1.+ +librarian_version = 1.+ +parchment_version = 2022.07.10 + +# dependency versions +jei_minecraft_version = 1.18.2 +jei_version = 9.5.3.143 + diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index 7a3265e..7454180 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 949819d..e750102 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-4.9-bin.zip diff --git a/gradlew b/gradlew index cccdd3d..c53aefa 100644 --- a/gradlew +++ b/gradlew @@ -1,78 +1,129 @@ -#!/usr/bin/env sh +#!/bin/sh + +# +# Copyright © 2015-2021 the original authors. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# ############################################################################## -## -## 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 + # Resolve links: $0 may be a link -PRG="$0" -# Need this for relative symlinks. -while [ -h "$PRG" ] ; do - ls=`ls -ld "$PRG"` - link=`expr "$ls" : '.*-> \(.*\)$'` - if expr "$link" : '/.*' > /dev/null; then - PRG="$link" - else - PRG=`dirname "$PRG"`"/$link" - fi +app_path=$0 + +# Need this for daisy-chained symlinks. +while + APP_HOME=${app_path%"${app_path##*/}"} # leaves a trailing /; empty if no leading path + [ -h "$app_path" ] +do + ls=$( ls -ld "$app_path" ) + link=${ls#*' -> '} + case $link in #( + /*) app_path=$link ;; #( + *) app_path=$APP_HOME$link ;; + esac done -SAVED="`pwd`" -cd "`dirname \"$PRG\"`/" >/dev/null -APP_HOME="`pwd -P`" -cd "$SAVED" >/dev/null + +APP_HOME=$( cd "${APP_HOME:-./}" && pwd -P ) || exit 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. -DEFAULT_JVM_OPTS="" +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' # Use the maximum available, or set MAX_FD != -1 to use that value. -MAX_FD="maximum" +MAX_FD=maximum warn () { echo "$*" -} +} >&2 die () { echo echo "$*" echo exit 1 -} +} >&2 # OS specific support (must be 'true' or 'false'). cygwin=false msys=false darwin=false nonstop=false -case "`uname`" in - CYGWIN* ) - cygwin=true - ;; - Darwin* ) - darwin=true - ;; - MINGW* ) - msys=true - ;; - NONSTOP* ) - nonstop=true - ;; +case "$( uname )" in #( + CYGWIN* ) cygwin=true ;; #( + Darwin* ) darwin=true ;; #( + MSYS* | MINGW* ) msys=true ;; #( + NONSTOP* ) nonstop=true ;; esac CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar + # Determine the Java command to use to start the JVM. if [ -n "$JAVA_HOME" ] ; then if [ -x "$JAVA_HOME/jre/sh/java" ] ; then # IBM's JDK on AIX uses strange locations for the executables - JAVACMD="$JAVA_HOME/jre/sh/java" + JAVACMD=$JAVA_HOME/jre/sh/java else - JAVACMD="$JAVA_HOME/bin/java" + JAVACMD=$JAVA_HOME/bin/java fi if [ ! -x "$JAVACMD" ] ; then die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME @@ -81,7 +132,7 @@ Please set the JAVA_HOME variable in your environment to match the location of your Java installation." fi 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. Please set the JAVA_HOME variable in your environment to match the @@ -89,84 +140,95 @@ location of your Java installation." fi # Increase the maximum file descriptors if we can. -if [ "$cygwin" = "false" -a "$darwin" = "false" -a "$nonstop" = "false" ] ; then - MAX_FD_LIMIT=`ulimit -H -n` - if [ $? -eq 0 ] ; then - if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then - MAX_FD="$MAX_FD_LIMIT" - fi - ulimit -n $MAX_FD - if [ $? -ne 0 ] ; then - warn "Could not set maximum file descriptor limit: $MAX_FD" - fi - else - warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT" - fi +if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then + case $MAX_FD in #( + max*) + MAX_FD=$( ulimit -H -n ) || + warn "Could not query maximum file descriptor limit" + esac + case $MAX_FD in #( + '' | soft) :;; #( + *) + ulimit -n "$MAX_FD" || + warn "Could not set maximum file descriptor limit to $MAX_FD" + esac 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 +# Collect all arguments for the java command, stacking in reverse order: +# * args from the command line +# * the main class name +# * -classpath +# * -D...appname settings +# * --module-path (only if needed) +# * DEFAULT_JVM_OPTS, JAVA_OPTS, and GRADLE_OPTS environment variables. + +# For Cygwin or MSYS, switch paths to Windows format before running java +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) -# 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\"" + 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 - i=$((i+1)) + # 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 - 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 fi -# Escape application args -save () { - for i do printf %s\\n "$i" | sed "s/'/'\\\\''/g;1s/^/'/;\$s/\$/' \\\\/" ; done - echo " " -} -APP_ARGS=$(save "$@") - -# Collect all arguments for the java command, following the shell quoting and substitution rules -eval set -- $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS "\"-Dorg.gradle.appname=$APP_BASE_NAME\"" -classpath "\"$CLASSPATH\"" org.gradle.wrapper.GradleWrapperMain "$APP_ARGS" - -# by default we should be in the correct project dir, but when run from Finder on Mac, the cwd is wrong -if [ "$(uname)" = "Darwin" ] && [ "$HOME" = "$PWD" ]; then - cd "$(dirname "$0")" -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" "$@" diff --git a/gradlew.bat b/gradlew.bat index f955316..107acd3 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -1,3 +1,19 @@ +@rem +@rem Copyright 2015 the original author or authors. +@rem +@rem Licensed under the Apache License, Version 2.0 (the "License"); +@rem you may not use this file except in compliance with the License. +@rem You may obtain a copy of the License at +@rem +@rem https://www.apache.org/licenses/LICENSE-2.0 +@rem +@rem Unless required by applicable law or agreed to in writing, software +@rem distributed under the License is distributed on an "AS IS" BASIS, +@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +@rem See the License for the specific language governing permissions and +@rem limitations under the License. +@rem + @if "%DEBUG%" == "" @echo off @rem ########################################################################## @rem @@ -13,15 +29,18 @@ if "%DIRNAME%" == "" set DIRNAME=. set APP_BASE_NAME=%~n0 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. -set DEFAULT_JVM_OPTS= +set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m" @rem Find java.exe if defined JAVA_HOME goto findJavaFromJavaHome set JAVA_EXE=java.exe %JAVA_EXE% -version >NUL 2>&1 -if "%ERRORLEVEL%" == "0" goto init +if "%ERRORLEVEL%" == "0" goto execute echo. echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. @@ -35,7 +54,7 @@ goto fail set JAVA_HOME=%JAVA_HOME:"=% set JAVA_EXE=%JAVA_HOME%/bin/java.exe -if exist "%JAVA_EXE%" goto init +if exist "%JAVA_EXE%" goto execute echo. echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME% @@ -45,28 +64,14 @@ echo location of your Java installation. 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 @rem Setup the command line set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar + @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 @rem End local scope for the variables with windows NT shell diff --git a/logs/debug.log b/logs/debug.log deleted file mode 100644 index e69de29..0000000 diff --git a/logs/latest.log b/logs/latest.log deleted file mode 100644 index e69de29..0000000 diff --git a/src/main/java/com/simibubi/mightyarchitect/AllBlocks.java b/src/main/java/com/simibubi/mightyarchitect/AllBlocks.java index a400317..2d8b344 100644 --- a/src/main/java/com/simibubi/mightyarchitect/AllBlocks.java +++ b/src/main/java/com/simibubi/mightyarchitect/AllBlocks.java @@ -4,10 +4,10 @@ import com.simibubi.mightyarchitect.block.IJustForRendering; import com.simibubi.mightyarchitect.block.SliceMarkerBlock; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.BlockItem; -import net.minecraft.item.Item; +import net.minecraft.world.item.BlockItem; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.registries.IForgeRegistry; public enum AllBlocks { diff --git a/src/main/java/com/simibubi/mightyarchitect/AllItems.java b/src/main/java/com/simibubi/mightyarchitect/AllItems.java index c782c4e..cca40ba 100644 --- a/src/main/java/com/simibubi/mightyarchitect/AllItems.java +++ b/src/main/java/com/simibubi/mightyarchitect/AllItems.java @@ -2,9 +2,9 @@ import com.simibubi.mightyarchitect.item.ArchitectWandItem; -import net.minecraft.item.Item; -import net.minecraft.item.Item.Properties; -import net.minecraft.item.ItemStack; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.Item.Properties; +import net.minecraft.world.item.ItemStack; import net.minecraftforge.registries.IForgeRegistry; public enum AllItems { diff --git a/src/main/java/com/simibubi/mightyarchitect/AllPackets.java b/src/main/java/com/simibubi/mightyarchitect/AllPackets.java index e999f4a..7bd28f5 100644 --- a/src/main/java/com/simibubi/mightyarchitect/AllPackets.java +++ b/src/main/java/com/simibubi/mightyarchitect/AllPackets.java @@ -1,13 +1,12 @@ package com.simibubi.mightyarchitect; -import com.google.common.base.Predicates; import com.simibubi.mightyarchitect.networking.InstantPrintPacket; import com.simibubi.mightyarchitect.networking.PlaceSignPacket; import com.simibubi.mightyarchitect.networking.SetHotbarItemPacket; -import net.minecraft.util.ResourceLocation; -import net.minecraftforge.fml.network.NetworkRegistry; -import net.minecraftforge.fml.network.simple.SimpleChannel; +import net.minecraft.resources.ResourceLocation; +import net.minecraftforge.network.NetworkRegistry; +import net.minecraftforge.network.simple.SimpleChannel; public class AllPackets { @@ -15,9 +14,10 @@ public class AllPackets { public static void registerPackets() { channel = NetworkRegistry.newSimpleChannel(new ResourceLocation(TheMightyArchitect.ID, "simple_channel"), - () -> "1", Predicates.alwaysTrue(), v -> v.equals("1")); + () -> "1", s -> true, v -> v.equals("1")); int i = 0; + channel.registerMessage(i++, InstantPrintPacket.class, InstantPrintPacket::toBytes, InstantPrintPacket::new, InstantPrintPacket::handle); channel.registerMessage(i++, PlaceSignPacket.class, PlaceSignPacket::toBytes, PlaceSignPacket::new, diff --git a/src/main/java/com/simibubi/mightyarchitect/AllSpecialTextures.java b/src/main/java/com/simibubi/mightyarchitect/AllSpecialTextures.java index b48d318..55fe80f 100644 --- a/src/main/java/com/simibubi/mightyarchitect/AllSpecialTextures.java +++ b/src/main/java/com/simibubi/mightyarchitect/AllSpecialTextures.java @@ -1,7 +1,8 @@ package com.simibubi.mightyarchitect; -import net.minecraft.client.Minecraft; -import net.minecraft.util.ResourceLocation; +import com.mojang.blaze3d.systems.RenderSystem; + +import net.minecraft.resources.ResourceLocation; public enum AllSpecialTextures { @@ -36,7 +37,7 @@ private AllSpecialTextures(String filename) { } public void bind() { - Minecraft.getInstance().getTextureManager().bind(location); + RenderSystem.setShaderTexture(0, location); } public ResourceLocation getLocation() { diff --git a/src/main/java/com/simibubi/mightyarchitect/MightyClient.java b/src/main/java/com/simibubi/mightyarchitect/MightyClient.java index 1b67988..5398b83 100644 --- a/src/main/java/com/simibubi/mightyarchitect/MightyClient.java +++ b/src/main/java/com/simibubi/mightyarchitect/MightyClient.java @@ -1,36 +1,31 @@ package com.simibubi.mightyarchitect; -import java.util.Random; - -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.SchematicRenderer; +import com.simibubi.mightyarchitect.foundation.SuperRenderTypeBuffer; import com.simibubi.mightyarchitect.foundation.utility.AnimationTickHolder; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; import com.simibubi.mightyarchitect.foundation.utility.outliner.Outliner; -import net.minecraft.block.Blocks; +import net.minecraft.client.Camera; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.ActiveRenderInfo; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.client.event.RenderWorldLastEvent; -import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.ClientRegistry; +import net.minecraftforge.client.event.RenderLevelLastEvent; import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.event.TickEvent.Phase; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.client.registry.ClientRegistry; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; @EventBusSubscriber(value = Dist.CLIENT) public class MightyClient { - public static KeyBinding COMPOSE; - public static KeyBinding TOOL_MENU; + public static KeyMapping COMPOSE; + public static KeyMapping TOOL_MENU; public static SchematicRenderer renderer = new SchematicRenderer(); public static Outliner outliner = new Outliner(); @@ -38,8 +33,8 @@ public class MightyClient { public static void init() { AllItems.initColorHandlers(); String modName = TheMightyArchitect.NAME; - COMPOSE = new KeyBinding("Start composing", Keyboard.G, modName); - TOOL_MENU = new KeyBinding("Tool Menu (Hold)", Keyboard.LALT, modName); + COMPOSE = new KeyMapping("Start composing", Keyboard.G, modName); + TOOL_MENU = new KeyMapping("Tool Menu (Hold)", Keyboard.LALT, modName); ClientRegistry.registerKeyBinding(COMPOSE); ClientRegistry.registerKeyBinding(TOOL_MENU); } @@ -60,20 +55,22 @@ public static void onTick(ClientTickEvent event) { } @SubscribeEvent - public static void onRenderWorld(RenderWorldLastEvent event) { - MatrixStack ms = event.getMatrixStack(); - ActiveRenderInfo info = Minecraft.getInstance().gameRenderer.getMainCamera(); - Vector3d view = info.getPosition(); + public static void onRenderWorld(RenderLevelLastEvent event) { + PoseStack ms = event.getPoseStack(); + Camera info = Minecraft.getInstance().gameRenderer.getMainCamera(); + Vec3 view = info.getPosition(); ms.pushPose(); ms.translate(-view.x(), -view.y(), -view.z()); - IRenderTypeBuffer.Impl buffer = Minecraft.getInstance() + MultiBufferSource.BufferSource buffer = Minecraft.getInstance() .renderBuffers() .bufferSource(); - MightyClient.renderer.render(ms, buffer); - ArchitectManager.render(ms, buffer); - MightyClient.outliner.renderOutlines(ms, buffer); + SuperRenderTypeBuffer b = SuperRenderTypeBuffer.getInstance(); + + MightyClient.renderer.render(ms, b); + ArchitectManager.render(ms, b); + MightyClient.outliner.renderOutlines(ms, b); // ms.push(); // ms.translate(5, 10, 4); @@ -83,6 +80,7 @@ public static void onRenderWorld(RenderWorldLastEvent event) { // ms, buffer.getBuffer(RenderType.getSolid()), true, new Random(), EmptyModelData.INSTANCE); // ms.pop(); + b.draw(); buffer.endBatch(); ms.popPose(); } diff --git a/src/main/java/com/simibubi/mightyarchitect/TheMightyArchitect.java b/src/main/java/com/simibubi/mightyarchitect/TheMightyArchitect.java index e59330f..5791af0 100644 --- a/src/main/java/com/simibubi/mightyarchitect/TheMightyArchitect.java +++ b/src/main/java/com/simibubi/mightyarchitect/TheMightyArchitect.java @@ -3,8 +3,8 @@ import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; -import net.minecraft.block.Block; -import net.minecraft.item.Item; +import net.minecraft.world.item.Item; +import net.minecraft.world.level.block.Block; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.RegistryEvent; import net.minecraftforge.eventbus.api.IEventBus; @@ -23,7 +23,7 @@ public class TheMightyArchitect { public static final String ID = "mightyarchitect"; public static final String NAME = "The Mighty Architect"; - public static final String VERSION = "0.5"; + public static final String VERSION = "0.6"; public static TheMightyArchitect instance; public static Logger logger = LogManager.getLogger(); @@ -36,7 +36,7 @@ public TheMightyArchitect() { } private void clientInit(FMLClientSetupEvent event) { - DistExecutor.runWhenOn(Dist.CLIENT, () -> MightyClient::init); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> MightyClient::init); } private void init(final FMLCommonSetupEvent event) { diff --git a/src/main/java/com/simibubi/mightyarchitect/block/DesignAnchorBlock.java b/src/main/java/com/simibubi/mightyarchitect/block/DesignAnchorBlock.java index 9de10c5..898c837 100644 --- a/src/main/java/com/simibubi/mightyarchitect/block/DesignAnchorBlock.java +++ b/src/main/java/com/simibubi/mightyarchitect/block/DesignAnchorBlock.java @@ -1,13 +1,11 @@ package com.simibubi.mightyarchitect.block; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.material.Material; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.StateContainer.Builder; - -import net.minecraft.block.AbstractBlock.Properties; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.material.Material; public class DesignAnchorBlock extends Block { @@ -24,7 +22,7 @@ protected void createBlockStateDefinition(Builder builder) { } @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { + public BlockState getStateForPlacement(BlockPlaceContext context) { return defaultBlockState().setValue(compass, true); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/block/SliceMarkerBlock.java b/src/main/java/com/simibubi/mightyarchitect/block/SliceMarkerBlock.java index 524086c..3c6060c 100644 --- a/src/main/java/com/simibubi/mightyarchitect/block/SliceMarkerBlock.java +++ b/src/main/java/com/simibubi/mightyarchitect/block/SliceMarkerBlock.java @@ -3,23 +3,21 @@ import com.simibubi.mightyarchitect.AllItems; import com.simibubi.mightyarchitect.control.design.DesignSlice.DesignSliceTrait; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.material.Material; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.state.BooleanProperty; -import net.minecraft.state.EnumProperty; -import net.minecraft.state.StateContainer.Builder; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.World; - -import net.minecraft.block.AbstractBlock.Properties; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction.Axis; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.StateDefinition.Builder; +import net.minecraft.world.level.block.state.properties.BooleanProperty; +import net.minecraft.world.level.block.state.properties.EnumProperty; +import net.minecraft.world.level.material.Material; +import net.minecraft.world.phys.BlockHitResult; public class SliceMarkerBlock extends Block { @@ -39,28 +37,28 @@ protected void createBlockStateDefinition(Builder builder) { } @Override - public BlockState getStateForPlacement(BlockItemUseContext context) { + public BlockState getStateForPlacement(BlockPlaceContext context) { if (context.getLevel().getBlockState(context.getClickedPos().below()).getBlock() == this) return defaultBlockState().setValue(compass, false); return defaultBlockState().setValue(compass, true); } @Override - public ActionResultType use(BlockState state, World worldIn, BlockPos pos, PlayerEntity player, Hand handIn, - BlockRayTraceResult hit) { + public InteractionResult use(BlockState state, Level worldIn, BlockPos pos, Player player, InteractionHand handIn, + BlockHitResult hit) { if (hit.getDirection().getAxis() == Axis.Y) - return ActionResultType.PASS; + return InteractionResult.PASS; if (AllItems.ARCHITECT_WAND.typeOf(player.getItemInHand(handIn))) - return ActionResultType.PASS; + return InteractionResult.PASS; if (worldIn.isClientSide) - return ActionResultType.SUCCESS; + return InteractionResult.SUCCESS; DesignSliceTrait currentTrait = state.getValue(VARIANT); DesignSliceTrait newTrait = currentTrait.cycle(player.isShiftKeyDown() ? -1 : 1); worldIn.setBlockAndUpdate(pos, state.setValue(VARIANT, newTrait)); - player.displayClientMessage(new StringTextComponent(newTrait.getDescription()), true); + player.displayClientMessage(new TextComponent(newTrait.getDescription()), true); - return ActionResultType.SUCCESS; + return InteractionResult.SUCCESS; } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/ArchitectKits.java b/src/main/java/com/simibubi/mightyarchitect/control/ArchitectKits.java index 9e941dd..300149b 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/ArchitectKits.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/ArchitectKits.java @@ -7,12 +7,12 @@ import com.simibubi.mightyarchitect.control.palette.Palette; import com.simibubi.mightyarchitect.networking.SetHotbarItemPacket; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.state.BlockState; public class ArchitectKits { @@ -84,9 +84,9 @@ private static void setHotbarBlock(int slot, Palette palette) { BlockState state = DesignExporter.theme.getDefaultPalette().get(palette); ItemStack stack = new ItemStack(state.getBlock().asItem()); setHotbarItem(slot, - stack.setHoverName(new StringTextComponent(TextFormatting.RESET + "" + TextFormatting.GOLD - + palette.getDisplayName() + TextFormatting.WHITE + " (" + TextFormatting.GRAY - + stack.getHoverName().getString() + TextFormatting.WHITE + ")"))); + stack.setHoverName(new TextComponent(ChatFormatting.RESET + "" + ChatFormatting.GOLD + + palette.getDisplayName() + ChatFormatting.WHITE + " (" + ChatFormatting.GRAY + + stack.getHoverName().getString() + ChatFormatting.WHITE + ")"))); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/ArchitectManager.java b/src/main/java/com/simibubi/mightyarchitect/control/ArchitectManager.java index d86be8b..8db8cbb 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/ArchitectManager.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/ArchitectManager.java @@ -9,8 +9,8 @@ import org.apache.commons.io.IOUtils; import org.lwjgl.glfw.GLFW; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.AllPackets; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.compose.GroundPlan; @@ -33,13 +33,13 @@ import com.simibubi.mightyarchitect.gui.ThemeSettingsScreen; import com.simibubi.mightyarchitect.networking.InstantPrintPacket; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtIo; +import net.minecraft.network.chat.TextComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.InputEvent.KeyInputEvent; import net.minecraftforge.client.event.InputEvent.MouseInputEvent; @@ -167,9 +167,9 @@ public static void writeToFile(String name) { OutputStream outputStream = null; try { outputStream = Files.newOutputStream(Paths.get(filepath), StandardOpenOption.CREATE); - CompoundNBT nbttagcompound = getModel().writeToTemplate() - .save(new CompoundNBT()); - CompressedStreamTools.writeCompressed(nbttagcompound, outputStream); + CompoundTag nbttagcompound = getModel().writeToTemplate() + .save(new CompoundTag()); + NbtIo.writeCompressed(nbttagcompound, outputStream); } catch (IOException e) { e.printStackTrace(); } finally { @@ -181,14 +181,14 @@ public static void writeToFile(String name) { BlockPos pos = model.getAnchor() .offset(((TemplateBlockAccess) model.getMaterializedSketch()).getBounds() .getOrigin()); - StringTextComponent component = new StringTextComponent("Deploy Schematic at: " + TextFormatting.BLUE + "[" + TextComponent component = new TextComponent("Deploy Schematic at: " + ChatFormatting.BLUE + "[" + pos.getX() + "," + pos.getY() + "," + pos.getZ() + "]"); Minecraft.getInstance().player.displayClientMessage(component, false); unload(); } public static void status(String message) { - Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(message), true); + Minecraft.getInstance().player.displayClientMessage(new TextComponent(message), true); } public static void pickPalette() { @@ -281,7 +281,7 @@ public static void onMouseScrolled(MouseScrollEvent event) { event.setCanceled(true); } - public static void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public static void render(PoseStack ms, MultiBufferSource buffer) { if (Minecraft.getInstance().level != null) phase.getPhaseHandler() .render(ms, buffer); @@ -335,7 +335,7 @@ public static void tickBlockHighlightOutlines() { @SubscribeEvent public static void onDrawGameOverlay(RenderGameOverlayEvent.Pre event) { - if (event.getType() != ElementType.HOTBAR) + if (event.getType() != ElementType.ALL) return; IArchitectPhase phaseHandler = phase.getPhaseHandler(); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/ArchitectMenu.java b/src/main/java/com/simibubi/mightyarchitect/control/ArchitectMenu.java index acf17a7..36fc75d 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/ArchitectMenu.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/ArchitectMenu.java @@ -16,8 +16,8 @@ import com.simibubi.mightyarchitect.gui.TextInputPromptScreen; import com.simibubi.mightyarchitect.gui.ThemeSettingsScreen; +import net.minecraft.Util; import net.minecraft.client.Minecraft; -import net.minecraft.util.Util; public class ArchitectMenu { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/Schematic.java b/src/main/java/com/simibubi/mightyarchitect/control/Schematic.java index 24116e3..66bae4e 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/Schematic.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/Schematic.java @@ -15,10 +15,10 @@ import com.simibubi.mightyarchitect.control.palette.PaletteDefinition; import com.simibubi.mightyarchitect.networking.InstantPrintPacket; -import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.gen.feature.template.Template; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.structure.templatesystem.StructureTemplate; public class Schematic { @@ -198,8 +198,8 @@ private void checkBounds(BlockPos pos) { bounds.length = z - bounds.z + 1; } - public Template writeToTemplate() { - final Template template = new Template(); + public StructureTemplate writeToTemplate() { + final StructureTemplate template = new StructureTemplate(); template.setAuthor(Minecraft.getInstance().player.getName() .getString()); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/SchematicRenderer.java b/src/main/java/com/simibubi/mightyarchitect/control/SchematicRenderer.java index e240708..7724884 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/SchematicRenderer.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/SchematicRenderer.java @@ -5,22 +5,21 @@ import java.util.Map; import java.util.Set; -import org.lwjgl.opengl.GL11; - -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.mightyarchitect.foundation.MatrixStacker; import com.simibubi.mightyarchitect.foundation.SuperByteBuffer; -import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BlockRendererDispatcher; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.RenderTypeLookup; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.math.BlockPos; -import net.minecraft.world.IBlockDisplayReader; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.BlockAndTintGetter; +import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.ForgeHooksClient; import net.minecraftforge.client.model.data.EmptyModelData; @@ -64,7 +63,7 @@ public void tick() { changed = false; } - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { if (!active) return; @@ -85,11 +84,11 @@ private void redraw(Minecraft minecraft) { usedBlockRenderLayers.clear(); startedBufferBuilders.clear(); - final IBlockDisplayReader blockAccess = schematic.getMaterializedSketch(); - final BlockRendererDispatcher blockRendererDispatcher = minecraft.getBlockRenderer(); + final BlockAndTintGetter blockAccess = schematic.getMaterializedSketch(); + final BlockRenderDispatcher blockRendererDispatcher = minecraft.getBlockRenderer(); Map buffers = new HashMap<>(); - MatrixStack ms = new MatrixStack(); + PoseStack ms = new PoseStack(); BlockPos.betweenClosedStream(schematic.getLocalBounds() .toMBB()) @@ -101,22 +100,22 @@ private void redraw(Minecraft minecraft) { BlockState state = blockAccess.getBlockState(pos); for (RenderType blockRenderLayer : RenderType.chunkBufferLayers()) { - if (!RenderTypeLookup.canRenderInLayer(state, blockRenderLayer)) + if (!ItemBlockRenderTypes.canRenderInLayer(state, blockRenderLayer)) continue; - ForgeHooksClient.setRenderLayer(blockRenderLayer); + ForgeHooksClient.setRenderType(blockRenderLayer); if (!buffers.containsKey(blockRenderLayer)) - buffers.put(blockRenderLayer, new BufferBuilder(DefaultVertexFormats.BLOCK.getIntegerSize())); + buffers.put(blockRenderLayer, new BufferBuilder(DefaultVertexFormat.BLOCK.getIntegerSize())); BufferBuilder bufferBuilder = buffers.get(blockRenderLayer); if (startedBufferBuilders.add(blockRenderLayer)) - bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - if (blockRendererDispatcher.renderModel(state, pos, blockAccess, ms, bufferBuilder, true, + bufferBuilder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + if (blockRendererDispatcher.renderBatched(state, pos, blockAccess, ms, bufferBuilder, true, minecraft.level.random, EmptyModelData.INSTANCE)) { usedBlockRenderLayers.add(blockRenderLayer); } } - ForgeHooksClient.setRenderLayer(null); + ForgeHooksClient.setRenderType(null); ms.popPose(); }); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/TemplateBlockAccess.java b/src/main/java/com/simibubi/mightyarchitect/control/TemplateBlockAccess.java index aa165d7..848e10b 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/TemplateBlockAccess.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/TemplateBlockAccess.java @@ -11,26 +11,27 @@ import com.simibubi.mightyarchitect.control.compose.Cuboid; import com.simibubi.mightyarchitect.foundation.WrappedWorld; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.fluid.Fluid; -import net.minecraft.particles.IParticleData; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.Registry; -import net.minecraft.world.EmptyTickList; -import net.minecraft.world.ITickList; -import net.minecraft.world.LightType; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.biome.Biomes; -import net.minecraft.world.gen.Heightmap.Type; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Holder; +import net.minecraft.core.Registry; +import net.minecraft.core.particles.ParticleOptions; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.LightLayer; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.biome.Biomes; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap.Types; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.ticks.BlackholeTickAccess; +import net.minecraft.world.ticks.LevelTickAccess; public class TemplateBlockAccess extends WrappedWorld { @@ -66,7 +67,7 @@ public Set getAllPositions() { } @Override - public TileEntity getBlockEntity(BlockPos pos) { + public BlockEntity getBlockEntity(BlockPos pos) { return null; } @@ -85,9 +86,8 @@ public Map getBlockMap() { } @Override - public Biome getBiome(BlockPos pos) { - return registryAccess().registryOrThrow(Registry.BIOME_REGISTRY) - .get(Biomes.THE_VOID); + public Holder getBiome(BlockPos pos) { + return Holder.direct(registryAccess().registryOrThrow(Registry.BIOME_REGISTRY).get(Biomes.THE_VOID)); } @Override @@ -96,24 +96,24 @@ public int getMaxLocalRawBrightness(BlockPos p_201696_1_) { } @Override - public List getEntities(Entity arg0, AxisAlignedBB arg1, Predicate arg2) { + public List getEntities(Entity arg0, AABB arg1, Predicate arg2) { return Collections.emptyList(); } @Override - public List getEntitiesOfClass(Class arg0, AxisAlignedBB arg1, + public List getEntitiesOfClass(Class arg0, AABB arg1, Predicate arg2) { return Collections.emptyList(); } @Override - public List players() { + public List players() { return Collections.emptyList(); } @Override - public int getBrightness(LightType lt, BlockPos p_226658_2_) { - return lt == LightType.BLOCK ? 12 : 14; + public int getBrightness(LightLayer lt, BlockPos p_226658_2_) { + return lt == LightLayer.BLOCK ? 12 : 14; } @Override @@ -122,12 +122,12 @@ public int getLightEmission(BlockPos pos) { } @Override - public BlockPos getHeightmapPos(Type heightmapType, BlockPos pos) { + public BlockPos getHeightmapPos(Types heightmapType, BlockPos pos) { return BlockPos.ZERO; } @Override - public int getHeight(Type heightmapType, int x, int z) { + public int getHeight(Types heightmapType, int x, int z) { return 256; } @@ -153,13 +153,13 @@ public boolean setBlock(BlockPos pos, BlockState state, int p_241211_3_, int p_2 } @Override - public ITickList getBlockTicks() { - return EmptyTickList.empty(); + public LevelTickAccess getBlockTicks() { + return BlackholeTickAccess.emptyLevelList(); } @Override - public ITickList getLiquidTicks() { - return EmptyTickList.empty(); + public LevelTickAccess getFluidTicks() { + return BlackholeTickAccess.emptyLevelList(); } @Override @@ -174,15 +174,15 @@ public void updateNeighborsAt(BlockPos p_195593_1_, Block p_195593_2_) {} public void sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newState, int flags) {} @Override - public void playSound(PlayerEntity player, BlockPos pos, SoundEvent soundIn, SoundCategory category, float volume, + public void playSound(Player player, BlockPos pos, SoundEvent soundIn, SoundSource category, float volume, float pitch) {} @Override - public void addParticle(IParticleData particleData, double x, double y, double z, double xSpeed, double ySpeed, + public void addParticle(ParticleOptions particleData, double x, double y, double z, double xSpeed, double ySpeed, double zSpeed) {} @Override - public void levelEvent(PlayerEntity player, int type, BlockPos pos, int data) {} + public void levelEvent(Player player, int type, BlockPos pos, int data) {} public Cuboid getBounds() { return bounds; diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/Cuboid.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/Cuboid.java index c10c346..517605b 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/Cuboid.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/Cuboid.java @@ -1,9 +1,9 @@ package com.simibubi.mightyarchitect.control.compose; -import net.minecraft.util.Direction; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MutableBoundingBox; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.levelgen.structure.BoundingBox; +import net.minecraft.world.phys.AABB; public class Cuboid { @@ -109,12 +109,12 @@ public boolean equals(Object obj) { && ((Cuboid) obj).getSize().equals(getSize()); } - public MutableBoundingBox toMBB() { - return new MutableBoundingBox(getOrigin(), getOrigin().offset(getSize())); + public BoundingBox toMBB() { + return BoundingBox.fromCorners(getOrigin(), getOrigin().offset(getSize())); } - public AxisAlignedBB toAABB() { - return new AxisAlignedBB(getOrigin(), getOrigin().offset(getSize())); + public AABB toAABB() { + return new AABB(getOrigin(), getOrigin().offset(getSize())); } } \ No newline at end of file diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/GroundPlan.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/GroundPlan.java index 08be03d..10dcb98 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/GroundPlan.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/GroundPlan.java @@ -7,7 +7,7 @@ import com.simibubi.mightyarchitect.control.design.DesignTheme; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class GroundPlan { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/Room.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/Room.java index ff25a2e..da6386f 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/Room.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/Room.java @@ -3,8 +3,8 @@ import com.simibubi.mightyarchitect.control.design.DesignLayer; import com.simibubi.mightyarchitect.control.design.DesignType; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction.Axis; public class Room extends Cuboid { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/Stack.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/Stack.java index 5e80aeb..c52cc19 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/Stack.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/Stack.java @@ -13,7 +13,7 @@ import com.simibubi.mightyarchitect.control.design.DesignType; import com.simibubi.mightyarchitect.control.design.ThemeStatistics; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class Stack { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/AbstractRoomFaceSelectionTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/AbstractRoomFaceSelectionTool.java index bb4886e..c4a14a0 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/AbstractRoomFaceSelectionTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/AbstractRoomFaceSelectionTool.java @@ -3,8 +3,8 @@ import com.simibubi.mightyarchitect.control.compose.Room; import com.simibubi.mightyarchitect.control.compose.Stack; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; public abstract class AbstractRoomFaceSelectionTool extends GroundPlanningToolBase { @@ -17,7 +17,7 @@ public void init() { } @Override - protected void makeStacksTransparent(ClientPlayerEntity player, BlockPos hit) {} + protected void makeStacksTransparent(LocalPlayer player, BlockPos hit) {} @Override public void tickToolOutlines() {} diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/ComposerToolBase.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/ComposerToolBase.java index b196d7b..6761b29 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/ComposerToolBase.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/ComposerToolBase.java @@ -2,8 +2,9 @@ import org.lwjgl.glfw.GLFW; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.Schematic; import com.simibubi.mightyarchitect.control.compose.GroundPlan; @@ -13,13 +14,12 @@ import com.simibubi.mightyarchitect.foundation.utility.RaycastHelper; import com.simibubi.mightyarchitect.foundation.utility.RaycastHelper.PredicateTraceResult; -import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.util.Mth; public abstract class ComposerToolBase implements IComposerTool { @@ -63,7 +63,7 @@ protected void updateSelectedRooms() { return; } - ClientPlayerEntity player = Minecraft.getInstance().player; + LocalPlayer player = Minecraft.getInstance().player; PredicateTraceResult result = RaycastHelper.rayTraceUntil(player, 70, position -> { return groundPlan.getRoomAtPos(position.subtract(anchor)) != null; @@ -89,13 +89,13 @@ protected void updateOverlay() { } @Override - public void renderOverlay(MatrixStack ms) { - RenderSystem.pushMatrix(); + public void renderOverlay(PoseStack ms) { + ms.pushPose(); Minecraft mc = Minecraft.getInstance(); - MainWindow mainWindow = mc.getWindow(); - RenderSystem.translated(mainWindow.getGuiScaledWidth() / 2, mainWindow.getGuiScaledHeight() / 2 - 3, 0); - RenderSystem.translated(25, - -MathHelper.lerp(mc.getFrameTime(), lastToolModeYOffset, toolModeYOffset), + Window mainWindow = mc.getWindow(); + ms.translate(mainWindow.getGuiScaledWidth() / 2, mainWindow.getGuiScaledHeight() / 2 - 3, 0); + ms.translate(25, + -Mth.lerp(mc.getFrameTime(), lastToolModeYOffset, toolModeYOffset), 0); if (toolModeNoCtrl != null) { @@ -111,12 +111,12 @@ public void renderOverlay(MatrixStack ms) { mc.font.drawShadow(ms, toolModeCtrl, 0, 12, color); } - RenderSystem.color4f(1, 1, 1, 1); - RenderSystem.popMatrix(); + RenderSystem.setShaderColor(1, 1, 1, 1); + ms.popPose(); } protected void status(String message) { - Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(message), true); + Minecraft.getInstance().player.displayClientMessage(new TextComponent(message), true); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CopyDesignTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CopyDesignTool.java index e356d95..f682f2c 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CopyDesignTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CopyDesignTool.java @@ -14,11 +14,11 @@ import com.simibubi.mightyarchitect.control.design.partials.Design; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.world.phys.AABB; public class CopyDesignTool extends WallDecorationToolBase { @@ -78,9 +78,10 @@ public void tickToolOutlines() { Consumer renderCorner = pos -> { MightyClient.outliner .showAABB(pos, - new AxisAlignedBB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, + new AABB(pos.getX(), pos.getY(), pos.getZ(), pos.getX() + 1, pos.getY() + selectedRoom.height, pos.getZ() + 1)) - .lineWidth(1 / 8f); + .lineWidth(1 / 8f) + .withAlpha(1); }; renderCorner.accept(origin); @@ -96,9 +97,10 @@ public void tickToolOutlines() { BlockPos end = start.offset(size); MightyClient.outliner .showAABB(start, - new AxisAlignedBB(start.getX() - 1 / 2d, start.getY(), start.getZ() - 1 / 2d, end.getX() - 1 / 2d, + new AABB(start.getX() - 1 / 2d, start.getY(), start.getZ() - 1 / 2d, end.getX() - 1 / 2d, end.getY(), end.getZ() - 1 / 2d)) - .lineWidth(1 / 8f); + .lineWidth(1 / 8f) + .withAlpha(1); }; if (selectedFace.getAxis() == Axis.X) { @@ -129,7 +131,7 @@ public String handleRightClick() { boolean keyDown = Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL); if (copiedDesign == null && !keyDown) - return TextFormatting.RED + "Ctrl+Click to copy a Design"; + return ChatFormatting.RED + "Ctrl+Click to copy a Design"; DesignPicker designPicker = model.getTheme() .getDesignPicker(); @@ -153,7 +155,7 @@ public String handleRightClick() { copiedDesignType = DesignType.WALL; } - return "Copied " + TextFormatting.GREEN + copiedDesignType.getDisplayName(); + return "Copied " + ChatFormatting.GREEN + copiedDesignType.getDisplayName(); } if (!keyDown && selectedRoom != null) { @@ -161,10 +163,10 @@ public String handleRightClick() { if (DesignType.roofTypes() .contains(copiedDesignType)) { if (selectedStack.getRoofType() != copiedDesignType) - return TextFormatting.RED + "Roof types have to match."; + return ChatFormatting.RED + "Roof types have to match."; int facadeWidth = Math.min(selectedStack.highest().width, selectedStack.highest().length); if (!copiedDesign.fitsHorizontally(facadeWidth)) - return TextFormatting.RED + "Roof does not fit."; + return ChatFormatting.RED + "Roof does not fit."; designPicker.putRoof(selectedStack, copiedDesign); return pasteSuccessful(); @@ -172,11 +174,11 @@ public String handleRightClick() { if (copiedDesignType == DesignType.TOWER) { if (!(selectedStack instanceof CylinderStack)) - return TextFormatting.RED + "Room shapes have to match."; + return ChatFormatting.RED + "Room shapes have to match."; if (!copiedDesign.fitsHorizontally(selectedRoom.width)) - return TextFormatting.RED + "Target needs to have the same diameter."; + return ChatFormatting.RED + "Target needs to have the same diameter."; if (!copiedDesign.fitsVertically(selectedRoom.height)) - return TextFormatting.RED + "Design does not fit the targets height."; + return ChatFormatting.RED + "Design does not fit the targets height."; designPicker.putRoom(selectedRoom, new RoomDesignMapping(copiedDesign)); return pasteSuccessful(); @@ -184,9 +186,9 @@ public String handleRightClick() { if (copiedDesignType == DesignType.CORNER) { if (selectedStack instanceof CylinderStack) - return TextFormatting.RED + "Cylinders cannot have corners."; + return ChatFormatting.RED + "Cylinders cannot have corners."; if (!copiedDesign.fitsVertically(selectedRoom.height)) - return TextFormatting.RED + "Corner Design cannot fit the required height."; + return ChatFormatting.RED + "Corner Design cannot fit the required height."; RoomDesignMapping priorMapping = designPicker.getCachedRoom(selectedRoom); priorMapping.corner = copiedDesign; @@ -197,16 +199,16 @@ public String handleRightClick() { if (copiedDesignType == DesignType.WALL) { if (selectedStack instanceof CylinderStack) - return TextFormatting.RED + "Room shapes have to match."; + return ChatFormatting.RED + "Room shapes have to match."; if (selectedFace.getAxis() .isVertical()) - return TextFormatting.RED + "Cannot apply Wall vertically."; + return ChatFormatting.RED + "Cannot apply Wall vertically."; int wallWidth = selectedFace.getAxis() == Axis.Z ? selectedRoom.width - 2 : selectedRoom.length - 2; if (!copiedDesign.fitsHorizontally(wallWidth)) - return TextFormatting.RED + "Wall Design cannot fit the required width."; + return ChatFormatting.RED + "Wall Design cannot fit the required width."; if (!copiedDesign.fitsVertically(selectedRoom.height)) - return TextFormatting.RED + "Wall Design cannot fit the required height."; + return ChatFormatting.RED + "Wall Design cannot fit the required height."; RoomDesignMapping priorMapping = designPicker.getCachedRoom(selectedRoom); if (selectedFace.getAxis() == Axis.Z) @@ -218,7 +220,7 @@ public String handleRightClick() { return pasteSuccessful(); } - return TextFormatting.RED + "Couldn't apply " + copiedDesignType.getDisplayName() + " here."; + return ChatFormatting.RED + "Couldn't apply " + copiedDesignType.getDisplayName() + " here."; } return super.handleRightClick(); @@ -226,7 +228,7 @@ public String handleRightClick() { private String pasteSuccessful() { ArchitectManager.reAssemble(); - return "Applied " + TextFormatting.GREEN + copiedDesignType.getDisplayName(); + return "Applied " + ChatFormatting.GREEN + copiedDesignType.getDisplayName(); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CylinderRoomTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CylinderRoomTool.java index 9424ede..451a9a2 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CylinderRoomTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/CylinderRoomTool.java @@ -14,11 +14,11 @@ import com.simibubi.mightyarchitect.foundation.utility.RaycastHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult.Type; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult.Type; public class CylinderRoomTool extends RoomTool { @@ -32,10 +32,10 @@ public void init() { @Override public void updateSelection() { - ClientPlayerEntity player = Minecraft.getInstance().player; + LocalPlayer player = Minecraft.getInstance().player; transparentStacks.clear(); - BlockRayTraceResult trace = RaycastHelper.rayTraceRange(player.level, player, 75); + BlockHitResult trace = RaycastHelper.rayTraceRange(player.level, player, 75); if (trace != null && trace.getType() == Type.BLOCK) { BlockPos hit = trace.getBlockPos(); @@ -124,7 +124,7 @@ public void tickToolOutlines() { BlockPos previouslySelectedPos = (firstPosition != null) ? firstPosition.offset(anchor) : cursorPos; if (firstPosition == null) { - MightyClient.outliner.chaseAABB(outlineKey, new AxisAlignedBB(cursorPos)) + MightyClient.outliner.chaseAABB(outlineKey, new AABB(cursorPos)) .withFaceTexture(AllSpecialTextures.CHECKERED); return; } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/GroundPlanningToolBase.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/GroundPlanningToolBase.java index cbbb867..aada8f7 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/GroundPlanningToolBase.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/GroundPlanningToolBase.java @@ -16,14 +16,14 @@ import com.simibubi.mightyarchitect.foundation.utility.outliner.Outline.OutlineParams; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.item.BlockItemUseContext; -import net.minecraft.item.ItemUseContext; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.RayTraceResult.Type; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.core.BlockPos; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.HitResult.Type; +import net.minecraft.world.phys.Vec3; public abstract class GroundPlanningToolBase extends ComposerToolBase { @@ -40,17 +40,17 @@ public void init() { public void updateSelection() { super.updateSelection(); - ClientPlayerEntity player = Minecraft.getInstance().player; + LocalPlayer player = Minecraft.getInstance().player; transparentStacks.clear(); - BlockRayTraceResult trace = RaycastHelper.rayTraceRange(player.level, player, 75); + BlockHitResult trace = RaycastHelper.rayTraceRange(player.level, player, 75); if (trace != null && trace.getType() == Type.BLOCK) { BlockPos hit = new BlockPos(trace.getLocation()); makeStacksTransparent(player, hit); boolean replaceable = player.level.getBlockState(hit) - .canBeReplaced(new BlockItemUseContext(new ItemUseContext(player, Hand.MAIN_HAND, trace))); + .canBeReplaced(new BlockPlaceContext(new UseOnContext(player, InteractionHand.MAIN_HAND, trace))); if (trace.getDirection() .getAxis() .isVertical() && !replaceable) @@ -67,7 +67,7 @@ public void updateSelection() { } - protected void makeStacksTransparent(ClientPlayerEntity player, BlockPos hit) { + protected void makeStacksTransparent(LocalPlayer player, BlockPos hit) { if (!model.getGroundPlan() .isEmpty()) { final BlockPos target = hit; @@ -236,7 +236,7 @@ protected void tickRoofOutlines() { } - private Vector3d prevVertex; + private Vec3 prevVertex; private int vertexCounter; private String key; @@ -246,8 +246,8 @@ GroundPlanningToolBase key(String key) { } GroundPlanningToolBase vertex(double x, double y, double z, List lines) { - Vector3d previousVec = prevVertex; - prevVertex = new Vector3d(x, y, z); + Vec3 previousVec = prevVertex; + prevVertex = new Vec3(x, y, z); if (previousVec == null) return this; lines.add(MightyClient.outliner.chaseLine(key + vertexCounter, previousVec, prevVertex)); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/HeightTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/HeightTool.java index eaeb90e..df1471f 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/HeightTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/HeightTool.java @@ -5,7 +5,7 @@ import com.simibubi.mightyarchitect.control.compose.Room; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; public class HeightTool extends AbstractRoomFaceSelectionTool { @@ -25,12 +25,12 @@ public boolean handleMouseWheel(int scroll) { .getMaxFloorHeight()) { selectedRoom.height = model.getTheme() .getMaxFloorHeight(); - status("Height: " + TextFormatting.AQUA + selectedRoom.height + TextFormatting.WHITE + "m (max)"); + status("Height: " + ChatFormatting.AQUA + selectedRoom.height + ChatFormatting.WHITE + "m (max)"); return true; } if (selectedRoom.height + scroll < 1) { selectedRoom.height = 1; - status("Height: " + TextFormatting.AQUA + selectedRoom.height + TextFormatting.WHITE + "m (min)"); + status("Height: " + ChatFormatting.AQUA + selectedRoom.height + ChatFormatting.WHITE + "m (min)"); return true; } @@ -38,13 +38,13 @@ public boolean handleMouseWheel(int scroll) { selectedStack.forEachAbove(selectedRoom, room -> { room.y += scroll; }); - status("Height: " + TextFormatting.AQUA + selectedRoom.height + TextFormatting.WHITE + "m"); + status("Height: " + ChatFormatting.AQUA + selectedRoom.height + ChatFormatting.WHITE + "m"); } else { // Move selectedStack.forRoomAndEachAbove(selectedStack.lowest(), room -> { room.move(0, scroll, 0); }); - status("Position: " + TextFormatting.AQUA + selectedStack.lowest().y); + status("Position: " + ChatFormatting.AQUA + selectedStack.lowest().y); } return true; } @@ -65,4 +65,8 @@ public void updateSelection() { highlightRoom = Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL); } + @Override + public boolean numberInputSimulatesScrolls() { + return true; + } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/IComposerTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/IComposerTool.java index 1c6609a..92942bd 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/IComposerTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/IComposerTool.java @@ -1,18 +1,48 @@ package com.simibubi.mightyarchitect.control.compose.planner; -import com.mojang.blaze3d.matrix.MatrixStack; +import java.util.Arrays; +import java.util.Optional; + +import org.apache.commons.lang3.ArrayUtils; +import org.lwjgl.glfw.GLFW; + +import com.mojang.blaze3d.vertex.PoseStack; +import com.simibubi.mightyarchitect.foundation.utility.Keyboard; + +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; public interface IComposerTool { - static Object toolOutlineKey = new Object(); + Object toolOutlineKey = new Object(); - public String handleRightClick(); - public boolean handleMouseWheel(int scroll); - - public void tickToolOutlines(); - public void tickGroundPlanOutlines(); + String handleRightClick(); + boolean handleMouseWheel(int scroll); + + default void handleKeyInput(int key) { + if (!numberInputSimulatesScrolls()) + return; + + Optional mapping = Arrays.stream(Minecraft.getInstance().options.keyHotbarSlots).filter(keyMapping -> keyMapping.getKey().getValue() == key).findFirst(); + if (mapping.isEmpty()) + return; + + int number = ArrayUtils.indexOf(Minecraft.getInstance().options.keyHotbarSlots, mapping.get()) + 1; + if (Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_SHIFT) || Keyboard.isKeyDown(GLFW.GLFW_KEY_RIGHT_SHIFT)) { + number = number * -1; + } + + handleMouseWheel(number); + + } + default boolean numberInputSimulatesScrolls() { + return false; + } + + void tickToolOutlines(); + void tickGroundPlanOutlines(); - public void updateSelection(); - public void renderOverlay(MatrixStack ms); - public void init(); + void updateSelection(); + void renderOverlay(PoseStack ms); + void init(); } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/LayerStyleTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/LayerStyleTool.java index 938b9c4..655c043 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/LayerStyleTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/LayerStyleTool.java @@ -1,11 +1,17 @@ package com.simibubi.mightyarchitect.control.compose.planner; +import java.util.Arrays; import java.util.List; +import java.util.Optional; + +import org.apache.commons.lang3.ArrayUtils; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.design.DesignLayer; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; public class LayerStyleTool extends WallDecorationToolBase { @@ -29,9 +35,36 @@ public boolean handleMouseWheel(int amount) { selectedRoom.designLayer = newLayer; model.getTheme().getDesignPicker().rerollRoom(selectedRoom); ArchitectManager.reAssemble(); - status("Style: " + TextFormatting.AQUA + newLayer.getDisplayName()); + status("Style: " + ChatFormatting.AQUA + newLayer.getDisplayName()); return true; } + @Override + public void handleKeyInput(int key) { + if (selectedRoom == null) + return; + + Optional mapping = Arrays.stream(Minecraft.getInstance().options.keyHotbarSlots).filter(keyMapping -> keyMapping.getKey().getValue() == key).findFirst(); + if (mapping.isEmpty()) + return; + + DesignLayer currentLayer = selectedRoom.designLayer; + List layers = model.getTheme().getRoomLayers(); + + int index = ArrayUtils.indexOf(Minecraft.getInstance().options.keyHotbarSlots, mapping.get()); + if (index > layers.size()) + return; + + DesignLayer newLayer = layers.get(index); + + if (newLayer == currentLayer) + return; + + selectedRoom.designLayer = newLayer; + model.getTheme().getDesignPicker().rerollRoom(selectedRoom); + ArchitectManager.reAssemble(); + status("Style: " + ChatFormatting.AQUA + newLayer.getDisplayName()); + + } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/MoveReshapeTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/MoveReshapeTool.java index 1124036..6788448 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/MoveReshapeTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/MoveReshapeTool.java @@ -9,8 +9,8 @@ import com.simibubi.mightyarchitect.control.design.ThemeStatistics; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.core.BlockPos; public class MoveReshapeTool extends AbstractRoomFaceSelectionTool { @@ -78,16 +78,16 @@ public boolean handleMouseWheel(int scroll) { }); selectedStack.highest().roofType = statistics.fallbackRoof(selectedStack.highest(), selectedStack instanceof CylinderStack); - status("Size: " + TextFormatting.AQUA + selectedRoom.width + TextFormatting.WHITE + "x" - + TextFormatting.AQUA + selectedRoom.length); + status("Size: " + ChatFormatting.AQUA + selectedRoom.width + ChatFormatting.WHITE + "x" + + ChatFormatting.AQUA + selectedRoom.length); } else { // Move selectedStack.forRoomAndEachAbove(selectedRoom, room -> { BlockPos diff = BlockPos.ZERO.relative(selectedFace, scroll); room.move(-diff.getX(), 0, -diff.getZ()); }); - status("Position: " + TextFormatting.AQUA + selectedRoom.x + TextFormatting.WHITE + ", " - + TextFormatting.AQUA + selectedRoom.z); + status("Position: " + ChatFormatting.AQUA + selectedRoom.x + ChatFormatting.WHITE + ", " + + ChatFormatting.AQUA + selectedRoom.z); } return true; } @@ -95,4 +95,8 @@ public boolean handleMouseWheel(int scroll) { return super.handleMouseWheel(scroll); } + @Override + public boolean numberInputSimulatesScrolls() { + return true; + } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/PalettePainterTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/PalettePainterTool.java index 077082f..4369ca5 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/PalettePainterTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/PalettePainterTool.java @@ -1,11 +1,17 @@ package com.simibubi.mightyarchitect.control.compose.planner; +import java.util.Arrays; +import java.util.Optional; + +import org.apache.commons.lang3.ArrayUtils; import org.lwjgl.glfw.GLFW; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.client.KeyMapping; +import net.minecraft.client.Minecraft; public class PalettePainterTool extends WallDecorationToolBase { @@ -25,7 +31,7 @@ public void init() { public boolean handleMouseWheel(int amount) { if (model.getPrimary().getName().equals(model.getSecondary().getName())) { - status(TextFormatting.RED + "Choose a secondary Palette first [ G -> C ]"); + status(ChatFormatting.RED + "Choose a secondary Palette first [ G -> C ]"); return true; } @@ -48,7 +54,40 @@ public boolean handleMouseWheel(int amount) { status(selectedRoom.secondaryPalette ? "Secondary Palette" : "Primary Palette"); return true; } - + + @Override + public void handleKeyInput(int key) { + Optional mapping = Arrays.stream(Minecraft.getInstance().options.keyHotbarSlots).filter(keyMapping -> keyMapping.getKey().getValue() == key).findFirst(); + if (mapping.isEmpty()) + return; + + int index = ArrayUtils.indexOf(Minecraft.getInstance().options.keyHotbarSlots, mapping.get()); + if (index > 1) + return; + + if (model.getPrimary().getName().equals(model.getSecondary().getName())) { + status(ChatFormatting.RED + "Choose a secondary Palette first [ G -> C ]"); + return; + } + + if (selectedRoom == null) { + status("Point at the Room to modify."); + return; + } + + if (Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL)) { + // Paint Room + selectedRoom.secondaryPalette = index == 1; + + } else { + // Paint Stack + selectedStack.forEach(room -> room.secondaryPalette = index == 1); + } + + ArchitectManager.reAssemble(); + status(selectedRoom.secondaryPalette ? "Secondary Palette" : "Primary Palette"); + } + @Override public void updateSelection() { super.updateSelection(); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RerollTargetTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RerollTargetTool.java index 53ede1c..e0a0553 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RerollTargetTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RerollTargetTool.java @@ -5,7 +5,7 @@ import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.Direction; +import net.minecraft.core.Direction; public class RerollTargetTool extends WallDecorationToolBase { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoofTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoofTool.java index 84f0af8..abe596a 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoofTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoofTool.java @@ -4,7 +4,7 @@ import com.simibubi.mightyarchitect.control.compose.Room; import com.simibubi.mightyarchitect.control.design.DesignType; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; public class RoofTool extends AbstractRoomFaceSelectionTool { @@ -51,9 +51,9 @@ public void updateSelection() { if (selectedStack == null) return; if (selectedStack.highest().quadFacadeRoof) - status("Roof Type: " + TextFormatting.AQUA + "4-Facade Gable Roof"); + status("Roof Type: " + ChatFormatting.AQUA + "4-Facade Gable Roof"); else - status("Roof Type: " + TextFormatting.AQUA + selectedStack.highest().roofType.getDisplayName()); + status("Roof Type: " + ChatFormatting.AQUA + selectedStack.highest().roofType.getDisplayName()); } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoomTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoomTool.java index 32e9cd6..e8c9b65 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoomTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/RoomTool.java @@ -16,8 +16,8 @@ import com.simibubi.mightyarchitect.control.design.ThemeStatistics; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; public class RoomTool extends GroundPlanningToolBase { @@ -54,7 +54,7 @@ public String handleRightClick() { } else { return createRoom(ArchitectManager.getModel() - .getGroundPlan()); + .getGroundPlan()); } } @@ -66,7 +66,7 @@ protected String createRoom(GroundPlan groundPlan) { DesignTheme theme = groundPlan.theme; ThemeStatistics stats = theme.getStatistics(); boolean hasFoundation = theme.getLayers() - .contains(DesignLayer.Foundation); + .contains(DesignLayer.Foundation); room.designLayer = hasFoundation ? DesignLayer.Foundation : DesignLayer.Regular; int facadeWidth = Math.min(room.width, room.length); @@ -106,7 +106,7 @@ protected boolean adjustHeightForIntersection(GroundPlan groundPlan, Room room) groundPlan.forEachRoom(r -> { if (r.intersects(room) && !(r.y + r.height <= room.y || room.y + room.height <= r.y) - && (biggestRoom.getValue() == null + && (biggestRoom.getValue() == null || biggestRoom.getValue().width * biggestRoom.getValue().length < r.width * r.length)) { biggestRoom.setValue(r); } @@ -130,7 +130,7 @@ public static void increaseMatchingOthers(GroundPlan groundPlan, Stack stack) { if (r == added) return; if (r.intersects(added) && r.y <= added.y && r.y + r.height > added.y && (biggestRoom.getValue() == null - || biggestRoom.getValue().width * biggestRoom.getValue().length < r.width * r.length)) { + || biggestRoom.getValue().width * biggestRoom.getValue().length < r.width * r.length)) { biggestRoom.setValue(r); } }); @@ -146,13 +146,13 @@ public boolean handleMouseWheel(int scroll) { if (scroll > 0) { increaseMatchingOthers(ArchitectManager.getModel() - .getGroundPlan(), lastAddedStack); + .getGroundPlan(), lastAddedStack); } else { lastAddedStack.decrease(); if (lastAddedStack.floors() == 0) { ArchitectManager.getModel() - .getGroundPlan() - .remove(lastAddedStack); + .getGroundPlan() + .remove(lastAddedStack); lastAddedStack = null; } } @@ -213,7 +213,7 @@ public void tickToolOutlines() { return; BlockPos anchor = ArchitectManager.getModel() - .getAnchor(); + .getAnchor(); BlockPos cursorPos = (anchor != null) ? selectedPosition.offset(anchor) : selectedPosition; BlockPos previouslySelectedPos = (firstPosition != null) ? firstPosition.offset(anchor) : cursorPos; @@ -223,8 +223,9 @@ public void tickToolOutlines() { selection.length += 1; MightyClient.outliner.chaseAABB(outlineKey, selection.toAABB()) - .withFaceTexture(AllSpecialTextures.CHECKERED) - .colored(0); + .withFaceTexture(AllSpecialTextures.CHECKERED) + .withAlpha(0.75f) + .colored(0x0); if (firstPosition == null) return; @@ -242,11 +243,11 @@ protected void drawTextAroundBounds(Cuboid selection) { } private void chaseText(Object key, float x, float y, float z, String text) { - MightyClient.outliner.chaseText(key, new Vector3d(x, y, z), text) - .colored(0) - .coloredFaces(0xffffff) - .disableNormals() - .withFaceTexture(AllSpecialTextures.BLANK); + MightyClient.outliner.chaseText(key, new Vec3(x, y, z), text) + .colored(0) + .coloredFaces(0xffffff) + .disableNormals() + .withFaceTexture(AllSpecialTextures.BLANK); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/StackTool.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/StackTool.java index 434cd06..46946de 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/StackTool.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/StackTool.java @@ -9,7 +9,7 @@ import com.simibubi.mightyarchitect.control.compose.Stack; import com.simibubi.mightyarchitect.foundation.utility.Keyboard; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; public class StackTool extends AbstractRoomFaceSelectionTool { @@ -68,7 +68,7 @@ public void updateSelection() { highlightRoom = Keyboard.isKeyDown(GLFW.GLFW_KEY_LEFT_CONTROL); if (selectedStack != null) - status("Floors: " + TextFormatting.AQUA + selectedStack.floors()); + status("Floors: " + ChatFormatting.AQUA + selectedStack.floors()); } public static void insertMatchingOthers(GroundPlan groundPlan, Stack stack, int index) { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/WallDecorationToolBase.java b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/WallDecorationToolBase.java index fa4846d..05219bf 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/WallDecorationToolBase.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/compose/planner/WallDecorationToolBase.java @@ -4,9 +4,9 @@ import com.simibubi.mightyarchitect.control.compose.Cuboid; import com.simibubi.mightyarchitect.control.compose.Room; -import net.minecraft.util.Direction; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.phys.AABB; public abstract class WallDecorationToolBase extends ComposerToolBase { @@ -50,8 +50,12 @@ public void tickToolOutlines() { max = max.offset(0, selectedRoom.height, 0); } - MightyClient.outliner.chaseAABB(toolOutlineKey, new AxisAlignedBB(min.getX() - 1 / 2d, - min.getY() + 1 / 4d, min.getZ() - 1 / 2d, max.getX() + 1 / 2d, max.getY(), max.getZ() + 1 / 2d)).lineWidth(1/8f); + //highlight room + MightyClient.outliner.chaseAABB(toolOutlineKey, new AABB(min.getX() - 1 / 2d, + min.getY() + 1 / 4d, min.getZ() - 1 / 2d, max.getX() + 1 / 2d, max.getY(), max.getZ() + 1 / 2d)) + .lineWidth(1/8f) + .colored(0xffffff) + .withAlpha(1); return; } @@ -84,8 +88,13 @@ public void tickToolOutlines() { BlockPos max = stack.getOrigin() .offset(stack.getSize()) .offset(model.getAnchor()); - MightyClient.outliner.chaseAABB(toolOutlineKey, new AxisAlignedBB(min.getX() - 1 / 2d, min.getY() + 1 / 4d, - min.getZ() - 1 / 2d, max.getX() + 1 / 2d, max.getY(), max.getZ() + 1 / 2d)).lineWidth(1/8f); + + //highlight stack + MightyClient.outliner.chaseAABB(toolOutlineKey, new AABB(min.getX() - 1 / 2d, min.getY() + 1 / 4d, + min.getZ() - 1 / 2d, max.getX() + 1 / 2d, max.getY(), max.getZ() + 1 / 2d)) + .lineWidth(1/8f) + .colored(0xffffff) + .withAlpha(1); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignExporter.java b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignExporter.java index eac5f5b..7d99bb5 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignExporter.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignExporter.java @@ -18,16 +18,16 @@ import com.simibubi.mightyarchitect.foundation.utility.FilesHelper; import com.simibubi.mightyarchitect.networking.PlaceSignPacket; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.ListNBT; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.tileentity.SignTileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.SignBlockEntity; +import net.minecraft.world.level.block.state.BlockState; public class DesignExporter { @@ -41,7 +41,7 @@ public class DesignExporter { public static boolean changed = true; - public static String exportDesign(World worldIn, BlockPos anchor) { + public static String exportDesign(Level worldIn, BlockPos anchor) { BlockPos layerDefAnchor = anchor; boolean found = false; for (int range = 1; range < 100 && !found; range++) { @@ -94,13 +94,13 @@ public static String exportDesign(World worldIn, BlockPos anchor) { PhaseEditTheme.resetVisualization(); // Assemble nbt - CompoundNBT compound = new CompoundNBT(); - compound.put("Size", NBTUtil.writeBlockPos(size)); + CompoundTag compound = new CompoundTag(); + compound.put("Size", NbtUtils.writeBlockPos(size)); - ListNBT layers = new ListNBT(); + ListTag layers = new ListTag(); for (int y = 0; y < size.getY(); y++) { - CompoundNBT layerTag = new CompoundNBT(); + CompoundTag layerTag = new CompoundTag(); DesignSliceTrait trait = DesignSliceTrait.values()[markerValueAt(worldIn, layerDefAnchor.above(y))]; layerTag.putString("Trait", trait.name()); @@ -114,7 +114,7 @@ public static String exportDesign(World worldIn, BlockPos anchor) { if (block == null && blockState.getBlock() != Blocks.AIR) { Minecraft.getInstance().player.displayClientMessage( - new StringTextComponent(blockState.getBlock() + new TextComponent(blockState.getBlock() .getDescriptionId() + " @" + pos.getX() + "," + pos.getY() + "," + pos.getZ() + " does not belong to the Scanner Palette"), false); return "Export failed"; @@ -187,8 +187,8 @@ public static String exportDesign(World worldIn, BlockPos anchor) { BlockPos signPos = anchor.above(); if (worldIn.getBlockState(signPos) .getBlock() == Blocks.SPRUCE_SIGN) { - SignTileEntity sign = (SignTileEntity) worldIn.getBlockEntity(signPos); - filename = sign.getMessage(1) + SignBlockEntity sign = (SignBlockEntity) worldIn.getBlockEntity(signPos); + filename = sign.getMessage(1, false) .getString(); designPath = typePath + "/" + filename; @@ -228,11 +228,11 @@ public static DesignTheme getTheme() { return theme; } - private static boolean isMarker(World worldIn, BlockPos pos) { + private static boolean isMarker(Level worldIn, BlockPos pos) { return AllBlocks.SLICE_MARKER.typeOf(worldIn.getBlockState(pos)); } - private static int markerValueAt(World worldIn, BlockPos pos) { + private static int markerValueAt(Level worldIn, BlockPos pos) { return worldIn.getBlockState(pos) .getValue(SliceMarkerBlock.VARIANT) .ordinal(); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignResourceLoader.java b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignResourceLoader.java index 541c845..ea2dddc 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignResourceLoader.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignResourceLoader.java @@ -16,9 +16,9 @@ import com.simibubi.mightyarchitect.control.design.partials.Design; import com.simibubi.mightyarchitect.foundation.utility.FilesHelper; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.ListNBT; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtIo; public class DesignResourceLoader { @@ -51,7 +51,7 @@ public static Map>> loadDesignsForTheme public static Map>> loadExternalDesignsForTheme(DesignTheme theme) { final Map>> designMap = new HashMap<>(); boolean isFile = theme.getFilePath().endsWith(".theme") || theme.getFilePath().endsWith(".json"); - final Map>> compoundMap = isFile ? loadThemeFromThemeFile(theme) : loadThemeFromFolder(theme); + final Map>> compoundMap = isFile ? loadThemeFromThemeFile(theme) : loadThemeFromFolder(theme); theme.getLayers().forEach(layer -> { if (!compoundMap.containsKey(layer)) @@ -71,16 +71,16 @@ public static Map>> loadExternalDesigns return designMap; } - private static Map>> loadThemeFromThemeFile(DesignTheme theme) { - final Map>> compoundMap = new HashMap<>(); + private static Map>> loadThemeFromThemeFile(DesignTheme theme) { + final Map>> compoundMap = new HashMap<>(); - CompoundNBT importedThemeFile = new CompoundNBT(); + CompoundTag importedThemeFile = new CompoundTag(); if (theme.getFilePath().endsWith(".theme")) { try { InputStream inputStream = Files.newInputStream(Paths.get("themes/" + theme.getFilePath()), StandardOpenOption.READ); - importedThemeFile = CompressedStreamTools.readCompressed(inputStream); + importedThemeFile = NbtIo.readCompressed(inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); @@ -89,21 +89,21 @@ private static Map>> loadThemeFrom importedThemeFile = FilesHelper.loadJsonAsNBT("themes/" + theme.getFilePath()); } - final CompoundNBT themeFile = importedThemeFile; + final CompoundTag themeFile = importedThemeFile; if (themeFile.contains("Designs")) { theme.getLayers().forEach(layer -> { - final HashMap> typeMap = new HashMap<>(); + final HashMap> typeMap = new HashMap<>(); theme.getTypes().forEach(type -> { - Set designs = new HashSet<>(); - CompoundNBT tagLayers = themeFile.getCompound("Designs"); + Set designs = new HashSet<>(); + CompoundTag tagLayers = themeFile.getCompound("Designs"); if (tagLayers.contains(layer.name())) { - CompoundNBT tagTypes = tagLayers.getCompound(layer.name()); + CompoundTag tagTypes = tagLayers.getCompound(layer.name()); if (tagTypes.contains(type.name())) { - ListNBT tagDesigns = tagTypes.getList(type.name(), 10); - tagDesigns.forEach(tag -> designs.add((CompoundNBT) tag)); + ListTag tagDesigns = tagTypes.getList(type.name(), 10); + tagDesigns.forEach(tag -> designs.add((CompoundTag) tag)); } } typeMap.put(type, designs); @@ -116,8 +116,8 @@ private static Map>> loadThemeFrom return compoundMap; } - public static Map>> loadThemeFromFolder(DesignTheme theme) { - final Map>> compoundMap = new HashMap<>(); + public static Map>> loadThemeFromFolder(DesignTheme theme) { + final Map>> compoundMap = new HashMap<>(); String folderPath = "themes"; String themePath = folderPath + "/" + theme.getFilePath(); @@ -127,7 +127,7 @@ public static Map>> loadThemeFromF theme.getLayers().forEach(layer -> { - final HashMap> typeMap = new HashMap<>(); + final HashMap> typeMap = new HashMap<>(); theme.getTypes().forEach(type -> { String path = folderPath + "/" + theme.getFilePath() + "/" + layer.getFilePath() + "/" @@ -150,7 +150,7 @@ private static Set importDesigns(DesignTheme theme, DesignLayer layer, D final String path = folderPath + "/design" + ((index == 0) ? "" : "_" + index) + ".json"; if (TheMightyArchitect.class.getClassLoader().getResource(path) == null) break; - final CompoundNBT designTag = FilesHelper.loadJsonResourceAsNBT(path); + final CompoundTag designTag = FilesHelper.loadJsonResourceAsNBT(path); designs.add(type.getDesign().fromNBT(designTag)); index++; } @@ -158,9 +158,9 @@ private static Set importDesigns(DesignTheme theme, DesignLayer layer, D return designs; } - private static Set importExternalDesigns(DesignTheme theme, DesignLayer layer, DesignType type, + private static Set importExternalDesigns(DesignTheme theme, DesignLayer layer, DesignType type, String folderPath) { - final Set designs = new HashSet<>(); + final Set designs = new HashSet<>(); if (!Files.exists(Paths.get(folderPath))) return designs; @@ -168,7 +168,7 @@ private static Set importExternalDesigns(DesignTheme theme, DesignL try { DirectoryStream newDirectoryStream = Files.newDirectoryStream(Paths.get(folderPath)); for (Path path : newDirectoryStream) { - final CompoundNBT designTag = FilesHelper.loadJsonAsNBT(path.toString()); + final CompoundTag designTag = FilesHelper.loadJsonAsNBT(path.toString()); designs.add(designTag); } newDirectoryStream.close(); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignSlice.java b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignSlice.java index 61ee93f..0c91321 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignSlice.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignSlice.java @@ -9,14 +9,14 @@ import com.simibubi.mightyarchitect.control.palette.Palette; import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.IStringSerializable; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.StringRepresentable; public class DesignSlice { - public enum DesignSliceTrait implements IStringSerializable { + public enum DesignSliceTrait implements StringRepresentable { Standard("-> Use this slice once"), CloneOnce("-> Duplicate this slice if necessary"), CloneThrice("-> Duplicate up to 3 times"), @@ -49,7 +49,7 @@ public DesignSliceTrait cycle(int amount) { private Palette[][] blocks; private BlockOrientation[][] orientations; - public static DesignSlice fromNBT(CompoundNBT sliceTag) { + public static DesignSlice fromNBT(CompoundTag sliceTag) { DesignSlice slice = new DesignSlice(); slice.trait = DesignSliceTrait.valueOf(sliceTag.getString("Trait")); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignTheme.java b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignTheme.java index 880eaaa..cb408a4 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/DesignTheme.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/DesignTheme.java @@ -10,9 +10,9 @@ import com.simibubi.mightyarchitect.control.design.partials.Design; import com.simibubi.mightyarchitect.control.palette.PaletteDefinition; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.ListNBT; -import net.minecraft.nbt.StringNBT; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.StringTag; public class DesignTheme { @@ -151,17 +151,17 @@ public void setTypes(List types) { this.types = types; } - public CompoundNBT asTagCompound() { - CompoundNBT compound = new CompoundNBT(); + public CompoundTag asTagCompound() { + CompoundTag compound = new CompoundTag(); compound.putString("Name", getDisplayName()); compound.putString("Designer", getDesigner()); - ListNBT layers = new ListNBT(); - ListNBT types = new ListNBT(); + ListTag layers = new ListTag(); + ListTag types = new ListTag(); - this.layers.forEach(layer -> layers.add(StringNBT.valueOf(layer.name()))); - this.types.forEach(type -> types.add(StringNBT.valueOf(type.name()))); + this.layers.forEach(layer -> layers.add(StringTag.valueOf(layer.name()))); + this.types.forEach(type -> types.add(StringTag.valueOf(type.name()))); compound.put("Layers", layers); compound.put("Types", types); @@ -170,7 +170,7 @@ public CompoundNBT asTagCompound() { return compound; } - public static DesignTheme fromNBT(CompoundNBT compound) { + public static DesignTheme fromNBT(CompoundTag compound) { if (compound == null) return null; @@ -182,8 +182,8 @@ public static DesignTheme fromNBT(CompoundNBT compound) { if (compound.contains("Maximum Room Height")) theme.maxFloorHeight = compound.getInt("Maximum Room Height"); - compound.getList("Layers", 8).forEach(s -> theme.layers.add(DesignLayer.valueOf(((StringNBT) s).getAsString()))); - compound.getList("Types", 8).forEach(s -> theme.types.add(DesignType.valueOf(((StringNBT) s).getAsString()))); + compound.getList("Layers", 8).forEach(s -> theme.layers.add(DesignLayer.valueOf(((StringTag) s).getAsString()))); + compound.getList("Types", 8).forEach(s -> theme.types.add(DesignType.valueOf(((StringTag) s).getAsString()))); theme.updateRoomLayers(); return theme; diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/Sketch.java b/src/main/java/com/simibubi/mightyarchitect/control/design/Sketch.java index 69cf4a5..758efe8 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/Sketch.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/Sketch.java @@ -15,7 +15,7 @@ import com.simibubi.mightyarchitect.control.palette.Palette; import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class Sketch { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStatistics.java b/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStatistics.java index 3655f87..c36d2f2 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStatistics.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStatistics.java @@ -6,7 +6,7 @@ import com.simibubi.mightyarchitect.foundation.utility.DesignHelper; import net.minecraft.client.Minecraft; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.network.chat.TextComponent; public class ThemeStatistics { @@ -178,7 +178,7 @@ public void sendToPlayer() { } private void chat(String message) { - Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(message), false); + Minecraft.getInstance().player.displayClientMessage(new TextComponent(message), false); } public DesignType fallbackRoof(Room room, boolean tower) { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStorage.java b/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStorage.java index 69641f4..2371734 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStorage.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeStorage.java @@ -18,9 +18,9 @@ import com.simibubi.mightyarchitect.foundation.utility.FilesHelper; import net.minecraft.client.Minecraft; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.CompressedStreamTools; -import net.minecraft.nbt.ListNBT; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtIo; public class ThemeStorage { @@ -110,40 +110,40 @@ public static void exportTheme(DesignTheme theme) { String palettePath = folderPath + "/" + foldername + "/palette.json"; FilesHelper.saveTagCompoundAsJson(theme.getDefaultPalette() - .writeToNBT(new CompoundNBT()), palettePath); + .writeToNBT(new CompoundTag()), palettePath); String palette2Path = folderPath + "/" + foldername + "/palette2.json"; FilesHelper.saveTagCompoundAsJson(theme.getDefaultSecondaryPalette() - .writeToNBT(new CompoundNBT()), palette2Path); + .writeToNBT(new CompoundTag()), palette2Path); } public static String exportThemeFullyAsFile(DesignTheme theme, boolean compressed) { String folderPath = "themes/export"; FilesHelper.createFolderIfMissing(folderPath); - CompoundNBT massiveThemeTag = new CompoundNBT(); + CompoundTag massiveThemeTag = new CompoundTag(); massiveThemeTag.put("Theme", theme.asTagCompound()); massiveThemeTag.put("Palette", theme.getDefaultPalette() - .writeToNBT(new CompoundNBT())); + .writeToNBT(new CompoundTag())); massiveThemeTag.put("SecondaryPalette", theme.getDefaultSecondaryPalette() - .writeToNBT(new CompoundNBT())); + .writeToNBT(new CompoundTag())); - Map>> designFiles = + Map>> designFiles = DesignResourceLoader.loadThemeFromFolder(theme); - CompoundNBT layers = new CompoundNBT(); + CompoundTag layers = new CompoundTag(); for (DesignLayer layer : theme.getLayers()) { if (!designFiles.containsKey(layer)) continue; - CompoundNBT types = new CompoundNBT(); + CompoundTag types = new CompoundTag(); for (DesignType type : theme.getTypes()) { if (!designFiles.get(layer) .containsKey(type)) continue; - ListNBT designs = new ListNBT(); - for (CompoundNBT tag : designFiles.get(layer) + ListTag designs = new ListTag(); + for (CompoundTag tag : designFiles.get(layer) .get(type)) designs.add(tag); types.put(type.name(), designs); @@ -157,7 +157,7 @@ public static String exportThemeFullyAsFile(DesignTheme theme, boolean compresse Path path = Paths.get(folderPath + "/" + theme.getFilePath() + ".theme"); Files.deleteIfExists(path); OutputStream outputStream = Files.newOutputStream(path, StandardOpenOption.CREATE); - CompressedStreamTools.writeCompressed(massiveThemeTag, outputStream); + NbtIo.writeCompressed(massiveThemeTag, outputStream); outputStream.close(); } catch (IOException e) { e.printStackTrace(); @@ -174,9 +174,9 @@ public static DesignTheme importThemeFullyFromFile(String path) { } private static DesignTheme loadInternalTheme(String themeFolder) { - CompoundNBT themeCompound = FilesHelper.loadJsonResourceAsNBT("themes/" + themeFolder + "/theme.json"); - CompoundNBT paletteCompound = FilesHelper.loadJsonResourceAsNBT("themes/" + themeFolder + "/palette.json"); - CompoundNBT palette2Compound = FilesHelper.loadJsonResourceAsNBT("themes/" + themeFolder + "/palette2.json"); + CompoundTag themeCompound = FilesHelper.loadJsonResourceAsNBT("themes/" + themeFolder + "/theme.json"); + CompoundTag paletteCompound = FilesHelper.loadJsonResourceAsNBT("themes/" + themeFolder + "/palette.json"); + CompoundTag palette2Compound = FilesHelper.loadJsonResourceAsNBT("themes/" + themeFolder + "/palette2.json"); DesignTheme theme = DesignTheme.fromNBT(themeCompound); theme.setFilePath(themeFolder); theme.setImported(false); @@ -199,21 +199,21 @@ private static void importThemes() { String themeFolder = path.getFileName() .toString(); - CompoundNBT themeCompound; - CompoundNBT paletteCompound; - CompoundNBT secondaryPaletteCompound = null; + CompoundTag themeCompound; + CompoundTag paletteCompound; + CompoundTag secondaryPaletteCompound = null; if (themeFolder.equals("export")) continue; if (themeFolder.endsWith(".theme") || themeFolder.endsWith(".json")) { - CompoundNBT themeFile = new CompoundNBT(); + CompoundTag themeFile = new CompoundTag(); if (themeFolder.endsWith(".theme")) { try { InputStream inputStream = Files.newInputStream(Paths.get(folderPath + "/" + themeFolder), StandardOpenOption.READ); - themeFile = CompressedStreamTools.readCompressed(inputStream); + themeFile = NbtIo.readCompressed(inputStream); inputStream.close(); } catch (IOException e) { e.printStackTrace(); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeValidator.java b/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeValidator.java index 827d7a8..d2602ce 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeValidator.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/ThemeValidator.java @@ -7,22 +7,22 @@ import com.simibubi.mightyarchitect.foundation.utility.DesignHelper; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; public class ThemeValidator { - static List complaints; + static List complaints; public static void check(DesignTheme theme) { - ClientPlayerEntity player = Minecraft.getInstance().player; + LocalPlayer player = Minecraft.getInstance().player; for (int i = 0; i < 3; i++) - player.displayClientMessage(new StringTextComponent(" "), false); - player.displayClientMessage(new StringTextComponent(TextFormatting.AQUA + "--> Validation on " - + TextFormatting.BLUE + TextFormatting.BOLD + theme.getDisplayName() + TextFormatting.AQUA + " <--"), + player.displayClientMessage(new TextComponent(" "), false); + player.displayClientMessage(new TextComponent(ChatFormatting.AQUA + "--> Validation on " + + ChatFormatting.BLUE + ChatFormatting.BOLD + theme.getDisplayName() + ChatFormatting.AQUA + " <--"), false); theme.clearDesigns(); ThemeStatistics stats = theme.getStatistics(); @@ -144,18 +144,18 @@ public static void check(DesignTheme theme) { if (complaints.size() > 0) { player.displayClientMessage( - new StringTextComponent(TextFormatting.GOLD + "The Following Designs are missing:"), false); - for (ITextComponent text : complaints) { + new TextComponent(ChatFormatting.GOLD + "The Following Designs are missing:"), false); + for (Component text : complaints) { player.displayClientMessage(text, false); } player.displayClientMessage( - new StringTextComponent( - TextFormatting.GOLD + "Try and add these missing designs or exclude their type from your theme."), + new TextComponent( + ChatFormatting.GOLD + "Try and add these missing designs or exclude their type from your theme."), false); } else { player.displayClientMessage( - new StringTextComponent(TextFormatting.GREEN + "For prior traits no missing designs have been found."), + new TextComponent(ChatFormatting.GREEN + "For prior traits no missing designs have been found."), false); } @@ -166,7 +166,7 @@ private static boolean exists(DesignQuery query) { } private static void alert(String message) { - complaints.add(new StringTextComponent("-> " + TextFormatting.RED + message)); + complaints.add(new TextComponent("-> " + ChatFormatting.RED + message)); } private static String glue(List heights) { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Corner.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Corner.java index 6e30efc..318388e 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Corner.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Corner.java @@ -6,15 +6,13 @@ import com.simibubi.mightyarchitect.control.design.DesignSlice; import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; - -import com.simibubi.mightyarchitect.control.design.partials.Design.DesignInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; public class Corner extends Design { @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { Corner corner = new Corner(); corner.applyNBT(compound); return corner; diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Design.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Design.java index dfa21e5..ec60059 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Design.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Design.java @@ -10,10 +10,10 @@ import com.simibubi.mightyarchitect.control.design.DesignSlice.DesignSliceTrait; import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.ListNBT; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.nbt.NbtUtils; public abstract class Design { @@ -24,17 +24,17 @@ public abstract class Design { protected int defaultWidth; protected int yShift; - public abstract Design fromNBT(CompoundNBT compound); + public abstract Design fromNBT(CompoundTag compound); - protected void applyNBT(CompoundNBT compound) { - size = NBTUtil.readBlockPos(compound.getCompound("Size")); + protected void applyNBT(CompoundTag compound) { + size = NbtUtils.readBlockPos(compound.getCompound("Size")); defaultWidth = size.getX(); slices = new DesignSlice[size.getY()]; defaultHeight = 0; yShift = 0; heights = ImmutableSet.of(0); - ListNBT sliceTagList = compound.getList("Layers", 10); + ListTag sliceTagList = compound.getList("Layers", 10); for (int sliceIndex = 0; sliceIndex < slices.length; sliceIndex++) { DesignSlice slice = DesignSlice.fromNBT(sliceTagList.getCompound(sliceIndex)); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Facade.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Facade.java index 9290e04..4fba748 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Facade.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Facade.java @@ -1,13 +1,11 @@ package com.simibubi.mightyarchitect.control.design.partials; -import net.minecraft.nbt.CompoundNBT; - -import com.simibubi.mightyarchitect.control.design.partials.Wall.ExpandBehaviour; +import net.minecraft.nbt.CompoundTag; public class Facade extends Wall { @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { Facade facade = new Facade(); facade.expandBehaviour = ExpandBehaviour.None; facade.applyNBT(compound); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/FlatRoof.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/FlatRoof.java index edc92a8..fdbb73e 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/FlatRoof.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/FlatRoof.java @@ -6,17 +6,15 @@ import com.simibubi.mightyarchitect.control.design.DesignSlice; import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; - -import com.simibubi.mightyarchitect.control.design.partials.Design.DesignInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; public class FlatRoof extends Design { protected int margin; @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { FlatRoof flatRoof = new FlatRoof(); flatRoof.applyNBT(compound); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Roof.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Roof.java index f23ad0e..103fd50 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Roof.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Roof.java @@ -6,17 +6,15 @@ import com.simibubi.mightyarchitect.control.design.DesignSlice; import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; - -import com.simibubi.mightyarchitect.control.design.partials.Design.DesignInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; public class Roof extends Design { private static final int CROSS_ROOF_DEPTH = -1; @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { Roof roof = new Roof(); roof.applyNBT(compound); roof.defaultWidth = compound.getInt("Roofspan"); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Tower.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Tower.java index ca48b5f..47a203a 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Tower.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Tower.java @@ -4,17 +4,15 @@ import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; - -import com.simibubi.mightyarchitect.control.design.partials.Design.DesignInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; public class Tower extends Design { public int radius; @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { Tower tower = new Tower(); tower.applyNBT(compound); tower.radius = compound.getInt("Radius"); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerFlatRoof.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerFlatRoof.java index 0f2a627..fd714ff 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerFlatRoof.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerFlatRoof.java @@ -1,11 +1,11 @@ package com.simibubi.mightyarchitect.control.design.partials; -import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.CompoundTag; public class TowerFlatRoof extends TowerRoof { @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { TowerFlatRoof towerRoof = new TowerFlatRoof(); towerRoof.applyNBT(compound); towerRoof.radius = compound.getInt("Radius"); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerRoof.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerRoof.java index 57d19b8..b2a6f58 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerRoof.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/TowerRoof.java @@ -4,15 +4,13 @@ import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; - -import com.simibubi.mightyarchitect.control.design.partials.Design.DesignInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; public class TowerRoof extends Tower { @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { TowerRoof towerRoof = new TowerRoof(); towerRoof.applyNBT(compound); towerRoof.radius = compound.getInt("Radius"); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Trim.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Trim.java index ffab009..5d4174a 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Trim.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Trim.java @@ -1,11 +1,11 @@ package com.simibubi.mightyarchitect.control.design.partials; -import net.minecraft.nbt.CompoundNBT; +import net.minecraft.nbt.CompoundTag; public class Trim extends Design { @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { Trim trim = new Trim(); trim.applyNBT(compound); return trim; diff --git a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Wall.java b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Wall.java index ded04e1..ec8e501 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Wall.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/design/partials/Wall.java @@ -4,10 +4,8 @@ import com.simibubi.mightyarchitect.control.palette.PaletteBlockInfo; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.util.math.BlockPos; - -import com.simibubi.mightyarchitect.control.design.partials.Design.DesignInstance; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; public class Wall extends Design { @@ -18,7 +16,7 @@ public enum ExpandBehaviour { public ExpandBehaviour expandBehaviour; @Override - public Design fromNBT(CompoundNBT compound) { + public Design fromNBT(CompoundTag compound) { Wall wall = new Wall(); wall.applyNBT(compound); wall.expandBehaviour = ExpandBehaviour.valueOf(compound.getString("ExpandBehaviour")); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/palette/BlockOrientation.java b/src/main/java/com/simibubi/mightyarchitect/control/palette/BlockOrientation.java index 03efe4d..1279b94 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/palette/BlockOrientation.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/palette/BlockOrientation.java @@ -1,17 +1,17 @@ package com.simibubi.mightyarchitect.control.palette; -import net.minecraft.block.BlockState; -import net.minecraft.block.SlabBlock; -import net.minecraft.block.TrapDoorBlock; import net.minecraft.client.Minecraft; -import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.state.properties.Half; -import net.minecraft.state.properties.SlabType; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.Direction.AxisDirection; -import net.minecraft.util.Rotation; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.world.level.block.Rotation; +import net.minecraft.world.level.block.SlabBlock; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.Half; +import net.minecraft.world.level.block.state.properties.SlabType; public enum BlockOrientation { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteBlockInfo.java b/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteBlockInfo.java index ad9b0dc..a12fe45 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteBlockInfo.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteBlockInfo.java @@ -1,6 +1,6 @@ package com.simibubi.mightyarchitect.control.palette; -import net.minecraft.block.BlockState; +import net.minecraft.world.level.block.state.BlockState; public class PaletteBlockInfo { diff --git a/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteDefinition.java b/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteDefinition.java index 25de5df..c640636 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteDefinition.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteDefinition.java @@ -4,18 +4,18 @@ import java.util.HashMap; import java.util.Map; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.LeavesBlock; -import net.minecraft.block.TrapDoorBlock; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.state.DirectionProperty; -import net.minecraft.state.Property; -import net.minecraft.state.properties.BlockStateProperties; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.LeavesBlock; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.block.state.properties.BlockStateProperties; +import net.minecraft.world.level.block.state.properties.DirectionProperty; +import net.minecraft.world.level.block.state.properties.Property; public class PaletteDefinition { @@ -103,14 +103,14 @@ public String getName() { return name; } - public CompoundNBT writeToNBT(CompoundNBT compound) { - compound = (compound == null) ? new CompoundNBT() : compound; - CompoundNBT palette = new CompoundNBT(); + public CompoundTag writeToNBT(CompoundTag compound) { + compound = (compound == null) ? new CompoundTag() : compound; + CompoundTag palette = new CompoundTag(); palette.putString("Name", getName()); Palette[] values = Palette.values(); for (int i = 0; i < values.length; i++) { - CompoundNBT state = NBTUtil.writeBlockState(get(values[i])); + CompoundTag state = NbtUtils.writeBlockState(get(values[i])); palette.put(values[i].name(), state); } @@ -118,16 +118,16 @@ public CompoundNBT writeToNBT(CompoundNBT compound) { return compound; } - public static PaletteDefinition fromNBT(CompoundNBT compound) { + public static PaletteDefinition fromNBT(CompoundTag compound) { PaletteDefinition palette = defaultPalette().clone(); if (compound != null) { if (compound.contains("Palette")) { - CompoundNBT paletteTag = compound.getCompound("Palette"); + CompoundTag paletteTag = compound.getCompound("Palette"); palette.name = paletteTag.getString("Name"); for (Palette key : Palette.values()) { if (paletteTag.contains(key.name())) { - palette.put(key, NBTUtil.readBlockState(paletteTag.getCompound(key.name()))); + palette.put(key, NbtUtils.readBlockState(paletteTag.getCompound(key.name()))); } } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteStorage.java b/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteStorage.java index 4082dc0..81a7844 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteStorage.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/palette/PaletteStorage.java @@ -18,8 +18,8 @@ import com.simibubi.mightyarchitect.TheMightyArchitect; import com.simibubi.mightyarchitect.foundation.utility.FilesHelper; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.TagParser; public class PaletteStorage { @@ -61,7 +61,7 @@ public static void exportPalette(PaletteDefinition palette) { FilesHelper.createFolderIfMissing(folderPath); String filename = FilesHelper.findFirstValidFilename(palette.getName(), folderPath, "json"); String filepath = folderPath + "/" + filename; - FilesHelper.saveTagCompoundAsJson(palette.writeToNBT(new CompoundNBT()), filepath); + FilesHelper.saveTagCompoundAsJson(palette.writeToNBT(new CompoundTag()), filepath); } public static PaletteDefinition importPalette(Path path) { @@ -69,7 +69,7 @@ public static PaletteDefinition importPalette(Path path) { JsonReader reader = new JsonReader(Files.newBufferedReader(path)); reader.setLenient(true); JsonElement element = Streams.parse(reader); - return PaletteDefinition.fromNBT(JsonToNBT.parseTag(element.toString())); + return PaletteDefinition.fromNBT(TagParser.parseTag(element.toString())); } catch (IOException | CommandSyntaxException e) { e.printStackTrace(); } @@ -100,7 +100,7 @@ public static void loadResourcePalettes() { String path = "palettes/p" + index + ".json"; if (TheMightyArchitect.class.getClassLoader().getResource(path) == null) break; - CompoundNBT tag = FilesHelper.loadJsonResourceAsNBT(path); + CompoundTag tag = FilesHelper.loadJsonResourceAsNBT(path); PaletteDefinition paletteDefinition = PaletteDefinition.fromNBT(tag); resourcePalettes.put(paletteDefinition.getName(), paletteDefinition); index++; diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/IArchitectPhase.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/IArchitectPhase.java index 2c0153e..c99fa0b 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/IArchitectPhase.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/IArchitectPhase.java @@ -2,15 +2,15 @@ import java.util.List; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; public interface IArchitectPhase { public void whenEntered(); public void update(); - public void render(MatrixStack ms, IRenderTypeBuffer buffer); + public void render(PoseStack ms, MultiBufferSource buffer); public void whenExited(); public List getToolTip(); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseBase.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseBase.java index 1b676cc..fce4fca 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseBase.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseBase.java @@ -4,7 +4,7 @@ import com.simibubi.mightyarchitect.control.Schematic; import net.minecraft.client.Minecraft; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.network.chat.TextComponent; public abstract class PhaseBase implements IArchitectPhase { @@ -35,7 +35,7 @@ protected void sendStatusMessage(String message) { if (message == null) return; - minecraft.player.displayClientMessage(new StringTextComponent(message), true); + minecraft.player.displayClientMessage(new TextComponent(message), true); } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseComposing.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseComposing.java index 623ab77..995cb17 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseComposing.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseComposing.java @@ -1,17 +1,22 @@ package com.simibubi.mightyarchitect.control.phase; +import java.util.Arrays; import java.util.List; +import java.util.Optional; + +import org.apache.commons.lang3.ArrayUtils; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.compose.planner.Tools; import com.simibubi.mightyarchitect.foundation.utility.ShaderManager; import com.simibubi.mightyarchitect.foundation.utility.Shaders; import com.simibubi.mightyarchitect.gui.ToolSelectionScreen; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraftforge.client.event.RenderGameOverlayEvent.Pre; public class PhaseComposing extends PhaseBase implements IRenderGameOverlay { @@ -64,18 +69,37 @@ public void onClick(int button) { @Override public void onKey(int key, boolean released) { - if (key != MightyClient.TOOL_MENU.getKey() - .getValue()) - return; + if (key == MightyClient.TOOL_MENU.getKey() + .getValue()) { + if (released && toolSelection.focused) { + toolSelection.focused = false; + toolSelection.onClose(); + } + + if (!released && !toolSelection.focused) + toolSelection.focused = true; - if (released && toolSelection.focused) { - toolSelection.focused = false; - toolSelection.onClose(); + return; } - if (!released && !toolSelection.focused) - toolSelection.focused = true; + if (released) + return; + + if (toolSelection.focused) { + Optional mapping = Arrays.stream(Minecraft.getInstance().options.keyHotbarSlots) + .filter(keyMapping -> keyMapping.getKey() + .getValue() == key) + .findFirst(); + if (mapping.isEmpty()) + return; + + toolSelection.select(ArrayUtils.indexOf(Minecraft.getInstance().options.keyHotbarSlots, mapping.get())); + + return; + } + activeTool.getTool() + .handleKeyInput(key); } @Override @@ -90,7 +114,7 @@ public boolean onScroll(int amount) { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) {} + public void render(PoseStack ms, MultiBufferSource buffer) {} @Override public void whenExited() { @@ -102,8 +126,9 @@ public void renderGameOverlay(Pre event) { if (Minecraft.getInstance().screen != null) return; - MatrixStack ms = event.getMatrixStack(); - toolSelection.renderPassive(ms, event.getPartialTicks()); + PoseStack ms = event.getMatrixStack(); + toolSelection.renderPassive(ms, Minecraft.getInstance() + .getDeltaFrameTime()); activeTool.getTool() .renderOverlay(ms); } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseCreatingPalette.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseCreatingPalette.java index 7cb80eb..e79381c 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseCreatingPalette.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseCreatingPalette.java @@ -5,26 +5,23 @@ import java.util.Map; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.Schematic; import com.simibubi.mightyarchitect.control.palette.Palette; import com.simibubi.mightyarchitect.control.palette.PaletteDefinition; -import com.simibubi.mightyarchitect.foundation.utility.RaycastHelper; -import net.minecraft.block.BlockState; -import net.minecraft.block.TrapDoorBlock; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.multiplayer.ClientLevel; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.RayTraceResult; -import net.minecraft.util.math.RayTraceResult.Type; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.gen.Heightmap; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.level.block.TrapDoorBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.levelgen.Heightmap; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.client.model.data.EmptyModelData; -import net.minecraftforge.common.ForgeMod; public class PhaseCreatingPalette extends PhaseBase implements IDrawBlockHighlights { @@ -37,11 +34,11 @@ public class PhaseCreatingPalette extends PhaseBase implements IDrawBlockHighlig public void whenEntered() { Schematic model = getModel(); - ClientWorld world = minecraft.level; + ClientLevel world = minecraft.level; changed = new boolean[16]; palette = model.getCreatedPalette(); - center = world.getHeightmapPos(Heightmap.Type.WORLD_SURFACE, minecraft.player.blockPosition()); + center = world.getHeightmapPos(Heightmap.Types.WORLD_SURFACE, minecraft.player.blockPosition()); grid = new HashMap<>(); for (int i = 0; i < 16; i++) { @@ -90,7 +87,7 @@ public void update() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { // Blocks for (int i = 0; i < 16; i++) { BlockState state = palette.get(Palette.values()[i]); @@ -106,7 +103,7 @@ public void render(MatrixStack ms, IRenderTypeBuffer buffer) { ms.translate(1 / 32f, 1 / 32f, 1 / 32f); ms.scale(15 / 16f, 15 / 16f, 15 / 16f); minecraft.getBlockRenderer() - .renderBlock(state, ms, buffer, 0xF000F0, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE); + .renderSingleBlock(state, ms, buffer, 0xF000F0, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE); ms.popPose(); } } @@ -119,7 +116,7 @@ public void whenExited() { protected void notifyChange() { getModel().updatePalettePreview(); - minecraft.player.displayClientMessage(new StringTextComponent("Updating Preview..."), true); + minecraft.player.displayClientMessage(new TextComponent("Updating Preview..."), true); MightyClient.renderer.update(); } @@ -127,26 +124,27 @@ protected void notifyChange() { @Override public void tickHighlightOutlines() { - BlockPos targetBlock = null; - - RayTraceResult raytrace = RaycastHelper.rayTraceRange(minecraft.level, minecraft.player, - minecraft.player.getAttributeValue(ForgeMod.REACH_DISTANCE.get())); - if (raytrace != null && raytrace.getType() == Type.BLOCK) { - targetBlock = new BlockPos(raytrace.getLocation()); - if (grid.containsKey(targetBlock)) - sendStatusMessage(grid.get(targetBlock) - .getDisplayName()); - } + Vec3 from = minecraft.player.getEyePosition(); + Vec3 to = from.add(minecraft.player.getLookAngle() + .normalize() + .scale(10)); for (int i = 0; i < 16; i++) { BlockPos pos = positionFromIndex(i); + AABB bb = new AABB(pos); // Render Outline - boolean s = targetBlock != null && pos.equals(targetBlock); boolean b = changed[i]; - MightyClient.outliner.showAABB("pallete" + i, new AxisAlignedBB(pos)) - .lineWidth(b || s ? 1 / 16f : 1 / 32f) - .colored(s ? 0x8888ff : b ? 0x6666ff : 0xbbbbbb); + boolean s = bb.clip(from, to) + .isPresent(); + + if (s) + sendStatusMessage(grid.get(pos) + .getDisplayName()); + + MightyClient.outliner.showAABB("pallete" + i, bb) + .lineWidth(b || s ? 1 / 16f : 1 / 24f) + .colored(s ? 0x6677ee : b ? 0xccccdd : 0x666677); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseEmpty.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseEmpty.java index 37ae613..a046c86 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseEmpty.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhaseEmpty.java @@ -3,9 +3,9 @@ import java.util.List; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; public class PhaseEmpty extends PhaseBase { @@ -22,7 +22,7 @@ public void onClick(int button) { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { } @Override diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePaused.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePaused.java index e2b1e7c..d773007 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePaused.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePaused.java @@ -3,29 +3,29 @@ import java.util.List; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.MightyClient; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.network.chat.TextComponent; public class PhasePaused extends PhaseBase { @Override public void whenEntered() { - ClientPlayerEntity player = Minecraft.getInstance().player; + LocalPlayer player = Minecraft.getInstance().player; if (player == null) return; - player.displayClientMessage(new StringTextComponent( - "The Mighty Architect was " + TextFormatting.BOLD + "Paused" + TextFormatting.RESET + "."), false); - player.displayClientMessage(new StringTextComponent("You can continue composing with [" + TextFormatting.AQUA + player.displayClientMessage(new TextComponent( + "The Mighty Architect was " + ChatFormatting.BOLD + "Paused" + ChatFormatting.RESET + "."), false); + player.displayClientMessage(new TextComponent("You can continue composing with [" + ChatFormatting.AQUA + MightyClient.COMPOSE.getTranslatedKeyMessage() .getString() .toUpperCase() - + TextFormatting.WHITE + "]"), false); + + ChatFormatting.WHITE + "]"), false); } @Override @@ -34,7 +34,7 @@ public void update() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePreviewing.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePreviewing.java index 2914b66..644812e 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePreviewing.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PhasePreviewing.java @@ -1,16 +1,21 @@ package com.simibubi.mightyarchitect.control.phase; +import java.util.Arrays; import java.util.List; +import java.util.Optional; import java.util.function.Consumer; +import org.apache.commons.lang3.ArrayUtils; + import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.compose.planner.Tools; import com.simibubi.mightyarchitect.gui.ToolSelectionScreen; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraftforge.client.event.RenderGameOverlayEvent; public class PhasePreviewing extends PhaseBase implements IRenderGameOverlay { @@ -54,18 +59,32 @@ public void onClick(int button) { @Override public void onKey(int key, boolean released) { - if (key != MightyClient.TOOL_MENU.getKey() - .getValue()) - return; + if (key == MightyClient.TOOL_MENU.getKey().getValue()) { + if (released && toolSelection.focused) { + toolSelection.focused = false; + toolSelection.onClose(); + } - if (released && toolSelection.focused) { - toolSelection.focused = false; - toolSelection.onClose(); + if (!released && !toolSelection.focused) + toolSelection.focused = true; + + return; } - if (!released && !toolSelection.focused) - toolSelection.focused = true; + if (released) + return; + + if (toolSelection.focused) { + Optional mapping = Arrays.stream(Minecraft.getInstance().options.keyHotbarSlots).filter(keyMapping -> keyMapping.getKey().getValue() == key).findFirst(); + if (mapping.isEmpty()) + return; + + toolSelection.select(ArrayUtils.indexOf(Minecraft.getInstance().options.keyHotbarSlots, mapping.get())); + + return; + } + activeTool.getTool().handleKeyInput(key); } @Override @@ -91,7 +110,7 @@ public boolean onScroll(int amount) { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) {} + public void render(PoseStack ms, MultiBufferSource buffer) {} @Override public void whenExited() { @@ -100,7 +119,7 @@ public void whenExited() { @Override public void renderGameOverlay(RenderGameOverlayEvent.Pre event) { - MatrixStack ms = event.getMatrixStack(); + PoseStack ms = event.getMatrixStack(); toolSelection.renderPassive(ms, event.getPartialTicks()); activeTool.getTool() .renderOverlay(ms); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/PrintingToMultiplayer.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/PrintingToMultiplayer.java index 5494b5b..bb1978e 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/PrintingToMultiplayer.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/PrintingToMultiplayer.java @@ -4,20 +4,20 @@ import java.util.List; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.TheMightyArchitect; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.TemplateBlockAccess; -import net.minecraft.block.BlockState; +import net.minecraft.ChatFormatting; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.shapes.ISelectionContext; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.shapes.CollisionContext; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.client.event.ClientChatReceivedEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -59,7 +59,7 @@ public void update() { if (minecraft.level.getBlockState(pos) == state) continue; - if (!minecraft.level.isUnobstructed(state, pos, ISelectionContext.of(minecraft.player))) + if (!minecraft.level.isUnobstructed(state, pos, CollisionContext.of(minecraft.player))) continue; String blockstring = state.toString().replaceFirst("Block\\{", "").replaceFirst("\\}", ""); @@ -79,20 +79,20 @@ public static void onCommandFeedback(ClientChatReceivedEvent event) { return; if (cooldown > 0) { - List checking = new LinkedList<>(); + List checking = new LinkedList<>(); checking.add(event.getMessage()); while (!checking.isEmpty()) { - ITextComponent iTextComponent = checking.get(0); - if (iTextComponent instanceof TranslationTextComponent) { - String test = ((TranslationTextComponent) iTextComponent).getKey(); + Component iTextComponent = checking.get(0); + if (iTextComponent instanceof TranslatableComponent) { + String test = ((TranslatableComponent) iTextComponent).getKey(); TheMightyArchitect.logger.info(test); if (test.equals("command.unknown.command")) { cooldown = 0; - event.setMessage(new StringTextComponent( - TextFormatting.RED + "You do not have permission to print on this server.")); + event.setMessage(new TextComponent( + ChatFormatting.RED + "You do not have permission to print on this server.")); return; } if (test.equals("parsing.int.expected")) { @@ -113,13 +113,13 @@ public static void onCommandFeedback(ClientChatReceivedEvent event) { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { } @Override public void whenExited() { if (approved) { - Minecraft.getInstance().player.displayClientMessage(new StringTextComponent(TextFormatting.GREEN + "Finished Printing, enjoy!"), + Minecraft.getInstance().player.displayClientMessage(new TextComponent(ChatFormatting.GREEN + "Finished Printing, enjoy!"), false); Minecraft.getInstance().player.chat("/gamerule logAdminCommands true"); Minecraft.getInstance().player.chat("/gamerule sendCommandFeedback true"); diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseEditTheme.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseEditTheme.java index 683f838..56a5639 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseEditTheme.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseEditTheme.java @@ -5,7 +5,7 @@ import java.util.function.Function; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.AllSpecialTextures; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.compose.Cuboid; @@ -17,9 +17,9 @@ import com.simibubi.mightyarchitect.foundation.utility.outliner.BlockClusterOutline; import com.simibubi.mightyarchitect.foundation.utility.outliner.Outline; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.world.phys.Vec3; public class PhaseEditTheme extends PhaseBase { @@ -119,7 +119,7 @@ private void tickOutlines() { } private void chaseText(Object key, float x, float y, float z, String text) { - MightyClient.outliner.chaseText(key, new Vector3d(x, y, z), text) + MightyClient.outliner.chaseText(key, new Vec3(x, y, z), text) .disableNormals() .colored(0xffffff); } @@ -197,6 +197,6 @@ public static void resetVisualization() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) {} + public void render(PoseStack ms, MultiBufferSource buffer) {} } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseListThemesForEditing.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseListThemesForEditing.java index 406ed01..dbadcf8 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseListThemesForEditing.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseListThemesForEditing.java @@ -3,10 +3,10 @@ import java.util.List; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.control.phase.PhaseBase; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; public class PhaseListThemesForEditing extends PhaseBase { @@ -20,7 +20,7 @@ public void update() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { } diff --git a/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseManageThemes.java b/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseManageThemes.java index d3bffb9..fecbfc1 100644 --- a/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseManageThemes.java +++ b/src/main/java/com/simibubi/mightyarchitect/control/phase/export/PhaseManageThemes.java @@ -4,10 +4,10 @@ import java.util.List; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.control.phase.PhaseBase; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; public class PhaseManageThemes extends PhaseBase { @@ -22,7 +22,7 @@ public void update() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/MatrixStacker.java b/src/main/java/com/simibubi/mightyarchitect/foundation/MatrixStacker.java index 233639c..8e3f8f8 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/MatrixStacker.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/MatrixStacker.java @@ -1,22 +1,22 @@ package com.simibubi.mightyarchitect.foundation; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; import com.simibubi.mightyarchitect.foundation.utility.AngleHelper; import com.simibubi.mightyarchitect.foundation.utility.VecHelper; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Vec3i; +import net.minecraft.world.phys.Vec3; public class MatrixStacker { - static Vector3d center = VecHelper.getCenterOf(BlockPos.ZERO); + static Vec3 center = VecHelper.getCenterOf(BlockPos.ZERO); static MatrixStacker instance; - MatrixStack ms; + PoseStack ms; - public static MatrixStacker of(MatrixStack ms) { + public static MatrixStacker of(PoseStack ms) { if (instance == null) instance = new MatrixStacker(); instance.ms = ms; @@ -50,17 +50,17 @@ public MatrixStacker unCentre() { return translateBack(center); } - public MatrixStacker translate(Vector3i vec) { + public MatrixStacker translate(Vec3i vec) { ms.translate(vec.getX(), vec.getY(), vec.getZ()); return this; } - public MatrixStacker translate(Vector3d vec) { + public MatrixStacker translate(Vec3 vec) { ms.translate(vec.x, vec.y, vec.z); return this; } - public MatrixStacker translateBack(Vector3d vec) { + public MatrixStacker translateBack(Vec3 vec) { ms.translate(-vec.x, -vec.y, -vec.z); return this; } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/RenderTypes.java b/src/main/java/com/simibubi/mightyarchitect/foundation/RenderTypes.java index 79453e5..79131ea 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/RenderTypes.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/RenderTypes.java @@ -1,114 +1,125 @@ package com.simibubi.mightyarchitect.foundation; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexFormat; import com.simibubi.mightyarchitect.AllSpecialTextures; +import com.simibubi.mightyarchitect.TheMightyArchitect; -import net.minecraft.client.renderer.RenderState; +import net.minecraft.client.renderer.RenderStateShard; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; -public class RenderTypes extends RenderState { +public class RenderTypes extends RenderStateShard { - protected static final RenderState.CullState DISABLE_CULLING = new NoCullState(); + protected static final RenderStateShard.CullStateShard DISABLE_CULLING = new NoCullState(); - public static RenderType getOutlineTranslucent(ResourceLocation texture, boolean cull) { - RenderType.State rendertype$state = RenderType.State.builder() - .setTextureState(new RenderState.TextureState(texture, false, false)) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setDiffuseLightingState(DIFFUSE_LIGHTING) - .setAlphaState(DEFAULT_ALPHA) - .setCullState(cull ? CULL : DISABLE_CULLING) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true); - return RenderType.create("outline_translucent" + (cull ? "_cull" : ""), - DefaultVertexFormats.NEW_ENTITY, 7, 256, true, true, rendertype$state); + public static RenderType getOutlineSolid(ResourceLocation texture) { + return RenderType.create(createLayerName("outline_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, + false, RenderType.CompositeState.builder() + .setShaderState(RenderStateShard.RENDERTYPE_ENTITY_CUTOUT_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(texture, false, false)) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); } - private static final RenderType OUTLINE_SOLID = - RenderType.create("outline_solid", DefaultVertexFormats.NEW_ENTITY, 7, 256, true, - false, RenderType.State.builder() - .setTextureState(new RenderState.TextureState(AllSpecialTextures.BLANK.getLocation(), false, false)) - .setTransparencyState(NO_TRANSPARENCY) - .setDiffuseLightingState(DIFFUSE_LIGHTING) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); + private static final RenderType DEFAULT_OUTLINE_SOLID = + getOutlineSolid(AllSpecialTextures.BLANK.getLocation()); + + public static RenderType getOutlineSolid() { + return DEFAULT_OUTLINE_SOLID; + } + + public static RenderType getOutlineTranslucent(ResourceLocation texture, boolean cull) { + return RenderType.create(createLayerName("outline_translucent" + (cull ? "_cull" : "")), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(texture, false, false)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setCullState(cull ? CULL : NO_CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .setWriteMaskState(RenderStateShard.COLOR_WRITE) + .createCompositeState(true)); + } public static RenderType getGlowingSolid(ResourceLocation texture) { - RenderType.State rendertype$state = RenderType.State.builder() - .setTextureState(new RenderState.TextureState(texture, false, false)) - .setTransparencyState(NO_TRANSPARENCY) - .setDiffuseLightingState(NO_DIFFUSE_LIGHTING) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true); - return RenderType.create("glowing_solid", DefaultVertexFormats.NEW_ENTITY, 7, 256, - true, false, rendertype$state); + return RenderType.create(createLayerName("glowing_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, + true, false, RenderType.CompositeState.builder() + .setShaderState(NEW_ENTITY_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(texture, false, false)) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + } + + private static final RenderType GLOWING_SOLID_DEFAULT = getGlowingSolid(InventoryMenu.BLOCK_ATLAS); + + public static RenderType getGlowingSolid() { + return GLOWING_SOLID_DEFAULT; } public static RenderType getGlowingTranslucent(ResourceLocation texture) { - RenderType.State rendertype$state = RenderType.State.builder() - .setTextureState(new RenderState.TextureState(texture, false, false)) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setDiffuseLightingState(NO_DIFFUSE_LIGHTING) - .setAlphaState(DEFAULT_ALPHA) - .setCullState(DISABLE_CULLING) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true); - return RenderType.create("glowing_translucent", DefaultVertexFormats.NEW_ENTITY, 7, - 256, true, true, rendertype$state); + return RenderType.create(createLayerName("glowing_translucent"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, + 256, true, true, RenderType.CompositeState.builder() + .setShaderState(NEW_ENTITY_SHADER) + .setTextureState(new RenderStateShard.TextureStateShard(texture, false, false)) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setCullState(NO_CULL) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); } - private static final RenderType GLOWING_SOLID = RenderTypes.getGlowingSolid(PlayerContainer.BLOCK_ATLAS); - private static final RenderType GLOWING_TRANSLUCENT = - RenderTypes.getGlowingTranslucent(PlayerContainer.BLOCK_ATLAS); + private static final RenderType GLOWING_TRANSLUCENT_DEFAULT = getGlowingTranslucent(InventoryMenu.BLOCK_ATLAS); + + public static RenderType getGlowingTranslucent() { + return GLOWING_TRANSLUCENT_DEFAULT; + } private static final RenderType ITEM_PARTIAL_SOLID = - RenderType.create("item_solid", DefaultVertexFormats.NEW_ENTITY, 7, 256, true, - false, RenderType.State.builder() - .setTextureState(new RenderState.TextureState(PlayerContainer.BLOCK_ATLAS, false, false)) - .setTransparencyState(NO_TRANSPARENCY) - .setDiffuseLightingState(DIFFUSE_LIGHTING) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); - - private static final RenderType ITEM_PARTIAL_TRANSLUCENT = RenderType.create("entity_translucent", - DefaultVertexFormats.NEW_ENTITY, 7, 256, true, true, RenderType.State.builder() - .setTextureState(new RenderState.TextureState(PlayerContainer.BLOCK_ATLAS, false, false)) - .setTransparencyState(TRANSLUCENT_TRANSPARENCY) - .setDiffuseLightingState(DIFFUSE_LIGHTING) - .setAlphaState(DEFAULT_ALPHA) - .setCullState(DISABLE_CULLING) - .setLightmapState(LIGHTMAP) - .setOverlayState(OVERLAY) - .createCompositeState(true)); + RenderType.create(createLayerName("item_partial_solid"), DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, + false, RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_SOLID_SHADER) + .setTextureState(BLOCK_SHEET) + .setTransparencyState(NO_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); public static RenderType getItemPartialSolid() { return ITEM_PARTIAL_SOLID; } - - public static RenderType getItemPartialTranslucent() { - return ITEM_PARTIAL_TRANSLUCENT; - } - public static RenderType getOutlineSolid() { - return OUTLINE_SOLID; - } + private static final RenderType ITEM_PARTIAL_TRANSLUCENT = RenderType.create(createLayerName("item_partial_translucent"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_SHADER) + .setTextureState(BLOCK_SHEET) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); - public static RenderType getGlowingSolid() { - return GLOWING_SOLID; + public static RenderType getItemPartialTranslucent() { + return ITEM_PARTIAL_TRANSLUCENT; } - public static RenderType getGlowingTranslucent() { - return GLOWING_TRANSLUCENT; + private static final RenderType FLUID = RenderType.create(createLayerName("fluid"), + DefaultVertexFormat.NEW_ENTITY, VertexFormat.Mode.QUADS, 256, true, true, RenderType.CompositeState.builder() + .setShaderState(RENDERTYPE_ENTITY_TRANSLUCENT_SHADER) + .setTextureState(BLOCK_SHEET_MIPPED) + .setTransparencyState(TRANSLUCENT_TRANSPARENCY) + .setLightmapState(LIGHTMAP) + .setOverlayState(OVERLAY) + .createCompositeState(true)); + + public static RenderType getFluid() { + return FLUID; } - protected static class NoCullState extends RenderState.CullState { + protected static class NoCullState extends RenderStateShard.CullStateShard { public NoCullState() { super(false); } @@ -119,6 +130,10 @@ public void setupRenderState() { } } + private static String createLayerName(String name) { + return TheMightyArchitect.ID + ":" + name; + } + // Mmm gimme those protected fields public RenderTypes() { super(null, null, null); diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/SpriteShiftEntry.java b/src/main/java/com/simibubi/mightyarchitect/foundation/SpriteShiftEntry.java index 118e015..ea856ff 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/SpriteShiftEntry.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/SpriteShiftEntry.java @@ -4,8 +4,8 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.util.ResourceLocation; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.inventory.InventoryMenu; public class SpriteShiftEntry { protected ResourceLocation originalTextureLocation; @@ -20,7 +20,7 @@ public void set(ResourceLocation originalTextureLocation, ResourceLocation targe protected void loadTextures() { Function textureMap = Minecraft.getInstance() - .getTextureAtlas(PlayerContainer.BLOCK_ATLAS); + .getTextureAtlas(InventoryMenu.BLOCK_ATLAS); original = textureMap.apply(originalTextureLocation); target = textureMap.apply(targetTextureLocation); } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBuffer.java b/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBuffer.java index 17cb134..99ab407 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBuffer.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBuffer.java @@ -3,21 +3,20 @@ import java.nio.ByteBuffer; import java.nio.ByteOrder; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.BufferBuilder.DrawState; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import com.mojang.datafixers.util.Pair; +import com.mojang.math.Matrix4f; +import com.mojang.math.Vector4f; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.BufferBuilder.DrawState; -import net.minecraft.client.renderer.GLAllocation; import net.minecraft.client.renderer.texture.TextureAtlasSprite; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector4f; -import net.minecraft.world.LightType; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.LightLayer; public class SuperByteBuffer { @@ -29,7 +28,7 @@ public interface IVertexLighter { protected int formatSize; // Vertex Position - private MatrixStack transforms; + private PoseStack transforms; // Vertex Texture Coords private boolean shouldShiftUV; @@ -56,13 +55,13 @@ public SuperByteBuffer(BufferBuilder buf) { int size = state.getFirst() .vertexCount() * formatSize; - template = GLAllocation.createByteBuffer(size); + template = ByteBuffer.allocateDirect(size).order(ByteOrder.nativeOrder()); template.order(rendered.order()); template.limit(rendered.limit()); template.put(rendered); template.rewind(); - transforms = new MatrixStack(); + transforms = new PoseStack(); } public static float getUnInterpolatedU(TextureAtlasSprite sprite, float u) { @@ -75,7 +74,7 @@ public static float getUnInterpolatedV(TextureAtlasSprite sprite, float v) { return (v - sprite.getV0()) / f * 16.0F; } - public void renderInto(MatrixStack input, IVertexBuilder builder) { + public void renderInto(PoseStack input, VertexConsumer builder) { ByteBuffer buffer = template; if (buffer.limit() == 0) return; @@ -137,7 +136,7 @@ public void renderInto(MatrixStack input, IVertexBuilder builder) { .endVertex(); } - transforms = new MatrixStack(); + transforms = new PoseStack(); shouldShiftUV = false; shouldColor = false; shouldLight = false; @@ -265,16 +264,16 @@ protected byte getNZ(ByteBuffer buffer, int index) { return buffer.get(getBufferPosition(index) + 30); } - private static int getLight(World world, Vector4f lightPos) { - BlockPos.Mutable pos = new BlockPos.Mutable(); + private static int getLight(Level world, Vector4f lightPos) { + BlockPos.MutableBlockPos pos = new BlockPos.MutableBlockPos(); float sky = 0, block = 0; float offset = 1 / 8f; for (float zOffset = offset; zOffset >= -offset; zOffset -= 2 * offset) for (float yOffset = offset; yOffset >= -offset; yOffset -= 2 * offset) for (float xOffset = offset; xOffset >= -offset; xOffset -= 2 * offset) { pos.set(lightPos.x() + xOffset, lightPos.y() + yOffset, lightPos.z() + zOffset); - sky += world.getBrightness(LightType.SKY, pos) / 8f; - block += world.getBrightness(LightType.BLOCK, pos) / 8f; + sky += world.getBrightness(LightLayer.SKY, pos) / 8f; + block += world.getBrightness(LightLayer.BLOCK, pos) / 8f; } return ((int) sky) << 20 | ((int) block) << 4; diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBufferCache.java b/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBufferCache.java index ae949b5..8e4cf13 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBufferCache.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/SuperByteBufferCache.java @@ -7,21 +7,20 @@ import java.util.concurrent.TimeUnit; import java.util.function.Supplier; -import org.lwjgl.opengl.GL11; - import com.google.common.cache.Cache; import com.google.common.cache.CacheBuilder; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexFormat; -import net.minecraft.block.BlockState; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BlockModelRenderer; -import net.minecraft.client.renderer.BlockRendererDispatcher; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.model.IBakedModel; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.ModelBlockRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.util.math.BlockPos; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.client.model.data.EmptyModelData; public class SuperByteBufferCache { @@ -69,21 +68,21 @@ public void registerCompartment(Compartment instance, long ticksTillExpired) } private SuperByteBuffer standardBlockRender(BlockState renderedState) { - BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRenderer(); + BlockRenderDispatcher dispatcher = Minecraft.getInstance().getBlockRenderer(); return standardModelRender(dispatcher.getBlockModel(renderedState), renderedState); } - private SuperByteBuffer standardModelRender(IBakedModel model, BlockState referenceState) { - return standardModelRender(model, referenceState, new MatrixStack()); + private SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState) { + return standardModelRender(model, referenceState, new PoseStack()); } - private SuperByteBuffer standardModelRender(IBakedModel model, BlockState referenceState, MatrixStack ms) { - BlockRendererDispatcher dispatcher = Minecraft.getInstance().getBlockRenderer(); - BlockModelRenderer blockRenderer = dispatcher.getModelRenderer(); - BufferBuilder builder = new BufferBuilder(DefaultVertexFormats.BLOCK.getIntegerSize()); + private SuperByteBuffer standardModelRender(BakedModel model, BlockState referenceState, PoseStack ms) { + BlockRenderDispatcher dispatcher = Minecraft.getInstance().getBlockRenderer(); + ModelBlockRenderer blockRenderer = dispatcher.getModelRenderer(); + BufferBuilder builder = new BufferBuilder(DefaultVertexFormat.BLOCK.getIntegerSize()); Random random = new Random(); - builder.begin(GL11.GL_QUADS, DefaultVertexFormats.BLOCK); - blockRenderer.renderModelFlat(Minecraft.getInstance().level, model, referenceState, BlockPos.ZERO.above(255), ms, + builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.BLOCK); + blockRenderer.tesselateBlock(Minecraft.getInstance().level, model, referenceState, BlockPos.ZERO.above(255), ms, builder, true, random, 42, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE); builder.end(); diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/SuperRenderTypeBuffer.java b/src/main/java/com/simibubi/mightyarchitect/foundation/SuperRenderTypeBuffer.java index d8b28c0..c01ef0f 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/SuperRenderTypeBuffer.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/SuperRenderTypeBuffer.java @@ -2,19 +2,18 @@ import java.util.SortedMap; -import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.VertexConsumer; import it.unimi.dsi.fastutil.objects.Object2ObjectLinkedOpenHashMap; -import net.minecraft.client.renderer.Atlases; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.RegionRenderCacheBuilder; +import net.minecraft.Util; +import net.minecraft.client.renderer.ChunkBufferBuilderPack; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.model.ModelBakery; -import net.minecraft.util.Util; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.resources.model.ModelBakery; -public class SuperRenderTypeBuffer implements IRenderTypeBuffer { +public class SuperRenderTypeBuffer implements MultiBufferSource { static SuperRenderTypeBuffer instance; @@ -34,68 +33,65 @@ public SuperRenderTypeBuffer() { lateBuffer = new SuperRenderTypeBufferPhase(); } - public IVertexBuilder getEarlyBuffer(RenderType type) { - return earlyBuffer.getBuffer(type); + public VertexConsumer getEarlyBuffer(RenderType type) { + return earlyBuffer.bufferSource.getBuffer(type); } @Override - public IVertexBuilder getBuffer(RenderType type) { - return defaultBuffer.getBuffer(type); + public VertexConsumer getBuffer(RenderType type) { + return defaultBuffer.bufferSource.getBuffer(type); } - public IVertexBuilder getLateBuffer(RenderType type) { - return lateBuffer.getBuffer(type); + public VertexConsumer getLateBuffer(RenderType type) { + return lateBuffer.bufferSource.getBuffer(type); } public void draw() { - RenderSystem.disableCull(); - earlyBuffer.endBatch(); - defaultBuffer.endBatch(); - lateBuffer.endBatch(); + earlyBuffer.bufferSource.endBatch(); + defaultBuffer.bufferSource.endBatch(); + lateBuffer.bufferSource.endBatch(); } public void draw(RenderType type) { - RenderSystem.disableCull(); - earlyBuffer.endBatch(type); - defaultBuffer.endBatch(type); - lateBuffer.endBatch(type); + earlyBuffer.bufferSource.endBatch(type); + defaultBuffer.bufferSource.endBatch(type); + lateBuffer.bufferSource.endBatch(type); } - private static class SuperRenderTypeBufferPhase extends IRenderTypeBuffer.Impl { - - // Visible clones from net.minecraft.client.renderer.RenderTypeBuffers - static final RegionRenderCacheBuilder blockBuilders = new RegionRenderCacheBuilder(); - static final SortedMap createEntityBuilders() { - return Util.make(new Object2ObjectLinkedOpenHashMap<>(), (map) -> { - map.put(Atlases.solidBlockSheet(), blockBuilders.builder(RenderType.solid())); - assign(map, RenderTypes.getOutlineSolid()); - map.put(Atlases.cutoutBlockSheet(), blockBuilders.builder(RenderType.cutout())); - map.put(Atlases.bannerSheet(), blockBuilders.builder(RenderType.cutoutMipped())); - map.put(Atlases.translucentCullBlockSheet(), blockBuilders.builder(RenderType.translucent())); // FIXME new equivalent of getEntityTranslucent() ? - assign(map, Atlases.shieldSheet()); - assign(map, Atlases.bedSheet()); - assign(map, Atlases.shulkerBoxSheet()); - assign(map, Atlases.signSheet()); - assign(map, Atlases.chestSheet()); - assign(map, RenderType.translucentNoCrumbling()); - assign(map, RenderType.glint()); - assign(map, RenderType.entityGlint()); - assign(map, RenderType.waterMask()); - ModelBakery.DESTROY_TYPES.forEach((p_228488_1_) -> { - assign(map, p_228488_1_); - }); + private static class SuperRenderTypeBufferPhase { + + // Visible clones from RenderBuffers + private final ChunkBufferBuilderPack fixedBufferPack = new ChunkBufferBuilderPack(); + private final SortedMap fixedBuffers = Util.make(new Object2ObjectLinkedOpenHashMap<>(), map -> { + map.put(Sheets.solidBlockSheet(), fixedBufferPack.builder(RenderType.solid())); + map.put(Sheets.cutoutBlockSheet(), fixedBufferPack.builder(RenderType.cutout())); + map.put(Sheets.bannerSheet(), fixedBufferPack.builder(RenderType.cutoutMipped())); + map.put(Sheets.translucentCullBlockSheet(), fixedBufferPack.builder(RenderType.translucent())); + put(map, Sheets.shieldSheet()); + put(map, Sheets.bedSheet()); + put(map, Sheets.shulkerBoxSheet()); + put(map, Sheets.signSheet()); + put(map, Sheets.chestSheet()); + put(map, RenderType.translucentNoCrumbling()); + put(map, RenderType.armorGlint()); + put(map, RenderType.armorEntityGlint()); + put(map, RenderType.glint()); + put(map, RenderType.glintDirect()); + put(map, RenderType.glintTranslucent()); + put(map, RenderType.entityGlint()); + put(map, RenderType.entityGlintDirect()); + put(map, RenderType.waterMask()); + put(map, RenderTypes.getOutlineSolid()); + ModelBakery.DESTROY_TYPES.forEach((p_173062_) -> { + put(map, p_173062_); }); - } - + }); + private final MultiBufferSource.BufferSource bufferSource = MultiBufferSource.immediateWithBuffers(fixedBuffers, new BufferBuilder(256)); - private static void assign(Object2ObjectLinkedOpenHashMap map, RenderType type) { + private static void put(Object2ObjectLinkedOpenHashMap map, RenderType type) { map.put(type, new BufferBuilder(type.bufferSize())); } - protected SuperRenderTypeBufferPhase() { - super(new BufferBuilder(256), createEntityBuilders()); - } - } } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/WrappedWorld.java b/src/main/java/com/simibubi/mightyarchitect/foundation/WrappedWorld.java index c9d8fea..07ddb68 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/WrappedWorld.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/WrappedWorld.java @@ -2,35 +2,77 @@ import java.util.Collections; import java.util.List; +import java.util.UUID; +import java.util.function.Consumer; import java.util.function.Predicate; -import net.minecraft.block.Block; -import net.minecraft.block.BlockState; -import net.minecraft.entity.Entity; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.fluid.Fluid; -import net.minecraft.item.crafting.RecipeManager; -import net.minecraft.scoreboard.Scoreboard; -import net.minecraft.tags.ITagCollectionSupplier; -import net.minecraft.tileentity.TileEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.SoundCategory; -import net.minecraft.util.SoundEvent; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.registry.DynamicRegistries; -import net.minecraft.world.ITickList; -import net.minecraft.world.World; -import net.minecraft.world.biome.Biome; -import net.minecraft.world.chunk.AbstractChunkProvider; -import net.minecraft.world.storage.ISpawnWorldInfo; -import net.minecraft.world.storage.MapData; - -public class WrappedWorld extends World { - - protected World world; - - public WrappedWorld(World world) { - super((ISpawnWorldInfo) world.getLevelData(), world.dimension(), world.dimensionType(), +import javax.annotation.Nullable; + +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Holder; +import net.minecraft.core.RegistryAccess; +import net.minecraft.sounds.SoundEvent; +import net.minecraft.sounds.SoundSource; +import net.minecraft.world.entity.Entity; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.crafting.RecipeManager; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.biome.Biome; +import net.minecraft.world.level.block.Block; +import net.minecraft.world.level.block.entity.BlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.chunk.ChunkSource; +import net.minecraft.world.level.entity.EntityTypeTest; +import net.minecraft.world.level.entity.LevelEntityGetter; +import net.minecraft.world.level.gameevent.GameEvent; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.level.saveddata.maps.MapItemSavedData; +import net.minecraft.world.level.storage.WritableLevelData; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.scores.Scoreboard; +import net.minecraft.world.ticks.LevelTickAccess; + +public class WrappedWorld extends Level { + + protected Level world; + + protected LevelEntityGetter entityGetter = new LevelEntityGetter() { + @Nullable + @Override + public Entity get(int p_156931_) { + return null; + } + + @Nullable + @Override + public Entity get(UUID p_156939_) { + return null; + } + + @Override + public Iterable getAll() { + return Collections.emptyList(); + } + + @Override + public void get(EntityTypeTest p_156935_, Consumer p_156936_) { + + } + + @Override + public void get(AABB p_156937_, Consumer p_156938_) { + + } + + @Override + public void get(EntityTypeTest p_156932_, AABB p_156933_, Consumer p_156934_) { + + } + }; + + public WrappedWorld(Level world) { + super((WritableLevelData) world.getLevelData(), world.dimension(), world.dimensionTypeRegistration(), () -> world.getProfiler(), world.isClientSide, false, 0); this.world = world; } @@ -46,7 +88,7 @@ public boolean isStateAtPosition(BlockPos p_217375_1_, Predicate p_2 } @Override - public TileEntity getBlockEntity(BlockPos pos) { + public BlockEntity getBlockEntity(BlockPos pos) { return world.getBlockEntity(pos); } @@ -66,30 +108,40 @@ public void sendBlockUpdated(BlockPos pos, BlockState oldState, BlockState newSt } @Override - public ITickList getBlockTicks() { + public LevelTickAccess getBlockTicks() { return world.getBlockTicks(); } @Override - public ITickList getLiquidTicks() { - return world.getLiquidTicks(); + public LevelTickAccess getFluidTicks() { + return world.getFluidTicks(); } @Override - public void levelEvent(PlayerEntity player, int type, BlockPos pos, int data) {} + public void levelEvent(Player player, int type, BlockPos pos, int data) {} @Override - public List players() { + public void gameEvent(@Nullable Entity p_151549_, GameEvent p_151550_, BlockPos p_151551_) { + + } + + @Override + public List players() { return Collections.emptyList(); } @Override - public void playSound(PlayerEntity player, double x, double y, double z, SoundEvent soundIn, SoundCategory category, + public void playSound(Player player, double x, double y, double z, SoundEvent soundIn, SoundSource category, float volume, float pitch) {} @Override - public void playSound(PlayerEntity p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, - SoundCategory p_217384_4_, float p_217384_5_, float p_217384_6_) {} + public void playSound(Player p_217384_1_, Entity p_217384_2_, SoundEvent p_217384_3_, + SoundSource p_217384_4_, float p_217384_5_, float p_217384_6_) {} + + @Override + public String gatherChunkSourceStats() { + return null; + } @Override public Entity getEntity(int id) { @@ -97,18 +149,18 @@ public Entity getEntity(int id) { } @Override - public MapData getMapData(String mapName) { + public MapItemSavedData getMapData(String mapName) { return null; } @Override public boolean addFreshEntity(Entity entityIn) { - entityIn.setLevel(world); + entityIn.level = world; return world.addFreshEntity(entityIn); } @Override - public void setMapData(MapData mapDataIn) {} + public void setMapData(String mapId, MapItemSavedData mapDataIn) {} @Override public int getFreeMapId() { @@ -129,17 +181,17 @@ public RecipeManager getRecipeManager() { } @Override - public Biome getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { + public Holder getUncachedNoiseBiome(int p_225604_1_, int p_225604_2_, int p_225604_3_) { return world.getUncachedNoiseBiome(p_225604_1_, p_225604_2_, p_225604_3_); } @Override - public AbstractChunkProvider getChunkSource() { + public ChunkSource getChunkSource() { return world.getChunkSource(); } @Override - public DynamicRegistries registryAccess() { + public RegistryAccess registryAccess() { return world.registryAccess(); } @@ -149,11 +201,11 @@ public float getShade(Direction p_230487_1_, boolean p_230487_2_) { } @Override - public ITagCollectionSupplier getTagManager() { - return world.getTagManager(); + protected LevelEntityGetter getEntities() { + return entityGetter; } - public World getWorld() { + public Level getWorld() { return world; } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/AngleHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/AngleHelper.java index 0b74c07..027a287 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/AngleHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/AngleHelper.java @@ -1,22 +1,14 @@ package com.simibubi.mightyarchitect.foundation.utility; -import com.mojang.blaze3d.matrix.MatrixStack; - -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraftforge.api.distmarker.Dist; -import net.minecraftforge.api.distmarker.OnlyIn; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.util.Mth; public class AngleHelper { - - @OnlyIn(Dist.CLIENT) - public static void applyRotation(Direction direction, MatrixStack ms) { - ms.mulPose(Vector3f.YP.rotationDegrees(AngleHelper.horizontalAngle(direction))); - ms.mulPose(Vector3f.XP.rotationDegrees(AngleHelper.verticalAngle(direction))); - } public static float horizontalAngle(Direction facing) { + if (facing.getAxis().isVertical()) + return 0; float angle = facing.toYRot(); if (facing.getAxis() == Axis.X) angle = -angle; @@ -28,15 +20,19 @@ public static float verticalAngle(Direction facing) { } public static float rad(double angle) { + if (angle == 0) + return 0; return (float) (angle / 180 * Math.PI); } public static float deg(double angle) { + if (angle == 0) + return 0; return (float) (angle * 180 / Math.PI); } - public static float angleLerp(float pct, float current, float target) { - return current + getShortestAngleDiff(current, target) * pct; + public static float angleLerp(double pct, double current, double target) { + return (float) (current + getShortestAngleDiff(current, target) * pct); } public static float getShortestAngleDiff(double current, double target) { @@ -45,4 +41,12 @@ public static float getShortestAngleDiff(double current, double target) { return (float) (((((target - current) % 360) + 540) % 360) - 180); } + public static float getShortestAngleDiff(double current, double target, float hint) { + float diff = getShortestAngleDiff(current, target); + if (Mth.equal(Math.abs(diff), 180) && Math.signum(diff) != Math.signum(hint)) { + return diff + 360*Math.signum(hint); + } + return diff; + } + } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/BuildingHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/BuildingHelper.java index c8667b1..460d958 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/BuildingHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/BuildingHelper.java @@ -3,7 +3,7 @@ import java.util.HashSet; import java.util.Set; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class BuildingHelper { diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ColorHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ColorHelper.java index 8dabcb9..e074a23 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ColorHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ColorHelper.java @@ -2,9 +2,7 @@ import java.util.UUID; -import com.mojang.blaze3d.systems.RenderSystem; - -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.world.phys.Vec3; public class ColorHelper { @@ -43,24 +41,11 @@ public static int mixColors(int color1, int color2, float w) { return color; } - public static void glColor(int color) { - color = mixColors(color, 0xFFFFFF, .5f); - int r = (color >> 16); - int g = (color >> 8) & 0xFF; - int b = color & 0xFF; - - RenderSystem.color4f(r / 256f, g / 256f, b / 256f, 1); - } - - public static void glResetColor() { - RenderSystem.color4f(1, 1, 1, 1); - } - - public static Vector3d getRGB(int color) { + public static Vec3 getRGB(int color) { int r = (color >> 16); int g = (color >> 8) & 0xFF; int b = color & 0xFF; - return new Vector3d(r, g, b).scale(1 / 256d); + return new Vec3(r, g, b).scale(1 / 256d); } public static int colorFromUUID(UUID uuid) { diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/DesignHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/DesignHelper.java index 16178c8..05f9f91 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/DesignHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/DesignHelper.java @@ -22,7 +22,7 @@ import com.simibubi.mightyarchitect.control.design.partials.TowerFlatRoof; import com.simibubi.mightyarchitect.control.design.partials.TowerRoof; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; public class DesignHelper { diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/FilesHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/FilesHelper.java index caaa409..937b291 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/FilesHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/FilesHelper.java @@ -16,8 +16,8 @@ import com.mojang.brigadier.exceptions.CommandSyntaxException; import com.simibubi.mightyarchitect.TheMightyArchitect; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.JsonToNBT; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.TagParser; public class FilesHelper { @@ -44,15 +44,16 @@ public static String findFirstValidFilename(String name, String folderPath, Stri } public static String slug(String name) { - return name.toLowerCase().replace(' ', '_'); + return name.toLowerCase() + .replace(' ', '_'); } - public static boolean saveTagCompoundAsJson(CompoundNBT compound, String path) { + public static boolean saveTagCompoundAsJson(CompoundTag compound, String path) { try { Files.deleteIfExists(Paths.get(path)); JsonWriter writer = new JsonWriter(Files.newBufferedWriter(Paths.get(path), StandardOpenOption.CREATE)); writer.setIndent(" "); - Streams.write(new JsonParser().parse(compound.toString()), writer); + Streams.write(JsonParser.parseString(compound.toString()), writer); writer.close(); return true; } catch (IOException e) { @@ -60,30 +61,29 @@ public static boolean saveTagCompoundAsJson(CompoundNBT compound, String path) { } return false; } - - public static boolean saveTagCompoundAsJsonCompact(CompoundNBT compound, String path) { + public static boolean saveTagCompoundAsJsonCompact(CompoundTag compound, String path) { try { Files.deleteIfExists(Paths.get(path)); JsonWriter writer = new JsonWriter(Files.newBufferedWriter(Paths.get(path), StandardOpenOption.CREATE)); - Streams.write(new JsonParser().parse(compound.toString()), writer); + Streams.write(JsonParser.parseString(compound.toString()), writer); writer.close(); return true; } catch (IOException e) { e.printStackTrace(); } return false; - + } - public static CompoundNBT loadJsonNBT(InputStream inputStream) { + public static CompoundTag loadJsonNBT(InputStream inputStream) { try { JsonReader reader = new JsonReader(new BufferedReader(new InputStreamReader(inputStream))); reader.setLenient(true); JsonElement element = Streams.parse(reader); reader.close(); inputStream.close(); - return JsonToNBT.parseTag(element.toString()); + return TagParser.parseTag(element.toString()); } catch (IOException e) { e.printStackTrace(); } catch (CommandSyntaxException e) { @@ -92,11 +92,12 @@ public static CompoundNBT loadJsonNBT(InputStream inputStream) { return null; } - public static CompoundNBT loadJsonResourceAsNBT(String filepath) { - return loadJsonNBT(TheMightyArchitect.class.getClassLoader().getResourceAsStream(filepath)); + public static CompoundTag loadJsonResourceAsNBT(String filepath) { + return loadJsonNBT(TheMightyArchitect.class.getClassLoader() + .getResourceAsStream(filepath)); } - public static CompoundNBT loadJsonAsNBT(String filepath) { + public static CompoundTag loadJsonAsNBT(String filepath) { try { return loadJsonNBT(Files.newInputStream(Paths.get(filepath), StandardOpenOption.READ)); } catch (IOException e) { @@ -105,5 +106,4 @@ public static CompoundNBT loadJsonAsNBT(String filepath) { return null; } - } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Iterate.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Iterate.java index 08620d0..90a5c75 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Iterate.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Iterate.java @@ -3,9 +3,9 @@ import java.util.Arrays; import java.util.List; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.BlockPos; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; public class Iterate { diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Keyboard.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Keyboard.java index 420d409..a6d9a83 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Keyboard.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Keyboard.java @@ -1,7 +1,8 @@ package com.simibubi.mightyarchitect.foundation.utility; +import com.mojang.blaze3d.platform.InputConstants; + import net.minecraft.client.Minecraft; -import net.minecraft.client.util.InputMappings; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @@ -24,7 +25,7 @@ public class Keyboard { public static final int G = 71; public static boolean isKeyDown(int key) { - return InputMappings.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), key); + return InputConstants.isKeyDown(Minecraft.getInstance().getWindow().getWindow(), key); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Lang.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Lang.java new file mode 100644 index 0000000..307acdb --- /dev/null +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Lang.java @@ -0,0 +1,85 @@ +package com.simibubi.mightyarchitect.foundation.utility; + +import java.util.ArrayList; +import java.util.List; +import java.util.Locale; + +import com.simibubi.mightyarchitect.TheMightyArchitect; + +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.fluids.FluidStack; + +public class Lang { + + public static String asId(String name) { + return name.toLowerCase(Locale.ROOT); + } + + public static String nonPluralId(String name) { + String asId = asId(name); + return asId.endsWith("s") ? asId.substring(0, asId.length() - 1) : asId; + } + + public static List translatedOptions(String prefix, String... keys) { + List result = new ArrayList<>(keys.length); + for (String key : keys) + result.add(translate((prefix != null ? prefix + "." : "") + key).component()); + return result; + } + + public static Component empty() { + return TextComponent.EMPTY; + } + + // + + public static LangBuilder builder() { + return new LangBuilder(TheMightyArchitect.ID); + } + + public static LangBuilder builder(String namespace) { + return new LangBuilder(namespace); + } + + // + + public static LangBuilder blockName(BlockState state) { + return builder().add(state.getBlock() + .getName()); + } + + public static LangBuilder itemName(ItemStack stack) { + return builder().add(stack.getHoverName() + .copy()); + } + + public static LangBuilder fluidName(FluidStack stack) { + return builder().add(stack.getDisplayName() + .copy()); + } + + public static LangBuilder number(double d) { + return builder().text(LangNumberFormat.format(d)); + } + + public static LangBuilder translate(String langKey, Object... args) { + return builder().translate(langKey, args); + } + + public static LangBuilder text(String text) { + return builder().text(text); + } + + // + + public static Object[] resolveBuilders(Object[] args) { + for (int i = 0; i < args.length; i++) + if (args[i]instanceof LangBuilder cb) + args[i] = cb.component(); + return args; + } + +} diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LangBuilder.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LangBuilder.java new file mode 100644 index 0000000..e32bf4f --- /dev/null +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LangBuilder.java @@ -0,0 +1,167 @@ +package com.simibubi.mightyarchitect.foundation.utility; + +import java.util.List; + +import joptsimple.internal.Strings; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.entity.player.Player; + +public class LangBuilder { + + String namespace; + MutableComponent component; + + public LangBuilder(String namespace) { + this.namespace = namespace; + } + + public LangBuilder space() { + return text(" "); + } + + public LangBuilder newLine() { + return text("\n"); + } + + /** + * Appends a localised component
+ * To add an independently formatted localised component, use add() and a nested + * builder + * + * @param langKey + * @param args + * @return + */ + public LangBuilder translate(String langKey, Object... args) { + return add(new TranslatableComponent(namespace + "." + langKey, Lang.resolveBuilders(args))); + } + + /** + * Appends a text component + * + * @param literalText + * @return + */ + public LangBuilder text(String literalText) { + return add(new TextComponent(literalText)); + } + + /** + * Appends a colored text component + * + * @param format + * @param literalText + * @return + */ + public LangBuilder text(ChatFormatting format, String literalText) { + return add(new TextComponent(literalText).withStyle(format)); + } + + /** + * Appends a colored text component + * + * @param color + * @param literalText + * @return + */ + public LangBuilder text(int color, String literalText) { + return add(new TextComponent(literalText).withStyle(s -> s.withColor(color))); + } + + /** + * Appends the contents of another builder + * + * @param otherBuilder + * @return + */ + public LangBuilder add(LangBuilder otherBuilder) { + return add(otherBuilder.component()); + } + + /** + * Appends a component + * + * @param customComponent + * @return + */ + public LangBuilder add(MutableComponent customComponent) { + component = component == null ? customComponent : component.append(customComponent); + return this; + } + + // + + /** + * Applies the format to all added components + * + * @param format + * @return + */ + public LangBuilder style(ChatFormatting format) { + assertComponent(); + component = component.withStyle(format); + return this; + } + + /** + * Applies the color to all added components + * + * @param color + * @return + */ + public LangBuilder color(int color) { + assertComponent(); + component = component.withStyle(s -> s.withColor(color)); + return this; + } + + // + + public MutableComponent component() { + assertComponent(); + return component; + } + + public String string() { + return component().getString(); + } + + public String json() { + return Component.Serializer.toJson(component()); + } + + public void sendStatus(Player player) { + player.displayClientMessage(component(), true); + } + + public void sendChat(Player player) { + player.displayClientMessage(component(), false); + } + + public void addTo(List tooltip) { + tooltip.add(component()); + } + + public void forGoggles(List tooltip) { + forGoggles(tooltip, 0); + } + + public void forGoggles(List tooltip, int indents) { + tooltip.add(Lang.builder() + .text(Strings.repeat(' ', 4 + indents)) + .add(this) + .component()); + } + + // + + private void assertComponent() { + if (component == null) + throw new IllegalStateException("No components were added to builder"); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LangNumberFormat.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LangNumberFormat.java new file mode 100644 index 0000000..56976d7 --- /dev/null +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LangNumberFormat.java @@ -0,0 +1,33 @@ +package com.simibubi.mightyarchitect.foundation.utility; + +import java.text.NumberFormat; +import java.util.Locale; + +import net.minecraft.client.Minecraft; + +public class LangNumberFormat { + + private NumberFormat format = NumberFormat.getNumberInstance(Locale.ROOT); + public static LangNumberFormat numberFormat = new LangNumberFormat(); + + public NumberFormat get() { + return format; + } + + public void update() { + format = NumberFormat.getInstance(Minecraft.getInstance() + .getLanguageManager() + .getSelected() + .getJavaLocale()); + format.setMaximumFractionDigits(2); + format.setMinimumFractionDigits(0); + format.setGroupingUsed(true); + } + + public static String format(double d) { + return numberFormat.get() + .format(d) + .replace("\u00A0", " "); + } + +} \ No newline at end of file diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LerpedFloat.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LerpedFloat.java new file mode 100644 index 0000000..032c73c --- /dev/null +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/LerpedFloat.java @@ -0,0 +1,148 @@ +package com.simibubi.mightyarchitect.foundation.utility; + +import net.minecraft.nbt.CompoundTag; +import net.minecraft.util.Mth; + +public class LerpedFloat { + + protected Interpolator interpolator; + protected float previousValue; + protected float value; + + protected Chaser chaseFunction; + protected float chaseTarget; + protected float chaseSpeed; + protected boolean angularChase; + + protected boolean forcedSync; + + public LerpedFloat(Interpolator interpolator) { + this.interpolator = interpolator; + startWithValue(0); + forcedSync = true; + } + + public static LerpedFloat linear() { + return new LerpedFloat((p, c, t) -> (float) Mth.lerp(p, c, t)); + } + + public static LerpedFloat angular() { + LerpedFloat lerpedFloat = new LerpedFloat(AngleHelper::angleLerp); + lerpedFloat.angularChase = true; + return lerpedFloat; + } + + public LerpedFloat startWithValue(double value) { + float f = (float) value; + this.previousValue = f; + this.chaseTarget = f; + this.value = f; + return this; + } + + public LerpedFloat chase(double value, double speed, Chaser chaseFunction) { + updateChaseTarget((float) value); + this.chaseSpeed = (float) speed; + this.chaseFunction = chaseFunction; + return this; + } + + public LerpedFloat disableSmartAngleChasing() { + angularChase = false; + return this; + } + + public void updateChaseTarget(float target) { + if (angularChase) + target = value + AngleHelper.getShortestAngleDiff(value, target); + this.chaseTarget = target; + } + + public boolean updateChaseSpeed(double speed) { + float prevSpeed = this.chaseSpeed; + this.chaseSpeed = (float) speed; + return !Mth.equal(prevSpeed, speed); + } + + public void tickChaser() { + previousValue = value; + if (chaseFunction == null) + return; + if (Mth.equal((double) value, chaseTarget)) { + value = chaseTarget; + return; + } + value = chaseFunction.chase(value, chaseSpeed, chaseTarget); + } + + public void setValueNoUpdate(double value) { + this.value = (float) value; + } + + public void setValue(double value) { + this.previousValue = this.value; + this.value = (float) value; + } + + public float getValue() { + return getValue(1); + } + + public float getValue(float partialTicks) { + return interpolator.interpolate(partialTicks, previousValue, value); + } + + public boolean settled() { + return Mth.equal((double) previousValue, value); + } + + public float getChaseTarget() { + return chaseTarget; + } + + public void forceNextSync() { + forcedSync = true; + } + + public CompoundTag writeNBT() { + CompoundTag compoundNBT = new CompoundTag(); + compoundNBT.putFloat("Speed", chaseSpeed); + compoundNBT.putFloat("Target", chaseTarget); + compoundNBT.putFloat("Value", value); + if (forcedSync) + compoundNBT.putBoolean("Force", true); + forcedSync = false; + return compoundNBT; + } + + public void readNBT(CompoundTag compoundNBT, boolean clientPacket) { + if (!clientPacket || compoundNBT.contains("Force")) + startWithValue(compoundNBT.getFloat("Value")); + readChaser(compoundNBT); + } + + protected void readChaser(CompoundTag compoundNBT) { + chaseSpeed = compoundNBT.getFloat("Speed"); + chaseTarget = compoundNBT.getFloat("Target"); + } + + @FunctionalInterface + public interface Interpolator { + float interpolate(double progress, double current, double target); + } + + @FunctionalInterface + public interface Chaser { + + Chaser IDLE = (c, s, t) -> (float) c; + Chaser EXP = exp(Double.MAX_VALUE); + Chaser LINEAR = (c, s, t) -> (float) (c + Mth.clamp(t - c, -s, s)); + + static Chaser exp(double maxEffectiveSpeed) { + return (c, s, t) -> (float) (c + Mth.clamp((t - c) * s, -maxEffectiveSpeed, maxEffectiveSpeed)); + } + + float chase(double current, double speed, double target); + } + +} diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/RaycastHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/RaycastHelper.java index 7aaca8e..b7dd4c8 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/RaycastHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/RaycastHelper.java @@ -2,66 +2,66 @@ import java.util.function.Predicate; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.util.Direction; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.BlockRayTraceResult; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.RayTraceContext; -import net.minecraft.util.math.RayTraceContext.BlockMode; -import net.minecraft.util.math.RayTraceContext.FluidMode; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.util.Mth; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.ClipContext; +import net.minecraft.world.level.ClipContext.Block; +import net.minecraft.world.level.ClipContext.Fluid; +import net.minecraft.world.level.Level; +import net.minecraft.world.phys.BlockHitResult; +import net.minecraft.world.phys.Vec3; public class RaycastHelper { - public static BlockRayTraceResult rayTraceRange(World worldIn, PlayerEntity playerIn, double range) { - Vector3d origin = getTraceOrigin(playerIn); - Vector3d target = getTraceTarget(playerIn, range, origin); - RayTraceContext context = new RayTraceContext(origin, target, BlockMode.COLLIDER, FluidMode.NONE, playerIn); + public static BlockHitResult rayTraceRange(Level worldIn, Player playerIn, double range) { + Vec3 origin = getTraceOrigin(playerIn); + Vec3 target = getTraceTarget(playerIn, range, origin); + ClipContext context = new ClipContext(origin, target, Block.COLLIDER, Fluid.NONE, playerIn); return worldIn.clip(context); } - public static PredicateTraceResult rayTraceUntil(PlayerEntity playerIn, double range, Predicate predicate) { - Vector3d origin = getTraceOrigin(playerIn); - Vector3d target = getTraceTarget(playerIn, range, origin); + public static PredicateTraceResult rayTraceUntil(Player playerIn, double range, Predicate predicate) { + Vec3 origin = getTraceOrigin(playerIn); + Vec3 target = getTraceTarget(playerIn, range, origin); return rayTraceUntil(origin, target, predicate); } - private static Vector3d getTraceTarget(PlayerEntity playerIn, double range, Vector3d origin) { - float f = playerIn.xRot; - float f1 = playerIn.yRot; - float f2 = MathHelper.cos(-f1 * 0.017453292F - (float) Math.PI); - float f3 = MathHelper.sin(-f1 * 0.017453292F - (float) Math.PI); - float f4 = -MathHelper.cos(-f * 0.017453292F); - float f5 = MathHelper.sin(-f * 0.017453292F); + private static Vec3 getTraceTarget(Player playerIn, double range, Vec3 origin) { + float f = playerIn.getXRot(); + float f1 = playerIn.getYRot(); + float f2 = Mth.cos(-f1 * 0.017453292F - (float) Math.PI); + float f3 = Mth.sin(-f1 * 0.017453292F - (float) Math.PI); + float f4 = -Mth.cos(-f * 0.017453292F); + float f5 = Mth.sin(-f * 0.017453292F); float f6 = f3 * f4; float f7 = f2 * f4; double d3 = range; - Vector3d Vector3d1 = origin.add((double) f6 * d3, (double) f5 * d3, (double) f7 * d3); + Vec3 Vector3d1 = origin.add((double) f6 * d3, (double) f5 * d3, (double) f7 * d3); return Vector3d1; } - private static Vector3d getTraceOrigin(PlayerEntity playerIn) { + private static Vec3 getTraceOrigin(Player playerIn) { double d0 = playerIn.getX(); double d1 = playerIn.getY() + (double) playerIn.getEyeHeight(); double d2 = playerIn.getZ(); - Vector3d Vector3d = new Vector3d(d0, d1, d2); + Vec3 Vector3d = new Vec3(d0, d1, d2); return Vector3d; } - private static PredicateTraceResult rayTraceUntil(Vector3d start, Vector3d end, Predicate predicate) { + private static PredicateTraceResult rayTraceUntil(Vec3 start, Vec3 end, Predicate predicate) { if (Double.isNaN(start.x) || Double.isNaN(start.y) || Double.isNaN(start.z)) return null; if (Double.isNaN(end.x) || Double.isNaN(end.y) || Double.isNaN(end.z)) return null; - int dx = MathHelper.floor(end.x); - int dy = MathHelper.floor(end.y); - int dz = MathHelper.floor(end.z); - int x = MathHelper.floor(start.x); - int y = MathHelper.floor(start.y); - int z = MathHelper.floor(start.z); + int dx = Mth.floor(end.x); + int dy = Mth.floor(end.y); + int dz = Mth.floor(end.z); + int x = Mth.floor(start.x); + int y = Mth.floor(start.y); + int z = Mth.floor(start.z); BlockPos currentPos = new BlockPos(x, y, z); @@ -145,18 +145,18 @@ private static PredicateTraceResult rayTraceUntil(Vector3d start, Vector3d end, if (d3 < d4 && d3 < d5) { enumfacing = dx > x ? Direction.WEST : Direction.EAST; - start = new Vector3d(d0, start.y + d7 * d3, start.z + d8 * d3); + start = new Vec3(d0, start.y + d7 * d3, start.z + d8 * d3); } else if (d4 < d5) { enumfacing = dy > y ? Direction.DOWN : Direction.UP; - start = new Vector3d(start.x + d6 * d4, d1, start.z + d8 * d4); + start = new Vec3(start.x + d6 * d4, d1, start.z + d8 * d4); } else { enumfacing = dz > z ? Direction.NORTH : Direction.SOUTH; - start = new Vector3d(start.x + d6 * d5, start.y + d7 * d5, d2); + start = new Vec3(start.x + d6 * d5, start.y + d7 * d5, d2); } - x = MathHelper.floor(start.x) - (enumfacing == Direction.EAST ? 1 : 0); - y = MathHelper.floor(start.y) - (enumfacing == Direction.UP ? 1 : 0); - z = MathHelper.floor(start.z) - (enumfacing == Direction.SOUTH ? 1 : 0); + x = Mth.floor(start.x) - (enumfacing == Direction.EAST ? 1 : 0); + y = Mth.floor(start.y) - (enumfacing == Direction.UP ? 1 : 0); + z = Mth.floor(start.z) - (enumfacing == Direction.SOUTH ? 1 : 0); currentPos = new BlockPos(x, y, z); if (predicate.test(currentPos)) diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ShaderManager.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ShaderManager.java index cc59120..aa0a4de 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ShaderManager.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/ShaderManager.java @@ -1,9 +1,9 @@ package com.simibubi.mightyarchitect.foundation.utility; import net.minecraft.client.Minecraft; -import net.minecraft.client.entity.player.ClientPlayerEntity; -import net.minecraft.potion.EffectInstance; -import net.minecraft.potion.Effects; +import net.minecraft.client.player.LocalPlayer; +import net.minecraft.world.effect.MobEffectInstance; +import net.minecraft.world.effect.MobEffects; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.eventbus.api.EventPriority; @@ -20,10 +20,10 @@ public static void onClientTick(ClientTickEvent event) { if (Minecraft.getInstance().level == null && activeShader != Shaders.None) stopUsingShaders(); - ClientPlayerEntity player = Minecraft.getInstance().player; + LocalPlayer player = Minecraft.getInstance().player; if (player == null) return; - EffectInstance activePotionEffect = player.getEffect(Effects.NIGHT_VISION); + MobEffectInstance activePotionEffect = player.getEffect(MobEffects.NIGHT_VISION); if (activeShader == Shaders.Blueprint) { if (activePotionEffect == null || activePotionEffect.getDuration() < 999) @@ -32,7 +32,7 @@ public static void onClientTick(ClientTickEvent event) { } if (activePotionEffect instanceof NVEffectInstance) - player.removeEffectNoUpdate(Effects.NIGHT_VISION); + player.removeEffectNoUpdate(MobEffects.NIGHT_VISION); } public static Shaders getActiveShader() { @@ -51,10 +51,10 @@ public static void stopUsingShaders() { activeShader.setActive(true); } - private static class NVEffectInstance extends EffectInstance { + private static class NVEffectInstance extends MobEffectInstance { public NVEffectInstance() { - super(Effects.NIGHT_VISION, 1000, 0, false, false, false); + super(MobEffects.NIGHT_VISION, 1000, 0, false, false, false); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Shaders.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Shaders.java index 40b2a26..1274a43 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Shaders.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/Shaders.java @@ -3,8 +3,8 @@ import com.simibubi.mightyarchitect.TheMightyArchitect; import net.minecraft.client.Minecraft; -import net.minecraft.client.shader.ShaderGroup; -import net.minecraft.util.ResourceLocation; +import net.minecraft.client.renderer.PostChain; +import net.minecraft.resources.ResourceLocation; public enum Shaders { @@ -18,7 +18,7 @@ private Shaders(String filename) { public boolean isActive() { Minecraft mc = Minecraft.getInstance(); - ShaderGroup shaderGroup = mc.gameRenderer.currentEffect(); + PostChain shaderGroup = mc.gameRenderer.currentEffect(); return shaderGroup != null && shaderGroup.getName() .equals(location.toString()); } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/VecHelper.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/VecHelper.java index f1ea411..8bb42e8 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/VecHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/VecHelper.java @@ -4,106 +4,106 @@ import javax.annotation.Nullable; -import net.minecraft.nbt.DoubleNBT; -import net.minecraft.nbt.ListNBT; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3i; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.core.Vec3i; +import net.minecraft.nbt.DoubleTag; +import net.minecraft.nbt.ListTag; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; public class VecHelper { - public static final Vector3d CENTER_OF_ORIGIN = new Vector3d(.5, .5, .5); + public static final Vec3 CENTER_OF_ORIGIN = new Vec3(.5, .5, .5); - public static Vector3d rotate(Vector3d vec, Vector3d rotationVec) { + public static Vec3 rotate(Vec3 vec, Vec3 rotationVec) { return rotate(vec, rotationVec.x, rotationVec.y, rotationVec.z); } - public static Vector3d rotate(Vector3d vec, double xRot, double yRot, double zRot) { + public static Vec3 rotate(Vec3 vec, double xRot, double yRot, double zRot) { return rotate(rotate(rotate(vec, xRot, Axis.X), yRot, Axis.Y), zRot, Axis.Z); } - public static Vector3d rotateCentered(Vector3d vec, double deg, Axis axis) { - Vector3d shift = getCenterOf(BlockPos.ZERO); + public static Vec3 rotateCentered(Vec3 vec, double deg, Axis axis) { + Vec3 shift = getCenterOf(BlockPos.ZERO); return VecHelper.rotate(vec.subtract(shift), deg, axis) .add(shift); } - public static Vector3d lerp(Vector3d start, Vector3d end, double pct) { + public static Vec3 lerp(Vec3 start, Vec3 end, double pct) { return start.add(end.subtract(start).scale(pct)); } - public static Vector3d rotate(Vector3d vec, double deg, Axis axis) { + public static Vec3 rotate(Vec3 vec, double deg, Axis axis) { if (deg == 0) return vec; - if (vec == Vector3d.ZERO) + if (vec == Vec3.ZERO) return vec; float angle = (float) (deg / 180f * Math.PI); - double sin = MathHelper.sin(angle); - double cos = MathHelper.cos(angle); + double sin = Mth.sin(angle); + double cos = Mth.cos(angle); double x = vec.x; double y = vec.y; double z = vec.z; if (axis == Axis.X) - return new Vector3d(x, y * cos - z * sin, z * cos + y * sin); + return new Vec3(x, y * cos - z * sin, z * cos + y * sin); if (axis == Axis.Y) - return new Vector3d(x * cos + z * sin, y, z * cos - x * sin); + return new Vec3(x * cos + z * sin, y, z * cos - x * sin); if (axis == Axis.Z) - return new Vector3d(x * cos - y * sin, y * cos + x * sin, z); + return new Vec3(x * cos - y * sin, y * cos + x * sin, z); return vec; } - public static boolean isVecPointingTowards(Vector3d vec, Direction direction) { - return Vector3d.atLowerCornerOf(direction.getNormal()).distanceTo(vec.normalize()) < .75; + public static boolean isVecPointingTowards(Vec3 vec, Direction direction) { + return Vec3.atLowerCornerOf(direction.getNormal()).distanceTo(vec.normalize()) < .75; } - public static Vector3d getCenterOf(Vector3i pos) { - if (pos.equals(Vector3i.ZERO)) + public static Vec3 getCenterOf(Vec3i pos) { + if (pos.equals(Vec3i.ZERO)) return CENTER_OF_ORIGIN; - return Vector3d.atLowerCornerOf(pos).add(.5f, .5f, .5f); + return Vec3.atLowerCornerOf(pos).add(.5f, .5f, .5f); } - public static Vector3d offsetRandomly(Vector3d vec, Random r, float radius) { - return new Vector3d(vec.x + (r.nextFloat() - .5f) * 2 * radius, vec.y + (r.nextFloat() - .5f) * 2 * radius, + public static Vec3 offsetRandomly(Vec3 vec, Random r, float radius) { + return new Vec3(vec.x + (r.nextFloat() - .5f) * 2 * radius, vec.y + (r.nextFloat() - .5f) * 2 * radius, vec.z + (r.nextFloat() - .5f) * 2 * radius); } - public static Vector3d axisAlingedPlaneOf(Vector3d vec) { + public static Vec3 axisAlingedPlaneOf(Vec3 vec) { vec = vec.normalize(); - return new Vector3d(1, 1, 1).subtract(Math.abs(vec.x), Math.abs(vec.y), Math.abs(vec.z)); + return new Vec3(1, 1, 1).subtract(Math.abs(vec.x), Math.abs(vec.y), Math.abs(vec.z)); } - public static Vector3d axisAlingedPlaneOf(Direction face) { - return axisAlingedPlaneOf(Vector3d.atLowerCornerOf(face.getNormal())); + public static Vec3 axisAlingedPlaneOf(Direction face) { + return axisAlingedPlaneOf(Vec3.atLowerCornerOf(face.getNormal())); } - public static ListNBT writeNBT(Vector3d vec) { - ListNBT listnbt = new ListNBT(); - listnbt.add(DoubleNBT.valueOf(vec.x)); - listnbt.add(DoubleNBT.valueOf(vec.y)); - listnbt.add(DoubleNBT.valueOf(vec.z)); + public static ListTag writeNBT(Vec3 vec) { + ListTag listnbt = new ListTag(); + listnbt.add(DoubleTag.valueOf(vec.x)); + listnbt.add(DoubleTag.valueOf(vec.y)); + listnbt.add(DoubleTag.valueOf(vec.z)); return listnbt; } - public static Vector3d readNBT(ListNBT list) { + public static Vec3 readNBT(ListTag list) { if (list.isEmpty()) - return Vector3d.ZERO; - return new Vector3d(list.getDouble(0), list.getDouble(1), list.getDouble(2)); + return Vec3.ZERO; + return new Vec3(list.getDouble(0), list.getDouble(1), list.getDouble(2)); } - public static Vector3d voxelSpace(double x, double y, double z) { - return new Vector3d(x, y, z).scale(1 / 16f); + public static Vec3 voxelSpace(double x, double y, double z) { + return new Vec3(x, y, z).scale(1 / 16f); } - public static int getCoordinate(Vector3i pos, Axis axis) { + public static int getCoordinate(Vec3i pos, Axis axis) { return axis.choose(pos.getX(), pos.getY(), pos.getZ()); } - public static float getCoordinate(Vector3d vec, Axis axis) { + public static float getCoordinate(Vec3 vec, Axis axis) { return (float) axis.choose(vec.x, vec.y, vec.z); } @@ -117,35 +117,35 @@ public static boolean onSameAxis(BlockPos pos1, BlockPos pos2, Axis axis) { return true; } - public static Vector3d clamp(Vector3d vec, float maxLength) { + public static Vec3 clamp(Vec3 vec, float maxLength) { return vec.length() > maxLength ? vec.normalize() .scale(maxLength) : vec; } - public static Vector3d clampComponentWise(Vector3d vec, float maxLength) { - return new Vector3d(MathHelper.clamp(vec.x, -maxLength, maxLength), MathHelper.clamp(vec.y, -maxLength, maxLength), - MathHelper.clamp(vec.z, -maxLength, maxLength)); + public static Vec3 clampComponentWise(Vec3 vec, float maxLength) { + return new Vec3(Mth.clamp(vec.x, -maxLength, maxLength), Mth.clamp(vec.y, -maxLength, maxLength), + Mth.clamp(vec.z, -maxLength, maxLength)); } - public static Vector3d project(Vector3d vec, Vector3d ontoVec) { - if (ontoVec.equals(Vector3d.ZERO)) - return Vector3d.ZERO; + public static Vec3 project(Vec3 vec, Vec3 ontoVec) { + if (ontoVec.equals(Vec3.ZERO)) + return Vec3.ZERO; return ontoVec.scale(vec.dot(ontoVec) / ontoVec.lengthSqr()); } @Nullable - public static Vector3d intersectSphere(Vector3d origin, Vector3d lineDirection, Vector3d sphereCenter, double radius) { - if (lineDirection.equals(Vector3d.ZERO)) + public static Vec3 intersectSphere(Vec3 origin, Vec3 lineDirection, Vec3 sphereCenter, double radius) { + if (lineDirection.equals(Vec3.ZERO)) return null; if (lineDirection.length() != 1) lineDirection = lineDirection.normalize(); - Vector3d diff = origin.subtract(sphereCenter); + Vec3 diff = origin.subtract(sphereCenter); double lineDotDiff = lineDirection.dot(diff); double delta = lineDotDiff * lineDotDiff - (diff.lengthSqr() - radius * radius); if (delta < 0) return null; - double t = -lineDotDiff + MathHelper.sqrt(delta); + double t = -lineDotDiff + Math.sqrt(delta); return origin.add(lineDirection.scale(t)); } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/AABBOutline.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/AABBOutline.java index 0c78cff..59aa1ca 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/AABBOutline.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/AABBOutline.java @@ -1,48 +1,47 @@ package com.simibubi.mightyarchitect.foundation.utility.outliner; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.mightyarchitect.foundation.RenderTypes; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.RenderType; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; public class AABBOutline extends Outline { - protected AxisAlignedBB bb; + protected AABB bb; - public AABBOutline(AxisAlignedBB bb) { + public AABBOutline(AABB bb) { this.setBounds(bb); } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { renderBB(ms, buffer, bb); } - public void renderBB(MatrixStack ms, IRenderTypeBuffer buffer, AxisAlignedBB bb) { - Vector3d projectedView = Minecraft.getInstance().gameRenderer.getMainCamera() + public void renderBB(PoseStack ms, MultiBufferSource buffer, AABB bb) { + Vec3 projectedView = Minecraft.getInstance().gameRenderer.getMainCamera() .getPosition(); boolean noCull = bb.contains(projectedView); bb = bb.inflate(noCull ? -1 / 128d : 1 / 128d); noCull |= params.disableCull; - Vector3d xyz = new Vector3d(bb.minX, bb.minY, bb.minZ); - Vector3d Xyz = new Vector3d(bb.maxX, bb.minY, bb.minZ); - Vector3d xYz = new Vector3d(bb.minX, bb.maxY, bb.minZ); - Vector3d XYz = new Vector3d(bb.maxX, bb.maxY, bb.minZ); - Vector3d xyZ = new Vector3d(bb.minX, bb.minY, bb.maxZ); - Vector3d XyZ = new Vector3d(bb.maxX, bb.minY, bb.maxZ); - Vector3d xYZ = new Vector3d(bb.minX, bb.maxY, bb.maxZ); - Vector3d XYZ = new Vector3d(bb.maxX, bb.maxY, bb.maxZ); + Vec3 xyz = new Vec3(bb.minX, bb.minY, bb.minZ); + Vec3 Xyz = new Vec3(bb.maxX, bb.minY, bb.minZ); + Vec3 xYz = new Vec3(bb.minX, bb.maxY, bb.minZ); + Vec3 XYz = new Vec3(bb.maxX, bb.maxY, bb.minZ); + Vec3 xyZ = new Vec3(bb.minX, bb.minY, bb.maxZ); + Vec3 XyZ = new Vec3(bb.maxX, bb.minY, bb.maxZ); + Vec3 xYZ = new Vec3(bb.minX, bb.maxY, bb.maxZ); + Vec3 XYZ = new Vec3(bb.maxX, bb.maxY, bb.maxZ); - Vector3d start = xyz; + Vec3 start = xyz; renderAACuboidLine(ms, buffer, start, Xyz); renderAACuboidLine(ms, buffer, start, xYz); renderAACuboidLine(ms, buffer, start, xyZ); @@ -71,8 +70,8 @@ public void renderBB(MatrixStack ms, IRenderTypeBuffer buffer, AxisAlignedBB bb) } - protected void renderFace(MatrixStack ms, IRenderTypeBuffer buffer, Direction direction, Vector3d p1, Vector3d p2, - Vector3d p3, Vector3d p4, boolean noCull) { + protected void renderFace(PoseStack ms, MultiBufferSource buffer, Direction direction, Vec3 p1, Vec3 p2, Vec3 p3, + Vec3 p4, boolean noCull) { if (!params.faceTexture.isPresent()) return; if (params.isFaceHidden(direction)) @@ -84,20 +83,23 @@ protected void renderFace(MatrixStack ms, IRenderTypeBuffer buffer, Direction di params.alpha = (direction == params.getHighlightedFace() && params.hightlightedFaceTexture.isPresent()) ? 1 : alphaBefore; - RenderType translucentType = RenderTypes.getOutlineTranslucent(faceTexture, !noCull); - IVertexBuilder builder = buffer.getBuffer(translucentType); + // LogManager.getLogger().info(faceTexture.getPath() + " " + params.alpha + " " + // + alphaBefore); + + VertexConsumer builder = buffer.getBuffer(RenderTypes.getOutlineTranslucent(faceTexture, !noCull)); Axis axis = direction.getAxis(); - Vector3d uDiff = p2.subtract(p1); - Vector3d vDiff = p4.subtract(p1); + Vec3 uDiff = p2.subtract(p1); + Vec3 vDiff = p4.subtract(p1); float maxU = (float) Math.abs(axis == Axis.X ? uDiff.z : uDiff.x); float maxV = (float) Math.abs(axis == Axis.Y ? vDiff.z : vDiff.y); - putQuadUVColor(ms, builder, p1, p2, p3, p4, params.faceRgb == null ? params.rgb : params.faceRgb, 0, 0, maxU, - maxV, Direction.UP); + + putQuadUV(ms, builder, p1, p2, p3, p4, 0, 0, maxU, maxV, Direction.UP, true); + params.alpha = alphaBefore; } - public void setBounds(AxisAlignedBB bb) { + public void setBounds(AABB bb) { this.bb = bb; } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/BlockClusterOutline.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/BlockClusterOutline.java index b81b191..04c670f 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/BlockClusterOutline.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/BlockClusterOutline.java @@ -6,19 +6,19 @@ import java.util.Optional; import java.util.Set; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; import com.simibubi.mightyarchitect.AllSpecialTextures; import com.simibubi.mightyarchitect.foundation.RenderTypes; import com.simibubi.mightyarchitect.foundation.utility.VecHelper; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.Direction.AxisDirection; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.core.BlockPos; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.core.Direction.AxisDirection; +import net.minecraft.world.phys.Vec3; public class BlockClusterOutline extends Outline { @@ -30,11 +30,11 @@ public BlockClusterOutline(Iterable selection) { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { for (MergeEntry edge : cluster.visibleEdges) { - Vector3d start = Vector3d.atLowerCornerOf(edge.pos); + Vec3 start = Vec3.atLowerCornerOf(edge.pos); Direction direction = Direction.get(AxisDirection.POSITIVE, edge.axis); - renderAACuboidLine(ms, buffer, start, Vector3d.atLowerCornerOf(edge.pos.relative(direction))); + renderAACuboidLine(ms, buffer, start, Vec3.atLowerCornerOf(edge.pos.relative(direction))); } for (MergeEntry face : cluster.visibleFaces.keySet()) { @@ -47,18 +47,18 @@ public void render(MatrixStack ms, IRenderTypeBuffer buffer) { } } - protected void renderBlockFace(MatrixStack ms, IRenderTypeBuffer buffer, BlockPos pos, Direction face) { + protected void renderBlockFace(PoseStack ms, MultiBufferSource buffer, BlockPos pos, Direction face) { Optional faceTexture = params.faceTexture; if (!faceTexture.isPresent()) return; RenderType translucentType = RenderTypes.getOutlineTranslucent(faceTexture.get() .getLocation(), true); - IVertexBuilder builder = buffer.getBuffer(translucentType); + VertexConsumer builder = buffer.getBuffer(translucentType); - Vector3d center = VecHelper.getCenterOf(pos); - Vector3d offset = Vector3d.atLowerCornerOf(face.getNormal()); - Vector3d plane = VecHelper.axisAlingedPlaneOf(offset); + Vec3 center = VecHelper.getCenterOf(pos); + Vec3 offset = Vec3.atLowerCornerOf(face.getNormal()); + Vec3 plane = VecHelper.axisAlingedPlaneOf(offset); Axis axis = face.getAxis(); offset = offset.scale(1 / 2f + 1 / 64d); @@ -67,13 +67,13 @@ protected void renderBlockFace(MatrixStack ms, IRenderTypeBuffer buffer, BlockPo int deg = face.getAxisDirection() .getStep() * 90; - Vector3d a1 = plane.add(center); + Vec3 a1 = plane.add(center); plane = VecHelper.rotate(plane, deg, axis); - Vector3d a2 = plane.add(center); + Vec3 a2 = plane.add(center); plane = VecHelper.rotate(plane, deg, axis); - Vector3d a3 = plane.add(center); + Vec3 a3 = plane.add(center); plane = VecHelper.rotate(plane, deg, axis); - Vector3d a4 = plane.add(center); + Vec3 a4 = plane.add(center); putQuad(ms, builder, a1, a2, a3, a4, face); } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/ChasingAABBOutline.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/ChasingAABBOutline.java index 0c57f21..c08cb88 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/ChasingAABBOutline.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/ChasingAABBOutline.java @@ -1,24 +1,24 @@ package com.simibubi.mightyarchitect.foundation.utility.outliner; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.MathHelper; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.AABB; public class ChasingAABBOutline extends AABBOutline { - AxisAlignedBB targetBB; - AxisAlignedBB prevBB; + AABB targetBB; + AABB prevBB; - public ChasingAABBOutline(AxisAlignedBB bb) { + public ChasingAABBOutline(AABB bb) { super(bb); prevBB = bb.inflate(0); targetBB = bb.inflate(0); } - public void target(AxisAlignedBB target) { + public void target(AABB target) { targetBB = target; } @@ -29,16 +29,16 @@ public void tick() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { renderBB(ms, buffer, interpolateBBs(prevBB, bb, Minecraft.getInstance() .getFrameTime())); } - private static AxisAlignedBB interpolateBBs(AxisAlignedBB current, AxisAlignedBB target, float pt) { - return new AxisAlignedBB(MathHelper.lerp(pt, current.minX, target.minX), - MathHelper.lerp(pt, current.minY, target.minY), MathHelper.lerp(pt, current.minZ, target.minZ), - MathHelper.lerp(pt, current.maxX, target.maxX), MathHelper.lerp(pt, current.maxY, target.maxY), - MathHelper.lerp(pt, current.maxZ, target.maxZ)); + private static AABB interpolateBBs(AABB current, AABB target, float pt) { + return new AABB(Mth.lerp(pt, current.minX, target.minX), + Mth.lerp(pt, current.minY, target.minY), Mth.lerp(pt, current.minZ, target.minZ), + Mth.lerp(pt, current.maxX, target.maxX), Mth.lerp(pt, current.maxY, target.maxY), + Mth.lerp(pt, current.maxZ, target.maxZ)); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/LineOutline.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/LineOutline.java index 9ec5398..b4e3a8c 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/LineOutline.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/LineOutline.java @@ -1,37 +1,37 @@ package com.simibubi.mightyarchitect.foundation.utility.outliner; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; public class LineOutline extends Outline { - protected Vector3d start = Vector3d.ZERO; - protected Vector3d end = Vector3d.ZERO; + protected Vec3 start = Vec3.ZERO; + protected Vec3 end = Vec3.ZERO; - public LineOutline set(Vector3d start, Vector3d end) { + public LineOutline set(Vec3 start, Vec3 end) { this.start = start; this.end = end; return this; } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { renderCuboidLine(ms, buffer, start, end); } public static class ChasingLineOutline extends LineOutline { - protected Vector3d prevStart = Vector3d.ZERO; - protected Vector3d prevEnd = Vector3d.ZERO; - protected Vector3d targetStart = Vector3d.ZERO; - protected Vector3d targetEnd = Vector3d.ZERO; + protected Vec3 prevStart = Vec3.ZERO; + protected Vec3 prevEnd = Vec3.ZERO; + protected Vec3 targetStart = Vec3.ZERO; + protected Vec3 targetEnd = Vec3.ZERO; - public ChasingLineOutline target(Vector3d start, Vector3d end) { + public ChasingLineOutline target(Vec3 start, Vec3 end) { if (end.distanceTo(targetStart) + start.distanceTo(targetEnd) < end.distanceTo(targetEnd) + start.distanceTo(targetStart)) { this.targetEnd = start; @@ -44,7 +44,7 @@ public ChasingLineOutline target(Vector3d start, Vector3d end) { } @Override - public LineOutline set(Vector3d start, Vector3d end) { + public LineOutline set(Vec3 start, Vec3 end) { prevEnd = end; prevStart = start; return super.set(start, end); @@ -59,7 +59,7 @@ public void tick() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { float pt = Minecraft.getInstance() .getFrameTime(); renderCuboidLine(ms, buffer, VecHelper.lerp(prevStart, start, pt), VecHelper.lerp(prevEnd, end, pt)); @@ -82,18 +82,18 @@ public EndChasingLineOutline setProgress(float progress) { } @Override - public LineOutline set(Vector3d start, Vector3d end) { + public LineOutline set(Vec3 start, Vec3 end) { if (!end.equals(this.end)) super.set(start, end); return this; } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { float pt = Minecraft.getInstance() .getFrameTime(); - float distanceToTarget = 1 - MathHelper.lerp(pt, prevProgress, progress); - Vector3d start = end.add(this.start.subtract(end) + float distanceToTarget = 1 - Mth.lerp(pt, prevProgress, progress); + Vec3 start = end.add(this.start.subtract(end) .scale(distanceToTarget)); renderCuboidLine(ms, buffer, start, end); } diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outline.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outline.java index 7ea7311..1dd5145 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outline.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outline.java @@ -4,9 +4,10 @@ import javax.annotation.Nullable; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.matrix.MatrixStack.Entry; -import com.mojang.blaze3d.vertex.IVertexBuilder; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.PoseStack.Pose; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Matrix3f; import com.simibubi.mightyarchitect.AllSpecialTextures; import com.simibubi.mightyarchitect.foundation.MatrixStacker; import com.simibubi.mightyarchitect.foundation.RenderTypes; @@ -14,13 +15,13 @@ import com.simibubi.mightyarchitect.foundation.utility.ColorHelper; import com.simibubi.mightyarchitect.foundation.utility.VecHelper; -import net.minecraft.client.renderer.IRenderTypeBuffer; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.Axis; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Matrix3f; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.core.Direction; +import net.minecraft.core.Direction.Axis; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.Vec3; public abstract class Outline { @@ -31,38 +32,38 @@ public Outline() { params = new OutlineParams(); } - public abstract void render(MatrixStack ms, IRenderTypeBuffer buffer); + public abstract void render(PoseStack ms, MultiBufferSource buffer); - public void renderCuboidLine(MatrixStack ms, IRenderTypeBuffer buffer, Vector3d start, Vector3d end) { - Vector3d diff = end.subtract(start); - float hAngle = AngleHelper.deg(MathHelper.atan2(diff.x, diff.z)); + public void renderCuboidLine(PoseStack ms, MultiBufferSource buffer, Vec3 start, Vec3 end) { + Vec3 diff = end.subtract(start); + float hAngle = AngleHelper.deg(Mth.atan2(diff.x, diff.z)); float hDistance = (float) diff.multiply(1, 0, 1) .length(); - float vAngle = AngleHelper.deg(MathHelper.atan2(hDistance, diff.y)) - 90; + float vAngle = AngleHelper.deg(Mth.atan2(hDistance, diff.y)) - 90; ms.pushPose(); MatrixStacker.of(ms) .translate(start) .rotateY(hAngle) .rotateX(vAngle); - renderAACuboidLine(ms, buffer, Vector3d.ZERO, new Vector3d(0, 0, diff.length())); + renderAACuboidLine(ms, buffer, Vec3.ZERO, new Vec3(0, 0, diff.length())); ms.popPose(); } - public void renderAACuboidLine(MatrixStack ms, IRenderTypeBuffer buffer, Vector3d start, Vector3d end) { - IVertexBuilder builder = buffer.getBuffer(RenderTypes.getOutlineSolid()); + public void renderAACuboidLine(PoseStack ms, MultiBufferSource buffer, Vec3 start, Vec3 end) { + VertexConsumer builder = buffer.getBuffer(RenderTypes.getOutlineSolid(AllSpecialTextures.BLANK.getLocation()));//todo simplify - Vector3d diff = end.subtract(start); + Vec3 diff = end.subtract(start); if (diff.x + diff.y + diff.z < 0) { - Vector3d temp = start; + Vec3 temp = start; start = end; end = temp; diff = diff.scale(-1); } float lineWidth = params.getLineWidth(); - Vector3d extension = diff.normalize() + Vec3 extension = diff.normalize() .scale(lineWidth / 2); - Vector3d plane = VecHelper.axisAlingedPlaneOf(diff); + Vec3 plane = VecHelper.axisAlingedPlaneOf(diff); Direction face = Direction.getNearest(diff.x, diff.y, diff.z); Axis axis = face.getAxis(); @@ -70,17 +71,17 @@ public void renderAACuboidLine(MatrixStack ms, IRenderTypeBuffer buffer, Vector3 end = end.add(extension); plane = plane.scale(lineWidth / 2); - Vector3d a1 = plane.add(start); - Vector3d b1 = plane.add(end); + Vec3 a1 = plane.add(start); + Vec3 b1 = plane.add(end); plane = VecHelper.rotate(plane, -90, axis); - Vector3d a2 = plane.add(start); - Vector3d b2 = plane.add(end); + Vec3 a2 = plane.add(start); + Vec3 b2 = plane.add(end); plane = VecHelper.rotate(plane, -90, axis); - Vector3d a3 = plane.add(start); - Vector3d b3 = plane.add(end); + Vec3 a3 = plane.add(start); + Vec3 b3 = plane.add(end); plane = VecHelper.rotate(plane, -90, axis); - Vector3d a4 = plane.add(start); - Vector3d b4 = plane.add(end); + Vec3 a4 = plane.add(start); + Vec3 b4 = plane.add(end); if (params.disableNormals) { face = Direction.UP; @@ -95,7 +96,7 @@ public void renderAACuboidLine(MatrixStack ms, IRenderTypeBuffer buffer, Vector3 putQuad(ms, builder, b4, b3, b2, b1, face); putQuad(ms, builder, a1, a2, a3, a4, face.getOpposite()); - Vector3d vec = a1.subtract(a4); + Vec3 vec = a1.subtract(a4); face = Direction.getNearest(vec.x, vec.y, vec.z); putQuad(ms, builder, a1, b1, b2, a2, face); vec = VecHelper.rotate(vec, -90, axis); @@ -109,24 +110,21 @@ public void renderAACuboidLine(MatrixStack ms, IRenderTypeBuffer buffer, Vector3 putQuad(ms, builder, a4, b4, b1, a1, face); } - public void putQuad(MatrixStack ms, IVertexBuilder builder, Vector3d v1, Vector3d v2, Vector3d v3, Vector3d v4, + public void putQuad(PoseStack ms, VertexConsumer builder, Vec3 v1, Vec3 v2, Vec3 v3, Vec3 v4, Direction normal) { - putQuadUVColor(ms, builder, v1, v2, v3, v4, params.rgb, 0, 0, 1, 1, normal); + putQuadUV(ms, builder, v1, v2, v3, v4,0, 0, 1, 1, normal, false); } - public void putQuadUVColor(MatrixStack ms, IVertexBuilder builder, Vector3d v1, Vector3d v2, Vector3d v3, Vector3d v4, Vector3d rgb, float minU, - float minV, float maxU, float maxV, Direction normal) { - putVertex(ms, builder, v1, rgb, minU, minV, normal); - putVertex(ms, builder, v2, rgb, maxU, minV, normal); - putVertex(ms, builder, v3, rgb, maxU, maxV, normal); - putVertex(ms, builder, v4, rgb, minU, maxV, normal); + public void putQuadUV(PoseStack ms, VertexConsumer builder, Vec3 v1, Vec3 v2, Vec3 v3, Vec3 v4, float minU, + float minV, float maxU, float maxV, Direction normal, boolean useFaceColors) { + putVertex(ms, builder, v1, minU, minV, normal, useFaceColors); + putVertex(ms, builder, v2, maxU, minV, normal, useFaceColors); + putVertex(ms, builder, v3, maxU, maxV, normal, useFaceColors); + putVertex(ms, builder, v4, minU, maxV, normal, useFaceColors); } - protected void putVertex(MatrixStack ms, IVertexBuilder builder, Vector3d pos, Vector3d rgb, float u, float v, Direction normal) { - int i = 15 << 20 | 15 << 4; - int j = i >> 16 & '\uffff'; - int k = i & '\uffff'; - Entry peek = ms.last(); + protected void putVertex(PoseStack ms, VertexConsumer builder, Vec3 pos, float u, float v, Direction normal, boolean useFaceColor) { + Pose peek = ms.last(); if (transformNormals == null) transformNormals = peek.normal(); @@ -140,11 +138,18 @@ protected void putVertex(MatrixStack ms, IVertexBuilder builder, Vector3d pos, V zOffset = normal.getStepZ(); } + Vec3 color = params.rgb; + //LogManager.getLogger().info(color.toString()); + + if (useFaceColor && params.faceRgb != null) + color = params.faceRgb; + builder.vertex(peek.pose(), (float) pos.x, (float) pos.y, (float) pos.z) - .color((float) rgb.x, (float) rgb.y, (float) rgb.z, params.alpha) + .color((float) color.x, (float) color.y, (float) color.z, params.alpha) .uv(u, v) .overlayCoords(OverlayTexture.NO_OVERLAY) - .uv2(j, k) + .uv2(params.lightMap) + //.uv2(LightTexture.FULL_BRIGHT) .normal(peek.normal(), xOffset, yOffset, zOffset) .endVertex(); @@ -167,9 +172,9 @@ public static class OutlineParams { protected boolean disableCull; protected boolean disableNormals; protected float alpha; - protected int lightMapU, lightMapV; - protected Vector3d rgb; - protected Vector3d faceRgb; + protected int lightMap; + protected Vec3 rgb; + protected Vec3 faceRgb; protected int color; protected int fadeTicks; private float lineWidth; @@ -185,9 +190,7 @@ public OutlineParams() { faceRgb = null; fadeTicks = 8; - int i = 15 << 20 | 15 << 4; - lightMapU = i >> 16 & '\uffff'; - lightMapV = i & '\uffff'; + lightMap = LightTexture.FULL_BRIGHT; } // builder @@ -203,6 +206,11 @@ public OutlineParams coloredFaces(int color) { return this; } + public OutlineParams withAlpha(float alpha) { + this.alpha = alpha; + return this; + } + public OutlineParams lineWidth(float width) { this.lineWidth = width; return this; diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/OutlinedText.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/OutlinedText.java index 99da42e..bfe735e 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/OutlinedText.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/OutlinedText.java @@ -1,35 +1,33 @@ package com.simibubi.mightyarchitect.foundation.utility.outliner; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.foundation.RenderTypes; import com.simibubi.mightyarchitect.foundation.utility.VecHelper; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.entity.EntityRendererManager; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.client.renderer.entity.EntityRenderDispatcher; +import net.minecraft.world.phys.Vec3; public class OutlinedText extends Outline { private String text; - Vector3d targetLocation; - Vector3d location; - Vector3d prevLocation; + Vec3 targetLocation; + Vec3 location; + Vec3 prevLocation; public OutlinedText() { setText(""); - targetLocation = Vector3d.ZERO; - location = Vector3d.ZERO; - prevLocation = Vector3d.ZERO; + targetLocation = Vec3.ZERO; + location = Vec3.ZERO; + prevLocation = Vec3.ZERO; } - public void set(Vector3d location) { + public void set(Vec3 location) { prevLocation = this.location = location; } - public void target(Vector3d location) { + public void target(Vec3 location) { targetLocation = location; } @@ -41,16 +39,15 @@ public void tick() { } @Override - public void render(MatrixStack ms, IRenderTypeBuffer buffer) { + public void render(PoseStack ms, MultiBufferSource buffer) { if (text == null) return; Minecraft mc = Minecraft.getInstance(); float pt = mc.getFrameTime(); - Vector3d vec = VecHelper.lerp(prevLocation, location, pt); - EntityRendererManager renderManager = mc.getEntityRenderDispatcher(); - FontRenderer fontrenderer = renderManager.getFont(); - float stringLength = fontrenderer.width(text); + Vec3 vec = VecHelper.lerp(prevLocation, location, pt); + EntityRenderDispatcher renderManager = mc.getEntityRenderDispatcher(); + float stringLength = mc.font.width(text); ms.pushPose(); ms.translate(vec.x, vec.y, vec.z); @@ -65,20 +62,20 @@ public void render(MatrixStack ms, IRenderTypeBuffer buffer) { float scaleMod = 0.025F; float f = -stringLength / 2; - float h = fontrenderer.lineHeight; + float h = mc.font.lineHeight; ms.pushPose(); - Vector3d v1 = new Vector3d(-f + 2, -scaleMod * (h - 1), 0); - Vector3d v2 = new Vector3d(-f + 2, scaleMod, 0); - Vector3d v3 = new Vector3d(f - 2, scaleMod, 0); - Vector3d v4 = new Vector3d(f - 2, -scaleMod * (h - 1), 0); + Vec3 v1 = new Vec3(-f + 2, -scaleMod * (h - 1), 0); + Vec3 v2 = new Vec3(-f + 2, scaleMod, 0); + Vec3 v3 = new Vec3(f - 2, scaleMod, 0); + Vec3 v4 = new Vec3(f - 2, -scaleMod * (h - 1), 0); ms.pushPose(); ms.scale(-scaleMod, 1, scaleMod); ms.translate(0, 0, .5f); - if (params.faceRgb != null) - putQuadUVColor(ms, buffer.getBuffer(RenderTypes.getOutlineSolid()), v1, v2, v3, v4, params.faceRgb, 0, 0, 1, - 1, null); + + putQuadUV(ms, buffer.getBuffer(RenderTypes.getOutlineSolid()), v1, v2, v3, v4,0, 0, 1, 1, null, true); + ms.popPose(); ms.scale(scaleMod, 1, 1); @@ -88,9 +85,8 @@ public void render(MatrixStack ms, IRenderTypeBuffer buffer) { ms.pushPose(); ms.scale(-scaleMod, -scaleMod, scaleMod); - Matrix4f matrix4f = ms.last() - .pose(); - fontrenderer.drawInBatch(text, f, 0, params.color, false, matrix4f, buffer, true, 0, 0xF000F0); + //mc.font.drawInBatch(text, f, 0, params.color, false, matrix4f, buffer, true, 0, 0xF000F0); + mc.font.draw(ms, text, f, 0, params.color); ms.popPose(); ms.popPose(); diff --git a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outliner.java b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outliner.java index c2904aa..079fc19 100644 --- a/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outliner.java +++ b/src/main/java/com/simibubi/mightyarchitect/foundation/utility/outliner/Outliner.java @@ -6,17 +6,17 @@ import java.util.Optional; import java.util.Set; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.foundation.utility.outliner.LineOutline.ChasingLineOutline; import com.simibubi.mightyarchitect.foundation.utility.outliner.LineOutline.EndChasingLineOutline; import com.simibubi.mightyarchitect.foundation.utility.outliner.Outline.OutlineParams; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.util.math.AxisAlignedBB; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.MathHelper; -import net.minecraft.util.math.vector.Vector3d; +import net.minecraft.client.renderer.MultiBufferSource; +import net.minecraft.core.BlockPos; +import net.minecraft.util.Mth; +import net.minecraft.world.phys.AABB; +import net.minecraft.world.phys.Vec3; public class Outliner { @@ -24,7 +24,7 @@ public class Outliner { // Facade - public OutlineParams showLine(Object slot, Vector3d start, Vector3d end) { + public OutlineParams showLine(Object slot, Vec3 start, Vec3 end) { if (!outlines.containsKey(slot)) { LineOutline outline = new LineOutline(); outlines.put(slot, new OutlineEntry(outline)); @@ -35,7 +35,7 @@ public OutlineParams showLine(Object slot, Vector3d start, Vector3d end) { return entry.outline.getParams(); } - public OutlineParams chaseLine(Object slot, Vector3d start, Vector3d end) { + public OutlineParams chaseLine(Object slot, Vec3 start, Vec3 end) { if (!outlines.containsKey(slot)) { ChasingLineOutline outline = new ChasingLineOutline(); outline.set(start, end); @@ -47,7 +47,7 @@ public OutlineParams chaseLine(Object slot, Vector3d start, Vector3d end) { return entry.outline.getParams(); } - public OutlineParams chaseText(Object slot, Vector3d location, String text) { + public OutlineParams chaseText(Object slot, Vec3 location, String text) { if (!outlines.containsKey(slot)) { OutlinedText outline = new OutlinedText(); outline.set(location); @@ -61,7 +61,7 @@ public OutlineParams chaseText(Object slot, Vector3d location, String text) { return entry.outline.getParams(); } - public OutlineParams endChasingLine(Object slot, Vector3d start, Vector3d end, float chasingProgress) { + public OutlineParams endChasingLine(Object slot, Vec3 start, Vec3 end, float chasingProgress) { if (!outlines.containsKey(slot)) { EndChasingLineOutline outline = new EndChasingLineOutline(); outlines.put(slot, new OutlineEntry(outline)); @@ -73,14 +73,14 @@ public OutlineParams endChasingLine(Object slot, Vector3d start, Vector3d end, f return entry.outline.getParams(); } - public OutlineParams showAABB(Object slot, AxisAlignedBB bb) { + public OutlineParams showAABB(Object slot, AABB bb) { createAABBOutlineIfMissing(slot, bb); ChasingAABBOutline outline = getAndRefreshAABB(slot); outline.prevBB = outline.targetBB = bb; return outline.getParams(); } - public OutlineParams chaseAABB(Object slot, AxisAlignedBB bb) { + public OutlineParams chaseAABB(Object slot, AABB bb) { createAABBOutlineIfMissing(slot, bb); ChasingAABBOutline outline = getAndRefreshAABB(slot); outline.targetBB = bb; @@ -123,7 +123,7 @@ public Optional edit(Object slot) { // Utility - private void createAABBOutlineIfMissing(Object slot, AxisAlignedBB bb) { + private void createAABBOutlineIfMissing(Object slot, AABB bb) { if (!outlines.containsKey(slot)) { ChasingAABBOutline outline = new ChasingAABBOutline(bb); outlines.put(slot, new OutlineEntry(outline)); @@ -157,17 +157,17 @@ public void tickOutlines() { toClear.forEach(outlines::remove); } - public void renderOutlines(MatrixStack ms, IRenderTypeBuffer buffer) { + public void renderOutlines(PoseStack ms, MultiBufferSource buffer) { outlines.forEach((key, entry) -> { Outline outline = entry.getOutline(); - outline.params.alpha = 1; + //outline.params.alpha = 1; if (entry.ticksTillRemoval < 0) { int prevTicks = entry.ticksTillRemoval + 1; float fadeticks = (float) entry.outline.params.getFadeTicks(); float lastAlpha = prevTicks >= 0 ? 1 : 1 + (prevTicks / fadeticks); float currentAlpha = 1 + (entry.ticksTillRemoval / fadeticks); - float alpha = MathHelper.lerp(Minecraft.getInstance() + float alpha = Mth.lerp(Minecraft.getInstance() .getFrameTime(), lastAlpha, currentAlpha); outline.params.alpha = alpha * alpha * alpha; diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/AbstractSimiScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/AbstractSimiScreen.java index 1fc94a1..c151d43 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/AbstractSimiScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/AbstractSimiScreen.java @@ -3,21 +3,21 @@ import java.util.ArrayList; import java.util.List; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.gui.widgets.AbstractSimiWidget; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TextComponent; public abstract class AbstractSimiScreen extends Screen { protected int sWidth, sHeight; protected int topLeftX, topLeftY; - protected List widgets; + protected List widgets; protected AbstractSimiScreen() { - super(new StringTextComponent("")); + super(new TextComponent("")); widgets = new ArrayList<>(); } @@ -29,20 +29,20 @@ protected void setWindowSize(int width, int height) { } @Override - public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { renderBackground(ms); renderWindow(ms, mouseX, mouseY, partialTicks); - for (Widget widget : widgets) + for (AbstractWidget widget : widgets) widget.render(ms, mouseX, mouseY, partialTicks); renderWindowForeground(ms, mouseX, mouseY, partialTicks); - for (Widget widget : widgets) + for (AbstractWidget widget : widgets) widget.renderToolTip(ms, mouseX, mouseY); } @Override public boolean mouseClicked(double x, double y, int button) { boolean result = false; - for (Widget widget : widgets) { + for (AbstractWidget widget : widgets) { if (widget.mouseClicked(x, y, button)) result = true; } @@ -51,7 +51,7 @@ public boolean mouseClicked(double x, double y, int button) { @Override public boolean keyPressed(int code, int p_keyPressed_2_, int p_keyPressed_3_) { - for (Widget widget : widgets) { + for (AbstractWidget widget : widgets) { if (widget.keyPressed(code, p_keyPressed_2_, p_keyPressed_3_)) return true; } @@ -60,7 +60,7 @@ public boolean keyPressed(int code, int p_keyPressed_2_, int p_keyPressed_3_) { @Override public boolean charTyped(char character, int code) { - for (Widget widget : widgets) { + for (AbstractWidget widget : widgets) { if (widget.charTyped(character, code)) return true; } @@ -71,7 +71,7 @@ public boolean charTyped(char character, int code) { @Override public boolean mouseScrolled(double mouseX, double mouseY, double delta) { - for (Widget widget : widgets) { + for (AbstractWidget widget : widgets) { if (widget.mouseScrolled(mouseX, mouseY, delta)) return true; } @@ -88,11 +88,11 @@ public boolean isPauseScreen() { return false; } - protected abstract void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks); + protected abstract void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks); - protected void renderWindowForeground(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { - for (Widget widget : widgets) { - if (!widget.isHovered()) + protected void renderWindowForeground(PoseStack ms, int mouseX, int mouseY, float partialTicks) { + for (AbstractWidget widget : widgets) { + if (!widget.isHoveredOrFocused()) continue; if (widget instanceof AbstractSimiWidget && !((AbstractSimiWidget) widget).getToolTip() .isEmpty()) diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/ArchitectMenuScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/ArchitectMenuScreen.java index 96877da..2569644 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/ArchitectMenuScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/ArchitectMenuScreen.java @@ -5,20 +5,22 @@ import org.lwjgl.glfw.GLFW; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.ArchitectMenu; import com.simibubi.mightyarchitect.control.ArchitectMenu.KeyBindList; import com.simibubi.mightyarchitect.control.phase.ArchitectPhases; +import com.simibubi.mightyarchitect.foundation.utility.LerpedFloat; +import com.simibubi.mightyarchitect.foundation.utility.LerpedFloat.Chaser; -import net.minecraft.client.MainWindow; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.util.IReorderingProcessor; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.util.FormattedCharSequence; public class ArchitectMenuScreen extends Screen { @@ -31,18 +33,18 @@ public class ArchitectMenuScreen extends Screen { private int menuWidth; private int menuHeight; - private int targetY; - private float movingY; + private LerpedFloat animation; public ArchitectMenuScreen() { - super(new StringTextComponent("Architect Menu")); + super(new TextComponent("Architect Menu")); keybinds = new KeyBindList(); tooltip = new ArrayList<>(); title = ""; focused = false; visible = false; - movingY = 0; - targetY = 0; + animation = LerpedFloat.linear() + .startWithValue(0) + .chase(0, 0.2f, Chaser.EXP); adjustTarget(); } @@ -71,7 +73,7 @@ public void updateContents() { } @Override - public void render(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack ms, int mouseX, int mouseY, float partialTicks) { // FOCUSED super.render(ms, mouseX, mouseY, partialTicks); draw(ms, partialTicks); @@ -82,7 +84,7 @@ public void drawPassive() { return; // NOT FOCUSED - draw(new MatrixStack(), Minecraft.getInstance() + draw(new PoseStack(), Minecraft.getInstance() .getFrameTime()); } @@ -129,14 +131,16 @@ public boolean charTyped(char p_charTyped_1_, int p_charTyped_2_) { return super.charTyped(p_charTyped_1_, p_charTyped_2_); } - private void draw(MatrixStack ms, float partialTicks) { - MainWindow mainWindow = Minecraft.getInstance() - .getWindow(); + private void draw(PoseStack ms, float partialTicks) { + Minecraft mc = Minecraft.getInstance(); + Window mainWindow = mc.getWindow(); + partialTicks = mc.getFrameTime(); + int x = mainWindow.getGuiScaledWidth() - menuWidth - 10; int y = mainWindow.getGuiScaledHeight() - menuHeight; - int mouseX = (int) (Minecraft.getInstance().mouseHandler.xpos() / mainWindow.getGuiScale()); - int mouseY = (int) (Minecraft.getInstance().mouseHandler.ypos() / mainWindow.getGuiScale()); + int mouseX = (int) (mc.mouseHandler.xpos() / mainWindow.getGuiScale()); + int mouseY = (int) (mc.mouseHandler.ypos() / mainWindow.getGuiScale()); boolean sideways = false; if ((mainWindow.getGuiScaledWidth() - 182) / 2 < menuWidth + 20) { @@ -144,29 +148,27 @@ private void draw(MatrixStack ms, float partialTicks) { y -= 24; } - RenderSystem.pushMatrix(); - float shift = yShift(partialTicks); + ms.pushPose(); + float shift = animation.getValue(partialTicks); float sidewaysShift = shift * ((float) menuWidth / (float) menuHeight) + (!focused ? 40 + menuHeight / 4f : 0) + 8; - RenderSystem.translatef(sideways ? sidewaysShift : 0, sideways ? 0 : shift, 0); + ms.translate(sideways ? sidewaysShift : 0, sideways ? 0 : shift, 0); mouseX -= sideways ? sidewaysShift : 0; mouseY -= sideways ? 0 : shift; ScreenResources gray = ScreenResources.GRAY; RenderSystem.enableBlend(); - RenderSystem.color4f(1, 1, 1, 3 / 4f); + RenderSystem.setShaderColor(1, 1, 1, 3 / 4f); - Minecraft.getInstance() - .getTextureManager() - .bind(gray.location); + RenderSystem.setShaderTexture(0, gray.location); RenderSystem.enableTexture(); blit(ms, x, y, gray.startX, gray.startY, menuWidth, menuHeight, gray.width, gray.height); - RenderSystem.color4f(1, 1, 1, 1); + RenderSystem.setShaderColor(1, 1, 1, 1); int yPos = y + 4; int xPos = x + 4; - FontRenderer textRenderer = Minecraft.getInstance().font; + Font textRenderer = mc.font; String compose = MightyClient.COMPOSE.getTranslatedKeyMessage() .getString() .toUpperCase(); @@ -175,19 +177,17 @@ private void draw(MatrixStack ms, float partialTicks) { if (visible) { String string = "Press " + compose.toUpperCase() + " for Menu"; textRenderer.drawShadow(ms, string, - mainWindow.getGuiScaledWidth() - textRenderer.width(string) - 15 - sidewaysShift, - yPos - 14, 0xEEEEEE); + mainWindow.getGuiScaledWidth() - textRenderer.width(string) - 15 - sidewaysShift, yPos - 14, + 0xEEEEEE); } } else { - textRenderer.drawShadow(ms, "Press " + compose.toUpperCase() + " to focus", xPos, yPos - 14, - 0xEEEEEE); + textRenderer.drawShadow(ms, "Press " + compose.toUpperCase() + " to focus", xPos, yPos - 14, 0xEEEEEE); } } else { String string = "Press " + compose + " to close"; textRenderer.drawShadow(ms, string, sideways - ? Math.min(xPos, - mainWindow.getGuiScaledWidth() - textRenderer.width(string) - 15 - sidewaysShift) + ? Math.min(xPos, mainWindow.getGuiScaledWidth() - textRenderer.width(string) - 15 - sidewaysShift) : xPos, yPos - 14, 0xDDDDDD); } @@ -212,16 +212,16 @@ private void draw(MatrixStack ms, float partialTicks) { yPos += 4; yPos += textRenderer.lineHeight; for (String text : tooltip) { - int height = Minecraft.getInstance().font.wordWrapHeight(text, menuWidth - 8); + int height = mc.font.wordWrapHeight(text, menuWidth - 8); int lineY = yPos; - for (IReorderingProcessor iro : textRenderer.split(new StringTextComponent(text), menuWidth - 8)) { - textRenderer.draw(ms, iro, xPos, lineY, 0xEEEEEE); + for (FormattedCharSequence iro : textRenderer.split(new TextComponent(text), menuWidth - 8)) { + textRenderer.draw(ms, iro, xPos, lineY, 0xEEEEEE); lineY += textRenderer.lineHeight; } yPos += height + 2; } - RenderSystem.popMatrix(); + ms.popPose(); } @Override @@ -229,7 +229,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { if (button != 0 || !visible || !focused) return super.mouseClicked(mouseX, mouseY, button); - MainWindow mainWindow = Minecraft.getInstance() + Window mainWindow = Minecraft.getInstance() .getWindow(); int x = mainWindow.getGuiScaledWidth() - menuWidth - 10; int y = mainWindow.getGuiScaledHeight() - menuHeight; @@ -240,7 +240,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int button) { mouseY += 24; } - float shift = yShift(0); + float shift = animation.getValue(); mouseX -= sideways ? shift * 2 : 0; mouseY -= sideways ? 0 : shift; @@ -279,7 +279,7 @@ public void setFocused(boolean focused) { } protected void adjustTarget() { - targetY = visible ? (focused ? 0 : menuHeight - 14) : menuHeight + 20; + animation.updateChaseTarget(visible ? (focused ? 0 : menuHeight - 14) : menuHeight + 20); } public void setVisible(boolean visible) { @@ -293,14 +293,8 @@ public void removed() { setFocused(false); } - private float yShift(float partialTicks) { - return (movingY + (targetY - movingY) * 0.2f * partialTicks); - } - public void onClientTick() { - if (movingY != targetY) { - movingY += (targetY - movingY) * 0.2; - } + animation.tickChaser(); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/DesignExporterScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/DesignExporterScreen.java index 2b4b1e8..81bff38 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/DesignExporterScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/DesignExporterScreen.java @@ -3,8 +3,9 @@ import java.util.ArrayList; import java.util.List; -import com.mojang.blaze3d.matrix.MatrixStack; -import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.platform.Lighting; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; import com.simibubi.mightyarchitect.control.design.DesignExporter; import com.simibubi.mightyarchitect.control.design.DesignLayer; import com.simibubi.mightyarchitect.control.design.DesignTheme; @@ -232,17 +233,17 @@ public void tick() { } @Override - protected void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + protected void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { ScreenResources.EXPORTER.draw(ms, this, topLeftX, topLeftY); - RenderSystem.pushMatrix(); - RenderSystem.translatef((this.width - this.sWidth) / 2 + 250, 220, 100); - RenderSystem.rotatef(-30, .4f, 0, -.2f); - RenderSystem.rotatef(90 + 0.2f * animationProgress, 0, 1, 0); - RenderSystem.scalef(100, -100, 100); + ms.pushPose(); + ms.translate(0, 0, -200); + ms.translate((this.width - this.sWidth) / 2 + 150, 120, 0); + ms.scale(10, 10, 10); GuiGameElement.of(minecraft.player.getMainHandItem()) + .rotate(-1, 0, 20) .render(ms); - RenderSystem.popMatrix(); + ms.popPose(); int color = ScreenResources.FONT_COLOR; font.draw(ms, "Export custom Designs", topLeftX + 10, topLeftY + 10, color); diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/GuiGameElement.java b/src/main/java/com/simibubi/mightyarchitect/gui/GuiGameElement.java index 7f5c5e3..397a356 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/GuiGameElement.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/GuiGameElement.java @@ -1,48 +1,42 @@ package com.simibubi.mightyarchitect.gui; -import javax.annotation.Nonnull; import javax.annotation.Nullable; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.platform.GlStateManager.DestFactor; import com.mojang.blaze3d.platform.GlStateManager.SourceFactor; +import com.mojang.blaze3d.platform.Lighting; import com.mojang.blaze3d.systems.RenderSystem; -import com.mojang.blaze3d.vertex.IVertexBuilder; -import com.simibubi.mightyarchitect.foundation.WrappedWorld; -import com.simibubi.mightyarchitect.foundation.utility.AngleHelper; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.VertexConsumer; +import com.mojang.math.Vector3f; import com.simibubi.mightyarchitect.foundation.utility.ColorHelper; -import com.simibubi.mightyarchitect.foundation.utility.Iterate; import com.simibubi.mightyarchitect.foundation.utility.VecHelper; -import net.minecraft.block.BlockState; -import net.minecraft.block.Blocks; -import net.minecraft.block.FireBlock; -import net.minecraft.block.FlowingFluidBlock; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.Atlases; -import net.minecraft.client.renderer.BlockRendererDispatcher; -import net.minecraft.client.renderer.IRenderTypeBuffer; -import net.minecraft.client.renderer.ItemRenderer; -import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.ItemBlockRenderTypes; +import net.minecraft.client.renderer.LightTexture; +import net.minecraft.client.renderer.MultiBufferSource; import net.minecraft.client.renderer.RenderType; -import net.minecraft.client.renderer.RenderTypeLookup; -import net.minecraft.client.renderer.model.IBakedModel; -import net.minecraft.client.renderer.model.ItemCameraTransforms; +import net.minecraft.client.renderer.Sheets; +import net.minecraft.client.renderer.block.BlockRenderDispatcher; +import net.minecraft.client.renderer.block.model.ItemTransforms; +import net.minecraft.client.renderer.entity.ItemRenderer; import net.minecraft.client.renderer.texture.OverlayTexture; -import net.minecraft.client.world.ClientWorld; -import net.minecraft.fluid.Fluid; -import net.minecraft.inventory.container.PlayerContainer; -import net.minecraft.item.ItemStack; -import net.minecraft.util.Direction; -import net.minecraft.util.Direction.AxisDirection; -import net.minecraft.util.IItemProvider; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.math.vector.Vector3f; -import net.minecraft.world.LightType; -import net.minecraft.world.World; +import net.minecraft.client.resources.model.BakedModel; +import net.minecraft.core.BlockPos; +import net.minecraft.world.inventory.InventoryMenu; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.level.ItemLike; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.FireBlock; +import net.minecraft.world.level.block.LiquidBlock; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.level.material.Fluid; +import net.minecraft.world.phys.Vec3; import net.minecraftforge.client.model.data.EmptyModelData; +import net.minecraftforge.client.model.data.IModelData; +import net.minecraftforge.client.model.data.ModelProperty; public class GuiGameElement { @@ -50,7 +44,7 @@ public static GuiRenderBuilder of(ItemStack stack) { return new GuiItemRenderBuilder(stack); } - public static GuiRenderBuilder of(IItemProvider itemProvider) { + public static GuiRenderBuilder of(ItemLike itemProvider) { return new GuiItemRenderBuilder(itemProvider); } @@ -61,7 +55,7 @@ public static GuiRenderBuilder of(BlockState state) { public static GuiRenderBuilder of(Fluid fluid) { return new GuiBlockStateRenderBuilder(fluid.defaultFluidState() .createLegacyBlock() - .setValue(FlowingFluidBlock.LEVEL, 0)); + .setValue(LiquidBlock.LEVEL, 0)); } public static abstract class GuiRenderBuilder { @@ -70,7 +64,7 @@ public static abstract class GuiRenderBuilder { double xRot, yRot, zRot; double scale = 1; int color = 0xFFFFFF; - Vector3d rotationOffset = Vector3d.ZERO; + Vec3 rotationOffset = Vec3.ZERO; public GuiRenderBuilder atLocal(double x, double y, double z) { this.x = x; @@ -114,28 +108,27 @@ public GuiRenderBuilder color(int color) { return this; } - public GuiRenderBuilder withRotationOffset(Vector3d offset) { + public GuiRenderBuilder withRotationOffset(Vec3 offset) { this.rotationOffset = offset; return this; } - public abstract void render(MatrixStack matrixStack); + public abstract void render(PoseStack matrixStack); @Deprecated protected void prepare() {} - protected void prepareMatrix(MatrixStack matrixStack) { + protected void prepareMatrix(PoseStack matrixStack) { matrixStack.pushPose(); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.enableDepthTest(); RenderSystem.enableBlend(); - RenderSystem.enableRescaleNormal(); - RenderSystem.enableAlphaTest(); - RenderHelper.setupFor3DItems(); - RenderSystem.alphaFunc(516, 0.1F); RenderSystem.blendFunc(SourceFactor.SRC_ALPHA, DestFactor.ONE_MINUS_SRC_ALPHA); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + //prepareLighting(matrixStack); + Lighting.setupFor3DItems(); } - @Deprecated + /*@Deprecated protected void transform() { RenderSystem.translated(xBeforeScale, yBeforeScale, 0); RenderSystem.scaled(scale, scale, scale); @@ -146,9 +139,9 @@ protected void transform() { RenderSystem.rotatef((float) xRot, 1, 0, 0); RenderSystem.rotatef((float) yRot, 0, 1, 0); RenderSystem.translated(-rotationOffset.x, -rotationOffset.y, -rotationOffset.z); - } + }*/ - protected void transformMatrix(MatrixStack matrixStack) { + protected void transformMatrix(PoseStack matrixStack) { matrixStack.translate(xBeforeScale, yBeforeScale, zBeforeScale); matrixStack.scale((float) scale, (float) scale, (float) scale); matrixStack.translate(x, y, z); @@ -163,51 +156,50 @@ protected void transformMatrix(MatrixStack matrixStack) { @Deprecated protected void cleanUp() {} - protected void cleanUpMatrix(MatrixStack matrixStack) { + protected void cleanUpMatrix(PoseStack matrixStack) { matrixStack.popPose(); - RenderSystem.disableAlphaTest(); - RenderSystem.disableRescaleNormal(); } } private static class GuiBlockModelRenderBuilder extends GuiRenderBuilder { - protected IBakedModel blockmodel; + protected BakedModel blockmodel; protected BlockState blockState; - public GuiBlockModelRenderBuilder(IBakedModel blockmodel, @Nullable BlockState blockState) { + public GuiBlockModelRenderBuilder(BakedModel blockmodel, @Nullable BlockState blockState) { this.blockState = blockState == null ? Blocks.AIR.defaultBlockState() : blockState; this.blockmodel = blockmodel; } @Override - public void render(MatrixStack matrixStack) { + public void render(PoseStack matrixStack) { prepareMatrix(matrixStack); Minecraft mc = Minecraft.getInstance(); - BlockRendererDispatcher blockRenderer = mc.getBlockRenderer(); - IRenderTypeBuffer.Impl buffer = mc.renderBuffers() + BlockRenderDispatcher blockRenderer = mc.getBlockRenderer(); + MultiBufferSource.BufferSource buffer = mc.renderBuffers() .bufferSource(); - RenderType renderType = blockState.getBlock() == Blocks.AIR ? Atlases.translucentCullBlockSheet() - : RenderTypeLookup.getRenderType(blockState, true); - IVertexBuilder vb = buffer.getBuffer(renderType); + RenderType renderType = blockState.getBlock() == Blocks.AIR ? Sheets.translucentCullBlockSheet() + : ItemBlockRenderTypes.getRenderType(blockState, true); + VertexConsumer vb = buffer.getBuffer(renderType); transformMatrix(matrixStack); - mc.getTextureManager() - .bind(PlayerContainer.BLOCK_ATLAS); + RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); renderModel(blockRenderer, buffer, renderType, vb, matrixStack); cleanUpMatrix(matrixStack); } - protected void renderModel(BlockRendererDispatcher blockRenderer, IRenderTypeBuffer.Impl buffer, - RenderType renderType, IVertexBuilder vb, MatrixStack ms) { - Vector3d rgb = ColorHelper.getRGB(color); + protected void renderModel(BlockRenderDispatcher blockRenderer, MultiBufferSource.BufferSource buffer, + RenderType renderType, VertexConsumer vb, PoseStack ms) { + Vec3 rgb = ColorHelper.getRGB(color); + Lighting.setupForFlatItems(); blockRenderer.getModelRenderer() .renderModel(ms.last(), vb, blockState, blockmodel, (float) rgb.x, (float) rgb.y, (float) rgb.z, 0xF000F0, OverlayTexture.NO_OVERLAY, EmptyModelData.INSTANCE); buffer.endBatch(); + Lighting.setupFor3DItems(); } } @@ -220,53 +212,26 @@ public GuiBlockStateRenderBuilder(BlockState blockstate) { } @Override - protected void renderModel(BlockRendererDispatcher blockRenderer, IRenderTypeBuffer.Impl buffer, - RenderType renderType, IVertexBuilder vb, MatrixStack ms) { + protected void renderModel(BlockRenderDispatcher blockRenderer, MultiBufferSource.BufferSource buffer, + RenderType renderType, VertexConsumer vb, PoseStack ms) { if (blockState.getBlock() instanceof FireBlock) { - RenderHelper.setupForFlatItems(); - blockRenderer.renderBlock(blockState, ms, buffer, 0xF000F0, OverlayTexture.NO_OVERLAY, - EmptyModelData.INSTANCE); - RenderHelper.turnBackOn(); + Lighting.setupForFlatItems(); + blockRenderer.renderSingleBlock(blockState, ms, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, + VirtualEmptyModelData.INSTANCE); buffer.endBatch(); + Lighting.setupFor3DItems(); return; } super.renderModel(blockRenderer, buffer, renderType, vb, ms); if (blockState.getFluidState() - .isEmpty()) + .isEmpty()) return; - for (RenderType type : RenderType.chunkBufferLayers()) { - if (!RenderTypeLookup.canRenderInLayer(blockState.getFluidState(), type)) - continue; - - ms.pushPose(); - RenderHelper.turnOff(); - - ClientWorld world = Minecraft.getInstance().level; - if (renderWorld == null || renderWorld.getWorld() != world) - renderWorld = new FluidRenderWorld(world); - - for (Direction d : Iterate.directions) { - vb = buffer.getBuffer(type); - if (d.getAxisDirection() == AxisDirection.POSITIVE) - continue; - - ms.pushPose(); - ms.translate(.5, .5, .5); - ms.mulPose(Vector3f.YP.rotationDegrees(AngleHelper.horizontalAngle(d))); - ms.mulPose(Vector3f.ZP.rotationDegrees(AngleHelper.verticalAngle(d) - 90)); - ms.translate(-.5, -.5, -.5); - blockRenderer.renderLiquid(new BlockPos(0, 1, 0), renderWorld, vb, blockState.getFluidState()); - buffer.endBatch(type); - ms.popPose(); - } - - RenderHelper.turnBackOn(); - ms.popPose(); - break; - } + //todo fluids.. + //FluidRenderer.renderFluidBox(new FluidStack(blockState.getFluidState().getType(), 1000), 0, 0, 0, 1, 1, 1, buffer, ms, LightTexture.FULL_BRIGHT, false); + buffer.endBatch(); } } @@ -278,78 +243,68 @@ public GuiItemRenderBuilder(ItemStack stack) { this.stack = stack; } - public GuiItemRenderBuilder(IItemProvider provider) { + public GuiItemRenderBuilder(ItemLike provider) { this(new ItemStack(provider)); } @Override - public void render(MatrixStack matrixStack) { + public void render(PoseStack matrixStack) { prepareMatrix(matrixStack); // matrixStack.translate(0, 80, 0); transformMatrix(matrixStack); - renderItemIntoGUI(matrixStack, stack); + renderItemIntoGUI(matrixStack, stack, true); cleanUpMatrix(matrixStack); } - public static void renderItemIntoGUI(MatrixStack matrixStack, ItemStack stack) { - ItemRenderer renderer = Minecraft.getInstance() - .getItemRenderer(); - IBakedModel bakedModel = renderer.getModel(stack, null, null); - matrixStack.pushPose(); - Minecraft.getInstance().textureManager.bind(PlayerContainer.BLOCK_ATLAS); - Minecraft.getInstance().textureManager.getTexture(PlayerContainer.BLOCK_ATLAS) - .setFilter(false, false); - RenderSystem.enableRescaleNormal(); - RenderSystem.enableAlphaTest(); - RenderSystem.defaultAlphaFunc(); + public static void renderItemIntoGUI(PoseStack matrixStack, ItemStack stack, boolean useDefaultLighting) { + ItemRenderer renderer = Minecraft.getInstance().getItemRenderer(); + BakedModel bakedModel = renderer.getModel(stack, null, null, 0); + + + renderer.textureManager.getTexture(InventoryMenu.BLOCK_ATLAS).setFilter(false, false); + RenderSystem.setShaderTexture(0, InventoryMenu.BLOCK_ATLAS); RenderSystem.enableBlend(); - RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, - GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); - matrixStack.translate((float) 0, (float) 0, 100.0F + renderer.blitOffset); - matrixStack.translate(8.0F, 8.0F, 0.0F); + RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); + matrixStack.pushPose(); + matrixStack.translate(0, 0, 100.0F + renderer.blitOffset); + matrixStack.translate(8.0F, -8.0F, 0.0F); matrixStack.scale(16.0F, 16.0F, 16.0F); - IRenderTypeBuffer.Impl irendertypebuffer$impl = Minecraft.getInstance() - .renderBuffers() - .bufferSource(); - boolean flag = !bakedModel.usesBlockLight(); - if (flag) { - RenderHelper.setupForFlatItems(); + MultiBufferSource.BufferSource buffer = Minecraft.getInstance().renderBuffers().bufferSource(); + boolean flatLighting = !bakedModel.usesBlockLight(); + if (useDefaultLighting && flatLighting) { + Lighting.setupForFlatItems(); } - renderer.render(stack, ItemCameraTransforms.TransformType.GUI, false, matrixStack, - irendertypebuffer$impl, 15728880, OverlayTexture.NO_OVERLAY, bakedModel); - irendertypebuffer$impl.endBatch(); + renderer.render(stack, ItemTransforms.TransformType.GUI, false, matrixStack, buffer, LightTexture.FULL_BRIGHT, OverlayTexture.NO_OVERLAY, bakedModel); + buffer.endBatch(); RenderSystem.enableDepthTest(); - if (flag) { - RenderHelper.setupFor3DItems(); + if (useDefaultLighting && flatLighting) { + Lighting.setupFor3DItems(); } - RenderSystem.disableAlphaTest(); - RenderSystem.disableRescaleNormal(); - RenderSystem.enableCull(); matrixStack.popPose(); } } - private static FluidRenderWorld renderWorld; + public enum VirtualEmptyModelData implements IModelData { - private static class FluidRenderWorld extends WrappedWorld { + INSTANCE; - public FluidRenderWorld(World world) { - super(world); + @Override + public boolean hasProperty(ModelProperty prop) { + return false; } @Override - public int getBrightness(@Nullable LightType p_226658_1_, @Nullable BlockPos p_226658_2_) { - return 15; + public T getData(ModelProperty prop) { + return null; } @Override - @Nonnull - public BlockState getBlockState(BlockPos pos) { - return Blocks.AIR.defaultBlockState(); + public T setData(ModelProperty prop, T data) { + return null; } } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/PalettePickerScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/PalettePickerScreen.java index 9833f82..bf95130 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/PalettePickerScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/PalettePickerScreen.java @@ -2,8 +2,9 @@ import java.nio.file.Paths; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Vector3f; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.design.DesignExporter; @@ -13,13 +14,13 @@ import com.simibubi.mightyarchitect.foundation.utility.FilesHelper; import com.simibubi.mightyarchitect.gui.widgets.IconButton; +import net.minecraft.ChatFormatting; +import net.minecraft.Util; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.util.Util; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.TextComponent; public class PalettePickerScreen extends AbstractSimiScreen { @@ -72,22 +73,22 @@ public void init() { // create if (!scanPicker) { buttonAddPalette = new IconButton(x + (i % 5) * 23, y + (i / 5) * 23, ScreenResources.ICON_ADD); - buttonAddPalette.setToolTip(new StringTextComponent("Create Palette")); + buttonAddPalette.setToolTip(new TextComponent("Create Palette")); buttonAddPalette.getToolTip() - .add(new StringTextComponent("Will use currently selected").withStyle(TextFormatting.GRAY)); + .add(new TextComponent("Will use currently selected").withStyle(ChatFormatting.GRAY)); buttonAddPalette.getToolTip() - .add(new StringTextComponent("Palette as the template.").withStyle(TextFormatting.GRAY)); + .add(new TextComponent("Palette as the template.").withStyle(ChatFormatting.GRAY)); i++; widgets.add(buttonAddPalette); } buttonOpenFolder = new IconButton(x + (i % 5) * 23, y + (i / 5) * 23, ScreenResources.ICON_FOLDER); - buttonOpenFolder.setToolTip(new StringTextComponent("Open Palette Folder")); + buttonOpenFolder.setToolTip(new TextComponent("Open Palette Folder")); widgets.add(buttonOpenFolder); i++; buttonRefresh = new IconButton(x + (i % 5) * 23, y + (i / 5) * 23, ScreenResources.ICON_REFRESH); - buttonRefresh.setToolTip(new StringTextComponent("Refresh Imported Palettes")); + buttonRefresh.setToolTip(new TextComponent("Refresh Imported Palettes")); widgets.add(buttonRefresh); i++; @@ -100,11 +101,11 @@ public void removed() { if (scanPicker) { if (primary.palette.hasDuplicates()) minecraft.player.displayClientMessage( - new StringTextComponent(TextFormatting.RED + "Warning: Ambiguous Scanner Palette " - + TextFormatting.WHITE + "( " + primary.palette.getDuplicates() + " )"), + new TextComponent(ChatFormatting.RED + "Warning: Ambiguous Scanner Palette " + + ChatFormatting.WHITE + "( " + primary.palette.getDuplicates() + " )"), false); - minecraft.player.displayClientMessage(new StringTextComponent("Updated Default Palette"), true); + minecraft.player.displayClientMessage(new TextComponent("Updated Default Palette"), true); DesignExporter.theme.setDefaultPalette(primary.palette); DesignExporter.theme.setDefaultSecondaryPalette(secondary.palette); } @@ -138,7 +139,7 @@ private void updateSelected() { } @Override - public void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + public void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { ScreenResources.PALETTES.draw(ms, this, topLeftX, topLeftY); int color = ScreenResources.FONT_COLOR; @@ -161,7 +162,7 @@ public void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTi @Override public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { for (int i = 0; i < this.widgets.size(); ++i) { - Widget guibutton = this.widgets.get(i); + AbstractWidget guibutton = this.widgets.get(i); if (guibutton.isMouseOver(mouseX, mouseY)) { guibutton.playDownSound(this.minecraft.getSoundManager()); @@ -175,7 +176,7 @@ public boolean mouseClicked(double mouseX, double mouseY, int mouseButton) { return super.mouseClicked(mouseX, mouseY, mouseButton); } - protected void buttonClicked(Widget button) { + protected void buttonClicked(AbstractWidget button) { if (button == buttonOpenFolder) { FilesHelper.createFolderIfMissing("palettes"); Util.getPlatform() @@ -208,7 +209,7 @@ protected void buttonClicked(Widget button) { } } - protected void buttonRightClicked(Widget button) { + protected void buttonRightClicked(AbstractWidget button) { if (scanPicker) { if (button instanceof PaletteButton) DesignExporter.theme.setDefaultSecondaryPalette(((PaletteButton) button).palette); @@ -239,38 +240,39 @@ public PaletteButton(PaletteDefinition palette, Screen parent, int buttonId, int active = true; } - private void preview(MatrixStack ms, Minecraft mc) { - RenderSystem.pushMatrix(); - RenderSystem.translatef(x + 5, y + 9, 100); - RenderSystem.rotatef(-35, 0, 1, 0); + private void preview(PoseStack ms, Minecraft mc) { + ms.pushPose(); + ms.translate(x + 1, y + 9, 100); + ms.scale(1 + 1/64f, 1 + 1/64f, 1); renderBlock(ms, mc, new BlockPos(0, 1, 0), Palette.INNER_PRIMARY); renderBlock(ms, mc, new BlockPos(1, 1, 0), Palette.INNER_DETAIL); renderBlock(ms, mc, new BlockPos(0, 0, 0), Palette.HEAVY_PRIMARY); renderBlock(ms, mc, new BlockPos(1, 0, 0), Palette.ROOF_PRIMARY); - RenderSystem.popMatrix(); + ms.popPose(); } - protected void renderBlock(MatrixStack ms, Minecraft mc, BlockPos pos, Palette key) { - RenderSystem.pushMatrix(); + protected void renderBlock(PoseStack ms, Minecraft mc, BlockPos pos, Palette key) { + ms.pushPose(); GuiGameElement.of(palette.get(key)) .atLocal(pos.getX(), pos.getY(), pos.getZ()) .scale(7.9f) .render(ms); - RenderSystem.popMatrix(); + + ms.popPose(); } @Override - public void renderButton(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + public void renderButton(PoseStack ms, int mouseX, int mouseY, float partialTicks) { super.renderButton(ms, mouseX, mouseY, partialTicks); preview(ms, minecraft); } @Override - public void renderToolTip(MatrixStack ms, int mouseX, int mouseY) { + public void renderToolTip(PoseStack ms, int mouseX, int mouseY) { if (isHovered) { - renderTooltip(ms, new StringTextComponent(palette.getName()), mouseX, mouseY); - RenderSystem.color4f(1, 1, 1, 1); + renderTooltip(ms, new TextComponent(palette.getName()), mouseX, mouseY); + RenderSystem.setShaderColor(1, 1, 1, 1); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/ScreenHelper.java b/src/main/java/com/simibubi/mightyarchitect/gui/ScreenHelper.java index a64556c..d812e68 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/ScreenHelper.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/ScreenHelper.java @@ -1,7 +1,7 @@ package com.simibubi.mightyarchitect.gui; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screen.Screen; +import net.minecraft.client.gui.screens.Screen; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.event.TickEvent.ClientTickEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/ScreenResources.java b/src/main/java/com/simibubi/mightyarchitect/gui/ScreenResources.java index e350718..b01d902 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/ScreenResources.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/ScreenResources.java @@ -1,11 +1,11 @@ package com.simibubi.mightyarchitect.gui; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.TheMightyArchitect; -import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.AbstractGui; -import net.minecraft.util.ResourceLocation; +import net.minecraft.client.gui.GuiComponent; +import net.minecraft.resources.ResourceLocation; public enum ScreenResources { @@ -69,7 +69,7 @@ public enum ScreenResources { ICON_FOLDER("icons.png", 0, 96, 16, 16), ICON_REFRESH("icons.png", 16, 96, 16, 16); - public static final int FONT_COLOR = 0x575F7A; + public static final int FONT_COLOR = 0x373F5A; public final ResourceLocation location; public int width, height; @@ -85,13 +85,13 @@ private ScreenResources(String location, int startX, int startY, int width, int this.startX = startX; this.startY = startY; } - public void draw(MatrixStack ms, AbstractGui screen, int i, int j) { + public void draw(PoseStack ms, GuiComponent screen, int i, int j) { bind(); screen.blit(ms, i, j, startX, startY, width, height); } public void bind() { - Minecraft.getInstance().getTextureManager().bind(location); + RenderSystem.setShaderTexture(0, location); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/TextInputPromptScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/TextInputPromptScreen.java index f9509d2..f3c6f3b 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/TextInputPromptScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/TextInputPromptScreen.java @@ -4,25 +4,25 @@ import org.lwjgl.glfw.GLFW; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; public class TextInputPromptScreen extends AbstractSimiScreen { private Consumer callback; private Consumer abortCallback; - private TextFieldWidget nameField; + private EditBox nameField; private Button confirm; private Button abort; - private ITextComponent buttonTextConfirm; - private ITextComponent buttonTextAbort; - private ITextComponent title; + private Component buttonTextConfirm; + private Component buttonTextAbort; + private Component title; private boolean confirmed; @@ -31,8 +31,8 @@ public TextInputPromptScreen(Consumer callBack, Consumer abortCa this.callback = callBack; this.abortCallback = abortCallback; - buttonTextConfirm = new StringTextComponent("Confirm"); - buttonTextAbort = new StringTextComponent("Abort"); + buttonTextConfirm = new TextComponent("Confirm"); + buttonTextAbort = new TextComponent("Abort"); confirmed = false; } @@ -42,7 +42,7 @@ public void init() { setWindowSize(ScreenResources.TEXT_INPUT.width, ScreenResources.TEXT_INPUT.height + 30); this.nameField = - new TextFieldWidget(font, topLeftX + 33, topLeftY + 26, 128, 8, new StringTextComponent("")); + new EditBox(font, topLeftX + 33, topLeftY + 26, 128, 8, new TextComponent("")); this.nameField.setTextColor(-1); this.nameField.setTextColorUneditable(-1); this.nameField.setBordered(false); @@ -65,7 +65,7 @@ public void init() { } @Override - public void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + public void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { ScreenResources.TEXT_INPUT.draw(ms, this, topLeftX, topLeftY); font.draw(ms, title, topLeftX + (sWidth / 2) - (font.width(title) / 2), topLeftY + 11, ScreenResources.FONT_COLOR); @@ -79,15 +79,15 @@ public void removed() { } public void setButtonTextConfirm(String buttonTextConfirm) { - this.buttonTextConfirm = new StringTextComponent(buttonTextConfirm); + this.buttonTextConfirm = new TextComponent(buttonTextConfirm); } public void setButtonTextAbort(String buttonTextAbort) { - this.buttonTextAbort = new StringTextComponent(buttonTextAbort); + this.buttonTextAbort = new TextComponent(buttonTextAbort); } public void setTitle(String title) { - this.title = new StringTextComponent(title); + this.title = new TextComponent(title); } @Override diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/ThemeSettingsScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/ThemeSettingsScreen.java index 719675c..d7529d7 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/ThemeSettingsScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/ThemeSettingsScreen.java @@ -3,7 +3,7 @@ import java.util.ArrayList; import java.util.List; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.control.ArchitectManager; import com.simibubi.mightyarchitect.control.design.DesignExporter; import com.simibubi.mightyarchitect.control.design.DesignLayer; @@ -16,18 +16,18 @@ import com.simibubi.mightyarchitect.gui.widgets.Label; import com.simibubi.mightyarchitect.gui.widgets.ScrollInput; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.TextComponent; public class ThemeSettingsScreen extends AbstractSimiScreen { private DesignTheme theme; - private TextFieldWidget inputName; - private TextFieldWidget inputAuthor; + private EditBox inputName; + private EditBox inputAuthor; private List indicators; - private List inputs; + private List inputs; private List toggleButtons; private IconButton confirm; @@ -57,12 +57,12 @@ public void init() { int y = topLeftY + 14; int id = 0; - inputName = new TextFieldWidget(font, x, y, 104, 8, new StringTextComponent("")); + inputName = new EditBox(font, x, y, 104, 8, new TextComponent("")); inputName.setValue(theme.getDisplayName()); inputName.changeFocus(false); inputs.add(inputName); - inputAuthor = new TextFieldWidget(font, x, y + 20, 104, 8, new StringTextComponent("")); + inputAuthor = new EditBox(font, x, y + 20, 104, 8, new TextComponent("")); inputAuthor.setValue(theme.getDesigner()); inputAuthor.changeFocus(false); inputs.add(inputAuthor); @@ -209,7 +209,7 @@ public boolean mouseClicked(double x, double y, int button) { if (button == 0) { for (IconButton button2 : toggleButtons) { - if (button2.isHovered()) { + if (button2.isHoveredOrFocused()) { buttonClicked(button2); return true; } @@ -268,7 +268,7 @@ private boolean activated(int index) { } @Override - public void renderWindow(MatrixStack ms, int mouseX, int mouseY, float partialTicks) { + public void renderWindow(PoseStack ms, int mouseX, int mouseY, float partialTicks) { ScreenResources.THEME_EDITOR.draw(ms, this, topLeftX, topLeftY); int x = topLeftX + 10; @@ -332,7 +332,7 @@ public void removed() { ThemeStorage.exportTheme(theme); ThemeStorage.reloadExternal(); ArchitectManager.editTheme(theme); - minecraft.player.displayClientMessage(new StringTextComponent("Theme settings have been updated."), true); + minecraft.player.displayClientMessage(new TextComponent("Theme settings have been updated."), true); } private boolean roofLayerExists() { diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/ToolSelectionScreen.java b/src/main/java/com/simibubi/mightyarchitect/gui/ToolSelectionScreen.java index 6a04a25..0df9459 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/ToolSelectionScreen.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/ToolSelectionScreen.java @@ -3,35 +3,41 @@ import java.util.List; import java.util.function.Consumer; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.platform.Window; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.MightyClient; import com.simibubi.mightyarchitect.control.compose.planner.Tools; +import com.simibubi.mightyarchitect.foundation.utility.LerpedFloat; +import com.simibubi.mightyarchitect.foundation.utility.LerpedFloat.Chaser; -import net.minecraft.client.MainWindow; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.util.Mth; public class ToolSelectionScreen extends Screen { protected List tools; protected Consumer callback; public boolean focused; - private float yOffset; + private LerpedFloat yOffset; protected int selection; protected int w; protected int h; public ToolSelectionScreen(List tools, Consumer callback) { - super(new StringTextComponent("Tool Selection")); + super(new TextComponent("Tool Selection")); this.minecraft = Minecraft.getInstance(); this.tools = tools; this.callback = callback; focused = false; - yOffset = 0; + yOffset = LerpedFloat.linear() + .startWithValue(0) + .chase(0, .1f, Chaser.EXP); selection = 0; w = tools.size() * 50 + 30; @@ -43,25 +49,28 @@ public void cycle(int direction) { selection = (selection + tools.size()) % tools.size(); } - private void draw(MatrixStack ms, float partialTicks) { - MainWindow mainWindow = Minecraft.getInstance() + public void select(int index) { + selection = Mth.clamp(index, 0, tools.size() - 1); + } + + private void draw(PoseStack ms, float partialTicks) { + Window mainWindow = Minecraft.getInstance() .getWindow(); - FontRenderer font = minecraft.font; + Font font = minecraft.font; int x = (mainWindow.getGuiScaledWidth() - w) / 2 + 15; int y = 15; - RenderSystem.pushMatrix(); - RenderSystem.translatef(0, 0, focused ? 100 : 0); + ms.pushPose(); + ms.translate(0, 0, focused ? 100 : 0); ScreenResources gray = ScreenResources.GRAY; RenderSystem.enableBlend(); + RenderSystem.defaultBlendFunc(); RenderSystem.enableTexture(); - RenderSystem.color4f(1, 1, 1, focused ? 7 / 8f : 1 / 2f); - Minecraft.getInstance() - .getTextureManager() - .bind(gray.location); - float toolTipAlpha = yOffset / 10; + RenderSystem.setShaderColor(1, 1, 1, focused ? 7 / 8f : 1 / 2f); + RenderSystem.setShaderTexture(0, gray.location); + float toolTipAlpha = yOffset.getValue(partialTicks) / 10; // render main box blit(ms, x - 15, y, gray.startX, gray.startY, w, h, gray.width, gray.height); @@ -72,12 +81,10 @@ private void draw(MatrixStack ms, float partialTicks) { int stringAlphaComponent = ((int) (toolTipAlpha * 0xFF)) << 24; if (toolTipAlpha > 0.25f) { - Minecraft.getInstance() - .getTextureManager() - .bind(gray.location); - RenderSystem.color4f(.7f, .7f, .8f, toolTipAlpha); + RenderSystem.setShaderTexture(0, gray.location); + RenderSystem.setShaderColor(.7f, .7f, .8f, toolTipAlpha); blit(ms, x - 15, y + 30, gray.startX, gray.startY, w, h + 22, gray.width, gray.height); - RenderSystem.color4f(1, 1, 1, 1); + RenderSystem.setShaderColor(1, 1, 1, 1); if (toolTip.size() > 0) font.draw(ms, toolTip.get(0), x - 10, y + 35, 0xEEEEEE + stringAlphaComponent); @@ -89,7 +96,7 @@ private void draw(MatrixStack ms, float partialTicks) { font.draw(ms, toolTip.get(3), x - 10, y + 69, 0xCCCCDD + stringAlphaComponent); } - RenderSystem.color4f(1, 1, 1, 1); + RenderSystem.setShaderColor(1, 1, 1, 1); String translationKey = MightyClient.TOOL_MENU.getTranslatedKeyMessage() .getString() .toUpperCase(); @@ -102,38 +109,42 @@ private void draw(MatrixStack ms, float partialTicks) { drawCenteredString(ms, minecraft.font, "[SCROLL] to Cycle", width / 2, y - 10, 0xCCDDFF); for (int i = 0; i < tools.size(); i++) { - RenderSystem.pushMatrix(); + ms.pushPose(); float alpha = focused ? 1 : .2f; if (i == selection) { - RenderSystem.translatef(0, -10, 0); + ms.translate(0, -10, 0); drawCenteredString(ms, minecraft.font, tools.get(i) .getDisplayName(), x + i * 50 + 24, y + 28, 0xCCDDFF); alpha = 1; } - RenderSystem.color4f(0, 0, 0, alpha); + RenderSystem.setShaderColor(0, 0, 0, alpha); tools.get(i) .getIcon() .draw(ms, this, x + i * 50 + 16, y + 12); - RenderSystem.color4f(1, 1, 1, alpha); + RenderSystem.setShaderColor(1, 1, 1, alpha); tools.get(i) .getIcon() .draw(ms, this, x + i * 50 + 16, y + 11); - RenderSystem.popMatrix(); + if (focused && i != selection) { + KeyMapping keyMapping = minecraft.options.keyHotbarSlots[i]; + drawCenteredString(ms, minecraft.font, "[" + keyMapping.getTranslatedKeyMessage() + .getString() + "]", x + i * 50 + 24, y + 3, 0xCCDDFF); + } + + ms.popPose(); } - RenderSystem.popMatrix(); + ms.popPose(); } public void update() { - if (focused) - yOffset += (10 - yOffset) * .1f; - else - yOffset *= .9f; + yOffset.updateChaseTarget(focused ? 10 : 0); + yOffset.tickChaser(); } - public void renderPassive(MatrixStack ms, float partialTicks) { + public void renderPassive(PoseStack ms, float partialTicks) { if (Minecraft.getInstance().screen != null) return; draw(ms, partialTicks); diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/AbstractSimiWidget.java b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/AbstractSimiWidget.java index 6e3f200..e7ac316 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/AbstractSimiWidget.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/AbstractSimiWidget.java @@ -3,27 +3,33 @@ import java.util.LinkedList; import java.util.List; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.widget.Widget; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.narration.NarrationElementOutput; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; -public abstract class AbstractSimiWidget extends Widget { +public abstract class AbstractSimiWidget extends AbstractWidget { - protected List toolTip; + protected List toolTip; public AbstractSimiWidget(int xIn, int yIn, int widthIn, int heightIn) { - super(xIn, yIn, widthIn, heightIn, StringTextComponent.EMPTY); + super(xIn, yIn, widthIn, heightIn, TextComponent.EMPTY); toolTip = new LinkedList<>(); } - public List getToolTip() { + public List getToolTip() { return toolTip; } @Override - public void renderButton(MatrixStack matrixStack, int p_renderButton_1_, int p_renderButton_2_, float p_renderButton_3_) { + public void renderButton(PoseStack matrixStack, int p_renderButton_1_, int p_renderButton_2_, float p_renderButton_3_) { + } + + @Override + public void updateNarration(NarrationElementOutput pNarrationElementOutput) { + defaultButtonNarrationText(pNarrationElementOutput); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/IconButton.java b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/IconButton.java index f2f7fd3..99db879 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/IconButton.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/IconButton.java @@ -1,11 +1,11 @@ package com.simibubi.mightyarchitect.gui.widgets; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.gui.ScreenResources; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; public class IconButton extends AbstractSimiWidget { @@ -18,7 +18,7 @@ public IconButton(int x, int y, ScreenResources icon) { } @Override - public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void renderButton(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { if (this.visible) { this.isHovered = mouseX >= this.x && mouseY >= this.y && mouseX < this.x + this.width && mouseY < this.y + this.height; @@ -26,7 +26,7 @@ public void renderButton(MatrixStack matrixStack, int mouseX, int mouseY, float ScreenResources button = (pressed || !active) ? button = ScreenResources.BUTTON_DOWN : (isHovered) ? ScreenResources.BUTTON_HOVER : ScreenResources.BUTTON; - RenderSystem.color4f(1.0F, 1.0F, 1.0F, 1.0F); + RenderSystem.setShaderColor(1.0F, 1.0F, 1.0F, 1.0F); ScreenResources.BUTTON.bind(); blit(matrixStack, x, y, button.startX, button.startY, button.width, button.height); icon.draw(matrixStack, this, x + 1, y + 1); @@ -46,10 +46,10 @@ public void onRelease(double p_onRelease_1_, double p_onRelease_3_) { } public void setToolTip(String text) { - setToolTip(new StringTextComponent(text)); + setToolTip(new TextComponent(text)); } - public void setToolTip(ITextComponent text) { + public void setToolTip(Component text) { toolTip.clear(); toolTip.add(text); } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Indicator.java b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Indicator.java index 7596584..aa839a4 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Indicator.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Indicator.java @@ -1,11 +1,11 @@ package com.simibubi.mightyarchitect.gui.widgets; import com.google.common.collect.ImmutableList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import com.simibubi.mightyarchitect.gui.ScreenResources; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; public class Indicator extends AbstractSimiWidget { @@ -17,17 +17,17 @@ public enum State { public State state; public Indicator(int x, int y, String tooltip) { - this(x, y, new StringTextComponent(tooltip)); + this(x, y, new TextComponent(tooltip)); } - public Indicator(int x, int y, ITextComponent tooltip) { + public Indicator(int x, int y, Component tooltip) { super(x, y, ScreenResources.INDICATOR.width, ScreenResources.INDICATOR.height); this.toolTip = ImmutableList.of(tooltip); this.state = State.OFF; } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks ) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks ) { ScreenResources toDraw; switch(state) { case ON: toDraw = ScreenResources.INDICATOR_WHITE; break; diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Label.java b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Label.java index f523574..fa41e49 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Label.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/Label.java @@ -1,30 +1,30 @@ package com.simibubi.mightyarchitect.gui.widgets; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.util.text.IFormattableTextComponent; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.MutableComponent; +import net.minecraft.network.chat.TextComponent; public class Label extends AbstractSimiWidget { - public ITextComponent text; + public Component text; public String suffix; protected boolean hasShadow; protected int color; - protected FontRenderer font; + protected Font font; public Label(int x, int y, String tooltip) { - this(x, y, new StringTextComponent(tooltip)); + this(x, y, new TextComponent(tooltip)); } - public Label(int x, int y, ITextComponent text) { + public Label(int x, int y, Component text) { super(x, y, Minecraft.getInstance().font.width(text), 10); font = Minecraft.getInstance().font; - this.text = new StringTextComponent("Label"); + this.text = new TextComponent("Label"); color = 0xFFFFFF; hasShadow = false; suffix = ""; @@ -46,11 +46,11 @@ public Label withSuffix(String s) { } public void setText(String text) { - this.text = new StringTextComponent(text); + this.text = new TextComponent(text); } - public void setTextAndTrim(ITextComponent newText, boolean trimFront, int maxWidthPx) { - FontRenderer fontRenderer = Minecraft.getInstance().font; + public void setTextAndTrim(Component newText, boolean trimFront, int maxWidthPx) { + Font fontRenderer = Minecraft.getInstance().font; if (fontRenderer.width(newText) <= maxWidthPx) { text = newText; @@ -68,8 +68,8 @@ public void setTextAndTrim(ITextComponent newText, boolean trimFront, int maxWid for (int i = startIndex; i != endIndex; i += step) { String sub = builder.substring(trimFront ? i : startIndex, trimFront ? endIndex + 1 : i + 1); - if (fontRenderer.width(new StringTextComponent(sub).setStyle(newText.getStyle())) + trimWidth <= maxWidthPx) { - text = new StringTextComponent(trimFront ? trim + sub : sub + trim).setStyle(newText.getStyle()); + if (fontRenderer.width(new TextComponent(sub).setStyle(newText.getStyle())) + trimWidth <= maxWidthPx) { + text = new TextComponent(trimFront ? trim + sub : sub + trim).setStyle(newText.getStyle()); return; } } @@ -77,14 +77,14 @@ public void setTextAndTrim(ITextComponent newText, boolean trimFront, int maxWid } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { if (!visible) return; if (text == null || text.getString().isEmpty()) return; - RenderSystem.color4f(1, 1, 1, 1); - IFormattableTextComponent copy = text.plainCopy(); + RenderSystem.setShaderColor(1, 1, 1, 1); + MutableComponent copy = text.plainCopy(); if (suffix != null && !suffix.isEmpty()) copy.append(suffix); diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/ScrollInput.java b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/ScrollInput.java index 264cb4f..9d23103 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/ScrollInput.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/ScrollInput.java @@ -2,18 +2,18 @@ import java.util.function.Consumer; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; public class ScrollInput extends AbstractSimiWidget { protected Consumer onScroll; protected int state; protected Label displayLabel; - protected ITextComponent title = new StringTextComponent("Choose an Option"); - protected ITextComponent scrollToModify = new StringTextComponent("Scroll to Modify"); + protected Component title = new TextComponent("Choose an Option"); + protected Component scrollToModify = new TextComponent("Scroll to Modify"); protected int min, max; protected int shiftStep; @@ -42,7 +42,7 @@ public ScrollInput removeCallback() { } public ScrollInput titled(String title) { - this.title = new StringTextComponent(title); + this.title = new TextComponent(title); updateTooltip(); return this; } @@ -108,15 +108,15 @@ public void onChanged() { } protected void writeToLabel() { - displayLabel.text = new StringTextComponent(String.valueOf(state)); + displayLabel.text = new TextComponent(String.valueOf(state)); } protected void updateTooltip() { toolTip.clear(); toolTip.add(title.plainCopy() - .withStyle(TextFormatting.BLUE)); + .withStyle(ChatFormatting.BLUE)); toolTip.add(scrollToModify.plainCopy() - .withStyle(TextFormatting.ITALIC, TextFormatting.DARK_GRAY)); + .withStyle(ChatFormatting.ITALIC, ChatFormatting.DARK_GRAY)); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/SelectionScrollInput.java b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/SelectionScrollInput.java index 5318a02..dca8798 100644 --- a/src/main/java/com/simibubi/mightyarchitect/gui/widgets/SelectionScrollInput.java +++ b/src/main/java/com/simibubi/mightyarchitect/gui/widgets/SelectionScrollInput.java @@ -3,14 +3,14 @@ import java.util.ArrayList; import java.util.List; -import net.minecraft.util.text.ITextComponent; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextFormatting; +import net.minecraft.ChatFormatting; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; public class SelectionScrollInput extends ScrollInput { protected List options; - protected ITextComponent scrollToSelect = new StringTextComponent("Scroll to Select"); + protected Component scrollToSelect = new TextComponent("Scroll to Select"); public SelectionScrollInput(int xIn, int yIn, int widthIn, int heightIn) { super(xIn, yIn, widthIn, heightIn); @@ -26,7 +26,7 @@ public ScrollInput forOptions(List options) { @Override protected void writeToLabel() { - displayLabel.text = new StringTextComponent(options.get(state)); + displayLabel.text = new TextComponent(options.get(state)); } @Override @@ -38,22 +38,22 @@ public boolean mouseScrolled(double mouseX, double mouseY, double delta) { protected void updateTooltip() { toolTip.clear(); toolTip.add(title.plainCopy() - .withStyle(TextFormatting.BLUE)); + .withStyle(ChatFormatting.BLUE)); for (int i = min; i < max; i++) { if (i == state) - toolTip.add(StringTextComponent.EMPTY.plainCopy() + toolTip.add(TextComponent.EMPTY.plainCopy() .append("-> ") .append(options.get(i)) - .withStyle(TextFormatting.WHITE)); + .withStyle(ChatFormatting.WHITE)); else - toolTip.add(StringTextComponent.EMPTY.plainCopy() + toolTip.add(TextComponent.EMPTY.plainCopy() .append("> ") .append(options.get(i)) - .withStyle(TextFormatting.GRAY)); + .withStyle(ChatFormatting.GRAY)); } - toolTip.add(StringTextComponent.EMPTY.plainCopy() + toolTip.add(TextComponent.EMPTY.plainCopy() .append(scrollToSelect) - .withStyle(TextFormatting.ITALIC, TextFormatting.DARK_GRAY)); + .withStyle(ChatFormatting.ITALIC, ChatFormatting.DARK_GRAY)); } } diff --git a/src/main/java/com/simibubi/mightyarchitect/item/ArchitectWandItem.java b/src/main/java/com/simibubi/mightyarchitect/item/ArchitectWandItem.java index a15b49f..364faca 100644 --- a/src/main/java/com/simibubi/mightyarchitect/item/ArchitectWandItem.java +++ b/src/main/java/com/simibubi/mightyarchitect/item/ArchitectWandItem.java @@ -8,54 +8,51 @@ import com.simibubi.mightyarchitect.gui.DesignExporterScreen; import com.simibubi.mightyarchitect.gui.ScreenHelper; -import net.minecraft.block.BlockState; -import net.minecraft.entity.player.PlayerEntity; -import net.minecraft.item.Item; -import net.minecraft.item.ItemStack; -import net.minecraft.item.ItemUseContext; -import net.minecraft.item.Rarity; -import net.minecraft.util.ActionResult; -import net.minecraft.util.ActionResultType; -import net.minecraft.util.Hand; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.World; +import net.minecraft.core.BlockPos; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.InteractionResultHolder; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.item.Item; +import net.minecraft.world.item.ItemStack; +import net.minecraft.world.item.Rarity; +import net.minecraft.world.item.context.UseOnContext; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.state.BlockState; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; import net.minecraftforge.fml.DistExecutor; -import net.minecraft.item.Item.Properties; - public class ArchitectWandItem extends Item { public ArchitectWandItem(Properties properties) { - super(properties.stacksTo(1).rarity(Rarity.RARE)); + super(properties.stacksTo(1) + .rarity(Rarity.RARE)); } @Override - public ActionResultType useOn(ItemUseContext context) { - PlayerEntity player = context.getPlayer(); - World world = context.getLevel(); + public InteractionResult useOn(UseOnContext context) { + Player player = context.getPlayer(); + Level world = context.getLevel(); if (!world.isClientSide) - return ActionResultType.SUCCESS; + return InteractionResult.SUCCESS; if (player.isShiftKeyDown()) { - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { - openGui(); - }); - return ActionResultType.SUCCESS; + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> openGui()); + return InteractionResult.SUCCESS; } BlockPos anchor = context.getClickedPos(); BlockState blockState = world.getBlockState(anchor); - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { - handleUseOnDesignAnchor(player, world, anchor, blockState); - }); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, + () -> () -> handleUseOnDesignAnchor(player, world, anchor, blockState)); - player.getCooldowns().addCooldown(this, 5); - return ActionResultType.SUCCESS; + player.getCooldowns() + .addCooldown(this, 5); + return InteractionResult.SUCCESS; } @OnlyIn(value = Dist.CLIENT) @@ -64,36 +61,35 @@ protected void resetVisualization() { } @OnlyIn(value = Dist.CLIENT) - protected void handleUseOnDesignAnchor(PlayerEntity player, World world, BlockPos anchor, BlockState blockState) { + protected void handleUseOnDesignAnchor(Player player, Level world, BlockPos anchor, BlockState blockState) { if (AllBlocks.DESIGN_ANCHOR.typeOf(blockState)) { if (!ArchitectManager.inPhase(ArchitectPhases.EditingThemes)) return; String name = DesignExporter.exportDesign(world, anchor); if (!name.isEmpty()) { - player.displayClientMessage(new StringTextComponent(name), true); + player.displayClientMessage(new TextComponent(name), true); } } else { if (!ArchitectManager.inPhase(ArchitectPhases.EditingThemes)) return; - DistExecutor.runWhenOn(Dist.CLIENT, () -> this::resetVisualization); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> this::resetVisualization); } } @Override - public ActionResult use(World worldIn, PlayerEntity playerIn, Hand handIn) { + public InteractionResultHolder use(Level worldIn, Player playerIn, InteractionHand handIn) { if (worldIn.isClientSide) { - DistExecutor.runWhenOn(Dist.CLIENT, () -> () -> { - handleRightClick(worldIn, playerIn, handIn); - }); - playerIn.getCooldowns().addCooldown(this, 5); + DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> handleRightClick(worldIn, playerIn, handIn)); + playerIn.getCooldowns() + .addCooldown(this, 5); } return super.use(worldIn, playerIn, handIn); } @OnlyIn(value = Dist.CLIENT) - protected void handleRightClick(World worldIn, PlayerEntity playerIn, Hand handIn) { + protected void handleRightClick(Level worldIn, Player playerIn, InteractionHand handIn) { if (!ArchitectManager.inPhase(ArchitectPhases.EditingThemes)) return; @@ -104,7 +100,7 @@ protected void handleRightClick(World worldIn, PlayerEntity playerIn, Hand handI resetVisualization(); } } - + @OnlyIn(value = Dist.CLIENT) private void openGui() { if (!ArchitectManager.inPhase(ArchitectPhases.EditingThemes)) diff --git a/src/main/java/com/simibubi/mightyarchitect/networking/InstantPrintPacket.java b/src/main/java/com/simibubi/mightyarchitect/networking/InstantPrintPacket.java index 45d5c8e..fb70321 100644 --- a/src/main/java/com/simibubi/mightyarchitect/networking/InstantPrintPacket.java +++ b/src/main/java/com/simibubi/mightyarchitect/networking/InstantPrintPacket.java @@ -7,12 +7,12 @@ import java.util.Map; import java.util.function.Supplier; -import net.minecraft.block.BlockState; -import net.minecraft.nbt.CompoundNBT; -import net.minecraft.nbt.NBTUtil; -import net.minecraft.network.PacketBuffer; -import net.minecraft.util.math.BlockPos; -import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.nbt.NbtUtils; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraftforge.network.NetworkEvent; public class InstantPrintPacket { @@ -25,30 +25,29 @@ public InstantPrintPacket(BunchOfBlocks blocks) { this.blocks = blocks; } - public InstantPrintPacket(PacketBuffer buf) { + public InstantPrintPacket(FriendlyByteBuf buf) { Map blocks = new HashMap<>(); int size = buf.readInt(); for (int i = 0; i < size; i++) { - CompoundNBT blockTag = buf.readNbt(); + CompoundTag blockTag = buf.readNbt(); BlockPos pos = buf.readBlockPos(); - blocks.put(pos, NBTUtil.readBlockState(blockTag)); + blocks.put(pos, NbtUtils.readBlockState(blockTag)); } this.blocks = new BunchOfBlocks(blocks); } - public void toBytes(PacketBuffer buf) { + public void toBytes(FriendlyByteBuf buf) { buf.writeInt(blocks.size); blocks.blocks.forEach((pos, state) -> { - buf.writeNbt(NBTUtil.writeBlockState(state)); + buf.writeNbt(NbtUtils.writeBlockState(state)); buf.writeBlockPos(pos); }); } - public void handle(Supplier context) { - Context ctx = context.get(); - ctx.enqueueWork(() -> { + public void handle(Supplier context) { + context.get().enqueueWork(() -> { blocks.blocks.forEach((pos, state) -> { - ctx.getSender().getCommandSenderWorld().setBlock(pos, state, 3); + context.get().getSender().getCommandSenderWorld().setBlock(pos, state, 3); }); }); } diff --git a/src/main/java/com/simibubi/mightyarchitect/networking/PlaceSignPacket.java b/src/main/java/com/simibubi/mightyarchitect/networking/PlaceSignPacket.java index 5fd476f..3b87573 100644 --- a/src/main/java/com/simibubi/mightyarchitect/networking/PlaceSignPacket.java +++ b/src/main/java/com/simibubi/mightyarchitect/networking/PlaceSignPacket.java @@ -2,13 +2,13 @@ import java.util.function.Supplier; -import net.minecraft.block.Blocks; -import net.minecraft.network.PacketBuffer; -import net.minecraft.tileentity.SignTileEntity; -import net.minecraft.util.math.BlockPos; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.world.World; -import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraft.core.BlockPos; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; +import net.minecraft.world.level.block.entity.SignBlockEntity; +import net.minecraftforge.network.NetworkEvent; public class PlaceSignPacket { @@ -25,23 +25,23 @@ public PlaceSignPacket(String textLine1, String textLine2, BlockPos position) { this.position = position; } - public PlaceSignPacket(PacketBuffer buffer) { + public PlaceSignPacket(FriendlyByteBuf buffer) { this(buffer.readUtf(128), buffer.readUtf(128), buffer.readBlockPos()); } - public void toBytes(PacketBuffer buffer) { + public void toBytes(FriendlyByteBuf buffer) { buffer.writeUtf(text1); buffer.writeUtf(text2); buffer.writeBlockPos(position); } - public void handle(Supplier context) { + public void handle(Supplier context) { context.get().enqueueWork(() -> { - World entityWorld = context.get().getSender().getCommandSenderWorld(); + Level entityWorld = context.get().getSender().getCommandSenderWorld(); entityWorld.setBlockAndUpdate(position, Blocks.SPRUCE_SIGN.defaultBlockState()); - SignTileEntity sign = (SignTileEntity) entityWorld.getBlockEntity(position); - sign.setMessage(0, new StringTextComponent(text1)); - sign.setMessage(1, new StringTextComponent(text2)); + SignBlockEntity sign = (SignBlockEntity) entityWorld.getBlockEntity(position); + sign.setMessage(0, new TextComponent(text1)); + sign.setMessage(1, new TextComponent(text2)); }); } diff --git a/src/main/java/com/simibubi/mightyarchitect/networking/SetHotbarItemPacket.java b/src/main/java/com/simibubi/mightyarchitect/networking/SetHotbarItemPacket.java index 762816f..8be2315 100644 --- a/src/main/java/com/simibubi/mightyarchitect/networking/SetHotbarItemPacket.java +++ b/src/main/java/com/simibubi/mightyarchitect/networking/SetHotbarItemPacket.java @@ -2,10 +2,10 @@ import java.util.function.Supplier; -import net.minecraft.entity.player.ServerPlayerEntity; -import net.minecraft.item.ItemStack; -import net.minecraft.network.PacketBuffer; -import net.minecraftforge.fml.network.NetworkEvent.Context; +import net.minecraft.network.FriendlyByteBuf; +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.item.ItemStack; +import net.minecraftforge.network.NetworkEvent; public class SetHotbarItemPacket { @@ -17,22 +17,23 @@ public SetHotbarItemPacket(int slot, ItemStack stack) { this.stack = stack; } - public SetHotbarItemPacket(PacketBuffer buffer) { + public SetHotbarItemPacket(FriendlyByteBuf buffer) { this(buffer.readInt(), buffer.readItem()); } - public void toBytes(PacketBuffer buffer) { + public void toBytes(FriendlyByteBuf buffer) { buffer.writeInt(slot); buffer.writeItem(stack); } - public void handle(Supplier context) { + public void handle(Supplier context) { context.get().enqueueWork(() -> { - ServerPlayerEntity player = context.get().getSender(); + ServerPlayer player = context.get().getSender(); if (!player.isCreative()) return; - - player.setSlot(slot, stack); + + player.getInventory().setItem(slot, stack); + //player.setSlot(slot, stack); player.inventoryMenu.broadcastChanges(); }); } diff --git a/src/main/resources/META-INF/accesstransformer.cfg b/src/main/resources/META-INF/accesstransformer.cfg new file mode 100644 index 0000000..98406fe --- /dev/null +++ b/src/main/resources/META-INF/accesstransformer.cfg @@ -0,0 +1 @@ +public net.minecraft.client.renderer.entity.ItemRenderer f_115096_ # textureManager \ No newline at end of file diff --git a/src/main/resources/assets/mightyarchitect/textures/gui/background.png b/src/main/resources/assets/mightyarchitect/textures/gui/background.png index de5cde9..a87c6d8 100644 Binary files a/src/main/resources/assets/mightyarchitect/textures/gui/background.png and b/src/main/resources/assets/mightyarchitect/textures/gui/background.png differ