diff --git a/build.gradle b/build.gradle index 71475d3..234701b 100644 --- a/build.gradle +++ b/build.gradle @@ -1,7 +1,7 @@ buildscript { repositories { - maven { url = 'https://files.minecraftforge.net/maven' } - jcenter() + // These repositories are only for Gradle plugins, put any other repositories in the repository block further below + maven { url = 'https://maven.minecraftforge.net' } mavenCentral() } dependencies { @@ -17,20 +17,26 @@ version = '1.16.5-0.3.0' group = 'brentmaas.buildguide' // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = 'buildguide' -sourceCompatibility = targetCompatibility = compileJava.sourceCompatibility = compileJava.targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. +// Mojang ships Java 17 to end users in 1.18+, so your mod should target Java 17. +java.toolchain.languageVersion = JavaLanguageVersion.of(17) println('Java: ' + System.getProperty('java.version') + ' JVM: ' + System.getProperty('java.vm.version') + '(' + System.getProperty('java.vendor') + ') Arch: ' + System.getProperty('os.arch')) minecraft { - // The mappings can be changed at any time, and must be in the following format. - // snapshot_YYYYMMDD Snapshot are built nightly. - // stable_# Stables are built at the discretion of the MCP team. - // Use non-default mappings at your own risk. they may not always work. + // The mappings can be changed at any time and must be in the following format. + // Channel: Version: + // snapshot YYYYMMDD Snapshot are built nightly. + // stable # Stables are built at the discretion of the MCP team. + // official MCVersion Official field/method names from Mojang mapping files + // + // You must be aware of the Mojang license when using the 'official' mappings. + // See more information here: https://github.com/MinecraftForge/MCPConfig/blob/master/Mojang.md + // + // Use non-default mappings at your own risk. They may not always work. // Simply re-run your setup task after changing the mappings to update your workspace. - mappings channel: 'official', version: '1.16.5' - // makeObfSourceJar = false // an Srg named sources jar is made by default. uncomment this to disable. - - // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') + mappings channel: 'official', version: '1.18.1' + // accessTransformer = file('src/main/resources/META-INF/accesstransformer.cfg') // Currently, this location cannot be changed from the default. + // Default run configurations. // These can be tweaked, removed, or duplicated as needed. runs { @@ -38,9 +44,15 @@ minecraft { workingDirectory project.file('run') // Recommended logging data for a userdev environment - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + property 'forge.logging.markers', 'REGISTRIES' // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' mods { @@ -54,9 +66,15 @@ minecraft { workingDirectory project.file('run') // Recommended logging data for a userdev environment - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + property 'forge.logging.markers', 'REGISTRIES' // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' mods { @@ -70,9 +88,15 @@ minecraft { workingDirectory project.file('run') // Recommended logging data for a userdev environment - property 'forge.logging.markers', 'SCAN,REGISTRIES,REGISTRYDUMP' + // The markers can be added/remove as needed separated by commas. + // "SCAN": For mods scan. + // "REGISTRIES": For firing of registry events. + // "REGISTRYDUMP": For getting the contents of all registries. + property 'forge.logging.markers', 'REGISTRIES' // Recommended logging level for the console + // You can set various levels here. + // Please read: https://stackoverflow.com/questions/2031163/when-to-use-the-different-log-levels property 'forge.logging.console.level', 'debug' // Specify the modid for data generation, where to output the resulting resource, and where to look for existing resources. @@ -90,25 +114,29 @@ minecraft { // Include resources generated by data generators. sourceSets.main.resources { srcDir 'src/generated/resources' } -dependencies { - // Specify the version of Minecraft to use, If this is any group other then 'net.minecraft' it is assumed - // that the dep is a ForgeGradle 'patcher' dependency. And it's patches will be applied. - // The userdev artifact is a special name and will get all sorts of transformations applied to it. - minecraft 'net.minecraftforge:forge:1.16.5-36.2.20' +repositories { + // Put repositories for dependencies here + // ForgeGradle automatically adds the Forge maven and Maven Central for you - // You may put jars on which you depend on in ./libs or you may define them like so.. - // compile "some.group:artifact:version:classifier" - // compile "some.group:artifact:version" + // If you have mod jar dependencies in ./libs, you can declare them as a repository like so: + // flatDir { + // dir 'libs' + // } +} - // Real examples - // compile 'com.mod-buildcraft:buildcraft:6.0.8:dev' // adds buildcraft to the dev env - // compile 'com.googlecode.efficient-java-matrix-library:ejml:0.24' // adds ejml to the dev env +dependencies { + // Specify the version of Minecraft to use. If this is any group other than 'net.minecraft', it is assumed + // that the dep is a ForgeGradle 'patcher' dependency, and its patches will be applied. + // The userdev artifact is a special name and will get all sorts of transformations applied to it. + minecraft 'net.minecraftforge:forge:1.18.1-39.0.0' - // The 'provided' configuration is for optional dependencies that exist at compile-time but might not at runtime. - // provided 'com.mod-buildcraft:buildcraft:6.0.8:dev' + // Real mod deobf dependency examples - these get remapped to your current mappings + // compileOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}:api") // Adds JEI API as a compile dependency + // runtimeOnly fg.deobf("mezz.jei:jei-${mc_version}:${jei_version}") // Adds the full JEI mod as a runtime dependency + // implementation fg.deobf("com.tterrag.registrate:Registrate:MC${mc_version}-${registrate_version}") // Adds registrate as a dependency - // These dependencies get remapped to your current MCP mappings - // deobf 'com.mod-buildcraft:buildcraft:6.0.8:dev' + // Examples using mod jars from ./libs + // implementation fg.deobf("blank:coolmod-${mc_version}:${coolmod_version}") // For more info... // http://www.gradle.org/docs/current/userguide/artifact_dependencies_tutorial.html @@ -124,7 +152,7 @@ jar { "Specification-Vendor": "buildguide", "Specification-Version": "8", "Implementation-Title": project.name, - "Implementation-Version": "${version}", + "Implementation-Version": project.jar.archiveVersion, "Implementation-Vendor" :"buildguide", "Implementation-Timestamp": new Date().format("yyyy-MM-dd'T'HH:mm:ssZ") ]) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 05679dc..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.1.1-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-7.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/gradlew b/gradlew index 744e882..c53aefa 100644 --- a/gradlew +++ b/gradlew @@ -1,7 +1,7 @@ -#!/usr/bin/env sh +#!/bin/sh # -# Copyright 2015 the original author or authors. +# Copyright © 2015-2021 the original authors. # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. @@ -17,67 +17,101 @@ # ############################################################################## -## -## 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='"-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 - ;; - MSYS* | 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 @@ -87,9 +121,9 @@ CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar 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 @@ -98,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 @@ -106,80 +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" = "true" -o "$msys" = "true" ] ; 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 +if "$cygwin" || "$msys" ; then + APP_HOME=$( cygpath --path --mixed "$APP_HOME" ) + CLASSPATH=$( cygpath --path --mixed "$CLASSPATH" ) + + JAVACMD=$( cygpath --unix "$JAVACMD" ) + # 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=`expr $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; +# * $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. +# -# 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" +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/src/main/java/brentmaas/buildguide/BuildGuide.java b/src/main/java/brentmaas/buildguide/BuildGuide.java index 52f6686..d7eaeb2 100644 --- a/src/main/java/brentmaas/buildguide/BuildGuide.java +++ b/src/main/java/brentmaas/buildguide/BuildGuide.java @@ -1,6 +1,5 @@ package brentmaas.buildguide; -import org.apache.commons.lang3.tuple.Pair; import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.Logger; @@ -14,16 +13,16 @@ import brentmaas.buildguide.shapes.ShapeSphere; import brentmaas.buildguide.shapes.ShapeTorus; import net.minecraftforge.api.distmarker.Dist; +import net.minecraftforge.event.server.ServerStartingEvent; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.DistExecutor; -import net.minecraftforge.fml.ExtensionPoint; +import net.minecraftforge.fml.IExtensionPoint; import net.minecraftforge.fml.ModLoadingContext; import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.config.ModConfig; import net.minecraftforge.fml.event.lifecycle.FMLCommonSetupEvent; -import net.minecraftforge.fml.event.server.FMLServerStartingEvent; import net.minecraftforge.fml.javafmlmod.FMLJavaModLoadingContext; -import net.minecraftforge.fml.network.FMLNetworkConstants; +import net.minecraftforge.network.NetworkConstants; @Mod(BuildGuide.modid) public class BuildGuide { @@ -31,7 +30,7 @@ public class BuildGuide { public static final Logger logger = LogManager.getLogger(); public BuildGuide() { - ModLoadingContext.get().registerExtensionPoint(ExtensionPoint.DISPLAYTEST, () -> Pair.of(() -> FMLNetworkConstants.IGNORESERVERONLY, (a, b) -> true)); + ModLoadingContext.get().registerExtensionPoint(IExtensionPoint.DisplayTest.class, () -> new IExtensionPoint.DisplayTest(() -> NetworkConstants.IGNORESERVERONLY, (a, b) -> true)); DistExecutor.unsafeRunWhenOn(Dist.CLIENT, () -> () -> { ShapeRegistry.registerShape(ShapeCircle.class); ShapeRegistry.registerShape(ShapeCuboid.class); @@ -54,7 +53,7 @@ private void setup(final FMLCommonSetupEvent event) { } @SubscribeEvent - public void onServerStarting(FMLServerStartingEvent event) { + public void onServerStarting(ServerStartingEvent event) { logger.warn("Build Guide is a client-only mod! Running it on a server is discouraged!"); } } diff --git a/src/main/java/brentmaas/buildguide/Config.java b/src/main/java/brentmaas/buildguide/Config.java index ce2cf1e..150bbc1 100644 --- a/src/main/java/brentmaas/buildguide/Config.java +++ b/src/main/java/brentmaas/buildguide/Config.java @@ -6,7 +6,7 @@ import net.minecraftforge.common.ForgeConfigSpec.BooleanValue; import net.minecraftforge.eventbus.api.SubscribeEvent; import net.minecraftforge.fml.common.Mod.EventBusSubscriber; -import net.minecraftforge.fml.config.ModConfig; +import net.minecraftforge.fml.event.config.ModConfigEvent; @EventBusSubscriber(modid=BuildGuide.modid, bus=EventBusSubscriber.Bus.MOD) public class Config { @@ -26,7 +26,7 @@ public static void bakeConfig() { } @SubscribeEvent - public static void onModConfigEvent(final ModConfig.ModConfigEvent event) { + public static void onModConfigEvent(final ModConfigEvent event) { if(event.getConfig().getSpec() == Config.clientConfigSpec) { Config.bakeConfig(); } diff --git a/src/main/java/brentmaas/buildguide/InputHandler.java b/src/main/java/brentmaas/buildguide/InputHandler.java index b87cd15..881d15d 100644 --- a/src/main/java/brentmaas/buildguide/InputHandler.java +++ b/src/main/java/brentmaas/buildguide/InputHandler.java @@ -2,27 +2,28 @@ import org.lwjgl.glfw.GLFW; +import com.mojang.blaze3d.platform.InputConstants; + import brentmaas.buildguide.screen.BuildGuideScreen; -import brentmaas.buildguide.screen.VisualisationScreen; import brentmaas.buildguide.screen.ShapelistScreen; +import brentmaas.buildguide.screen.VisualisationScreen; +import net.minecraft.client.KeyMapping; import net.minecraft.client.Minecraft; -import net.minecraft.client.settings.KeyBinding; -import net.minecraft.client.util.InputMappings; +import net.minecraftforge.client.ClientRegistry; import net.minecraftforge.client.event.InputEvent.KeyInputEvent; import net.minecraftforge.client.settings.KeyConflictContext; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; -import net.minecraftforge.fml.client.registry.ClientRegistry; public class InputHandler { - public static KeyBinding openBuildGuide; - public static KeyBinding openShapeList; - public static KeyBinding openVisualisation; + public static KeyMapping openBuildGuide; + public static KeyMapping openShapeList; + public static KeyMapping openVisualisation; public static void register() { - openBuildGuide = new KeyBinding("key.buildguide.openbuildguide", KeyConflictContext.IN_GAME, InputMappings.Type.KEYSYM, GLFW.GLFW_KEY_B, "key.buildguide.category"); - openShapeList = new KeyBinding("key.buildguide.openshapelist", KeyConflictContext.IN_GAME, InputMappings.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN, "key.buildguide.category"); - openVisualisation = new KeyBinding("key.buildguide.openvisualisation", KeyConflictContext.IN_GAME, InputMappings.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN, "key.buildguide.category"); + openBuildGuide = new KeyMapping("key.buildguide.openbuildguide", KeyConflictContext.IN_GAME, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_B, "key.buildguide.category"); + openShapeList = new KeyMapping("key.buildguide.openshapelist", KeyConflictContext.IN_GAME, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN, "key.buildguide.category"); + openVisualisation = new KeyMapping("key.buildguide.openvisualisation", KeyConflictContext.IN_GAME, InputConstants.Type.KEYSYM, GLFW.GLFW_KEY_UNKNOWN, "key.buildguide.category"); ClientRegistry.registerKeyBinding(openBuildGuide); ClientRegistry.registerKeyBinding(openShapeList); diff --git a/src/main/java/brentmaas/buildguide/RenderHandler.java b/src/main/java/brentmaas/buildguide/RenderHandler.java index d8a0e16..75c43be 100644 --- a/src/main/java/brentmaas/buildguide/RenderHandler.java +++ b/src/main/java/brentmaas/buildguide/RenderHandler.java @@ -2,14 +2,16 @@ import org.lwjgl.opengl.GL11; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.platform.GlStateManager; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.math.Matrix4f; import brentmaas.buildguide.shapes.Shape; import net.minecraft.client.Minecraft; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraftforge.client.event.RenderWorldLastEvent; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.world.phys.Vec3; +import net.minecraftforge.client.event.RenderLevelLastEvent; import net.minecraftforge.common.MinecraftForge; import net.minecraftforge.eventbus.api.SubscribeEvent; @@ -21,30 +23,30 @@ public static void register() { } @SubscribeEvent - public void onRenderBlock(RenderWorldLastEvent event) { + public void onRenderBlock(RenderLevelLastEvent event) { Minecraft.getInstance().getProfiler().push("buildguide"); if(StateManager.getState().propertyEnable.value && StateManager.getState().isShapeAvailable() && StateManager.getState().getCurrentShape().basePos != null) { - MatrixStack stack = event.getMatrixStack(); + PoseStack stack = event.getPoseStack(); + Matrix4f projectionMatrix = event.getProjectionMatrix(); if(StateManager.getState().propertyAdvancedMode.value) { - for(Shape shape: StateManager.getState().advancedModeShapes) renderShape(stack, shape); - } else { - renderShape(stack, StateManager.getState().getCurrentShape()); + for(Shape shape: StateManager.getState().advancedModeShapes) renderShape(stack, projectionMatrix, shape); + }else { + renderShape(stack, projectionMatrix, StateManager.getState().getCurrentShape()); } } Minecraft.getInstance().getProfiler().pop(); } - private void renderShape(MatrixStack stack, Shape s) { + private void renderShape(PoseStack stack, Matrix4f projectionMatrix, Shape s) { if(s.visible) { + RenderSystem.setShader(GameRenderer::getPositionColorShader); + stack.pushPose(); - Vector3d projectedView = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); + Vec3 projectedView = Minecraft.getInstance().gameRenderer.getMainCamera().getPosition(); stack.translate(-projectedView.x + s.basePos.x, -projectedView.y + s.basePos.y, -projectedView.z + s.basePos.z); - RenderSystem.pushMatrix(); - RenderSystem.multMatrix(stack.last().pose()); - boolean toggleTexture = GL11.glIsEnabled(GL11.GL_TEXTURE_2D); boolean hasDepthTest = GL11.glIsEnabled(GL11.GL_DEPTH_TEST); @@ -62,16 +64,14 @@ private void renderShape(MatrixStack stack, Shape s) { RenderSystem.blendFunc(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA); if(toggleBlend) RenderSystem.enableBlend(); - s.render(stack.last().pose()); + s.render(stack.last().pose(), projectionMatrix); if(toggleBlend) RenderSystem.disableBlend(); if(toggleDepthTest && hasDepthTest) RenderSystem.enableDepthTest(); else if(toggleDepthTest) RenderSystem.disableDepthTest(); if(toggleDepthMask) RenderSystem.depthMask(true); if(toggleTexture) RenderSystem.enableTexture(); - - RenderSystem.popMatrix(); - + stack.popPose(); } } diff --git a/src/main/java/brentmaas/buildguide/State.java b/src/main/java/brentmaas/buildguide/State.java index 898870c..2a39e22 100644 --- a/src/main/java/brentmaas/buildguide/State.java +++ b/src/main/java/brentmaas/buildguide/State.java @@ -7,16 +7,16 @@ import brentmaas.buildguide.shapes.Shape; import brentmaas.buildguide.shapes.ShapeRegistry; import net.minecraft.client.Minecraft; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class State { public Shape[] simpleModeShapes; public int iSimple = 0; public ArrayList advancedModeShapes = new ArrayList(); public int iAdvanced = 0; - public PropertyBoolean propertyEnable = new PropertyBoolean(-4, false, new TranslationTextComponent("screen.buildguide.enable"), null); - public PropertyBoolean propertyDepthTest = new PropertyBoolean(2, true, new TranslationTextComponent("screen.buildguide.depthtest"), null); - public PropertyBoolean propertyAdvancedMode = new PropertyBoolean(-2, false, new TranslationTextComponent("screen.buildguide.advancedmode"), () -> Minecraft.getInstance().setScreen(new BuildGuideScreen())); + public PropertyBoolean propertyEnable = new PropertyBoolean(-4, false, new TranslatableComponent("screen.buildguide.enable"), null); + public PropertyBoolean propertyDepthTest = new PropertyBoolean(2, true, new TranslatableComponent("screen.buildguide.depthtest"), null); + public PropertyBoolean propertyAdvancedMode = new PropertyBoolean(-2, false, new TranslatableComponent("screen.buildguide.advancedmode"), () -> Minecraft.getInstance().setScreen(new BuildGuideScreen())); public State() { ArrayList classIdentifiers = ShapeRegistry.getClassIdentifiers(); @@ -50,7 +50,7 @@ public boolean isShapeAvailable() { public void resetBasepos() { if(propertyAdvancedMode.value) { advancedModeShapes.get(iAdvanced).resetBasepos(); - } else { + }else { for(Shape s: simpleModeShapes) s.resetBasepos(); } } @@ -62,7 +62,7 @@ public void resetBasepos(int advancedModeId) { public void setBasepos(int x, int y, int z) { if(propertyAdvancedMode.value) { advancedModeShapes.get(iAdvanced).setBasepos(x, y, z); - } else { + }else { for(Shape s: simpleModeShapes) s.setBasepos(x, y, z); } } diff --git a/src/main/java/brentmaas/buildguide/property/Property.java b/src/main/java/brentmaas/buildguide/property/Property.java index 6584a0a..16a81af 100644 --- a/src/main/java/brentmaas/buildguide/property/Property.java +++ b/src/main/java/brentmaas/buildguide/property/Property.java @@ -2,13 +2,13 @@ import java.util.ArrayList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import brentmaas.buildguide.screen.PropertyScreen; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.AbstractButton; -import net.minecraft.util.text.TextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.AbstractButton; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.BaseComponent; public abstract class Property { protected final static int baseY = 125; @@ -16,25 +16,25 @@ public abstract class Property { protected int y; public T value; - protected TextComponent name; + protected BaseComponent name; public ArrayList buttonList = new ArrayList(); - public ArrayList textFieldList = new ArrayList(); + public ArrayList editBoxList = new ArrayList(); protected boolean visible = true; - public Property(int slot, T value, TextComponent name, Runnable onUpdate) { + public Property(int slot, T value, BaseComponent name, Runnable onUpdate){ y = baseY + slot * height; this.value = value; this.name = name; } - public abstract void addTextFields(FontRenderer fr); + public abstract void addTextFields(Font fr); public void onSelectedInGUI() { for(AbstractButton b: buttonList) { b.visible = true; } - for(TextFieldWidget tfw: textFieldList) { - tfw.visible = true; + for(EditBox eb: editBoxList) { + eb.visible = true; } visible = true; } @@ -43,18 +43,18 @@ public void onDeselectedInGUI() { for(AbstractButton b: buttonList) { b.visible = false; } - for(TextFieldWidget tfw: textFieldList) { - tfw.visible = false; + for(EditBox eb: editBoxList) { + eb.visible = false; } visible = false; } public void addToPropertyScreen(PropertyScreen screen) { for(AbstractButton b: buttonList) { - screen.addButtonExternal(b); + screen.addWidgetExternal(b); } - for(TextFieldWidget tfw: textFieldList) { - screen.addTextFieldExternal(tfw); + for(EditBox eb: editBoxList) { + screen.addWidgetExternal(eb); } } @@ -62,22 +62,22 @@ public void setValue(T value) { this.value = value; } - public void setName(TextComponent name) { + public void setName(BaseComponent name) { this.name = name; } public boolean mightNeedTextFields() { - return textFieldList.size() == 0; + return editBoxList.size() == 0; } - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks, FontRenderer font) { - for(TextFieldWidget tfw: textFieldList) { - tfw.render(matrixStack, mouseX, mouseY, partialTicks); + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks, Font font) { + for(EditBox eb: editBoxList) { + eb.render(matrixStack, mouseX, mouseY, partialTicks); } drawString(matrixStack, name.getString(), 5, y + 5, 0xFFFFFF, font); } - protected void drawString(MatrixStack matrixStack, String text, float x, float y, int colour, FontRenderer font) { + protected void drawString(PoseStack matrixStack, String text, float x, float y, int colour, Font font) { if(visible) { font.drawShadow(matrixStack, text, x, y, colour); } diff --git a/src/main/java/brentmaas/buildguide/property/PropertyBoolean.java b/src/main/java/brentmaas/buildguide/property/PropertyBoolean.java index 73a7180..07409c1 100644 --- a/src/main/java/brentmaas/buildguide/property/PropertyBoolean.java +++ b/src/main/java/brentmaas/buildguide/property/PropertyBoolean.java @@ -1,23 +1,23 @@ package brentmaas.buildguide.property; import brentmaas.buildguide.screen.widget.CheckboxRunnableButton; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.TextComponent; public class PropertyBoolean extends Property{ private CheckboxRunnableButton button; - public PropertyBoolean(int slot, Boolean value, TextComponent name, Runnable onUpdate) { + public PropertyBoolean(int slot, Boolean value, BaseComponent name, Runnable onUpdate) { super(slot, value, name, onUpdate); - button = new CheckboxRunnableButton(140, y, 20, 20, new StringTextComponent(""), value, false, button -> { + button = new CheckboxRunnableButton(140, y, 20, 20, new TextComponent(""), value, false, button -> { this.value = button.selected(); if(onUpdate != null) onUpdate.run(); }); buttonList.add(button); } - public void addTextFields(FontRenderer fr) { + public void addTextFields(Font fr) { } } diff --git a/src/main/java/brentmaas/buildguide/property/PropertyEnum.java b/src/main/java/brentmaas/buildguide/property/PropertyEnum.java index c89d1d4..2e8e7a2 100644 --- a/src/main/java/brentmaas/buildguide/property/PropertyEnum.java +++ b/src/main/java/brentmaas/buildguide/property/PropertyEnum.java @@ -1,34 +1,34 @@ package brentmaas.buildguide.property; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.TextComponent; public class PropertyEnum> extends Property { private String[] names; - public PropertyEnum(int slot, T value, TextComponent name, Runnable onUpdate, String[] names) { + public PropertyEnum(int slot, T value, BaseComponent name, Runnable onUpdate, String[] names) { super(slot, value, name, onUpdate); this.names = names; - buttonList.add(new Button(90, y, 20, 20, new StringTextComponent("<-"), button -> { + buttonList.add(new Button(90, y, 20, 20, new TextComponent("<-"), button -> { this.value = this.value.getDeclaringClass().getEnumConstants()[Math.floorMod(this.value.ordinal() - 1, this.value.getDeclaringClass().getEnumConstants().length)]; if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(190, y, 20, 20, new StringTextComponent("->"), button -> { + buttonList.add(new Button(190, y, 20, 20, new TextComponent("->"), button -> { this.value = this.value.getDeclaringClass().getEnumConstants()[Math.floorMod(this.value.ordinal() + 1, this.value.getDeclaringClass().getEnumConstants().length)]; if(onUpdate != null) onUpdate.run(); })); } - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks, FontRenderer font) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks, Font font) { super.render(matrixStack, mouseX, mouseY, partialTicks, font); drawString(matrixStack, names[value.ordinal()], 110 + (80 - font.width(names[value.ordinal()])) / 2, y + 5, 0xFFFFFF, font); } - public void addTextFields(FontRenderer fr) { + public void addTextFields(Font fr) { } } diff --git a/src/main/java/brentmaas/buildguide/property/PropertyInt.java b/src/main/java/brentmaas/buildguide/property/PropertyInt.java index 72322c8..7bb56f1 100644 --- a/src/main/java/brentmaas/buildguide/property/PropertyInt.java +++ b/src/main/java/brentmaas/buildguide/property/PropertyInt.java @@ -1,30 +1,30 @@ package brentmaas.buildguide.property; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class PropertyInt extends Property{ - private TextFieldWidget valueWidget; + private EditBox valueWidget; - public PropertyInt(int slot, int value, TextComponent name, Runnable onUpdate) { + public PropertyInt(int slot, int value, BaseComponent name, Runnable onUpdate) { super(slot, value, name, onUpdate); - buttonList.add(new Button(90, y, 20, 20, new StringTextComponent("-"), button -> { + buttonList.add(new Button(90, y, 20, 20, new TextComponent("-"), button -> { --this.value; valueWidget.setValue("" + this.value); valueWidget.setTextColor(0xFFFFFF); if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(190, y, 20, 20, new StringTextComponent("+"), button -> { + buttonList.add(new Button(190, y, 20, 20, new TextComponent("+"), button -> { ++this.value; valueWidget.setValue("" + this.value); valueWidget.setTextColor(0xFFFFFF); if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(160, y, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + buttonList.add(new Button(160, y, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(valueWidget.getValue()); this.value = newval; @@ -41,10 +41,10 @@ public void setValue(Integer value) { valueWidget.setTextColor(0xFFFFFF); } - public void addTextFields(FontRenderer fr) { - valueWidget = new TextFieldWidget(fr, 110, y, 50, 20, new StringTextComponent("")); + public void addTextFields(Font fr) { + valueWidget = new EditBox(fr, 110, y, 50, 20, new TextComponent("")); valueWidget.setValue("" + value); valueWidget.setTextColor(0xFFFFFF); - textFieldList.add(valueWidget); + editBoxList.add(valueWidget); } } diff --git a/src/main/java/brentmaas/buildguide/property/PropertyMinimumInt.java b/src/main/java/brentmaas/buildguide/property/PropertyMinimumInt.java index de0ef41..874ce45 100644 --- a/src/main/java/brentmaas/buildguide/property/PropertyMinimumInt.java +++ b/src/main/java/brentmaas/buildguide/property/PropertyMinimumInt.java @@ -1,32 +1,32 @@ package brentmaas.buildguide.property; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class PropertyMinimumInt extends Property{ - private TextFieldWidget valueWidget; + private EditBox valueWidget; private int minInt; - public PropertyMinimumInt(int slot, int value, TextComponent name, Runnable onUpdate, int minInt) { + public PropertyMinimumInt(int slot, int value, BaseComponent name, Runnable onUpdate, int minInt) { super(slot, value, name, onUpdate); this.minInt = minInt; - buttonList.add(new Button(90, y, 20, 20, new StringTextComponent("-"), button -> { + buttonList.add(new Button(90, y, 20, 20, new TextComponent("-"), button -> { if(this.value > this.minInt) --this.value; valueWidget.setValue("" + this.value); valueWidget.setTextColor(0xFFFFFF); if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(190, y, 20, 20, new StringTextComponent("+"), button -> { + buttonList.add(new Button(190, y, 20, 20, new TextComponent("+"), button -> { ++this.value; valueWidget.setValue("" + this.value); valueWidget.setTextColor(0xFFFFFF); if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(160, y, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + buttonList.add(new Button(160, y, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(valueWidget.getValue()); this.value = newval; @@ -48,10 +48,10 @@ public void setValue(Integer value) { valueWidget.setTextColor(0xFFFFFF); } - public void addTextFields(FontRenderer fr) { - valueWidget = new TextFieldWidget(fr, 110, y, 50, 20, new StringTextComponent("")); + public void addTextFields(Font fr) { + valueWidget = new EditBox(fr, 110, y, 50, 20, new TextComponent("")); valueWidget.setValue("" + value); valueWidget.setTextColor(0xFFFFFF); - textFieldList.add(valueWidget); + editBoxList.add(valueWidget); } } diff --git a/src/main/java/brentmaas/buildguide/property/PropertyNonzeroInt.java b/src/main/java/brentmaas/buildguide/property/PropertyNonzeroInt.java index 2992be8..86c26a8 100644 --- a/src/main/java/brentmaas/buildguide/property/PropertyNonzeroInt.java +++ b/src/main/java/brentmaas/buildguide/property/PropertyNonzeroInt.java @@ -1,32 +1,32 @@ package brentmaas.buildguide.property; -import net.minecraft.client.gui.FontRenderer; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.gui.Font; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.BaseComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class PropertyNonzeroInt extends Property{ - private TextFieldWidget valueWidget; + private EditBox valueWidget; - public PropertyNonzeroInt(int slot, int value, TextComponent name, Runnable onUpdate) { + public PropertyNonzeroInt(int slot, int value, BaseComponent name, Runnable onUpdate) { super(slot, value, name, onUpdate); - buttonList.add(new Button(90, y, 20, 20, new StringTextComponent("-"), button -> { + buttonList.add(new Button(90, y, 20, 20, new TextComponent("-"), button -> { --this.value; - if(this.value == 0) this.value = -1; + if(this.value == 0) --this.value; valueWidget.setValue("" + this.value); valueWidget.setTextColor(0xFFFFFF); if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(190, y, 20, 20, new StringTextComponent("+"), button -> { + buttonList.add(new Button(190, y, 20, 20, new TextComponent("+"), button -> { ++this.value; - if(this.value == 0) this.value = 1; + if(this.value == 0) ++this.value; valueWidget.setValue("" + this.value); valueWidget.setTextColor(0xFFFFFF); if(onUpdate != null) onUpdate.run(); })); - buttonList.add(new Button(160, y, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + buttonList.add(new Button(160, y, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(valueWidget.getValue()); this.value = newval; @@ -48,10 +48,10 @@ public void setValue(Integer value) { valueWidget.setTextColor(0xFFFFFF); } - public void addTextFields(FontRenderer fr) { - valueWidget = new TextFieldWidget(fr, 110, y, 50, 20, new StringTextComponent("")); + public void addTextFields(Font fr) { + valueWidget = new EditBox(fr, 110, y, 50, 20, new TextComponent("")); valueWidget.setValue("" + value); valueWidget.setTextColor(0xFFFFFF); - textFieldList.add(valueWidget); + editBoxList.add(valueWidget); } } diff --git a/src/main/java/brentmaas/buildguide/property/PropertyPositiveInt.java b/src/main/java/brentmaas/buildguide/property/PropertyPositiveInt.java index 4551343..c1d94db 100644 --- a/src/main/java/brentmaas/buildguide/property/PropertyPositiveInt.java +++ b/src/main/java/brentmaas/buildguide/property/PropertyPositiveInt.java @@ -1,11 +1,11 @@ package brentmaas.buildguide.property; -import net.minecraft.util.text.TextComponent; +import net.minecraft.network.chat.BaseComponent; public class PropertyPositiveInt extends PropertyMinimumInt{ - public PropertyPositiveInt(int slot, int value, TextComponent name, Runnable onUpdate) { + public PropertyPositiveInt(int slot, int value, BaseComponent name, Runnable onUpdate) { super(slot, value, name, onUpdate, 1); } } diff --git a/src/main/java/brentmaas/buildguide/screen/BuildGuideScreen.java b/src/main/java/brentmaas/buildguide/screen/BuildGuideScreen.java index 6e64885..e51527a 100644 --- a/src/main/java/brentmaas/buildguide/screen/BuildGuideScreen.java +++ b/src/main/java/brentmaas/buildguide/screen/BuildGuideScreen.java @@ -1,15 +1,15 @@ package brentmaas.buildguide.screen; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import brentmaas.buildguide.StateManager; import brentmaas.buildguide.property.Property; import brentmaas.buildguide.shapes.Shape; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class BuildGuideScreen extends PropertyScreen{ private String titleGlobalProperties; @@ -20,22 +20,22 @@ public class BuildGuideScreen extends PropertyScreen{ private Button buttonClose; //It's better off as custom buttons instead of PropertyEnum - private Button buttonShapePrevious = new Button(60, 25, 20, 20, new StringTextComponent("<-"), button -> updateShape(-1)); - private Button buttonShapeNext = new Button(140, 25, 20, 20, new StringTextComponent("->"), button -> updateShape(1)); - private Button buttonShapelist = new Button(140, 25, 20, 20, new StringTextComponent("..."), button -> Minecraft.getInstance().setScreen(new ShapelistScreen())); - private Button buttonBasepos = new Button(185, 25, 120, 20, new TranslationTextComponent("screen.buildguide.setbasepos"), button -> StateManager.getState().resetBasepos()); - private Button buttonVisualisation = new Button(0, 65, 160, 20, new TranslationTextComponent("screen.buildguide.visualisation"), button -> Minecraft.getInstance().setScreen(new VisualisationScreen())); + private Button buttonShapePrevious = new Button(60, 25, 20, 20, new TextComponent("<-"), button -> updateShape(-1)); + private Button buttonShapeNext = new Button(140, 25, 20, 20, new TextComponent("->"), button -> updateShape(1)); + private Button buttonShapelist = new Button(140, 25, 20, 20, new TextComponent("..."), button -> Minecraft.getInstance().setScreen(new ShapelistScreen())); + private Button buttonBasepos = new Button(185, 25, 120, 20, new TranslatableComponent("screen.buildguide.setbasepos"), button -> StateManager.getState().resetBasepos()); + private Button buttonVisualisation = new Button(0, 65, 160, 20, new TranslatableComponent("screen.buildguide.visualisation"), button -> Minecraft.getInstance().setScreen(new VisualisationScreen())); //It's better off as custom buttons instead of PropertyInt - private Button buttonBaseposXDecrease = new Button(185, 45, 20, 20, new StringTextComponent("-"), button -> shiftBasePos(-1, 0, 0)); - private Button buttonBaseposXIncrease = new Button(285, 45, 20, 20, new StringTextComponent("+"), button -> shiftBasePos(1, 0, 0)); - private Button buttonBaseposYDecrease = new Button(185, 65, 20, 20, new StringTextComponent("-"), button -> shiftBasePos(0, -1, 0)); - private Button buttonBaseposYIncrease = new Button(285, 65, 20, 20, new StringTextComponent("+"), button -> shiftBasePos(0, 1, 0)); - private Button buttonBaseposZDecrease = new Button(185, 85, 20, 20, new StringTextComponent("-"), button -> shiftBasePos(0, 0, -1)); - private Button buttonBaseposZIncrease = new Button(285, 85, 20, 20, new StringTextComponent("+"), button -> shiftBasePos(0, 0, 1)); - private TextFieldWidget textFieldX; - private TextFieldWidget textFieldY; - private TextFieldWidget textFieldZ; - private Button buttonSetX = new Button(255, 45, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + private Button buttonBaseposXDecrease = new Button(185, 45, 20, 20, new TextComponent("-"), button -> shiftBasePos(-1, 0, 0)); + private Button buttonBaseposXIncrease = new Button(285, 45, 20, 20, new TextComponent("+"), button -> shiftBasePos(1, 0, 0)); + private Button buttonBaseposYDecrease = new Button(185, 65, 20, 20, new TextComponent("-"), button -> shiftBasePos(0, -1, 0)); + private Button buttonBaseposYIncrease = new Button(285, 65, 20, 20, new TextComponent("+"), button -> shiftBasePos(0, 1, 0)); + private Button buttonBaseposZDecrease = new Button(185, 85, 20, 20, new TextComponent("-"), button -> shiftBasePos(0, 0, -1)); + private Button buttonBaseposZIncrease = new Button(285, 85, 20, 20, new TextComponent("+"), button -> shiftBasePos(0, 0, 1)); + private EditBox textFieldX; + private EditBox textFieldY; + private EditBox textFieldZ; + private Button buttonSetX = new Button(255, 45, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(textFieldX.getValue()); StateManager.getState().setBaseposX(newval); @@ -44,7 +44,7 @@ public class BuildGuideScreen extends PropertyScreen{ textFieldX.setTextColor(0xFF0000); } }); - private Button buttonSetY = new Button(255, 65, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + private Button buttonSetY = new Button(255, 65, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(textFieldY.getValue()); StateManager.getState().setBaseposY(newval); @@ -53,7 +53,7 @@ public class BuildGuideScreen extends PropertyScreen{ textFieldY.setTextColor(0xFF0000); } }); - private Button buttonSetZ = new Button(255, 85, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + private Button buttonSetZ = new Button(255, 85, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(textFieldZ.getValue()); StateManager.getState().setBaseposZ(newval); @@ -64,16 +64,16 @@ public class BuildGuideScreen extends PropertyScreen{ }); public BuildGuideScreen() { - super(new TranslationTextComponent("screen.buildguide.title")); + super(new TranslatableComponent("screen.buildguide.title")); } @Override protected void init() { - titleGlobalProperties = new TranslationTextComponent("screen.buildguide.globalproperties").getString(); - titleShapeProperties = new TranslationTextComponent("screen.buildguide.shapeproperties").getString(); - titleBasepos = new TranslationTextComponent("screen.buildguide.basepos").getString(); - titleNumberOfBlocks = new TranslationTextComponent("screen.buildguide.numberofblocks").getString(); - textShape = new TranslationTextComponent("screen.buildguide.shape").getString(); + titleGlobalProperties = new TranslatableComponent("screen.buildguide.globalproperties").getString(); + titleShapeProperties = new TranslatableComponent("screen.buildguide.shapeproperties").getString(); + titleBasepos = new TranslatableComponent("screen.buildguide.basepos").getString(); + titleNumberOfBlocks = new TranslatableComponent("screen.buildguide.numberofblocks").getString(); + textShape = new TranslatableComponent("screen.buildguide.shape").getString(); if(StateManager.getState().isShapeAvailable() && StateManager.getState().getCurrentShape().basePos == null) { //Very likely the first time opening, so basepos and shapes haven't been properly set up yet StateManager.getState().resetBasepos(); @@ -83,7 +83,7 @@ protected void init() { //Advanced mode shapes should be empty } - buttonClose = new Button(this.width - 20, 0, 20, 20, new StringTextComponent("X"), button -> Minecraft.getInstance().setScreen(null)); + buttonClose = new Button(this.width - 20, 0, 20, 20, new TextComponent("X"), button -> Minecraft.getInstance().setScreen(null)); if(!StateManager.getState().isShapeAvailable()) { buttonBasepos.active = false; @@ -99,37 +99,37 @@ protected void init() { buttonSetZ.active = false; } - addButton(buttonClose); + addRenderableWidget(buttonClose); if(!StateManager.getState().propertyAdvancedMode.value) { - addButton(buttonShapePrevious); - addButton(buttonShapeNext); + addRenderableWidget(buttonShapePrevious); + addRenderableWidget(buttonShapeNext); }else { - addButton(buttonShapelist); + addRenderableWidget(buttonShapelist); } - addButton(buttonBasepos); - addButton(buttonVisualisation); - addButton(buttonBaseposXDecrease); - addButton(buttonBaseposXIncrease); - addButton(buttonBaseposYDecrease); - addButton(buttonBaseposYIncrease); - addButton(buttonBaseposZDecrease); - addButton(buttonBaseposZIncrease); - addButton(buttonSetX); - addButton(buttonSetY); - addButton(buttonSetZ); + addRenderableWidget(buttonBasepos); + addRenderableWidget(buttonVisualisation); + addRenderableWidget(buttonBaseposXDecrease); + addRenderableWidget(buttonBaseposXIncrease); + addRenderableWidget(buttonBaseposYDecrease); + addRenderableWidget(buttonBaseposYIncrease); + addRenderableWidget(buttonBaseposZDecrease); + addRenderableWidget(buttonBaseposZIncrease); + addRenderableWidget(buttonSetX); + addRenderableWidget(buttonSetY); + addRenderableWidget(buttonSetZ); - textFieldX = new TextFieldWidget(font, 205, 45, 50, 20, new StringTextComponent("")); + textFieldX = new EditBox(font, 205, 45, 50, 20, new TextComponent("")); textFieldX.setValue(StateManager.getState().isShapeAvailable() ? "" + (int) StateManager.getState().getCurrentShape().basePos.x : "-"); textFieldX.setTextColor(0xFFFFFF); - children.add(textFieldX); - textFieldY = new TextFieldWidget(font, 205, 65, 50, 20, new StringTextComponent("")); + addRenderableWidget(textFieldX); + textFieldY = new EditBox(font, 205, 65, 50, 20, new TextComponent("")); textFieldY.setValue(StateManager.getState().isShapeAvailable() ? "" + (int) StateManager.getState().getCurrentShape().basePos.y : "-"); textFieldY.setTextColor(0xFFFFFF); - children.add(textFieldY); - textFieldZ = new TextFieldWidget(font, 205, 85, 50, 20, new StringTextComponent("")); + addRenderableWidget(textFieldY); + textFieldZ = new EditBox(font, 205, 85, 50, 20, new TextComponent("")); textFieldZ.setValue(StateManager.getState().isShapeAvailable() ? "" + (int) StateManager.getState().getCurrentShape().basePos.z : "-"); textFieldZ.setTextColor(0xFFFFFF); - children.add(textFieldZ); + addRenderableWidget(textFieldZ); addProperty(StateManager.getState().propertyEnable); addProperty(StateManager.getState().propertyAdvancedMode); @@ -154,7 +154,7 @@ protected void init() { } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { super.render(matrixStack, mouseX, mouseY, partialTicks); font.drawShadow(matrixStack, title.getString(), (width - font.width(title.getString())) / 2, 5, 0xFFFFFF); font.drawShadow(matrixStack, titleGlobalProperties, (160 - font.width(titleGlobalProperties)) / 2, 15, 0xFFFFFF); @@ -169,7 +169,7 @@ public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partia font.drawShadow(matrixStack, numberOfStacks, 305 + (100 - font.width(numberOfStacks)) / 2, 45, 0xFFFFFF); font.drawShadow(matrixStack, textShape, 5, 30, 0xFFFFFF); - String shapeName = StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().getTranslatedName() : new TranslationTextComponent("shape.buildguide.none").getString(); + String shapeName = StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().getTranslatedName() : new TranslatableComponent("shape.buildguide.none").getString(); font.drawShadow(matrixStack, shapeName, 80 + (60 - font.width(shapeName)) / 2, 30, 0xFFFFFF); font.drawShadow(matrixStack, "X", 170, 50, 0xFFFFFF); diff --git a/src/main/java/brentmaas/buildguide/screen/PropertyScreen.java b/src/main/java/brentmaas/buildguide/screen/PropertyScreen.java index 5edbc5a..883b89a 100644 --- a/src/main/java/brentmaas/buildguide/screen/PropertyScreen.java +++ b/src/main/java/brentmaas/buildguide/screen/PropertyScreen.java @@ -2,18 +2,17 @@ import java.util.ArrayList; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import brentmaas.buildguide.property.Property; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.AbstractButton; -import net.minecraft.util.text.ITextComponent; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.Component; -public abstract class PropertyScreen extends Screen{ +public class PropertyScreen extends Screen{ protected ArrayList> properties = new ArrayList>(); - public PropertyScreen(ITextComponent title) { + public PropertyScreen(Component title) { super(title); } @@ -24,7 +23,7 @@ protected void addProperty(Property p) { } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { super.render(matrixStack, mouseX, mouseY, partialTicks); for(Property p: properties) { p.render(matrixStack, mouseX, mouseY, partialTicks, font); @@ -36,11 +35,7 @@ public boolean isPauseScreen() { return false; } - public void addButtonExternal(AbstractButton button) { - addButton(button); - } - - public void addTextFieldExternal(TextFieldWidget tfw) { - children.add(tfw); + public void addWidgetExternal(AbstractWidget widget) { + addRenderableWidget(widget); } } diff --git a/src/main/java/brentmaas/buildguide/screen/ShapelistScreen.java b/src/main/java/brentmaas/buildguide/screen/ShapelistScreen.java index 65f25b6..5ca7e18 100644 --- a/src/main/java/brentmaas/buildguide/screen/ShapelistScreen.java +++ b/src/main/java/brentmaas/buildguide/screen/ShapelistScreen.java @@ -1,6 +1,6 @@ package brentmaas.buildguide.screen; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import brentmaas.buildguide.StateManager; import brentmaas.buildguide.screen.widget.CheckboxRunnableButton; @@ -8,13 +8,13 @@ import brentmaas.buildguide.shapes.Shape; import brentmaas.buildguide.shapes.ShapeRegistry; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.screen.Screen; -import net.minecraft.client.gui.widget.TextFieldWidget; -import net.minecraft.client.gui.widget.button.AbstractButton; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.gui.components.AbstractWidget; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; +import net.minecraft.client.gui.screens.Screen; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.phys.Vec3; public class ShapelistScreen extends Screen{ private String titleNewShape; @@ -28,10 +28,10 @@ public class ShapelistScreen extends Screen{ private int newShapeId = 0; private Button buttonClose; - private Button buttonBack = new Button(0, 0, 20, 20, new StringTextComponent("<-"), button -> Minecraft.getInstance().setScreen(new BuildGuideScreen())); - private Button buttonNewShapePrevious = new Button(0, 25, 20, 20, new StringTextComponent("<-"), button -> updateNewShape(-1)); - private Button buttonNewShapeNext = new Button(120, 25, 20, 20, new StringTextComponent("->"), button -> updateNewShape(1)); - private Button buttonAdd = new Button(0, 45, 140, 20, new TranslationTextComponent("screen.buildguide.add"), button -> { + private Button buttonBack = new Button(0, 0, 20, 20, new TextComponent("<-"), button -> Minecraft.getInstance().setScreen(new BuildGuideScreen())); + private Button buttonNewShapePrevious = new Button(0, 25, 20, 20, new TextComponent("<-"), button -> updateNewShape(-1)); + private Button buttonNewShapeNext = new Button(120, 25, 20, 20, new TextComponent("->"), button -> updateNewShape(1)); + private Button buttonAdd = new Button(0, 45, 140, 20, new TranslatableComponent("screen.buildguide.add"), button -> { StateManager.getState().advancedModeShapes.add(ShapeRegistry.getNewInstance(ShapeRegistry.getClassIdentifiers().get(newShapeId))); StateManager.getState().resetBasepos(StateManager.getState().advancedModeShapes.size() - 1); StateManager.getState().advancedModeShapes.get(StateManager.getState().advancedModeShapes.size() - 1).update(); @@ -39,8 +39,8 @@ public class ShapelistScreen extends Screen{ checkActive(); }); - private CheckboxRunnableButton buttonVisible = new CheckboxRunnableButton(120, 65, 20, 20, new StringTextComponent(""), true, false, button -> setShapeVisibility()); - private Button buttonDelete = new Button(0, 85, 140, 20, new TranslationTextComponent("screen.buildguide.delete"), button -> { + private CheckboxRunnableButton buttonVisible = new CheckboxRunnableButton(120, 65, 20, 20, new TextComponent(""), true, false, button -> setShapeVisibility()); + private Button buttonDelete = new Button(0, 85, 140, 20, new TranslatableComponent("screen.buildguide.delete"), button -> { if(shapeList.getSelected() != null) { StateManager.getState().advancedModeShapes.remove(shapeList.getSelected().getShapeId()); shapeList.removeEntry(shapeList.getSelected()); @@ -48,20 +48,20 @@ public class ShapelistScreen extends Screen{ checkActive(); }); - private Button buttonGlobalBasepos = new Button(0, 125, 140, 20, new TranslationTextComponent("screen.buildguide.setglobalbasepos"), button -> { + private Button buttonGlobalBasepos = new Button(0, 125, 140, 20, new TranslatableComponent("screen.buildguide.setglobalbasepos"), button -> { if(StateManager.getState().isShapeAvailable()) setGlobalBasePos(); }); //TODO: World manager button - private Button buttonBaseposXDecrease = new Button(20, 145, 20, 20, new StringTextComponent("-"), button -> shiftGlobalBasePos(-1, 0, 0)); - private Button buttonBaseposXIncrease = new Button(120, 145, 20, 20, new StringTextComponent("+"), button -> shiftGlobalBasePos(1, 0, 0)); - private Button buttonBaseposYDecrease = new Button(20, 165, 20, 20, new StringTextComponent("-"), button -> shiftGlobalBasePos(0, -1, 0)); - private Button buttonBaseposYIncrease = new Button(120, 165, 20, 20, new StringTextComponent("+"), button -> shiftGlobalBasePos(0, 1, 0)); - private Button buttonBaseposZDecrease = new Button(20, 185, 20, 20, new StringTextComponent("-"), button -> shiftGlobalBasePos(0, 0, -1)); - private Button buttonBaseposZIncrease = new Button(120, 185, 20, 20, new StringTextComponent("+"), button -> shiftGlobalBasePos(0, 0, 1)); - private TextFieldWidget textFieldX; - private TextFieldWidget textFieldY; - private TextFieldWidget textFieldZ; - private Button buttonSetX = new Button(90, 145, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + private Button buttonBaseposXDecrease = new Button(20, 145, 20, 20, new TextComponent("-"), button -> shiftGlobalBasePos(-1, 0, 0)); + private Button buttonBaseposXIncrease = new Button(120, 145, 20, 20, new TextComponent("+"), button -> shiftGlobalBasePos(1, 0, 0)); + private Button buttonBaseposYDecrease = new Button(20, 165, 20, 20, new TextComponent("-"), button -> shiftGlobalBasePos(0, -1, 0)); + private Button buttonBaseposYIncrease = new Button(120, 165, 20, 20, new TextComponent("+"), button -> shiftGlobalBasePos(0, 1, 0)); + private Button buttonBaseposZDecrease = new Button(20, 185, 20, 20, new TextComponent("-"), button -> shiftGlobalBasePos(0, 0, -1)); + private Button buttonBaseposZIncrease = new Button(120, 185, 20, 20, new TextComponent("+"), button -> shiftGlobalBasePos(0, 0, 1)); + private EditBox textFieldX; + private EditBox textFieldY; + private EditBox textFieldZ; + private Button buttonSetX = new Button(90, 145, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(textFieldX.getValue()); int delta = newval - (int) StateManager.getState().getCurrentShape().basePos.x; @@ -73,7 +73,7 @@ public class ShapelistScreen extends Screen{ textFieldX.setTextColor(0xFF0000); } }); - private Button buttonSetY = new Button(90, 165, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + private Button buttonSetY = new Button(90, 165, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(textFieldY.getValue()); int delta = newval - (int) StateManager.getState().getCurrentShape().basePos.y; @@ -85,7 +85,7 @@ public class ShapelistScreen extends Screen{ textFieldY.setTextColor(0xFF0000); } }); - private Button buttonSetZ = new Button(90, 185, 30, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + private Button buttonSetZ = new Button(90, 185, 30, 20, new TranslatableComponent("screen.buildguide.set"), button -> { try { int newval = Integer.parseInt(textFieldZ.getValue()); int delta = newval - (int) StateManager.getState().getCurrentShape().basePos.z; @@ -99,57 +99,58 @@ public class ShapelistScreen extends Screen{ }); public ShapelistScreen() { - super(new TranslationTextComponent("screen.buildguide.shapelist")); + super(new TranslatableComponent("screen.buildguide.shapelist")); } @Override - protected void init() { - titleNewShape = new TranslationTextComponent("screen.buildguide.newshape").getString(); - titleShapes = new TranslationTextComponent("screen.buildguide.shapes").getString(); - titleGlobalBasepos = new TranslationTextComponent("screen.buildguide.globalbasepos").getString(); - titleVisible = new TranslationTextComponent("screen.buildguide.visible").getString(); - titleNumberOfBlocks = new TranslationTextComponent("screen.buildguide.numberofblocks").getString(); + public void init() { + titleNewShape = new TranslatableComponent("screen.buildguide.newshape").getString(); + titleShapes = new TranslatableComponent("screen.buildguide.shapes").getString(); + titleGlobalBasepos = new TranslatableComponent("screen.buildguide.globalbasepos").getString(); + titleVisible = new TranslatableComponent("screen.buildguide.visible").getString(); + titleNumberOfBlocks = new TranslatableComponent("screen.buildguide.numberofblocks").getString(); - buttonClose = new Button(this.width - 20, 0, 20, 20, new StringTextComponent("X"), button -> Minecraft.getInstance().setScreen(null)); + buttonClose = new Button(this.width - 20, 0, 20, 20, new TextComponent("X"), button -> Minecraft.getInstance().setScreen(null)); checkActive(); - addButton(buttonClose); - addButton(buttonBack); - addButton(buttonNewShapePrevious); - addButton(buttonNewShapeNext); - addButton(buttonAdd); - addButton(buttonVisible); - addButton(buttonDelete); - addButton(buttonGlobalBasepos); - addButton(buttonBaseposXDecrease); - addButton(buttonBaseposXIncrease); - addButton(buttonBaseposYDecrease); - addButton(buttonBaseposYIncrease); - addButton(buttonBaseposZDecrease); - addButton(buttonBaseposZIncrease); - addButton(buttonSetX); - addButton(buttonSetY); - addButton(buttonSetZ); + addRenderableWidget(buttonClose); + addRenderableWidget(buttonBack); + addRenderableWidget(buttonNewShapePrevious); + addRenderableWidget(buttonNewShapeNext); + addRenderableWidget(buttonAdd); + addRenderableWidget(buttonVisible); + addRenderableWidget(buttonDelete); + addRenderableWidget(buttonGlobalBasepos); + addRenderableWidget(buttonBaseposXDecrease); + addRenderableWidget(buttonBaseposXIncrease); + addRenderableWidget(buttonBaseposYDecrease); + addRenderableWidget(buttonBaseposYIncrease); + addRenderableWidget(buttonBaseposZDecrease); + addRenderableWidget(buttonBaseposZIncrease); + addRenderableWidget(buttonSetX); + addRenderableWidget(buttonSetY); + addRenderableWidget(buttonSetZ); - textFieldX = new TextFieldWidget(font, 40, 145, 50, 20, new StringTextComponent("")); + textFieldX = new EditBox(font, 40, 145, 50, 20, new TextComponent("")); textFieldX.setValue(StateManager.getState().isShapeAvailable() ? "" + (int) StateManager.getState().getCurrentShape().basePos.x : "-"); textFieldX.setTextColor(0xFFFFFF); - children.add(textFieldX); - textFieldY = new TextFieldWidget(font, 40, 165, 50, 20, new StringTextComponent("")); + addRenderableWidget(textFieldX); + textFieldY = new EditBox(font, 40, 165, 50, 20, new TextComponent("")); textFieldY.setValue(StateManager.getState().isShapeAvailable() ? "" + (int) StateManager.getState().getCurrentShape().basePos.y : "-"); textFieldY.setTextColor(0xFFFFFF); - children.add(textFieldY); - textFieldZ = new TextFieldWidget(font, 40, 185, 50, 20, new StringTextComponent("")); + addRenderableWidget(textFieldY); + textFieldZ = new EditBox(font, 40, 185, 50, 20, new TextComponent("")); textFieldZ.setValue(StateManager.getState().isShapeAvailable() ? "" + (int) StateManager.getState().getCurrentShape().basePos.z : "-"); textFieldZ.setTextColor(0xFFFFFF); - children.add(textFieldZ); + addRenderableWidget(textFieldZ); shapeList = new ShapeList(minecraft, 150, 300, 25, height, 20, () -> { updateGlobalBasepos(); if(StateManager.getState().isShapeAvailable()) buttonVisible.setChecked(StateManager.getState().getCurrentShape().visible); }); - children.add(shapeList); + + addWidget(shapeList); } @Override @@ -158,7 +159,7 @@ public boolean isPauseScreen() { } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { super.render(matrixStack, mouseX, mouseY, partialTicks); font.drawShadow(matrixStack, title.getString(), (width - font.width(title.getString())) / 2, 5, 0xFFFFFF); font.drawShadow(matrixStack, titleNewShape, (140 - font.width(titleNewShape)) / 2, 15, 0xFFFFFF); @@ -166,7 +167,7 @@ public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partia font.drawShadow(matrixStack, titleGlobalBasepos, (140 - font.width(titleGlobalBasepos)) / 2, 115, 0xFFFFFF); font.drawShadow(matrixStack, titleNumberOfBlocks, 305 + (100 - font.width(titleNumberOfBlocks)) / 2, 15, 0xFFFFFF); - String newShapeName = new TranslationTextComponent(ShapeRegistry.getTranslationKeys().get(newShapeId)).getString(); + String newShapeName = new TranslatableComponent(ShapeRegistry.getTranslationKeys().get(newShapeId)).getString(); font.drawShadow(matrixStack, newShapeName, 20 + (100 - font.width(newShapeName)) / 2, 30, 0xFFFFFF); font.drawShadow(matrixStack, titleVisible, 5, 70, StateManager.getState().isShapeAvailable() ? 0xFFFFFF : 0x444444); @@ -197,7 +198,7 @@ private void updateGlobalBasepos() { textFieldX.setValue("" + (int) StateManager.getState().getCurrentShape().basePos.x); textFieldY.setValue("" + (int) StateManager.getState().getCurrentShape().basePos.y); textFieldZ.setValue("" + (int) StateManager.getState().getCurrentShape().basePos.z); - } else { + }else { textFieldX.setValue("-"); textFieldY.setValue("-"); textFieldZ.setValue("-"); @@ -219,7 +220,7 @@ private void shiftGlobalBasePos(int dx, int dy, int dz) { } private void setGlobalBasePos() { - Vector3d pos = Minecraft.getInstance().player.position(); + Vec3 pos = Minecraft.getInstance().player.position(); int deltaX = (int) (Math.floor(pos.x) - StateManager.getState().getCurrentShape().basePos.x); int deltaY = (int) (Math.floor(pos.y) - StateManager.getState().getCurrentShape().basePos.y); int deltaZ = (int) (Math.floor(pos.z) - StateManager.getState().getCurrentShape().basePos.z); @@ -260,11 +261,7 @@ private void checkActive() { } } - public void addButtonExternal(AbstractButton button) { - addButton(button); - } - - public void addTextFieldExternal(TextFieldWidget tfw) { - children.add(tfw); + public void addWidgetExternal(AbstractWidget widget) { + addRenderableWidget(widget); } } diff --git a/src/main/java/brentmaas/buildguide/screen/VisualisationScreen.java b/src/main/java/brentmaas/buildguide/screen/VisualisationScreen.java index b21c369..4f3352f 100644 --- a/src/main/java/brentmaas/buildguide/screen/VisualisationScreen.java +++ b/src/main/java/brentmaas/buildguide/screen/VisualisationScreen.java @@ -1,13 +1,13 @@ package brentmaas.buildguide.screen; -import com.mojang.blaze3d.matrix.MatrixStack; +import com.mojang.blaze3d.vertex.PoseStack; import brentmaas.buildguide.StateManager; import brentmaas.buildguide.screen.widget.Slider; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.widget.button.Button; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.client.gui.components.Button; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class VisualisationScreen extends PropertyScreen{ private String titleColours; @@ -15,7 +15,7 @@ public class VisualisationScreen extends PropertyScreen{ private String titleBasepos; private Button buttonClose; - private Button buttonBack = new Button(0, 0, 20, 20, new StringTextComponent("<-"), button -> Minecraft.getInstance().setScreen(new BuildGuideScreen())); + private Button buttonBack = new Button(0, 0, 20, 20, new TextComponent("<-"), button -> Minecraft.getInstance().setScreen(new BuildGuideScreen())); private Slider sliderShapeR; private Slider sliderShapeG; private Slider sliderShapeB; @@ -30,59 +30,59 @@ public class VisualisationScreen extends PropertyScreen{ private Button buttonDefaultBasepos; public VisualisationScreen() { - super(new TranslationTextComponent("screen.buildguide.visualisation")); + super(new TranslatableComponent("screen.buildguide.visualisation")); } @Override protected void init() { - titleColours = new TranslationTextComponent("screen.buildguide.colours").getString(); - titleShape = new TranslationTextComponent("screen.buildguide.shape").getString(); - titleBasepos = new TranslationTextComponent("screen.buildguide.basepos").getString(); + titleColours = new TranslatableComponent("screen.buildguide.colours").getString(); + titleShape = new TranslatableComponent("screen.buildguide.shape").getString(); + titleBasepos = new TranslatableComponent("screen.buildguide.basepos").getString(); - buttonClose = new Button(this.width - 20, 0, 20, 20, new StringTextComponent("X"), button -> Minecraft.getInstance().setScreen(null)); + buttonClose = new Button(this.width - 20, 0, 20, 20, new TextComponent("X"), button -> Minecraft.getInstance().setScreen(null)); - sliderShapeR = new Slider(0, 35, 100, 20, new StringTextComponent("R: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeR : 1.0); - sliderShapeG = new Slider(0, 55, 100, 20, new StringTextComponent("G: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeG : 1.0); - sliderShapeB = new Slider(0, 75, 100, 20, new StringTextComponent("B: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeB : 1.0); - sliderShapeA = new Slider(0, 95, 100, 20, new StringTextComponent("A: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeA : 0.5); - sliderBaseposR = new Slider(110, 35, 100, 20, new StringTextComponent("R: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposR : 1.0); - sliderBaseposG = new Slider(110, 55, 100, 20, new StringTextComponent("G: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposG : 0.0); - sliderBaseposB = new Slider(110, 75, 100, 20, new StringTextComponent("B: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposB : 0.0); - sliderBaseposA = new Slider(110, 95, 100, 20, new StringTextComponent("A: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposA : 0.5); + sliderShapeR = new Slider(0, 35, 100, 20, new TextComponent("R: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeR : 1.0); + sliderShapeG = new Slider(0, 55, 100, 20, new TextComponent("G: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeG : 1.0); + sliderShapeB = new Slider(0, 75, 100, 20, new TextComponent("B: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeB : 1.0); + sliderShapeA = new Slider(0, 95, 100, 20, new TextComponent("A: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourShapeA : 0.5); + sliderBaseposR = new Slider(110, 35, 100, 20, new TextComponent("R: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposR : 1.0); + sliderBaseposG = new Slider(110, 55, 100, 20, new TextComponent("G: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposG : 1.0); + sliderBaseposB = new Slider(110, 75, 100, 20, new TextComponent("B: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposB : 1.0); + sliderBaseposA = new Slider(110, 95, 100, 20, new TextComponent("A: "), 0.0, 1.0, StateManager.getState().isShapeAvailable() ? StateManager.getState().getCurrentShape().colourBaseposA : 0.5); - buttonSetShape = new Button(0, 115, 100, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + buttonSetShape = new Button(0, 115, 100, 20, new TranslatableComponent("screen.buildguide.set"), button -> { if(StateManager.getState().isShapeAvailable()) { StateManager.getState().setShapeColour((float) sliderShapeR.getValue(), (float) sliderShapeG.getValue(), (float) sliderShapeB.getValue(), (float) sliderShapeA.getValue()); } }); - buttonSetBasepos = new Button(110, 115, 100, 20, new TranslationTextComponent("screen.buildguide.set"), button -> { + buttonSetBasepos = new Button(110, 115, 100, 20, new TranslatableComponent("screen.buildguide.set"), button -> { if(StateManager.getState().isShapeAvailable()) { StateManager.getState().setBaseposColour((float) sliderBaseposR.getValue(), (float) sliderBaseposG.getValue(), (float) sliderBaseposB.getValue(), (float) sliderBaseposA.getValue()); } }); - buttonDefaultShape = new Button(0, 135, 100, 20, new TranslationTextComponent("screen.buildguide.default"), button -> { + buttonDefaultShape = new Button(0, 135, 100, 20, new TranslatableComponent("screen.buildguide.default"), button -> { sliderShapeR.setManualValue(1.0); sliderShapeG.setManualValue(1.0); sliderShapeB.setManualValue(1.0); sliderShapeA.setManualValue(0.5); - sliderShapeR.updateSlider(); - sliderShapeG.updateSlider(); - sliderShapeB.updateSlider(); - sliderShapeA.updateSlider(); + sliderShapeR.updateMessage(); + sliderShapeG.updateMessage(); + sliderShapeB.updateMessage(); + sliderShapeA.updateMessage(); if(StateManager.getState().isShapeAvailable()) { StateManager.getState().setShapeColour(1.0f, 1.0f, 1.0f, 0.5f); } }); - buttonDefaultBasepos = new Button(110, 135, 100, 20, new TranslationTextComponent("screen.buildguide.default"), button -> { + buttonDefaultBasepos = new Button(110, 135, 100, 20, new TranslatableComponent("screen.buildguide.default"), button -> { sliderBaseposR.setManualValue(1.0); sliderBaseposG.setManualValue(0.0); sliderBaseposB.setManualValue(0.0); sliderBaseposA.setManualValue(0.5); - sliderBaseposR.updateSlider(); - sliderBaseposG.updateSlider(); - sliderBaseposB.updateSlider(); - sliderBaseposA.updateSlider(); + sliderBaseposR.updateMessage(); + sliderBaseposG.updateMessage(); + sliderBaseposB.updateMessage(); + sliderBaseposA.updateMessage(); if(StateManager.getState().isShapeAvailable()) { StateManager.getState().setBaseposColour(1.0f, 0.0f, 0.0f, 0.5f); } @@ -103,20 +103,20 @@ protected void init() { buttonDefaultBasepos.active = false; } - addButton(buttonClose); - addButton(buttonBack); - addButton(sliderShapeR); - addButton(sliderShapeG); - addButton(sliderShapeB); - addButton(sliderShapeA); - addButton(sliderBaseposR); - addButton(sliderBaseposG); - addButton(sliderBaseposB); - addButton(sliderBaseposA); - addButton(buttonSetShape); - addButton(buttonSetBasepos); - addButton(buttonDefaultShape); - addButton(buttonDefaultBasepos); + addRenderableWidget(buttonClose); + addRenderableWidget(buttonBack); + addRenderableWidget(sliderShapeR); + addRenderableWidget(sliderShapeG); + addRenderableWidget(sliderShapeB); + addRenderableWidget(sliderShapeA); + addRenderableWidget(sliderBaseposR); + addRenderableWidget(sliderBaseposG); + addRenderableWidget(sliderBaseposB); + addRenderableWidget(sliderBaseposA); + addRenderableWidget(buttonSetShape); + addRenderableWidget(buttonSetBasepos); + addRenderableWidget(buttonDefaultShape); + addRenderableWidget(buttonDefaultBasepos); addProperty(StateManager.getState().propertyDepthTest); } @@ -127,7 +127,7 @@ public boolean isPauseScreen() { } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { super.render(matrixStack, mouseX, mouseY, partialTicks); font.drawShadow(matrixStack, title.getString(), (width - font.width(title.getString())) / 2, 5, 0xFFFFFF); font.drawShadow(matrixStack, titleColours, (210 - font.width(titleColours)) / 2, 15, 0xFFFFFF); diff --git a/src/main/java/brentmaas/buildguide/screen/widget/CheckboxRunnableButton.java b/src/main/java/brentmaas/buildguide/screen/widget/CheckboxRunnableButton.java index 16452b9..45fcc17 100644 --- a/src/main/java/brentmaas/buildguide/screen/widget/CheckboxRunnableButton.java +++ b/src/main/java/brentmaas/buildguide/screen/widget/CheckboxRunnableButton.java @@ -1,15 +1,15 @@ package brentmaas.buildguide.screen.widget; -import net.minecraft.client.gui.widget.button.CheckboxButton; -import net.minecraft.util.text.ITextComponent; +import net.minecraft.client.gui.components.Checkbox; +import net.minecraft.network.chat.TextComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) -public class CheckboxRunnableButton extends CheckboxButton { +public class CheckboxRunnableButton extends Checkbox{ protected final CheckboxRunnableButton.IPressable onPress; - public CheckboxRunnableButton(int x, int y, int width, int height, ITextComponent title, boolean checked, boolean drawTitle, CheckboxRunnableButton.IPressable pressedAction) { + public CheckboxRunnableButton(int x, int y, int width, int height, TextComponent title, boolean checked, boolean drawTitle, CheckboxRunnableButton.IPressable pressedAction) { super(x, y, width, height, title, checked, drawTitle); onPress = pressedAction; } @@ -20,9 +20,9 @@ public void onPress() { } public void setChecked(boolean checked) { - //Why did checked have to be private ffs... At least I didn't have to do reflection by using this hack in order to get basic functionality + //Why did selected have to be private ffs... At least I didn't have to do reflection by using this hack in order to get basic functionality if(selected() != checked) onPress(); - //this.checked = checked; + //this.selected = checked; } @OnlyIn(Dist.CLIENT) diff --git a/src/main/java/brentmaas/buildguide/screen/widget/ShapeList.java b/src/main/java/brentmaas/buildguide/screen/widget/ShapeList.java index 521a66f..5774715 100644 --- a/src/main/java/brentmaas/buildguide/screen/widget/ShapeList.java +++ b/src/main/java/brentmaas/buildguide/screen/widget/ShapeList.java @@ -4,20 +4,24 @@ import org.lwjgl.opengl.GL11; -import com.mojang.blaze3d.matrix.MatrixStack; import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.PoseStack; +import com.mojang.blaze3d.vertex.Tesselator; +import com.mojang.blaze3d.vertex.VertexFormat.Mode; import brentmaas.buildguide.StateManager; import net.minecraft.client.Minecraft; -import net.minecraft.client.gui.widget.list.ExtendedList; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.Tessellator; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; +import net.minecraft.client.gui.components.ObjectSelectionList; +import net.minecraft.client.renderer.GameRenderer; +import net.minecraft.network.chat.Component; +import net.minecraft.network.chat.TextComponent; import net.minecraftforge.api.distmarker.Dist; import net.minecraftforge.api.distmarker.OnlyIn; @OnlyIn(Dist.CLIENT) -public class ShapeList extends ExtendedList{ +public class ShapeList extends ObjectSelectionList{ private Runnable update; public ShapeList(Minecraft minecraft, int left, int right, int top, int bottom, int slotHeight, Runnable updateOnSelected) { @@ -58,19 +62,20 @@ public void setSelected(@Nullable Entry entry) { } @Override - public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partialTicks) { + public void render(PoseStack matrixStack, int mouseX, int mouseY, float partialTicks) { boolean hasBlend = GL11.glIsEnabled(GL11.GL_BLEND); if(!hasBlend) RenderSystem.enableBlend(); - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferBuilder = tessellator.getBuilder(); - RenderSystem.color4f(0, 0, 0, 0.2f); - bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionShader); + RenderSystem.setShaderColor(0, 0, 0, 0.2f); + bufferBuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION); bufferBuilder.vertex(x0, y0, 0).endVertex(); bufferBuilder.vertex(x0, y1, 0).endVertex(); bufferBuilder.vertex(x1, y1, 0).endVertex(); bufferBuilder.vertex(x1, y0, 0).endVertex(); - tessellator.end(); + tesselator.end(); if(!hasBlend) RenderSystem.disableBlend(); @@ -79,7 +84,7 @@ public void render(MatrixStack matrixStack, int mouseX, int mouseY, float partia //Incredibly ugly hack to fix entries clipping out of the list @Override - protected void renderList(MatrixStack matrixStack, int p_238478_2_, int p_238478_3_, int p_238478_4_, int p_238478_5_, float p_238478_6_) { + protected void renderList(PoseStack matrixStack, int p_93453_, int p_93454_, int p_93455_, int p_93456_, float p_93457_) { boolean hasDepthTest = GL11.glIsEnabled(GL11.GL_DEPTH_TEST); boolean hasDepthMask = GL11.glGetBoolean(GL11.GL_DEPTH_WRITEMASK); int depthFunc = GL11.glGetInteger(GL11.GL_DEPTH_FUNC); @@ -90,20 +95,21 @@ protected void renderList(MatrixStack matrixStack, int p_238478_2_, int p_238478 if(depthFunc != GL11.GL_LEQUAL) RenderSystem.depthFunc(GL11.GL_LEQUAL); if(!hasBlend) RenderSystem.enableBlend(); - Tessellator tessellator = Tessellator.getInstance(); - BufferBuilder bufferBuilder = tessellator.getBuilder(); - RenderSystem.color4f(0, 0, 0, 0); - bufferBuilder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION); + Tesselator tesselator = Tesselator.getInstance(); + BufferBuilder bufferBuilder = tesselator.getBuilder(); + RenderSystem.setShader(GameRenderer::getPositionShader); + RenderSystem.setShaderColor(0, 0, 0, 0); + bufferBuilder.begin(Mode.QUADS, DefaultVertexFormat.POSITION); bufferBuilder.vertex(x0, y0 - itemHeight - 4, 0.1).endVertex(); bufferBuilder.vertex(x0, y0, 0.1).endVertex(); bufferBuilder.vertex(x1, y0, 0.1).endVertex(); bufferBuilder.vertex(x1, y0 - itemHeight - 4, 0.1).endVertex(); - tessellator.end(); + tesselator.end(); - super.renderList(matrixStack, p_238478_2_, p_238478_3_, p_238478_4_, p_238478_5_, p_238478_6_); + super.renderList(matrixStack, p_93453_, p_93454_, p_93455_, p_93456_, p_93457_); if(!hasBlend) RenderSystem.disableBlend(); - if(depthFunc != GL11.GL_LEQUAL) RenderSystem.depthFunc(depthFunc); + if(depthFunc != GL11.GL_LEQUAL) RenderSystem.depthFunc(depthFunc); if(!hasDepthMask) RenderSystem.depthMask(false); if(!hasDepthTest) RenderSystem.disableDepthTest(); } @@ -119,14 +125,14 @@ protected int getScrollbarPosition() { } @OnlyIn(Dist.CLIENT) - public final class Entry extends ExtendedList.AbstractListEntry { + public final class Entry extends ObjectSelectionList.Entry{ private int shapeId; public Entry(int shapeId) { this.shapeId = shapeId; } - public void render(MatrixStack matrixStack, int p_230432_2_, int top, int left, int p_230432_5_, int p_230432_6_, int p_230432_7_, int p_230432_8_, boolean p_230432_9_, float p_230432_10_) { + public void render(PoseStack matrixStack, int p_93524_, int top, int left, int p_93527_, int p_93528_, int p_93529_, int p_93530_, boolean p_93531_, float p_93532_) { //Found strikethrough code at https://www.minecraftforum.net/forums/mapping-and-modding-java-edition/minecraft-mods/modification-development/1437428-guide-1-7-2-how-to-make-button-tooltips?comment=3 Minecraft.getInstance().font.drawShadow(matrixStack, (StateManager.getState().advancedModeShapes.get(shapeId).visible ? "" : "\247m") + StateManager.getState().advancedModeShapes.get(shapeId).getTranslatedName(), left + 5, top + 4, 0xFFFFFF); } @@ -143,5 +149,9 @@ public void setShapeId(int shapeId) { public int getShapeId() { return shapeId; } + + public Component getNarration() { + return new TextComponent(""); //TODO Set translated name of shape as narration + } } } diff --git a/src/main/java/brentmaas/buildguide/screen/widget/Slider.java b/src/main/java/brentmaas/buildguide/screen/widget/Slider.java index d97a591..626998d 100644 --- a/src/main/java/brentmaas/buildguide/screen/widget/Slider.java +++ b/src/main/java/brentmaas/buildguide/screen/widget/Slider.java @@ -1,32 +1,27 @@ package brentmaas.buildguide.screen.widget; -import net.minecraft.client.gui.widget.AbstractSlider; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TextComponent; +import net.minecraft.client.gui.components.AbstractSliderButton; +import net.minecraft.network.chat.TextComponent; -public class Slider extends AbstractSlider{ +public class Slider extends AbstractSliderButton{ private double min, max; private String prefix; public Slider(int x, int y, int width, int height, TextComponent name, double min, double max, double value) { - super(x, y, width, height, new StringTextComponent(name.getString() + ": " + Math.round(10.0 * value) / 10.0), (value - min) / (max - min)); + super(x, y, width, height, new TextComponent(name.getString() + ": " + Math.round(10.0 * value) / 10.0), (value - min) / (max - min)); this.min = min; this.max = max; prefix = name.getString() + ": "; } - protected void updateMessage() { - setMessage(new StringTextComponent(prefix + Math.round(10.0 * getValue()) / 10.0)); + public void updateMessage() { + setMessage(new TextComponent(prefix + Math.round(10.0 * getValue()) / 10.0)); } protected void applyValue() { } - public void updateSlider() { - updateMessage(); - } - public void setManualValue(double value) { this.value = (value - min) / (max - min); } diff --git a/src/main/java/brentmaas/buildguide/shapes/Shape.java b/src/main/java/brentmaas/buildguide/shapes/Shape.java index 40aff56..8e714a2 100644 --- a/src/main/java/brentmaas/buildguide/shapes/Shape.java +++ b/src/main/java/brentmaas/buildguide/shapes/Shape.java @@ -2,18 +2,19 @@ import java.util.ArrayList; -import org.lwjgl.opengl.GL11; +import com.mojang.blaze3d.systems.RenderSystem; +import com.mojang.blaze3d.vertex.BufferBuilder; +import com.mojang.blaze3d.vertex.DefaultVertexFormat; +import com.mojang.blaze3d.vertex.VertexBuffer; +import com.mojang.blaze3d.vertex.VertexFormat; +import com.mojang.math.Matrix4f; import brentmaas.buildguide.BuildGuide; import brentmaas.buildguide.Config; import brentmaas.buildguide.property.Property; import net.minecraft.client.Minecraft; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.client.renderer.vertex.DefaultVertexFormats; -import net.minecraft.client.renderer.vertex.VertexBuffer; -import net.minecraft.util.math.vector.Matrix4f; -import net.minecraft.util.math.vector.Vector3d; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; +import net.minecraft.world.phys.Vec3; public abstract class Shape { public ArrayList> properties = new ArrayList>(); @@ -21,7 +22,7 @@ public abstract class Shape { private int nBlocks = 0; public boolean visible = true; - public Vector3d basePos = null; + public Vec3 basePos = null; public float colourShapeR = 1.0f; public float colourShapeG = 1.0f; @@ -34,7 +35,7 @@ public abstract class Shape { public float colourBaseposA = 0.5f; public Shape() { - buffer = new VertexBuffer(DefaultVertexFormats.POSITION_COLOR); + buffer = new VertexBuffer(); } protected abstract void updateShape(BufferBuilder builder); @@ -44,30 +45,25 @@ public void update() { nBlocks = -1; //Counteract the add from the base position long t = System.currentTimeMillis(); BufferBuilder builder = new BufferBuilder(4); //4 is lowest working. Number of blocks isn't always known, so it'll have to grow on its own - builder.begin(GL11.GL_QUADS, DefaultVertexFormats.POSITION_COLOR); + builder.begin(VertexFormat.Mode.QUADS, DefaultVertexFormat.POSITION_COLOR); builder.defaultColor((int) (255 * colourShapeR), (int) (255 * colourShapeG), (int) (255 * colourShapeB), (int) (255 * colourShapeA)); this.updateShape(builder); builder.defaultColor((int) (255 * colourBaseposR), (int) (255 * colourBaseposG), (int) (255 * colourBaseposB), (int) (255 * colourBaseposA)); addCube(builder, 0.4, 0.4, 0.4, 0.2); //Base position builder.end(); buffer.close(); - buffer = new VertexBuffer(DefaultVertexFormats.POSITION_COLOR); + buffer = new VertexBuffer(); buffer.upload(builder); if(Config.debugGenerationTimingsEnabled) { BuildGuide.logger.debug("Shape " + getTranslatedName() + " has been generated in " + (System.currentTimeMillis() - t) + " ms"); } } - public void render(Matrix4f matrix) { - //https://gist.github.com/gigaherz/87939db73d8adf4aace6ec7cf611bd2d - buffer.bind(); - DefaultVertexFormats.POSITION_COLOR.setupBufferState(0); - buffer.draw(matrix, GL11.GL_QUADS); - VertexBuffer.unbind(); - DefaultVertexFormats.POSITION_COLOR.clearBufferState(); + public void render(Matrix4f model, Matrix4f projection) { + buffer.drawWithShader(model, projection, RenderSystem.getShader()); } - private void addCube(BufferBuilder buffer, double x, double y, double z, double s) { + protected void addCube(BufferBuilder buffer, double x, double y, double z, double s) { //-X buffer.vertex(x, y, z).endVertex(); buffer.vertex(x, y, z+s).endVertex(); @@ -124,7 +120,7 @@ public void onDeselectedInGUI() { } public String getTranslatedName() { - return new TranslationTextComponent(getTranslationKey()).getString(); + return new TranslatableComponent(getTranslationKey()).getString(); } public int getNumberOfBlocks() { @@ -132,15 +128,15 @@ public int getNumberOfBlocks() { } public void resetBasepos() { - Vector3d pos = Minecraft.getInstance().player.position(); - basePos = new Vector3d(Math.floor(pos.x), Math.floor(pos.y), Math.floor(pos.z)); + Vec3 pos = Minecraft.getInstance().player.position(); + basePos = new Vec3(Math.floor(pos.x), Math.floor(pos.y), Math.floor(pos.z)); } public void setBasepos(int x, int y, int z) { - basePos = new Vector3d(x, y, z); + basePos = new Vec3(x, y, z); } public void shiftBasepos(int dx, int dy, int dz) { - basePos = new Vector3d(basePos.x + dx, basePos.y + dy, basePos.z + dz); + basePos = new Vec3(basePos.x + dx, basePos.y + dy, basePos.z + dz); } } diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeCircle.java b/src/main/java/brentmaas/buildguide/shapes/ShapeCircle.java index 40e2d95..1252f9b 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeCircle.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeCircle.java @@ -1,10 +1,11 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyNonzeroInt; import brentmaas.buildguide.property.PropertyPositiveInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeCircle extends Shape { private enum direction{ @@ -15,9 +16,9 @@ private enum direction{ private String[] directionNames = {"X", "Y", "Z"}; - private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslationTextComponent("property.buildguide.direction"), () -> this.update(), directionNames); - private PropertyPositiveInt propertyRadius = new PropertyPositiveInt(1, 3, new TranslationTextComponent("property.buildguide.radius"), () -> this.update()); - private PropertyNonzeroInt propertyHeight = new PropertyNonzeroInt(2, 1, new TranslationTextComponent("property.buildguide.height"), () -> this.update()); + private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslatableComponent("property.buildguide.direction"), () -> this.update(), directionNames); + private PropertyPositiveInt propertyRadius = new PropertyPositiveInt(1, 3, new TranslatableComponent("property.buildguide.radius"), () -> this.update()); + private PropertyNonzeroInt propertyHeight = new PropertyNonzeroInt(2, 1, new TranslatableComponent("property.buildguide.height"), () -> this.update()); public ShapeCircle() { super(); diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeCuboid.java b/src/main/java/brentmaas/buildguide/shapes/ShapeCuboid.java index 2d2f635..7ffbeb4 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeCuboid.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeCuboid.java @@ -1,10 +1,11 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyNonzeroInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.StringTextComponent; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeCuboid extends Shape{ private enum walls{ @@ -20,10 +21,10 @@ private enum walls{ private String[] wallsNames = {"XYZ", "X", "Y", "Z", "XY", "XZ", "YZ", "-"}; - private PropertyNonzeroInt propertyX = new PropertyNonzeroInt(0, 3, new StringTextComponent("X"), () -> this.update()); - private PropertyNonzeroInt propertyY = new PropertyNonzeroInt(1, 3, new StringTextComponent("Y"), () -> this.update()); - private PropertyNonzeroInt propertyZ = new PropertyNonzeroInt(2, 3, new StringTextComponent("Z"), () -> this.update()); - private PropertyEnum propertyWalls = new PropertyEnum(3, walls.ALL, new TranslationTextComponent("property.buildguide.walls"), () -> {this.update();}, wallsNames); + private PropertyNonzeroInt propertyX = new PropertyNonzeroInt(0, 3, new TextComponent("X"), () -> this.update()); + private PropertyNonzeroInt propertyY = new PropertyNonzeroInt(1, 3, new TextComponent("Y"), () -> this.update()); + private PropertyNonzeroInt propertyZ = new PropertyNonzeroInt(2, 3, new TextComponent("Z"), () -> this.update()); + private PropertyEnum propertyWalls = new PropertyEnum(3, walls.ALL, new TranslatableComponent("property.buildguide.walls"), () -> this.update(), wallsNames); public ShapeCuboid() { super(); @@ -44,37 +45,37 @@ protected void updateShape(BufferBuilder builder) { for(int x = (dx > 0 ? 0 : dx + 1);x < (dx > 0 ? dx : 1);++x) { addShapeCube(builder, x, 0, 0); if(!(dy == 1 || dy == -1)) { - addShapeCube(builder, x, dy > 0 ? dy - 1 : dy + 1, 0); + addShapeCube(builder, x, (dy > 0 ? dy - 1 : dy + 1), 0); } if(!(dz == 1 || dz == -1)) { - addShapeCube(builder, x, 0, dz > 0 ? dz - 1 : dz + 1); + addShapeCube(builder, x, 0, (dz > 0 ? dz - 1 : dz + 1)); } if(!(dy == 1 || dy == -1 || dz == 1 || dz == -1)) { - addShapeCube(builder, x, dy > 0 ? dy - 1 : dy + 1, dz > 0 ? dz - 1 : dz + 1); + addShapeCube(builder, x, (dy > 0 ? dy - 1 : dy + 1), (dz > 0 ? dz - 1 : dz + 1)); } } for(int y = (dy > 0 ? 1 : dy + 2);y < (dy > 0 ? dy - 1 : 0);++y) { addShapeCube(builder, 0, y, 0); if(!(dx == 1 || dx == -1)) { - addShapeCube(builder, dx > 0 ? dx - 1 : dx + 1, y, 0); + addShapeCube(builder, (dx > 0 ? dx - 1 : dx + 1), y, 0); } if(!(dz == 1 || dz == -1)) { - addShapeCube(builder, 0, y, dz > 0 ? dz - 1 : dz + 1); + addShapeCube(builder, 0, y, (dz > 0 ? dz - 1 : dz + 1)); } if(!(dx == 1 || dx == -1 || dz == 1 || dz == -1)) { - addShapeCube(builder, dx > 0 ? dx - 1 : dx + 1, y, dz > 0 ? dz - 1 : dz + 1); + addShapeCube(builder, (dx > 0 ? dx - 1 : dx + 1), y, (dz > 0 ? dz - 1 : dz + 1)); } } for(int z = (dz > 0 ? 1 : dz + 2);z < (dz > 0 ? dz - 1 : 0);++z) { addShapeCube(builder, 0, 0, z); if(!(dx == 1 || dx == -1)) { - addShapeCube(builder, dx > 0 ? dx - 1 : dx + 1, 0, z); + addShapeCube(builder, (dx > 0 ? dx - 1 : dx + 1), 0, z); } if(!(dy == 1 || dy == -1)) { - addShapeCube(builder, 0, dy > 0 ? dy - 1 : dy + 1, z); + addShapeCube(builder, 0, (dy > 0 ? dy - 1 : dy + 1), z); } if(!(dx == 1 || dx == -1 || dy == 1 || dy == -1)) { - addShapeCube(builder, dx > 0 ? dx - 1 : dx + 1, dy > 0 ? dy - 1 : dy + 1, z); + addShapeCube(builder, (dx > 0 ? dx - 1 : dx + 1), (dy > 0 ? dy - 1 : dy + 1), z); } } @@ -84,7 +85,7 @@ protected void updateShape(BufferBuilder builder) { for(int z = (dz > 0 ? 1 : dz + 2);z < (dz > 0 ? dz - 1 : 0);++z) { addShapeCube(builder, 0, y, z); if(!(dx == 1 || dx == -1)) { - addShapeCube(builder, dx > 0 ? dx - 1 : dx + 1, y, z); + addShapeCube(builder, (dx > 0 ? dx - 1 : dx + 1), y, z); } } } @@ -96,7 +97,7 @@ protected void updateShape(BufferBuilder builder) { for(int z = (dz > 0 ? 1 : dz + 2);z < (dz > 0 ? dz - 1 : 0);++z) { addShapeCube(builder, x, 0, z); if(!(dy == 1 || dy == -1)) { - addShapeCube(builder, x, dy > 0 ? dy - 1 : dy + 1, z); + addShapeCube(builder, x, (dy > 0 ? dy - 1 : dy + 1), z); } } } @@ -108,7 +109,7 @@ protected void updateShape(BufferBuilder builder) { for(int y = (dy > 0 ? 1 : dy + 2);y < (dy > 0 ? dy - 1 : 0);++y) { addShapeCube(builder, x, y, 0); if(!(dz == 1 || dz == -1)) { - addShapeCube(builder, x, y, dz > 0 ? dz - 1 : dz + 1); + addShapeCube(builder, x, y, (dz > 0 ? dz - 1 : dz + 1)); } } } diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeEllipse.java b/src/main/java/brentmaas/buildguide/shapes/ShapeEllipse.java index 5f058a9..bdfa5b4 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeEllipse.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeEllipse.java @@ -1,10 +1,11 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyNonzeroInt; import brentmaas.buildguide.property.PropertyPositiveInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeEllipse extends Shape { private enum direction{ @@ -15,10 +16,10 @@ private enum direction{ private String[] directionNames = {"X", "Y", "Z"}; - private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslationTextComponent("property.buildguide.direction"), () -> this.update(), directionNames); - private PropertyPositiveInt propertySemi1 = new PropertyPositiveInt(1, 3, new TranslationTextComponent("property.buildguide.semiaxis", "Y"), () -> this.update()); - private PropertyPositiveInt propertySemi2 = new PropertyPositiveInt(2, 3, new TranslationTextComponent("property.buildguide.semiaxis", "Z"), () -> this.update()); - private PropertyNonzeroInt propertyHeight = new PropertyNonzeroInt(3, 1, new TranslationTextComponent("property.buildguide.height"), () -> this.update()); + private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslatableComponent("property.buildguide.direction"), () -> this.update(), directionNames); + private PropertyPositiveInt propertySemi1 = new PropertyPositiveInt(1, 3, new TranslatableComponent("property.buildguide.semiaxis", "Y"), () -> this.update()); + private PropertyPositiveInt propertySemi2 = new PropertyPositiveInt(2, 3, new TranslatableComponent("property.buildguide.semiaxis", "Z"), () -> this.update()); + private PropertyNonzeroInt propertyHeight = new PropertyNonzeroInt(3, 1, new TranslatableComponent("property.buildguide.height"), () -> this.update()); public ShapeEllipse() { super(); @@ -81,16 +82,16 @@ protected void updateShape(BufferBuilder builder) { switch(propertyDir.value) { case X: - propertySemi1.setName(new TranslationTextComponent("property.buildguide.semiaxis", "Y")); - propertySemi2.setName(new TranslationTextComponent("property.buildguide.semiaxis", "Z")); + propertySemi1.setName(new TranslatableComponent("property.buildguide.semiaxis", "Y")); + propertySemi2.setName(new TranslatableComponent("property.buildguide.semiaxis", "Z")); break; case Y: - propertySemi1.setName(new TranslationTextComponent("property.buildguide.semiaxis", "X")); - propertySemi2.setName(new TranslationTextComponent("property.buildguide.semiaxis", "Z")); + propertySemi1.setName(new TranslatableComponent("property.buildguide.semiaxis", "X")); + propertySemi2.setName(new TranslatableComponent("property.buildguide.semiaxis", "Z")); break; case Z: - propertySemi1.setName(new TranslationTextComponent("property.buildguide.semiaxis", "X")); - propertySemi2.setName(new TranslationTextComponent("property.buildguide.semiaxis", "Y")); + propertySemi1.setName(new TranslatableComponent("property.buildguide.semiaxis", "X")); + propertySemi2.setName(new TranslatableComponent("property.buildguide.semiaxis", "Y")); break; } } diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeEllipsoid.java b/src/main/java/brentmaas/buildguide/shapes/ShapeEllipsoid.java index ebabf14..38f560d 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeEllipsoid.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeEllipsoid.java @@ -1,9 +1,10 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyPositiveInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeEllipsoid extends Shape{ private enum dome { @@ -18,10 +19,10 @@ private enum dome { private String[] domeNames = {"-", "+X", "+Y", "+Z", "-X", "-Y", "-Z"}; - private PropertyPositiveInt propertySemiX = new PropertyPositiveInt(0, 3, new TranslationTextComponent("property.buildguide.semiaxis", "X"), () -> this.update()); - private PropertyPositiveInt propertySemiY = new PropertyPositiveInt(1, 3, new TranslationTextComponent("property.buildguide.semiaxis", "Y"), () -> this.update()); - private PropertyPositiveInt propertySemiZ = new PropertyPositiveInt(2, 3, new TranslationTextComponent("property.buildguide.semiaxis", "Z"), () -> this.update()); - private PropertyEnum propertyDome = new PropertyEnum(3, dome.NO, new TranslationTextComponent("property.buildguide.dome"), () -> this.update(), domeNames); + private PropertyPositiveInt propertySemiX = new PropertyPositiveInt(0, 3, new TranslatableComponent("property.buildguide.semiaxis", "X"), () -> this.update()); + private PropertyPositiveInt propertySemiY = new PropertyPositiveInt(1, 3, new TranslatableComponent("property.buildguide.semiaxis", "Y"), () -> this.update()); + private PropertyPositiveInt propertySemiZ = new PropertyPositiveInt(2, 3, new TranslatableComponent("property.buildguide.semiaxis", "Z"), () -> this.update()); + private PropertyEnum propertyDome = new PropertyEnum(3, dome.NO, new TranslatableComponent("property.buildguide.dome"), () -> this.update(), domeNames); public ShapeEllipsoid() { super(); diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeLine.java b/src/main/java/brentmaas/buildguide/shapes/ShapeLine.java index 32ae9b1..5ef4391 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeLine.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeLine.java @@ -1,9 +1,10 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyNonzeroInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeLine extends Shape{ private enum direction{ @@ -14,8 +15,8 @@ private enum direction{ private final String[] directionNames = {"X", "Y", "Z"}; - private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslationTextComponent("property.buildguide.direction"), () -> this.update(), directionNames); - private PropertyNonzeroInt propertyLength = new PropertyNonzeroInt(1, 5, new TranslationTextComponent("property.buildguide.length"), () -> this.update()); + private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslatableComponent("property.buildguide.direction"), () -> this.update(), directionNames); + private PropertyNonzeroInt propertyLength = new PropertyNonzeroInt(1, 5, new TranslatableComponent("property.buildguide.length"), () -> this.update()); public ShapeLine() { super(); diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapePolygon.java b/src/main/java/brentmaas/buildguide/shapes/ShapePolygon.java index 82acc05..dc48f77 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapePolygon.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapePolygon.java @@ -1,11 +1,12 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyMinimumInt; import brentmaas.buildguide.property.PropertyNonzeroInt; import brentmaas.buildguide.property.PropertyPositiveInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapePolygon extends Shape{ private enum direction{ @@ -28,11 +29,11 @@ private enum rotation{ private static final int[] rotXY = {0, -1, 0, 1}; private static final int[] rotYX = {0, 1, 0, -1}; - private PropertyMinimumInt propertySides = new PropertyMinimumInt(0, 3, new TranslationTextComponent("property.buildguide.sides"), () -> this.update(), 3); - private PropertyPositiveInt propertyRadius = new PropertyPositiveInt(1, 3, new TranslationTextComponent("property.buildguide.radius"), () -> this.update()); - private PropertyEnum propertyDir = new PropertyEnum(2, direction.X, new TranslationTextComponent("property.buildguide.direction"), () -> this.update(), directionNames); - private PropertyEnum propertyRot = new PropertyEnum(3, rotation.ROT0, new TranslationTextComponent("property.buildguide.rotation"), () -> this.update(), rotationNames); - private PropertyNonzeroInt propertyHeight = new PropertyNonzeroInt(4, 1, new TranslationTextComponent("property.buildguide.height"), () -> this.update()); + private PropertyMinimumInt propertySides = new PropertyMinimumInt(0, 3, new TranslatableComponent("property.buildguide.sides"), () -> this.update(), 3); + private PropertyPositiveInt propertyRadius = new PropertyPositiveInt(1, 3, new TranslatableComponent("property.buildguide.radius"), () -> this.update()); + private PropertyEnum propertyDir = new PropertyEnum(2, direction.X, new TranslatableComponent("property.buildguide.direction"), () -> this.update(), directionNames); + private PropertyEnum propertyRot = new PropertyEnum(3, rotation.ROT0, new TranslatableComponent("property.buildguide.rotation"), () -> this.update(), rotationNames); + private PropertyNonzeroInt propertyHeight = new PropertyNonzeroInt(4, 1, new TranslatableComponent("property.buildguide.height"), () -> this.update()); public ShapePolygon() { super(); diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeRegistry.java b/src/main/java/brentmaas/buildguide/shapes/ShapeRegistry.java index d55a4d3..5abb379 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeRegistry.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeRegistry.java @@ -1,5 +1,6 @@ package brentmaas.buildguide.shapes; +import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Map; @@ -19,8 +20,8 @@ public static void registerShape(Class shapeClass) { public static Shape getNewInstance(String classIdentifier) { try { - return shapeRegistry.get(classIdentifier).newInstance(); - } catch (InstantiationException | IllegalAccessException e) { + return shapeRegistry.get(classIdentifier).getDeclaredConstructor().newInstance(); + }catch(InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException | NoSuchMethodException | SecurityException e) { BuildGuide.logger.error("Unable to instantiate Shape class '" + classIdentifier + "'"); e.printStackTrace(); System.exit(1); diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeSphere.java b/src/main/java/brentmaas/buildguide/shapes/ShapeSphere.java index 8abfc9a..abb5f34 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeSphere.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeSphere.java @@ -1,9 +1,10 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyPositiveInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeSphere extends Shape{ private enum dome { @@ -18,8 +19,8 @@ private enum dome { private String[] domeNames = {"-", "+X", "+Y", "+Z", "-X", "-Y", "-Z"}; - private PropertyPositiveInt propertyRadius = new PropertyPositiveInt(0, 3, new TranslationTextComponent("property.buildguide.radius"), () -> this.update()); - private PropertyEnum propertyDome = new PropertyEnum(1, dome.NO, new TranslationTextComponent("property.buildguide.dome"), () -> this.update(), domeNames); + private PropertyPositiveInt propertyRadius = new PropertyPositiveInt(0, 3, new TranslatableComponent("property.buildguide.radius"), () -> this.update()); + private PropertyEnum propertyDome = new PropertyEnum(1, dome.NO, new TranslatableComponent("property.buildguide.dome"), () -> this.update(), domeNames); public ShapeSphere() { super(); diff --git a/src/main/java/brentmaas/buildguide/shapes/ShapeTorus.java b/src/main/java/brentmaas/buildguide/shapes/ShapeTorus.java index 590e1ce..0e15ec1 100644 --- a/src/main/java/brentmaas/buildguide/shapes/ShapeTorus.java +++ b/src/main/java/brentmaas/buildguide/shapes/ShapeTorus.java @@ -1,9 +1,10 @@ package brentmaas.buildguide.shapes; +import com.mojang.blaze3d.vertex.BufferBuilder; + import brentmaas.buildguide.property.PropertyEnum; import brentmaas.buildguide.property.PropertyPositiveInt; -import net.minecraft.client.renderer.BufferBuilder; -import net.minecraft.util.text.TranslationTextComponent; +import net.minecraft.network.chat.TranslatableComponent; public class ShapeTorus extends Shape{ private enum direction{ @@ -14,9 +15,9 @@ private enum direction{ private String[] directionNames = {"X", "Y", "Z"}; - private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslationTextComponent("property.buildguide.direction"), () -> this.update(), directionNames); - private PropertyPositiveInt propertyOuterRadius = new PropertyPositiveInt(1, 5, new TranslationTextComponent("property.buildguide.outerradius"), () -> this.updateOuter()); - private PropertyPositiveInt propertyInnerRadius = new PropertyPositiveInt(2, 3, new TranslationTextComponent("property.buildguide.innerradius"), () -> this.updateInner()); + private PropertyEnum propertyDir = new PropertyEnum(0, direction.X, new TranslatableComponent("property.buildguide.direction"), () -> this.update(), directionNames); + private PropertyPositiveInt propertyOuterRadius = new PropertyPositiveInt(1, 5, new TranslatableComponent("property.buildguide.outerradius"), () -> this.updateOuter()); + private PropertyPositiveInt propertyInnerRadius = new PropertyPositiveInt(2, 3, new TranslatableComponent("property.buildguide.innerradius"), () -> this.updateInner()); public ShapeTorus() { super(); diff --git a/src/main/resources/META-INF/mods.toml b/src/main/resources/META-INF/mods.toml index e7ad0c6..221b3e2 100644 --- a/src/main/resources/META-INF/mods.toml +++ b/src/main/resources/META-INF/mods.toml @@ -6,12 +6,12 @@ # The name of the mod loader type to load - for regular FML @Mod mods it should be javafml modLoader="javafml" #mandatory # A version range to match for said mod loader - for regular FML @Mod it will be the forge version -loaderVersion="[35,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. +loaderVersion="[39,)" #mandatory This is typically bumped every Minecraft version by Forge. See our download page for lists of versions. # The license for you mod. This is mandatory metadata and allows for easier comprehension of your redistributive properties. # Review your options at https://choosealicense.com/. All rights reserved is the default copyright stance, and is thus the default here. license="Creative Commons Attribution-NonCommercial 3.0 Unported" # A URL to refer people to when problems occur with this mod -#issueTrackerURL="https://change.me.to.your.issue.tracker.example.invalid/" #optional +issueTrackerURL="https://www.curseforge.com/minecraft/mc-mods/build-guide/issues" #optional # A list of mods - how many allowed here is determined by the individual mod loader [[mods]] #mandatory # The modid of the mod @@ -34,7 +34,7 @@ logoFile="logo.png" #optional authors="brentmaas" #optional # The description text for the mod (multi line!) (#mandatory) description=''' -Simple client-only building guide mod. +A client-side only mod to project shapes like circles and spheres into the world. It works both in singleplayer and multiplayer, even if the server doesn't have the mod installed. ''' # A dependency - use the . to indicate dependency for a specific modid. Dependencies are optional. [[dependencies.buildguide]] #optional @@ -43,7 +43,7 @@ Simple client-only building guide mod. # Does this dependency have to exist - if not, ordering below must be specified mandatory=true #mandatory # The version range of the dependency - versionRange="[35,)" #mandatory + versionRange="[39,)" #mandatory # An ordering relationship for the dependency - BEFORE or AFTER required if the relationship is not mandatory ordering="NONE" # Side this dependency is applied on - BOTH, CLIENT or SERVER @@ -53,6 +53,6 @@ Simple client-only building guide mod. modId="minecraft" mandatory=true # This version range declares a minimum of the current minecraft version up to but not including the next major version - versionRange="[1.16.4,1.17)" + versionRange="[1.18.1,1.19)" ordering="NONE" side="BOTH" diff --git a/src/main/resources/pack.mcmeta b/src/main/resources/pack.mcmeta index 6005d69..9820314 100644 --- a/src/main/resources/pack.mcmeta +++ b/src/main/resources/pack.mcmeta @@ -1,7 +1,6 @@ { "pack": { "description": "buildguide resources", - "pack_format": 6, - "_comment": "A pack_format of 6 requires json lang files and some texture changes from 1.16.2. Note: we require v6 pack meta for all mods." + "pack_format": 8 } }