Merge pull request #1 from Exopandora/master

Update
This commit is contained in:
fhfuih
2018-07-01 01:55:37 +08:00
committed by GitHub
99 changed files with 1864 additions and 910 deletions

3
.gitignore vendored
View File

@@ -4,6 +4,9 @@
# Except # Except
!/src/ !/src/
!/gradle/
!gradlew
!gradlew.bat
!build.gradle !build.gradle
!README.md !README.md
!version.json !version.json

View File

@@ -8,42 +8,60 @@ Curseforge: https://minecraft.curseforge.com/projects/world-handler-command-gui
# Features # # Features #
* GUI for Commands * GUI for Commands
* Client Commands
* /advancement
* /blockdata
* /time
* /difficulty
* /weather
* /kill
* /give
* /effect
* /gamemode
* /setworldspawn
* /spawnpoint
* /clear
* /summon
* /enchant
* /xp
* /scoreboard
* /gamerule
* /fill
* /clone
* Server Commands
* /kick
* /ban
* /pardon
* /op
* /deop
* /save-all
* /save-on
* /save-off
* /whitelist
* Biome Indicator * Biome Indicator
* World and Player Information * World and Player Information
* Simplified usage for /fill and /clone * Simplified usage for /fill and /clone
<table>
<tr>
<th>
Featured Client Commands<br />
</th>
<th>
Featured Server Commands<br />
</th>
</tr>
<tr>
<td valign="top">
<ul>
<li>/advancement</li>
<li>/blockdata</li>
<li>/clear</li>
<li>/clone</li>
<li>/difficulty</li>
<li>/effect</li>
<li>/enchant</li>
<li>/fill</li>
<li>/gamemode</li>
<li>/gamerule</li>
<li>/give</li>
<li>/kill</li>
<li>/recipe</li>
<li>/scoreboard</li>
<li>/setworldspawn</li>
<li>/spawnpoint</li>
<li>/summon</li>
<li>/time</li>
<li>/weather</li>
<li>/xp</li>
</ul>
</td>
<td valign="top">
<ul>
<li>/ban</li>
<li>/deop</li>
<li>/kick</li>
<li>/op</li>
<li>/pardon</li>
<li>/save-all</li>
<li>/save-off</li>
<li>/save-on</li>
<li>/whitelist</li>
</ul>
</td>
</tr>
</table>
# Download # # Download #
Compiled and signed versions: https://minecraft.curseforge.com/projects/world-handler-command-gui/files Compiled and signed versions: https://minecraft.curseforge.com/projects/world-handler-command-gui/files
Requires: Minecraft Forge (http://files.minecraftforge.net/) Requires: Minecraft Forge (http://files.minecraftforge.net/)

View File

@@ -10,9 +10,15 @@ buildscript {
apply plugin: 'net.minecraftforge.gradle.forge' apply plugin: 'net.minecraftforge.gradle.forge'
//Only edit below this line, the above code adds and enables the necessary things for Forge to be setup. //Only edit below this line, the above code adds and enables the necessary things for Forge to be setup.
def mcversion = "1.12.2"
def modversion = "2.1.4"
def mccompatible = "1.12"
def url = "https://minecraft.curseforge.com/projects/world-handler-command-gui"
def update_url = "https://raw.githubusercontent.com/Exopandora/worldhandler/master/version.json"
def certificate = "d6261bb645f41db84c74f98e512c2bb43f188af2"
version = "1.12.2-2.0" version = mcversion + "-" + modversion
group = "src.worldhandler.main.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html group = "exopandora.worldhandler.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "WorldHandler" archivesBaseName = "WorldHandler"
sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly. sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
@@ -22,12 +28,34 @@ compileJava {
jar { jar {
manifest { manifest {
attributes 'Main-Class': 'exopandora.worldhandler.main.Main' attributes 'Main-Class': 'exopandora.worldhandler.Main'
} }
} }
task processMetadata(dependsOn: minecraft) {
minecraft.replace '$version', modversion
minecraft.replace '$mcversion', mcversion
minecraft.replace '$compatible', mccompatible
minecraft.replace '$url', url
minecraft.replace '$update_url', update_url
minecraft.replace '$certificate', certificate
}
if(project.hasProperty('keyStore')) {
task signJar(type: SignJar, dependsOn: reobfJar) {
keyStore = project.keyStore
alias = project.keyStoreAlias
storePass = project.keyStorePass
keyPass = project.keyStoreKeyPass
inputFile = jar.archivePath
outputFile = jar.archivePath
}
build.dependsOn signJar
}
minecraft { minecraft {
version = "1.12.2-14.23.2.2611" version = "1.12.2-14.23.3.2676"
runDir = "run" runDir = "run"
// the mappings can be changed at any time, and must be in the following format. // the mappings can be changed at any time, and must be in the following format.

3
gradle.properties Normal file
View File

@@ -0,0 +1,3 @@
# Sets default memory used for gradle commands. Can be overridden by user or command line properties.
# This is required to provide enough memory for the Minecraft decompilation process.
org.gradle.jvmargs=-Xmx3G

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

Binary file not shown.

View File

@@ -0,0 +1,6 @@
#Mon Sep 14 12:28:28 PDT 2015
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-2.14-bin.zip

164
gradlew vendored Normal file
View File

@@ -0,0 +1,164 @@
#!/usr/bin/env bash
##############################################################################
##
## Gradle start up script for UN*X
##
##############################################################################
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
DEFAULT_JVM_OPTS=""
APP_NAME="Gradle"
APP_BASE_NAME=`basename "$0"`
# Use the maximum available, or set MAX_FD != -1 to use that value.
MAX_FD="maximum"
warn ( ) {
echo "$*"
}
die ( ) {
echo
echo "$*"
echo
exit 1
}
# OS specific support (must be 'true' or 'false').
cygwin=false
msys=false
darwin=false
case "`uname`" in
CYGWIN* )
cygwin=true
;;
Darwin* )
darwin=true
;;
MINGW* )
msys=true
;;
esac
# For Cygwin, ensure paths are in UNIX format before anything is touched.
if $cygwin ; then
[ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
fi
# 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
done
SAVED="`pwd`"
cd "`dirname \"$PRG\"`/" >&-
APP_HOME="`pwd -P`"
cd "$SAVED" >&-
CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
# Determine the Java command to use to start the JVM.
if [ -n "$JAVA_HOME" ] ; then
if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
# IBM's JDK on AIX uses strange locations for the executables
JAVACMD="$JAVA_HOME/jre/sh/java"
else
JAVACMD="$JAVA_HOME/bin/java"
fi
if [ ! -x "$JAVACMD" ] ; then
die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
Please set the JAVA_HOME variable in your environment to match the
location of your Java installation."
fi
else
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
location of your Java installation."
fi
# Increase the maximum file descriptors if we can.
if [ "$cygwin" = "false" -a "$darwin" = "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
fi
# For Darwin, add options to specify how the application appears in the dock
if $darwin; then
GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
fi
# For Cygwin, switch paths to Windows format before running java
if $cygwin ; then
APP_HOME=`cygpath --path --mixed "$APP_HOME"`
CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
# We build the pattern for arguments to be converted via cygpath
ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
SEP=""
for dir in $ROOTDIRSRAW ; do
ROOTDIRS="$ROOTDIRS$SEP$dir"
SEP="|"
done
OURCYGPATTERN="(^($ROOTDIRS))"
# Add a user-defined pattern to the cygpath arguments
if [ "$GRADLE_CYGPATTERN" != "" ] ; then
OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
fi
# Now convert the arguments - kludge to limit ourselves to /bin/sh
i=0
for arg in "$@" ; do
CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
else
eval `echo args$i`="\"$arg\""
fi
i=$((i+1))
done
case $i in
(0) set -- ;;
(1) set -- "$args0" ;;
(2) set -- "$args0" "$args1" ;;
(3) set -- "$args0" "$args1" "$args2" ;;
(4) set -- "$args0" "$args1" "$args2" "$args3" ;;
(5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
(6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
(7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
(8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
(9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
esac
fi
# Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
function splitJvmOpts() {
JVM_OPTS=("$@")
}
eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"

90
gradlew.bat vendored Normal file
View File

@@ -0,0 +1,90 @@
@if "%DEBUG%" == "" @echo off
@rem ##########################################################################
@rem
@rem Gradle startup script for Windows
@rem
@rem ##########################################################################
@rem Set local scope for the variables with windows NT shell
if "%OS%"=="Windows_NT" setlocal
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
set DEFAULT_JVM_OPTS=
set DIRNAME=%~dp0
if "%DIRNAME%" == "" set DIRNAME=.
set APP_BASE_NAME=%~n0
set APP_HOME=%DIRNAME%
@rem Find java.exe
if defined JAVA_HOME goto findJavaFromJavaHome
set JAVA_EXE=java.exe
%JAVA_EXE% -version >NUL 2>&1
if "%ERRORLEVEL%" == "0" goto init
echo.
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:findJavaFromJavaHome
set JAVA_HOME=%JAVA_HOME:"=%
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
if exist "%JAVA_EXE%" goto init
echo.
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
echo.
echo Please set the JAVA_HOME variable in your environment to match the
echo location of your Java installation.
goto fail
:init
@rem Get command-line arguments, handling Windowz variants
if not "%OS%" == "Windows_NT" goto win9xME_args
if "%@eval[2+2]" == "4" goto 4NT_args
:win9xME_args
@rem Slurp the command line arguments.
set CMD_LINE_ARGS=
set _SKIP=2
:win9xME_args_slurp
if "x%~1" == "x" goto execute
set CMD_LINE_ARGS=%*
goto execute
:4NT_args
@rem Get arguments from the 4NT Shell from JP Software
set CMD_LINE_ARGS=%$
:execute
@rem Setup the command line
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
@rem Execute Gradle
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
:end
@rem End local scope for the variables with windows NT shell
if "%ERRORLEVEL%"=="0" goto mainEnd
:fail
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
rem the _cmd.exe /c_ return code!
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
exit /b 1
:mainEnd
if "%OS%"=="Windows_NT" endlocal
:omega

View File

@@ -1,4 +1,4 @@
package exopandora.worldhandler.main; package exopandora.worldhandler;
import java.awt.EventQueue; import java.awt.EventQueue;
import java.io.File; import java.io.File;
@@ -15,13 +15,6 @@ public class Main
{ {
public static final String NAME = "World Handler"; public static final String NAME = "World Handler";
public static final String MODID = "worldhandler"; public static final String MODID = "worldhandler";
public static final String MC_VERSION = "1.12.2";
public static final String MC_COMPATIBLE = "1.12";
public static final String VERSION = "2.1";
public static final String FULL_VERSION = MC_VERSION + "-" + VERSION;
public static final String NAME_AND_VERSION = NAME + " " + FULL_VERSION;
public static final String URL = "https://minecraft.curseforge.com/projects/world-handler-command-gui";
public static final String UPDATE_URL = "https://raw.githubusercontent.com/Exopandora/worldhandler/master/version.json";
public static void main(String[] args) public static void main(String[] args)
{ {

View File

@@ -1,4 +1,4 @@
package exopandora.worldhandler.main; package exopandora.worldhandler;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
@@ -12,10 +12,12 @@ import exopandora.worldhandler.config.ConfigButcher;
import exopandora.worldhandler.config.ConfigSettings; import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.config.ConfigSliders; import exopandora.worldhandler.config.ConfigSliders;
import exopandora.worldhandler.event.EventListener;
import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.proxy.CommonProxy; import exopandora.worldhandler.proxy.CommonProxy;
import exopandora.worldhandler.util.UtilKeyBinding;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding; import net.minecraft.client.settings.KeyBinding;
import net.minecraft.command.ICommand; import net.minecraft.command.ICommand;
@@ -25,8 +27,12 @@ import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod; import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler; import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance; import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.ProgressManager;
import net.minecraftforge.fml.common.ProgressManager.ProgressBar;
import net.minecraftforge.fml.common.SidedProxy; import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent; import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLLoadCompleteEvent;
import net.minecraftforge.fml.common.event.FMLModDisabledEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
@@ -34,62 +40,72 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
@Mod(modid = Main.MODID, name = Main.NAME, acceptedMinecraftVersions = "[" + Main.MC_COMPATIBLE + ",)", version = Main.VERSION, canBeDeactivated = false, guiFactory = "exopandora.worldhandler.gui.config.GuiFactoryWorldHandler", updateJSON = Main.UPDATE_URL, clientSideOnly = true) @Mod(modid = Main.MODID, name = Main.NAME, acceptedMinecraftVersions = "[$compatible,)", version = "$version", canBeDeactivated = true, guiFactory = "exopandora.worldhandler.gui.config.GuiFactoryWorldHandler", updateJSON = "$update_url", clientSideOnly = true, certificateFingerprint = "$certificate")
public class WorldHandler public class WorldHandler
{ {
@Instance(Main.MODID) @Instance(Main.MODID)
public WorldHandler INSTANCE; private static WorldHandler INSTANCE;
public static KeyBinding KEY_WORLD_HANDLER = new KeyBinding(Main.NAME, Keyboard.KEY_V, "key.categories.misc"); public static KeyBinding KEY_WORLD_HANDLER = new KeyBinding(Main.NAME, Keyboard.KEY_V, "key.categories.misc");
public static KeyBinding KEY_WORLD_HANDLER_POS1 = new KeyBinding(Main.NAME + " Pos1", Keyboard.KEY_O, "key.categories.misc"); public static KeyBinding KEY_WORLD_HANDLER_POS1 = new KeyBinding(Main.NAME + " Pos1", Keyboard.KEY_O, "key.categories.misc");
public static KeyBinding KEY_WORLD_HANDLER_POS2 = new KeyBinding(Main.NAME + " Pos2", Keyboard.KEY_P, "key.categories.misc"); public static KeyBinding KEY_WORLD_HANDLER_POS2 = new KeyBinding(Main.NAME + " Pos2", Keyboard.KEY_P, "key.categories.misc");
public static Logger LOGGER;
public static final ICommand COMMAND_WORLD_HANDLER = new CommandWorldHandler(); public static final ICommand COMMAND_WORLD_HANDLER = new CommandWorldHandler();
public static final ICommand COMMAND_WH = new CommandWH(); public static final ICommand COMMAND_WH = new CommandWH();
public static Configuration CONFIG; public static Configuration CONFIG;
public static Logger LOGGER;
public static String USERNAME = null; public static String USERNAME = null;
@SidedProxy(clientSide = "exopandora.worldhandler.proxy.ClientProxy", serverSide = "exopandora.worldhandler.proxy.CommonProxy") @SidedProxy(clientSide = "exopandora.worldhandler.proxy.ClientProxy", serverSide = "exopandora.worldhandler.proxy.CommonProxy")
public static CommonProxy PROXY; private static CommonProxy PROXY;
private EventListener eventListener = new EventListener();
@EventHandler @EventHandler
public void preInit(FMLPreInitializationEvent event) public void preInit(FMLPreInitializationEvent event)
{ {
LOGGER = event.getModLog(); LOGGER = event.getModLog();
LOGGER.info("Pre-Initializing " + Main.NAME_AND_VERSION); LOGGER.info("Pre-Initialization");
LOGGER.info("First Release on March 28 2013 - 02:29 PM CET by Exopandora"); LOGGER.info("First Release on March 28 2013 - 02:29 PM CET by Exopandora");
LOGGER.info("Latest Version: " + Main.URL); LOGGER.info("Latest Version: $url");
CONFIG = new Configuration(event.getSuggestedConfigurationFile()); CONFIG = new Configuration(event.getSuggestedConfigurationFile());
ConfigSettings.load(CONFIG);
ConfigSkin.load(CONFIG);
ConfigSliders.load(CONFIG);
} }
@EventHandler @EventHandler
public void init(FMLInitializationEvent event) public void init(FMLInitializationEvent event)
{ {
LOGGER.info("Initializing " + Main.NAME_AND_VERSION); LOGGER.info("Initialization");
USERNAME = Minecraft.getMinecraft().getSession().getUsername(); USERNAME = Minecraft.getMinecraft().getSession().getUsername();
MinecraftForge.EVENT_BUS.register(new exopandora.worldhandler.event.EventHandler()); MinecraftForge.EVENT_BUS.register(this.eventListener);
ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER); ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER);
updateKeyBindings(); UtilKeyBinding.updatePosKeys();
} }
@EventHandler @EventHandler
public void postInit(FMLPostInitializationEvent event) public void postInit(FMLPostInitializationEvent event)
{ {
LOGGER.info("Post-Initializing " + Main.NAME_AND_VERSION); LOGGER.info("Post-Initialization");
LOGGER.info("Every mod that has not been registered to this point may not be fully featured in this mod"); }
@EventHandler
public void loadComplete(FMLLoadCompleteEvent event)
{
LOGGER.info("Load-Complete");
ProgressBar bar = ProgressManager.push(Main.NAME, 2);
bar.step("Loading Configuration Files");
ConfigSettings.load(CONFIG);
ConfigSkin.load(CONFIG);
ConfigSliders.load(CONFIG);
ConfigButcher.load(CONFIG); ConfigButcher.load(CONFIG);
bar.step("Initializing User Interface");
Content.registerContents(); Content.registerContents();
Category.registerCategories(); Category.registerCategories();
ProgressManager.pop(bar);
} }
@EventHandler @EventHandler
@@ -99,28 +115,25 @@ public class WorldHandler
event.registerServerCommand(COMMAND_WH); event.registerServerCommand(COMMAND_WH);
} }
@EventHandler
public void disable(FMLModDisabledEvent event)
{
MinecraftForge.EVENT_BUS.register(this.eventListener);
Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.removeElement(Minecraft.getMinecraft().gameSettings.keyBindings, KEY_WORLD_HANDLER);
if(UtilKeyBinding.arePosKeysRegistered() && ConfigSettings.arePosShortcutsEnabled())
{
UtilKeyBinding.removePosKeys();
}
}
public static void updateConfig() public static void updateConfig()
{ {
ConfigSettings.load(CONFIG); ConfigSettings.load(CONFIG);
ConfigSkin.load(CONFIG); ConfigSkin.load(CONFIG);
ConfigButcher.load(CONFIG); ConfigButcher.load(CONFIG);
ConfigSliders.load(CONFIG); ConfigSliders.load(CONFIG);
updateKeyBindings(); UtilKeyBinding.updatePosKeys();
}
public static void updateKeyBindings()
{
boolean isRegistered = ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, KEY_WORLD_HANDLER_POS1) || ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, KEY_WORLD_HANDLER_POS2);
if(ConfigSettings.arePosShortcutsEnabled() && !isRegistered)
{
ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER_POS1);
ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER_POS2);
}
else if(!ConfigSettings.arePosShortcutsEnabled() && isRegistered)
{
Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.removeElements(Minecraft.getMinecraft().gameSettings.keyBindings, KEY_WORLD_HANDLER_POS1, KEY_WORLD_HANDLER_POS2);
}
} }
public static void sendCommand(ICommandBuilder builder) public static void sendCommand(ICommandBuilder builder)

View File

@@ -1,19 +1,18 @@
package exopandora.worldhandler.builder; package exopandora.worldhandler.builder;
import java.util.AbstractMap; import java.util.AbstractMap.SimpleEntry;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.Syntax.SyntaxEntry; import exopandora.worldhandler.builder.Syntax.SyntaxEntry;
import exopandora.worldhandler.builder.types.Coordinate; import exopandora.worldhandler.builder.types.Coordinate;
import exopandora.worldhandler.builder.types.Level; import exopandora.worldhandler.builder.types.Level;
import exopandora.worldhandler.builder.types.TargetSelector; import exopandora.worldhandler.builder.types.TargetSelector;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.nbt.NBTTagCompound; import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
@@ -232,20 +231,34 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax
{ {
if(syntax != null) if(syntax != null)
{ {
this.command = syntax.getSyntaxEntries().stream().map(entry -> new AbstractMap.SimpleEntry<SyntaxEntry, String>(entry, entry.toString())).collect(Collectors.toList()); this.command = syntax.getSyntaxEntries().stream().map(entry -> new SimpleEntry<SyntaxEntry, String>(entry, entry.toString())).collect(Collectors.toList());
} }
} }
@Override @Override
public String toCommand() public String toCommand()
{ {
return "/" + this.getCommandName() + " " + String.join(" ", this.command.stream().map(entry -> this.isDefaultEntry(entry) ? entry.getKey().toString() : entry.getValue()).collect(Collectors.toList())); CommandString command = new CommandString(this.getCommandName());
for(Entry<SyntaxEntry, String> entry : this.command)
{
if(this.isDefaultEntry(entry))
{
command.append(entry.getKey().toString());
}
else
{
command.append(entry.getValue());
}
}
return command.toString();
} }
@Override @Override
public String toActualCommand() public String toActualCommand()
{ {
List<String> command = new ArrayList<String>(); CommandString command = new CommandString(this.getCommandName());
for(Entry<SyntaxEntry, String> entry : this.command) for(Entry<SyntaxEntry, String> entry : this.command)
{ {
@@ -254,9 +267,9 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax
break; break;
} }
command.add(entry.getValue()); command.append(entry.getValue());
} }
return "/" + this.getCommandName() + " " + String.join(" ", command); return command.toString();
} }
} }

View File

@@ -0,0 +1,52 @@
package exopandora.worldhandler.builder;
import com.mojang.realmsclient.gui.ChatFormatting;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class CommandString
{
private final StringBuilder command = new StringBuilder("/");
public CommandString(String name)
{
this.command.append(name);
}
public CommandString(String name, String... arguments)
{
this(name);
this.append(arguments);
}
public void append(String argument)
{
if(argument != null && !argument.isEmpty())
{
this.command.append(" " + argument);
}
else
{
this.command.append(" " + ChatFormatting.RED + "[error]" + ChatFormatting.RESET);
}
}
public void append(String... arguments)
{
if(arguments != null)
{
for(String argument : arguments)
{
this.append(argument);
}
}
}
@Override
public String toString()
{
return this.command.toString();
}
}

View File

@@ -4,8 +4,8 @@ import java.util.function.Function;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.component.IBuilderComponent; import exopandora.worldhandler.builder.component.IBuilderComponent;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.nbt.NBTBase; import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagByte; import net.minecraft.nbt.NBTTagByte;
import net.minecraft.nbt.NBTTagByteArray; import net.minecraft.nbt.NBTTagByteArray;

View File

@@ -1,5 +1,7 @@
package exopandora.worldhandler.builder.impl; package exopandora.worldhandler.builder.impl;
import javax.annotation.Nullable;
import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
@@ -29,6 +31,7 @@ public class BuilderAdvancement extends CommandBuilder
this.setNode(0, action != null ? action.toString() : null); this.setNode(0, action != null ? action.toString() : null);
} }
@Nullable
public EnumActionType getActionType() public EnumActionType getActionType()
{ {
return EnumHelper.valueOf(EnumActionType.class, this.getNodeAsString(1)); return EnumHelper.valueOf(EnumActionType.class, this.getNodeAsString(1));
@@ -39,6 +42,7 @@ public class BuilderAdvancement extends CommandBuilder
this.setNode(1, player); this.setNode(1, player);
} }
@Nullable
public String getPlayer() public String getPlayer()
{ {
return this.getNodeAsString(1); return this.getNodeAsString(1);
@@ -49,6 +53,7 @@ public class BuilderAdvancement extends CommandBuilder
this.setNode(2, mode != null ? mode.toString() : null); this.setNode(2, mode != null ? mode.toString() : null);
} }
@Nullable
public EnumMode getMode() public EnumMode getMode()
{ {
return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(2)); return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(2));
@@ -59,6 +64,7 @@ public class BuilderAdvancement extends CommandBuilder
this.setNode(3, advancement); this.setNode(3, advancement);
} }
@Nullable
public ResourceLocation getAdvancement() public ResourceLocation getAdvancement()
{ {
return this.getNodeAsResourceLocation(3); return this.getNodeAsResourceLocation(3);
@@ -93,6 +99,7 @@ public class BuilderAdvancement extends CommandBuilder
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumActionType public static enum EnumActionType
{ {
GRANT, GRANT,
@@ -105,6 +112,7 @@ public class BuilderAdvancement extends CommandBuilder
} }
} }
@SideOnly(Side.CLIENT)
public static enum EnumMode public static enum EnumMode
{ {
ONLY, ONLY,

View File

@@ -1,5 +1,8 @@
package exopandora.worldhandler.builder.impl; package exopandora.worldhandler.builder.impl;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.TargetSelector; import exopandora.worldhandler.builder.types.TargetSelector;
@@ -31,6 +34,7 @@ public class BuilderButcher extends CommandBuilder
this.setNode(0, this.targetSelector); this.setNode(0, this.targetSelector);
} }
@Nonnull
public int getRadius() public int getRadius()
{ {
return this.targetSelector.<Integer>get("r"); return this.targetSelector.<Integer>get("r");
@@ -42,6 +46,7 @@ public class BuilderButcher extends CommandBuilder
this.setNode(0, this.targetSelector); this.setNode(0, this.targetSelector);
} }
@Nonnull
public ResourceLocation getEntity() public ResourceLocation getEntity()
{ {
return this.targetSelector.<ResourceLocation>get("type"); return this.targetSelector.<ResourceLocation>get("type");

View File

@@ -129,6 +129,7 @@ public class BuilderClone extends BuilderDoubleBlockPos
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumMask public static enum EnumMask
{ {
REPLACE, REPLACE,

View File

@@ -25,12 +25,9 @@ public class BuilderCustomItem extends BuilderGive
this(null, null); this(null, null);
} }
public BuilderCustomItem(String username, ResourceLocation item) public BuilderCustomItem(String player, ResourceLocation item)
{ {
this.setPlayer(username); super(player, item);
this.setItem(item);
this.setAmount(1);
this.setMetadata(0);
this.attribute = this.registerNBTComponent(new ComponentAttributeItem(attribute -> attribute.getApplyable().equals(Applyable.BOTH) || attribute.getApplyable().equals(Applyable.PLAYER))); this.attribute = this.registerNBTComponent(new ComponentAttributeItem(attribute -> attribute.getApplyable().equals(Applyable.BOTH) || attribute.getApplyable().equals(Applyable.PLAYER)));
this.display = this.registerNBTComponent(new ComponentDisplay()); this.display = this.registerNBTComponent(new ComponentDisplay());
this.enchantment = this.registerNBTComponent(new ComponentEnchantment()); this.enchantment = this.registerNBTComponent(new ComponentEnchantment());

View File

@@ -3,6 +3,8 @@ package exopandora.worldhandler.builder.impl;
import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BuilderDifficulty extends CommandBuilder public class BuilderDifficulty extends CommandBuilder
{ {
@@ -37,6 +39,7 @@ public class BuilderDifficulty extends CommandBuilder
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumDifficulty public static enum EnumDifficulty
{ {
PEACEFUL, PEACEFUL,

View File

@@ -148,6 +148,7 @@ public class BuilderFill extends BuilderDoubleBlockPos
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumBlockHandling public static enum EnumBlockHandling
{ {
REPLACE, REPLACE,

View File

@@ -3,6 +3,8 @@ package exopandora.worldhandler.builder.impl;
import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BuilderGamemode extends CommandBuilder public class BuilderGamemode extends CommandBuilder
{ {
@@ -49,6 +51,7 @@ public class BuilderGamemode extends CommandBuilder
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumGamemode public static enum EnumGamemode
{ {
SURVIVAL, SURVIVAL,

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.builder.impl; package exopandora.worldhandler.builder.impl;
import exopandora.worldhandler.builder.CommandString;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -19,7 +20,7 @@ public class BuilderGeneric implements ICommandBuilder
@Override @Override
public String toCommand() public String toCommand()
{ {
return "/" + this.command + " " + String.join(" ", this.arguments); return new CommandString(this.command, this.arguments).toString();
} }
public String toActualCommand() public String toActualCommand()

View File

@@ -16,6 +16,7 @@ public class BuilderGive extends CommandBuilderNBT
{ {
this.setPlayer(player); this.setPlayer(player);
this.setItem(item); this.setItem(item);
this.setAmount(1);
this.setMetadata(0); this.setMetadata(0);
} }

View File

@@ -21,9 +21,7 @@ public class BuilderPotionItem extends BuilderGive
public BuilderPotionItem(ResourceLocation item, String player, ComponentPotionItem potion) public BuilderPotionItem(ResourceLocation item, String player, ComponentPotionItem potion)
{ {
this.setItem(item); super(player, item);
this.setPlayer(player);
this.setAmount(1);
this.potion = this.registerNBTComponent(potion); this.potion = this.registerNBTComponent(potion);
} }

View File

@@ -0,0 +1,97 @@
package exopandora.worldhandler.builder.impl;
import javax.annotation.Nullable;
import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumActionType;
import exopandora.worldhandler.builder.types.Type;
import exopandora.worldhandler.helper.EnumHelper;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class BuilderRecipe extends CommandBuilder
{
public BuilderRecipe()
{
this(null, null, null);
}
public BuilderRecipe(EnumMode mode, String player, ResourceLocation recipe)
{
this.setMode(mode);
this.setPlayer(player);
this.setRecipe(recipe);
}
public void setMode(EnumMode mode)
{
this.setNode(0, mode != null ? mode.toString() : null);
}
@Nullable
public EnumMode getMode()
{
return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(0));
}
public void setPlayer(String player)
{
this.setNode(1, player);
}
@Nullable
public String getPlayer()
{
return this.getNodeAsString(1);
}
public void setRecipe(ResourceLocation recipe)
{
this.setNode(2, recipe);
}
@Nullable
public ResourceLocation getRecipe()
{
return this.getNodeAsResourceLocation(2);
}
public BuilderRecipe getBuilderForMode(EnumMode mode)
{
return new BuilderRecipe(mode, this.getPlayer(), this.getRecipe());
}
@Override
public String getCommandName()
{
return "recipe";
}
@Override
public Syntax getSyntax()
{
Syntax syntax = new Syntax();
syntax.addRequired("give|take", Type.STRING);
syntax.addOptional("player", Type.STRING);
syntax.addOptional("recipe", Type.RESOURCE_LOCATION);
return syntax;
}
@SideOnly(Side.CLIENT)
public static enum EnumMode
{
GIVE,
TAKE;
@Override
public String toString()
{
return this.name().toLowerCase();
}
}
}

View File

@@ -204,6 +204,7 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumTag public static enum EnumTag
{ {
ADD, ADD,
@@ -216,6 +217,7 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard
} }
} }
@SideOnly(Side.CLIENT)
public static enum EnumPoints public static enum EnumPoints
{ {
ADD, ADD,

View File

@@ -238,6 +238,7 @@ public class BuilderScoreboardTeams extends BuilderScoreboard
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumMode public static enum EnumMode
{ {
JOIN, JOIN,

View File

@@ -3,6 +3,8 @@ package exopandora.worldhandler.builder.impl;
import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BuilderTime extends CommandBuilder public class BuilderTime extends CommandBuilder
{ {
@@ -49,6 +51,7 @@ public class BuilderTime extends CommandBuilder
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumMode public static enum EnumMode
{ {
ADD, ADD,

View File

@@ -3,6 +3,8 @@ package exopandora.worldhandler.builder.impl;
import exopandora.worldhandler.builder.CommandBuilder; import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax; import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BuilderWeather extends CommandBuilder public class BuilderWeather extends CommandBuilder
{ {
@@ -49,6 +51,7 @@ public class BuilderWeather extends CommandBuilder
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumWeather public static enum EnumWeather
{ {
CLEAR, CLEAR,

View File

@@ -76,6 +76,7 @@ public class BuilderWhitelist extends CommandBuilder
return syntax; return syntax;
} }
@SideOnly(Side.CLIENT)
public static enum EnumMode public static enum EnumMode
{ {
ADD, ADD,

View File

@@ -1,5 +1,7 @@
package exopandora.worldhandler.builder.types; package exopandora.worldhandler.builder.types;
import javax.annotation.Nullable;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -28,6 +30,7 @@ public class Level
this.level = level; this.level = level;
} }
@Nullable
public static Level valueOf(String value) public static Level valueOf(String value)
{ {
if(value != null) if(value != null)

View File

@@ -4,6 +4,9 @@ import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -18,6 +21,7 @@ public class TargetSelector
this.values.put(id.toLowerCase(), value); this.values.put(id.toLowerCase(), value);
} }
@Nullable
public <T> T get(String id) public <T> T get(String id)
{ {
return (T) this.values.get(id); return (T) this.values.get(id);
@@ -28,6 +32,7 @@ public class TargetSelector
return this.values.remove(id.toLowerCase()); return this.values.remove(id.toLowerCase());
} }
@Nonnull
public static TargetSelector valueOf(String input) public static TargetSelector valueOf(String input)
{ {
if(input.matches(REGEX)); if(input.matches(REGEX));

View File

@@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderClone; import exopandora.worldhandler.builder.impl.BuilderClone;
import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask; import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask;
import exopandora.worldhandler.builder.impl.BuilderFill; import exopandora.worldhandler.builder.impl.BuilderFill;
@@ -12,7 +13,6 @@ import exopandora.worldhandler.builder.impl.BuilderWH;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.helper.EnumHelper; import exopandora.worldhandler.helper.EnumHelper;
import exopandora.worldhandler.helper.ResourceHelper; import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase; import net.minecraft.command.CommandBase;

View File

@@ -5,10 +5,10 @@ import java.util.List;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderWorldHandler; import exopandora.worldhandler.builder.impl.BuilderWorldHandler;
import exopandora.worldhandler.event.EventHandler; import exopandora.worldhandler.event.EventListener;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase; import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException; import net.minecraft.command.CommandException;
@@ -49,13 +49,13 @@ public class CommandWorldHandler extends CommandBase
} }
else if(args[0].equalsIgnoreCase("display")) else if(args[0].equalsIgnoreCase("display"))
{ {
new Thread(() -> Minecraft.getMinecraft().addScheduledTask(EventHandler::displayGui)).start(); Minecraft.getMinecraft().addScheduledTask(EventListener::displayGui);
} }
else if(args[0].equalsIgnoreCase("version")) else if(args[0].equalsIgnoreCase("version"))
{ {
sender.sendMessage(new TextComponentString("Installed: " + Main.MC_VERSION + "-" + Main.VERSION)); sender.sendMessage(new TextComponentString("Installed: $mcversion-$version"));
ComparableVersion target = ForgeVersion.getResult(Loader.instance().getIndexedModList().get(Main.MODID)).target; ComparableVersion target = ForgeVersion.getResult(Loader.instance().getIndexedModList().get(Main.MODID)).target;
sender.sendMessage(new TextComponentString("Latest: " + Main.MC_VERSION + "-" + (target != null ? target : Main.VERSION))); sender.sendMessage(new TextComponentString("Latest: $mcversion-" + (target != null ? target : "$version")));
} }
else else
{ {

View File

@@ -37,7 +37,7 @@ public class FakeCommandHandler extends CommandHandler
public void tryCommand(ICommand command, ClientChatEvent event) public void tryCommand(ICommand command, ClientChatEvent event)
{ {
if(event.getMessage().startsWith("/" + command.getName()) || event.getMessage().startsWith("/" + command.getName() + " ")) if(event.getMessage().equals("/" + command.getName()) || event.getMessage().startsWith("/" + command.getName() + " "))
{ {
this.fakeCommand(command, event); this.fakeCommand(command, event);
} }

View File

@@ -18,6 +18,7 @@ public class ConfigSettings
private static boolean PAUSE; private static boolean PAUSE;
private static boolean CUSTOM_TIMES; private static boolean CUSTOM_TIMES;
private static boolean PERMISSION_QEURY; private static boolean PERMISSION_QEURY;
private static boolean HIGHLIGHT_BLOCKS;
private static int DAWN; private static int DAWN;
private static int NOON; private static int NOON;
@@ -40,6 +41,7 @@ public class ConfigSettings
PAUSE = config.getBoolean("pause_game", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.pause_game"), "gui.worldhandler.config.key.settings.pause_game"); PAUSE = config.getBoolean("pause_game", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.pause_game"), "gui.worldhandler.config.key.settings.pause_game");
CUSTOM_TIMES = config.getBoolean("custom_times", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.custom_times"), "gui.worldhandler.config.key.settings.custom_times"); CUSTOM_TIMES = config.getBoolean("custom_times", CATEGORY, false, I18n.format("gui.worldhandler.config.comment.settings.custom_times"), "gui.worldhandler.config.key.settings.custom_times");
PERMISSION_QEURY = config.getBoolean("permission_query", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.permission_query"), "gui.worldhandler.config.key.settings.permission_query"); PERMISSION_QEURY = config.getBoolean("permission_query", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.permission_query"), "gui.worldhandler.config.key.settings.permission_query");
HIGHLIGHT_BLOCKS = config.getBoolean("highlight_blocks", CATEGORY, true, I18n.format("gui.worldhandler.config.comment.settings.highlight_blocks"), "gui.worldhandler.config.key.settings.highlight_blocks");
DAWN = config.getInt("custom_time_dawn", CATEGORY, 1000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_dawn"), "gui.worldhandler.config.key.settings.custom_time_dawn"); DAWN = config.getInt("custom_time_dawn", CATEGORY, 1000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_dawn"), "gui.worldhandler.config.key.settings.custom_time_dawn");
NOON = config.getInt("custom_time_noon", CATEGORY, 6000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_noon"), "gui.worldhandler.config.key.settings.custom_time_noon"); NOON = config.getInt("custom_time_noon", CATEGORY, 6000, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_noon"), "gui.worldhandler.config.key.settings.custom_time_noon");
SUNSET = config.getInt("custom_time_sunset", CATEGORY, 12500, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_sunset"), "gui.worldhandler.config.key.settings.custom_time_sunset"); SUNSET = config.getInt("custom_time_sunset", CATEGORY, 12500, 0, 24000, I18n.format("gui.worldhandler.config.comment.settings.custom_time_sunset"), "gui.worldhandler.config.key.settings.custom_time_sunset");
@@ -102,6 +104,11 @@ public class ConfigSettings
return PERMISSION_QEURY; return PERMISSION_QEURY;
} }
public static boolean isHighlightBlocksEnabled()
{
return HIGHLIGHT_BLOCKS;
}
public static int getDawn() public static int getDawn()
{ {
return DAWN; return DAWN;

View File

@@ -2,41 +2,102 @@ package exopandora.worldhandler.event;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.command.FakeCommandHandler; import exopandora.worldhandler.command.FakeCommandHandler;
import exopandora.worldhandler.config.ConfigSettings; import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.hud.BiomeIndicator; import exopandora.worldhandler.hud.BiomeIndicator;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilPlayer; import exopandora.worldhandler.util.UtilPlayer;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.GlStateManager;
import net.minecraft.client.renderer.RenderGlobal;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks; import net.minecraft.init.Blocks;
import net.minecraft.util.text.TextComponentString; import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.client.event.ClientChatEvent; import net.minecraftforge.client.event.ClientChatEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent; import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent; import net.minecraftforge.fml.common.gameevent.InputEvent.KeyInputEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent; import net.minecraftforge.fml.common.gameevent.TickEvent.ClientTickEvent;
import net.minecraftforge.fml.common.gameevent.TickEvent.Phase; import net.minecraftforge.fml.common.gameevent.TickEvent.Phase;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class EventHandler public class EventListener
{ {
private final FakeCommandHandler commandHandler = new FakeCommandHandler(); private final FakeCommandHandler commandHandler = new FakeCommandHandler();
private final BiomeIndicator biomeIndicator = new BiomeIndicator();
@SubscribeEvent @SubscribeEvent
public void clientTickEvent(TickEvent.ClientTickEvent event) public void renderWorldLastEvent(RenderWorldLastEvent event)
{
if(ConfigSettings.isHighlightBlocksEnabled() && Minecraft.getMinecraft().world != null)
{
GlStateManager.pushMatrix();
GlStateManager.disableAlpha();
GlStateManager.enableBlend();
GlStateManager.tryBlendFuncSeparate(GlStateManager.SourceFactor.SRC_ALPHA, GlStateManager.DestFactor.ONE_MINUS_SRC_ALPHA, GlStateManager.SourceFactor.ONE, GlStateManager.DestFactor.ZERO);
GlStateManager.glLineWidth(2.0F);
GlStateManager.disableTexture2D();
GlStateManager.depthMask(false);
final double constant = 0.0020000000949949026D;
EntityPlayer player = Minecraft.getMinecraft().player;
double playerX = player.lastTickPosX + (player.posX - player.lastTickPosX) * Minecraft.getMinecraft().getRenderPartialTicks();
double playerY = player.lastTickPosY + (player.posY - player.lastTickPosY) * Minecraft.getMinecraft().getRenderPartialTicks();
double playerZ = player.lastTickPosZ + (player.posZ - player.lastTickPosZ) * Minecraft.getMinecraft().getRenderPartialTicks();
double minX = Math.min(BlockHelper.getPos1().getX(), BlockHelper.getPos2().getX()) - constant - playerX;
double minY = Math.min(BlockHelper.getPos1().getY(), BlockHelper.getPos2().getY()) - constant - playerY;
double minZ = Math.min(BlockHelper.getPos1().getZ(), BlockHelper.getPos2().getZ()) - constant - playerZ;
double maxX = Math.max(BlockHelper.getPos1().getX(), BlockHelper.getPos2().getX()) + constant - playerX + 1;
double maxY = Math.max(BlockHelper.getPos1().getY(), BlockHelper.getPos2().getY()) + constant - playerY + 1;
double maxZ = Math.max(BlockHelper.getPos1().getZ(), BlockHelper.getPos2().getZ()) + constant - playerZ + 1;
final float opacity = 0.2F;
for(int x = 1; x < maxX - minX; x++)
{
RenderGlobal.drawBoundingBox(minX, minY, minZ, minX + x + 2 * constant, maxY, maxZ, 0.0F, 0.0F, 0.0F, opacity);
}
for(int y = 1; y < maxY - minY; y++)
{
RenderGlobal.drawBoundingBox(minX, minY, minZ, maxX, minY + y + 2 * constant, maxZ, 0.0F, 0.0F, 0.0F, opacity);
}
for(int z = 1; z < maxZ - minZ; z++)
{
RenderGlobal.drawBoundingBox(minX, minY, minZ, maxX, maxY, minZ + z + 2 * constant, 0.0F, 0.0F, 0.0F, opacity);
}
RenderGlobal.renderFilledBox(minX, minY, minZ, maxX, maxY, maxZ, 0.0F, 0.0F, 0.0F, opacity / 2);
RenderGlobal.renderFilledBox(maxX, maxY, maxZ, minX, minY, minZ, 0.0F, 0.0F, 0.0F, opacity / 2);
GlStateManager.depthMask(true);
GlStateManager.enableTexture2D();
GlStateManager.disableBlend();
GlStateManager.enableAlpha();
GlStateManager.popMatrix();
}
}
@SubscribeEvent
public void clientTickEvent(ClientTickEvent event)
{ {
if(Minecraft.getMinecraft().inGameHasFocus && event.phase.equals(Phase.START)) if(Minecraft.getMinecraft().inGameHasFocus && event.phase.equals(Phase.START))
{ {
if(ConfigSettings.isBiomeIndicatorEnabled()) if(ConfigSettings.isBiomeIndicatorEnabled())
{ {
BiomeIndicator.tick(); this.biomeIndicator.tick();
} }
} }
} }

View File

@@ -2,10 +2,10 @@ package exopandora.worldhandler.gui.button;
import org.lwjgl.input.Mouse; import org.lwjgl.input.Mouse;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.main.Main;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord; import net.minecraft.client.audio.PositionedSoundRecord;
import net.minecraft.client.audio.SoundHandler; import net.minecraft.client.audio.SoundHandler;

View File

@@ -4,12 +4,13 @@ import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.format.TextFormatting; import exopandora.worldhandler.format.TextFormatting;
import exopandora.worldhandler.gui.button.logic.IListButtonLogic; import exopandora.worldhandler.gui.button.logic.IListButtonLogic;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -17,21 +18,21 @@ import net.minecraftforge.fml.relauncher.SideOnly;
public class GuiButtonList<T> extends GuiButtonWorldHandler public class GuiButtonList<T> extends GuiButtonWorldHandler
{ {
private final IListButtonLogic<T> logic; private final IListButtonLogic<T> logic;
private final ButtonStorage<T> storage; private final ButtonValues<T> persistence;
private int mouseX; private int mouseX;
private int mouseY; private int mouseY;
public GuiButtonList(int id, int x, int y, int width, int height, Content container, IListButtonLogic<T> logic) public GuiButtonList(int id, int x, int y, int width, int height, Content content, IListButtonLogic<T> logic)
{ {
this(id, x, y, width, height, null, container, logic); this(id, x, y, width, height, null, content, logic);
} }
public GuiButtonList(int id, int x, int y, int width, int height, EnumTooltip tooltipType, Content container, IListButtonLogic<T> logic) public GuiButtonList(int id, int x, int y, int width, int height, EnumTooltip tooltipType, Content content, IListButtonLogic<T> logic)
{ {
super(id, x, y, width, height, null, null, tooltipType); super(id, x, y, width, height, null, null, tooltipType);
this.logic = logic; this.logic = logic;
this.storage = container.getStorage(this.logic.getId()); this.persistence = content.getPersistence(this.logic.getId());
this.updateStorageObject(); this.updatePersistenceObject();
} }
@Override @Override
@@ -46,7 +47,7 @@ public class GuiButtonList<T> extends GuiButtonWorldHandler
this.mouseX = mouseX; this.mouseX = mouseX;
this.mouseY = mouseY; this.mouseY = mouseY;
this.displayString = this.logic.getDisplayString(this.storage); this.displayString = this.logic.getDisplayString(this.persistence);
if(this.displayString != null && !this.displayString.isEmpty()) if(this.displayString != null && !this.displayString.isEmpty())
{ {
@@ -77,7 +78,7 @@ public class GuiButtonList<T> extends GuiButtonWorldHandler
{ {
if(this.tooltipType != null) if(this.tooltipType != null)
{ {
this.displayTooltip = this.logic.getTooltipString(this.storage); this.displayTooltip = this.logic.getTooltipString(this.persistence);
} }
super.drawTooltip(mouseX, mouseY, width, height); super.drawTooltip(mouseX, mouseY, width, height);
@@ -100,36 +101,67 @@ public class GuiButtonList<T> extends GuiButtonWorldHandler
public void actionPerformed(Container container, GuiButton button) public void actionPerformed(Container container, GuiButton button)
{ {
int max = this.logic.getMax() - 1;
int index = this.persistence.getIndex();
if(this.isHoveringLeft(this.mouseX, this.mouseY)) if(this.isHoveringLeft(this.mouseX, this.mouseY))
{ {
if(this.storage.getIndex() > 0) if(GuiScreen.isShiftKeyDown())
{ {
this.storage.decrementIndex(); if(index < 10)
{
this.persistence.setIndex(max - (9 - index));
}
else
{
this.persistence.decrementIndex(10);
}
} }
else else
{ {
this.storage.setIndex(this.logic.getMax() - 1); if(index > 0)
{
this.persistence.decrementIndex();
}
else
{
this.persistence.setIndex(max);
}
} }
} }
else if(this.isHoveringRight(this.mouseX, this.mouseY)) else if(this.isHoveringRight(this.mouseX, this.mouseY))
{ {
if(this.storage.getIndex() < this.logic.getMax() - 1) if(GuiScreen.isShiftKeyDown())
{ {
this.storage.incrementIndex(); if(index > max - 10)
{
this.persistence.setIndex(9 - (max - index));
}
else
{
this.persistence.incrementIndex(10);
}
} }
else else
{ {
this.storage.setIndex(0); if(index < max)
{
this.persistence.incrementIndex();
}
else
{
this.persistence.setIndex(0);
}
} }
} }
this.updateStorageObject(); this.updatePersistenceObject();
this.logic.actionPerformed(container, button, this.storage); this.logic.actionPerformed(container, button, this.persistence);
} }
private void updateStorageObject() private void updatePersistenceObject()
{ {
this.storage.setObject(this.logic.getObject(this.storage.getIndex())); this.persistence.setObject(this.logic.getObject(this.persistence.getIndex()));
} }
public IListButtonLogic<T> getLogic() public IListButtonLogic<T> getLogic()

View File

@@ -2,8 +2,8 @@ package exopandora.worldhandler.gui.button;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.gui.button.logic.ISliderResponder; import exopandora.worldhandler.gui.button.logic.ISliderResponder;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.button.storage.SliderStorage; import exopandora.worldhandler.gui.button.persistence.SliderValues;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.helper.ResourceHelper; import exopandora.worldhandler.helper.ResourceHelper;
@@ -25,60 +25,57 @@ public class GuiSlider<T> extends GuiButton
private final String name; private final String name;
private final ISliderResponder responder; private final ISliderResponder responder;
private final Container frame; private final Container frame;
private final ButtonStorage<SliderStorage> storage; private final ButtonValues<SliderValues> persistence;
public GuiSlider(Content container, Container frame, Object key, int x, int y, int width, int height, String name, double min, double max, double start, ISliderResponder responder) public GuiSlider(Content content, Container frame, Object key, int x, int y, int width, int height, String name, double min, double max, double start, ISliderResponder responder)
{ {
super(Integer.MAX_VALUE, x, y, width, height, null); super(Integer.MAX_VALUE, x, y, width, height, null);
this.frame = frame; this.frame = frame;
this.key = key; this.key = key;
this.name = name; this.name = name;
this.responder = responder; this.responder = responder;
this.storage = container.getStorage(key); this.persistence = content.getPersistence(key);
this.initStorage(Math.round(min), Math.round(max), Math.round(start)); this.initValues(Math.round(min), Math.round(max), Math.round(start));
this.displayString = this.getDisplayString(); this.displayString = this.getDisplayString();
} }
private void initStorage(double min, double max, double start) private void initValues(double min, double max, double start)
{ {
if(this.storage.getObject() == null || this.storage.getObject().getMin() != min || this.storage.getObject().getMax() != max) if(this.persistence.getObject() == null)
{ {
if(this.storage.getObject() == null) if(min == max)
{ {
if(min == max) this.persistence.setObject(new SliderValues(min, max, 0.0D));
{
this.storage.setObject(new SliderStorage(min, max, 0));
}
else
{
this.storage.setObject(new SliderStorage(min, max, (start - min) / (max - min)));
}
} }
else else
{ {
this.storage.setObject(new SliderStorage(min, max, (int) MathHelper.clamp(this.getValue(), min, max))); this.persistence.setObject(new SliderValues(min, max, (start - min) / (max - min)));
} }
} }
else if(this.persistence.getObject().getMin() != min || this.persistence.getObject().getMax() != max)
{
this.persistence.setObject(new SliderValues(min, max, (int) MathHelper.clamp(this.getValue(), min, max)));
}
} }
private void setPosition(double position) private void setPosition(double position)
{ {
this.storage.getObject().setPosition(position); this.persistence.getObject().setPosition(position);
} }
private double getPosition() private double getPosition()
{ {
return this.storage.getObject().getPosition(); return this.persistence.getObject().getPosition();
} }
private void setValue(int value) private void setValue(int value)
{ {
this.storage.getObject().setValue(value); this.persistence.getObject().setValue(value);
} }
private int getValue() private int getValue()
{ {
return this.storage.getObject().getValue(); return this.persistence.getObject().getValue();
} }
private String getDisplayString() private String getDisplayString()

View File

@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.format.EnumColor; import exopandora.worldhandler.format.EnumColor;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -26,15 +26,15 @@ public abstract class ColorListButtonLogic implements IListButtonLogic<Integer>
} }
@Override @Override
public String getTooltipString(ButtonStorage<Integer> storage) public String getTooltipString(ButtonValues<Integer> values)
{ {
return null; return null;
} }
@Override @Override
public String getDisplayString(ButtonStorage storage) public String getDisplayString(ButtonValues values)
{ {
EnumColor color = EnumColor.getColorFromId(storage.getIndex()); EnumColor color = EnumColor.getColorFromId(values.getIndex());
return color + I18n.format("gui.worldhandler.color") + ": " + I18n.format("gui.worldhandler.color." + color.getFormat()); return color + I18n.format("gui.worldhandler.color") + ": " + I18n.format("gui.worldhandler.color." + color.getFormat());
} }

View File

@@ -1,6 +1,6 @@
package exopandora.worldhandler.gui.button.logic; package exopandora.worldhandler.gui.button.logic;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
@@ -9,19 +9,19 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public interface IListButtonLogic<T> public interface IListButtonLogic<T>
{ {
void actionPerformed(Container container, GuiButton button, ButtonStorage<T> storage); void actionPerformed(Container container, GuiButton button, ButtonValues<T> values);
int getMax(); int getMax();
T getObject(int index); T getObject(int index);
String getDisplayString(ButtonStorage<T> storage); String getDisplayString(ButtonValues<T> values);
default String getTooltipString(ButtonStorage<T> storage) default String getTooltipString(ButtonValues<T> values)
{ {
if(storage != null && storage.getObject() != null) if(values != null && values.getObject() != null)
{ {
return storage.getObject().toString() + " (" + (storage.getIndex() + 1) + "/" + this.getMax() + ")"; return values.getObject().toString() + " (" + (values.getIndex() + 1) + "/" + this.getMax() + ")";
} }
return null; return null;

View File

@@ -1,10 +1,10 @@
package exopandora.worldhandler.gui.button.storage; package exopandora.worldhandler.gui.button.persistence;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class ButtonStorage<T> public class ButtonValues<T>
{ {
private int index; private int index;
private T object; private T object;
@@ -24,11 +24,21 @@ public class ButtonStorage<T>
this.index++; this.index++;
} }
public void incrementIndex(int amount)
{
this.index += amount;
}
public void decrementIndex() public void decrementIndex()
{ {
this.index--; this.index--;
} }
public void decrementIndex(int amount)
{
this.index -= amount;
}
public T getObject() public T getObject()
{ {
return this.object; return this.object;

View File

@@ -1,26 +1,31 @@
package exopandora.worldhandler.gui.button.storage; package exopandora.worldhandler.gui.button.persistence;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class SliderStorage public class SliderValues
{ {
private final double min; private final double min;
private final double max; private final double max;
private double position; private double position;
public SliderStorage(double min, double max, double position) private SliderValues(double min, double max)
{ {
this.min = min; this.min = min;
this.max = max; this.max = max;
}
public SliderValues(double min, double max, double position)
{
this(min, max);
this.position = position; this.position = position;
} }
public SliderStorage(double min, double max, int value) public SliderValues(double min, double max, int value)
{ {
this.min = min; this(min, max);
this.max = max;
this.position = this.valueToPosition(value); this.position = this.valueToPosition(value);
} }
@@ -56,6 +61,11 @@ public class SliderStorage
private double valueToPosition(int value) private double valueToPosition(int value)
{ {
if(this.min == this.max)
{
return 0;
}
return (value - this.min) / (this.max - this.min); return (value - this.min) / (this.max - this.min);
} }
} }

View File

@@ -1,6 +1,6 @@
package exopandora.worldhandler.gui.category; package exopandora.worldhandler.gui.category;
import exopandora.worldhandler.main.Main; import exopandora.worldhandler.Main;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;

View File

@@ -6,9 +6,9 @@ import java.util.List;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.Main;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.RegistryNamespaced; import net.minecraft.util.registry.RegistryNamespaced;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
@@ -64,7 +64,7 @@ public class Category
registerCategory(1, "entities", new Category(Contents.SUMMON)); registerCategory(1, "entities", new Category(Contents.SUMMON));
registerCategory(2, "items", new Category(Contents.CUSTOM_ITEM, Contents.ENCHANTMENT)); registerCategory(2, "items", new Category(Contents.CUSTOM_ITEM, Contents.ENCHANTMENT));
registerCategory(3, "blocks", new Category(Contents.EDIT_BLOCKS, Contents.SIGN_EDITOR, Contents.NOTE_EDITOR)); registerCategory(3, "blocks", new Category(Contents.EDIT_BLOCKS, Contents.SIGN_EDITOR, Contents.NOTE_EDITOR));
registerCategory(4, "world", new Category(Contents.WORLD_INFO, Contents.GAMERULES)); registerCategory(4, "world", new Category(Contents.WORLD_INFO, Contents.GAMERULES, Contents.RECIPES));
registerCategory(5, "player", new Category(Contents.PLAYER, Contents.EXPERIENCE, Contents.ADVANCEMENTS)); registerCategory(5, "player", new Category(Contents.PLAYER, Contents.EXPERIENCE, Contents.ADVANCEMENTS));
registerCategory(6, "scoreboard", new Category(Contents.SCOREBOARD_OBJECTIVES, Contents.SCOREBOARD_TEAMS, Contents.SCOREBOARD_PLAYERS)); registerCategory(6, "scoreboard", new Category(Contents.SCOREBOARD_OBJECTIVES, Contents.SCOREBOARD_TEAMS, Contents.SCOREBOARD_PLAYERS));
} }

View File

@@ -3,12 +3,12 @@ package exopandora.worldhandler.gui.config;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.config.ConfigButcher; import exopandora.worldhandler.config.ConfigButcher;
import exopandora.worldhandler.config.ConfigSettings; import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.config.ConfigSliders; import exopandora.worldhandler.config.ConfigSliders;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraftforge.common.config.ConfigCategory; import net.minecraftforge.common.config.ConfigCategory;

View File

@@ -12,6 +12,7 @@ import javax.annotation.Nullable;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderDifficulty; import exopandora.worldhandler.builder.impl.BuilderDifficulty;
import exopandora.worldhandler.builder.impl.BuilderDifficulty.EnumDifficulty; import exopandora.worldhandler.builder.impl.BuilderDifficulty.EnumDifficulty;
import exopandora.worldhandler.builder.impl.BuilderGamemode; import exopandora.worldhandler.builder.impl.BuilderGamemode;
@@ -34,8 +35,6 @@ import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.IContent; import exopandora.worldhandler.gui.content.IContent;
import exopandora.worldhandler.gui.content.element.IElement; import exopandora.worldhandler.gui.content.element.IElement;
import exopandora.worldhandler.helper.ResourceHelper; import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilRender; import exopandora.worldhandler.util.UtilRender;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
@@ -144,7 +143,7 @@ public class GuiWorldHandlerContainer extends Container
if(!this.content.getActiveContent().equals(tab)) if(!this.content.getActiveContent().equals(tab))
{ {
this.finalButtons.add(new GuiButtonTab(-16, (int)(backgroundX + xOffset), backgroundY - 20, (int)this.tabWidth + (int)Math.ceil(this.tabEpsilon / this.tabSize), 21, index)); this.finalButtons.add(new GuiButtonTab(-16, (int) (backgroundX + xOffset), backgroundY - 20, (int) this.tabWidth + (int) Math.ceil(this.tabEpsilon / this.tabSize), 21, index));
} }
}); });
@@ -343,7 +342,6 @@ public class GuiWorldHandlerContainer extends Container
break elements; break elements;
} }
} }
this.content.actionPerformed(this, button); this.content.actionPerformed(this, button);
break; break;
} }
@@ -351,7 +349,7 @@ public class GuiWorldHandlerContainer extends Container
private void defaultColor() private void defaultColor()
{ {
this.defaultColor(1); this.defaultColor(1.0F);
} }
private void defaultColor(float alpha) private void defaultColor(float alpha)
@@ -445,8 +443,8 @@ public class GuiWorldHandlerContainer extends Container
} }
this.bindBackground(); this.bindBackground();
this.drawTexturedModalRect((int)(backgroundX + xOffset), (int)(backgroundY + yOffset), 0, 0, (int) Math.ceil(this.tabHalf), fHeight); this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + yOffset), 0, 0, (int) Math.ceil(this.tabHalf), fHeight);
this.drawTexturedModalRect((int)(backgroundX + this.tabHalf + xOffset), (int)(backgroundY + yOffset), this.bgTextureWidth - (int) Math.ceil(this.tabHalf), 0, (int) Math.ceil(this.tabHalf), fHeight); this.drawTexturedModalRect((int) (backgroundX + this.tabHalf + xOffset), (int) (backgroundY + yOffset), this.bgTextureWidth - (int) Math.ceil(this.tabHalf), 0, (int) Math.ceil(this.tabHalf), fHeight);
if(!ConfigSkin.areSharpEdgesEnabled()) if(!ConfigSkin.areSharpEdgesEnabled())
{ {
@@ -460,7 +458,7 @@ public class GuiWorldHandlerContainer extends Container
for(int x = 0; x < factor; x++) for(int x = 0; x < factor; x++)
{ {
this.drawTexturedModalRect((int)(backgroundX + this.tabWidth + xOffset - x - 1), (int)(backgroundY + x + 1), (int)(this.tabWidth - x - 1), x + 1, x + 1, 1); this.drawTexturedModalRect((int) (backgroundX + this.tabWidth + xOffset - x - 1), (int) (backgroundY + x + 1), (int) (this.tabWidth - x - 1), x + 1, x + 1, 1);
} }
} }
@@ -472,7 +470,7 @@ public class GuiWorldHandlerContainer extends Container
for(int x = 0; x < factor; x++) for(int x = 0; x < factor; x++)
{ {
this.drawTexturedModalRect((int)(backgroundX + xOffset), (int)(backgroundY + x + 1), xOffset.intValue(), x + 1, x + 1, 1); this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + x + 1), xOffset.intValue(), x + 1, x + 1, 1);
} }
} }
@@ -486,7 +484,7 @@ public class GuiWorldHandlerContainer extends Container
for(int x = 0; x < width; x += interval) for(int x = 0; x < width; x += interval)
{ {
this.defaultColor(1.0F - (x / (width + 5.0F * interval))); this.defaultColor(1.0F - (x / (width + 5.0F * interval)));
this.drawTexturedModalRect((int)(backgroundX + xOffset), (int)(backgroundY + yOffset + fHeight + x / interval), 0, fHeight, width - x, 1); this.drawTexturedModalRect((int) (backgroundX + xOffset), (int) (backgroundY + yOffset + fHeight + x / interval), 0, fHeight, width - x, 1);
} }
} }
@@ -499,7 +497,7 @@ public class GuiWorldHandlerContainer extends Container
for(int x = 0; x < width; x += interval) for(int x = 0; x < width; x += interval)
{ {
this.defaultColor(1.0F - (x / (width + 5.0F * interval))); this.defaultColor(1.0F - (x / (width + 5.0F * interval)));
this.drawTexturedModalRect((int)(backgroundX + Math.ceil(xOffset) + x + offset), (int)(backgroundY + yOffset + fHeight + x / interval), this.bgTextureWidth - width + x, fHeight, width - x, 1); this.drawTexturedModalRect((int) (backgroundX + Math.ceil(xOffset) + x + offset), (int) (backgroundY + yOffset + fHeight + x / interval), this.bgTextureWidth - width + x, fHeight, width - x, 1);
} }
} }
} }
@@ -531,17 +529,20 @@ public class GuiWorldHandlerContainer extends Container
} }
} }
this.drawCenteredString(this.fontRenderer, ChatFormatting.UNDERLINE + tab.getTabTitle(), (int)(backgroundX + this.tabHalf + xOffset), (int)(backgroundY - 13), color); this.drawCenteredString(this.fontRenderer, ChatFormatting.UNDERLINE + tab.getTabTitle(), (int) (backgroundX + this.tabHalf + xOffset), (int) (backgroundY - 13), color);
}); });
this.defaultColor(); this.defaultColor();
//VERSION LABEL //VERSION LABEL
final String label = "$mcversion-$version";
final int hexAlpha = (int) (0xFF * 0.2) << 24; final int hexAlpha = (int) (0xFF * 0.2) << 24;
final int color = ConfigSkin.getLabelColor() + hexAlpha; final int color = ConfigSkin.getLabelColor() + hexAlpha;
final int versionWidth = this.width - this.fontRenderer.getStringWidth(label) - 2;
final int versionHeight = this.height - 10;
this.fontRenderer.drawString(Main.MC_VERSION + "-" + Main.VERSION, this.width - this.fontRenderer.getStringWidth(Main.MC_VERSION + "-" + Main.VERSION) - 2, this.height - 10, color); this.fontRenderer.drawString(label, versionWidth, versionHeight, color);
//TITLE //TITLE
@@ -648,6 +649,13 @@ public class GuiWorldHandlerContainer extends Container
} }
} }
} }
//VERSION LABEL TOOLTIP
if(mouseX >= versionWidth && mouseY >= versionHeight)
{
GuiUtils.drawHoveringText(Arrays.asList(label), versionWidth - 12, versionHeight + 12, this.width + this.fontRenderer.getStringWidth(label), this.height + 10, this.width, this.fontRenderer);
}
} }
@Override @Override

View File

@@ -3,7 +3,8 @@ package exopandora.worldhandler.gui.content;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.Main;
import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.content.impl.ContentAdvancements; import exopandora.worldhandler.gui.content.impl.ContentAdvancements;
import exopandora.worldhandler.gui.content.impl.ContentButcher; import exopandora.worldhandler.gui.content.impl.ContentButcher;
import exopandora.worldhandler.gui.content.impl.ContentChangeWorld; import exopandora.worldhandler.gui.content.impl.ContentChangeWorld;
@@ -18,14 +19,15 @@ import exopandora.worldhandler.gui.content.impl.ContentMain;
import exopandora.worldhandler.gui.content.impl.ContentMultiplayer; import exopandora.worldhandler.gui.content.impl.ContentMultiplayer;
import exopandora.worldhandler.gui.content.impl.ContentNoteEditor; import exopandora.worldhandler.gui.content.impl.ContentNoteEditor;
import exopandora.worldhandler.gui.content.impl.ContentPlayer; import exopandora.worldhandler.gui.content.impl.ContentPlayer;
import exopandora.worldhandler.gui.content.impl.ContentPlaysound;
import exopandora.worldhandler.gui.content.impl.ContentPotions; import exopandora.worldhandler.gui.content.impl.ContentPotions;
import exopandora.worldhandler.gui.content.impl.ContentRecipes;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardObjectives; import exopandora.worldhandler.gui.content.impl.ContentScoreboardObjectives;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers; import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardTeams; import exopandora.worldhandler.gui.content.impl.ContentScoreboardTeams;
import exopandora.worldhandler.gui.content.impl.ContentSignEditor; import exopandora.worldhandler.gui.content.impl.ContentSignEditor;
import exopandora.worldhandler.gui.content.impl.ContentSummon; import exopandora.worldhandler.gui.content.impl.ContentSummon;
import exopandora.worldhandler.gui.content.impl.ContentWorldInfo; import exopandora.worldhandler.gui.content.impl.ContentWorldInfo;
import exopandora.worldhandler.main.Main;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.RegistryNamespaced; import net.minecraft.util.registry.RegistryNamespaced;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
@@ -58,24 +60,25 @@ public abstract class Content implements IContent
//WORLD //WORLD
registerContent(9, "world", new ContentWorldInfo()); registerContent(9, "world", new ContentWorldInfo());
registerContent(10, "gamerules", new ContentGamerules()); registerContent(10, "gamerules", new ContentGamerules());
registerContent(11, "recipes", new ContentRecipes());
//PLAYER //PLAYER
registerContent(11, "player", new ContentPlayer()); registerContent(12, "player", new ContentPlayer());
registerContent(12, "experience", new ContentExperience()); registerContent(13, "experience", new ContentExperience());
registerContent(13, "advancements", new ContentAdvancements()); registerContent(14, "advancements", new ContentAdvancements());
//SCOREBOARD //SCOREBOARD
registerContent(14, "scoreboard_objectives", new ContentScoreboardObjectives()); registerContent(15, "scoreboard_objectives", new ContentScoreboardObjectives());
registerContent(15, "scoreboard_teams", new ContentScoreboardTeams()); registerContent(16, "scoreboard_teams", new ContentScoreboardTeams());
registerContent(16, "scoreboard_players", new ContentScoreboardPlayers()); registerContent(17, "scoreboard_players", new ContentScoreboardPlayers());
//MISC //MISC
registerContent(17, "change_world", new ContentChangeWorld()); registerContent(18, "change_world", new ContentChangeWorld());
registerContent(18, "continue", new ContentContinue()); registerContent(19, "continue", new ContentContinue());
//NO CATEGORY //NO CATEGORY
registerContent(19, "potions", new ContentPotions()); registerContent(20, "potions", new ContentPotions());
registerContent(20, "butcher", new ContentButcher()); registerContent(21, "butcher", new ContentButcher());
} }
private static void registerContent(int id, String textualID, Content content) private static void registerContent(int id, String textualID, Content content)
@@ -88,24 +91,24 @@ public abstract class Content implements IContent
REGISTRY.register(id, textualID, content); REGISTRY.register(id, textualID, content);
} }
private Map<Object, ButtonStorage> storage; private Map<Object, ButtonValues> persistence;
public <T> ButtonStorage<T> getStorage(Object id) public <T> ButtonValues<T> getPersistence(Object id)
{ {
if(this.storage == null) if(this.persistence == null)
{ {
this.storage = new HashMap<Object, ButtonStorage>(); this.persistence = new HashMap<Object, ButtonValues>();
} }
if(this.storage.containsKey(id)) if(this.persistence.containsKey(id))
{ {
return this.storage.get(id); return this.persistence.get(id);
} }
ButtonStorage<T> storage = new ButtonStorage<T>(); ButtonValues<T> values = new ButtonValues<T>();
this.storage.put(id, storage); this.persistence.put(id, values);
return storage; return values;
} }
} }

View File

@@ -1,8 +1,8 @@
package exopandora.worldhandler.gui.content; package exopandora.worldhandler.gui.content;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.gui.content.impl.ContentContinue; import exopandora.worldhandler.gui.content.impl.ContentContinue;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.main.Main;
import net.minecraft.util.ResourceLocation; import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -25,6 +25,7 @@ public class Contents
public static final Content WORLD_INFO; public static final Content WORLD_INFO;
public static final Content GAMERULES; public static final Content GAMERULES;
public static final Content RECIPES;
public static final Content PLAYER; public static final Content PLAYER;
public static final Content EXPERIENCE; public static final Content EXPERIENCE;
@@ -57,6 +58,7 @@ public class Contents
WORLD_INFO = Contents.getRegisteredContainer("world"); WORLD_INFO = Contents.getRegisteredContainer("world");
GAMERULES = Contents.getRegisteredContainer("gamerules"); GAMERULES = Contents.getRegisteredContainer("gamerules");
RECIPES = Contents.getRegisteredContainer("recipes");
PLAYER = Contents.getRegisteredContainer("player"); PLAYER = Contents.getRegisteredContainer("player");
EXPERIENCE = Contents.getRegisteredContainer("experience"); EXPERIENCE = Contents.getRegisteredContainer("experience");
@@ -75,13 +77,13 @@ public class Contents
private static <T extends Content> T getRegisteredContainer(String name) private static <T extends Content> T getRegisteredContainer(String name)
{ {
Content container = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name)); Content content = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name));
if(container == null) if(content == null)
{ {
throw new IllegalStateException("Invalid Container requested: " + name); throw new IllegalStateException("Invalid Container requested: " + name);
} }
return (T) container; return (T) content;
} }
} }

View File

@@ -14,10 +14,4 @@ public abstract class Element implements IElement
this.x = x; this.x = x;
this.y = y; this.y = y;
} }
@Override
public void draw()
{
}
} }

View File

@@ -6,8 +6,9 @@ import javax.annotation.Nullable;
import exopandora.worldhandler.gui.button.EnumTooltip; import exopandora.worldhandler.gui.button.EnumTooltip;
import exopandora.worldhandler.gui.button.GuiButtonList; import exopandora.worldhandler.gui.button.GuiButtonList;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
import exopandora.worldhandler.gui.button.logic.IListButtonLogic; import exopandora.worldhandler.gui.button.logic.IListButtonLogic;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.element.Element; import exopandora.worldhandler.gui.content.element.Element;
@@ -20,22 +21,30 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class ElementClickList extends Element public class ElementClickList extends Element
{ {
private final int buttonId1; private final int[] buttonIds;
private final int buttonId2;
private final List<Node> list; private final List<Node> list;
private final ILogicClickList logic; private final ILogicClickList logic;
private GuiButtonList button1; private final Content content;
private GuiButtonList button2; private final ElementClickList parent;
private final Content master; private final int depth;
public ElementClickList(int x, int y, List<Node> list, int buttonId1, int buttonId2, Content container, ILogicClickList logic) private GuiButtonList button;
private ElementClickList child;
public ElementClickList(int x, int y, List<Node> list, int[] buttonIds, Content content, ILogicClickList logic)
{
this(x, y, list, buttonIds, content, logic, null);
}
private ElementClickList(int x, int y, List<Node> list, int[] buttonIds, Content content, ILogicClickList logic, ElementClickList parent)
{ {
super(x, y); super(x, y);
this.list = list; this.list = list;
this.buttonId1 = buttonId1; this.buttonIds = buttonIds;
this.buttonId2 = buttonId2;
this.logic = logic; this.logic = logic;
this.master = container; this.content = content;
this.parent = parent;
this.depth = this.parent != null ? this.parent.depth + 1 : 1;
} }
@Override @Override
@@ -47,12 +56,12 @@ public class ElementClickList extends Element
@Override @Override
public void initButtons(Container container) public void initButtons(Container container)
{ {
container.add(this.button1 = new GuiButtonList(this.buttonId1, this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.master, new IListButtonLogic<Node>() container.add(this.button = new GuiButtonList(this.getButtonId(), this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.content, new IListButtonLogic<Node>()
{ {
@Override @Override
public void actionPerformed(Container container, GuiButton button, ButtonStorage<Node> storage) public void actionPerformed(Container container, GuiButton button, ButtonValues<Node> values)
{ {
master.getStorage(listButtonLogic2.getId()).setIndex(0); content.getPersistence(logic.getId() + (depth + 1)).setIndex(0);
container.initButtons(); container.initButtons();
} }
@@ -69,17 +78,17 @@ public class ElementClickList extends Element
} }
@Override @Override
public String getDisplayString(ButtonStorage<Node> storage) public String getDisplayString(ButtonValues<Node> values)
{ {
return logic.translate1(storage.getObject().getKey()); return logic.translate(getKeys());
} }
@Override @Override
public String getTooltipString(ButtonStorage<Node> storage) public String getTooltipString(ButtonValues<Node> values)
{ {
if(storage != null && storage.getObject() != null) if(values != null && values.getObject() != null)
{ {
return storage.getObject().getKey() + " (" + (storage.getIndex() + 1) + "/" + this.getMax() + ")"; return values.getObject().getKey() + " (" + (values.getIndex() + 1) + "/" + this.getMax() + ")";
} }
return null; return null;
@@ -88,101 +97,32 @@ public class ElementClickList extends Element
@Override @Override
public String getId() public String getId()
{ {
return logic.getId() + 1; return logic.getId() + depth;
} }
})); }));
final Node node = this.getStorage1().getObject(); Node node = this.getValues().getObject();
this.logic.consumeKey1(node.getKey()); this.logic.consumeKey(this.getKeys());
if(node.getEntries() != null) if(node.getEntries() != null)
{ {
container.add(this.button2 = new GuiButtonList(this.buttonId2, this.x, this.y + 24, 114, 20, EnumTooltip.TOP_RIGHT, this.master, this.listButtonLogic2)); this.child = new ElementClickList(this.x, this.y + 24, node.getEntries(), this.buttonIds, this.content, this.logic, this);
this.logic.consumeKey2(node.getKey(), node.getEntries().get(this.getStorage2().getIndex()).getKey()); this.child.initButtons(container);
} }
else else if(this.depth < this.buttonIds.length)
{ {
container.add(this.button2 = new GuiButtonList(this.buttonId2, this.x, this.y + 24, 114, 20, EnumTooltip.TOP_RIGHT, this.master, this.listButtonLogic2)); GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.getButtonId(), this.x, this.y + 24, 114, 20, null);
this.button2.enabled = false; button.enabled = false;
container.add(button);
} }
} }
private final IListButtonLogic<Node> listButtonLogic2 = new IListButtonLogic<Node>()
{
@Override
public void actionPerformed(Container container, GuiButton button, ButtonStorage<Node> storage)
{
container.initButtons();
}
@Override
public int getMax()
{
if(getStorage1().getObject() != null)
{
return getStorage1().getObject().getEntries().size();
}
return 0;
}
@Override
public Node getObject(int index)
{
if(getStorage1().getObject().getEntries() != null)
{
return getStorage1().getObject().getEntries().get(index);
}
return null;
}
@Override
public String getDisplayString(ButtonStorage<Node> storage)
{
if(storage.getObject() != null)
{
return logic.translate2(getStorage1().getObject().getKey(), storage.getObject().getKey());
}
return null;
}
@Override
public String getTooltipString(ButtonStorage<Node> storage)
{
if(getStorage1().getObject().getEntries() != null)
{
return storage.getObject().getKey() + " (" + (storage.getIndex() + 1) + "/" + getStorage1().getObject().getEntries().size() + ")";
}
return null;
}
@Override
public String getId()
{
return logic.getId() + 2;
}
};
@Nullable @Nullable
private ButtonStorage<Node> getStorage1() private ButtonValues<Node> getValues()
{ {
if(this.button1 != null) if(this.button != null)
{ {
return this.master.<Node>getStorage(this.button1.getLogic().getId()); return this.content.<Node>getPersistence(this.button.getLogic().getId());
}
return null;
}
@Nullable
private ButtonStorage<Node> getStorage2()
{
if(this.button2 != null)
{
return this.master.<Node>getStorage(this.button2.getLogic().getId());
} }
return null; return null;
@@ -191,17 +131,42 @@ public class ElementClickList extends Element
@Override @Override
public boolean actionPerformed(Container container, GuiButton button) public boolean actionPerformed(Container container, GuiButton button)
{ {
if(button.id == this.buttonId1) if(button.id == this.getButtonId())
{ {
this.button1.actionPerformed(container, button); this.button.actionPerformed(container, button);
return true; return true;
} }
else if(button.id == this.buttonId2) else if(this.child != null)
{ {
this.button2.actionPerformed(container, button); return this.child.actionPerformed(container, button);
return true;
} }
return false; return false;
} }
@Override
public void draw()
{
}
private int getButtonId()
{
return this.buttonIds[this.depth - 1];
}
private String[] getKeys()
{
return this.getKeys(new String[this.depth]);
}
private String[] getKeys(String[] keys)
{
if(keys != null && this.depth <= keys.length)
{
keys[this.depth - 1] = this.getValues().getObject().getKey();
}
return this.parent != null ? this.parent.getKeys(keys) : keys;
}
} }

View File

@@ -7,7 +7,7 @@ import exopandora.worldhandler.gui.button.GuiButtonList;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip;
import exopandora.worldhandler.gui.button.logic.ColorListButtonLogic; import exopandora.worldhandler.gui.button.logic.ColorListButtonLogic;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.element.Element; import exopandora.worldhandler.gui.content.element.Element;
@@ -59,9 +59,9 @@ public class ElementColorMenu extends Element
container.add(this.colorList = new GuiButtonList(this.ids[0], this.x + 118, this.y + 24, 114, 20, this.content, new ColorListButtonLogic() container.add(this.colorList = new GuiButtonList(this.ids[0], this.x + 118, this.y + 24, 114, 20, this.content, new ColorListButtonLogic()
{ {
@Override @Override
public void actionPerformed(Container container, GuiButton button, ButtonStorage<Integer> storage) public void actionPerformed(Container container, GuiButton button, ButtonValues<Integer> values)
{ {
string.setColor(storage.getIndex()); string.setColor(values.getIndex());
} }
@Override @Override

View File

@@ -5,13 +5,14 @@ import java.util.List;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.format.TextFormatting; import exopandora.worldhandler.format.TextFormatting;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.element.Element; import exopandora.worldhandler.gui.content.element.Element;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -24,9 +25,9 @@ public class ElementPageList<T, K> extends Element
private final int width; private final int width;
private final int height; private final int height;
private final int[] ids; private final int[] ids;
private final ButtonStorage<Integer> storage; private final ButtonValues<Integer> values;
public ElementPageList(int x, int y, List<T> list, K initial, int width, int height, int length, Content container, int[] ids, ILogicPageList<T, K> logic) public ElementPageList(int x, int y, List<T> list, K initial, int width, int height, int length, Content content, int[] ids, ILogicPageList<T, K> logic)
{ {
super(x, y); super(x, y);
this.list = list; this.list = list;
@@ -34,15 +35,15 @@ public class ElementPageList<T, K> extends Element
this.width = width; this.width = width;
this.height = height; this.height = height;
this.logic = logic; this.logic = logic;
this.storage = container.getStorage(logic.getId()); this.values = content.getPersistence(logic.getId());
this.ids = ids; this.ids = ids;
this.list.sort((a, b) -> this.logic.translate(a).compareTo(this.logic.translate(b))); this.list.sort((a, b) -> this.logic.translate(a).compareTo(this.logic.translate(b)));
if(this.storage.getObject() == null) if(this.values.getObject() == null)
{ {
this.storage.setObject(0); this.values.setObject(0);
this.storage.setIndex(Math.max(0, this.list.indexOf(this.logic.convert(initial)))); this.values.setIndex(Math.max(0, this.list.indexOf(this.logic.convert(initial))));
if(initial == null) if(initial == null)
{ {
@@ -69,8 +70,8 @@ public class ElementPageList<T, K> extends Element
GuiButtonWorldHandler left = new GuiButtonWorldHandler(this.ids[0], this.x, this.y + (this.height + 4) * this.length, buttonWidth + 1, this.height, "<"); GuiButtonWorldHandler left = new GuiButtonWorldHandler(this.ids[0], this.x, this.y + (this.height + 4) * this.length, buttonWidth + 1, this.height, "<");
GuiButtonWorldHandler right = new GuiButtonWorldHandler(this.ids[1], this.x + 5 + buttonWidth, this.y + (this.height + 4) * this.length, buttonWidth, this.height, ">"); GuiButtonWorldHandler right = new GuiButtonWorldHandler(this.ids[1], this.x + 5 + buttonWidth, this.y + (this.height + 4) * this.length, buttonWidth, this.height, ">");
left.enabled = this.storage.getObject() > 0; left.enabled = this.values.getObject() > 0;
right.enabled = this.storage.getObject() < this.getTotalPages() - 1; right.enabled = this.values.getObject() < this.getTotalPages() - 1;
container.add(left); container.add(left);
container.add(right); container.add(right);
@@ -80,12 +81,12 @@ public class ElementPageList<T, K> extends Element
for(int x = 0; x < length; x++) for(int x = 0; x < length; x++)
{ {
int index = this.storage.getObject() * length + x; int index = this.values.getObject() * length + x;
if(index < this.list.size()) if(index < this.list.size())
{ {
T entry = this.list.get(index); T entry = this.list.get(index);
this.logic.onRegister(this.ids[2], this.x, this.y + (this.height + 4) * x, this.width, this.height, TextFormatting.shortenString(this.logic.translate(entry), this.width, Minecraft.getMinecraft().fontRenderer), this.logic.getRegistryName(entry), this.storage.getIndex() != index, entry, container); this.logic.onRegister(this.ids[2], this.x, this.y + (this.height + 4) * x, this.width, this.height, TextFormatting.shortenString(this.logic.translate(entry), this.width, Minecraft.getMinecraft().fontRenderer), this.logic.getRegistryName(entry), this.values.getIndex() != index, entry, container);
} }
else else
{ {
@@ -101,13 +102,33 @@ public class ElementPageList<T, K> extends Element
{ {
if(button.id == this.ids[0]) if(button.id == this.ids[0])
{ {
this.storage.setObject(this.storage.getObject() - 1); int value = this.values.getObject();
if(GuiScreen.isShiftKeyDown())
{
this.values.setObject(value - Math.min(10, value));
}
else
{
this.values.setObject(value - 1);
}
container.initGui(); container.initGui();
return true; return true;
} }
else if(button.id == this.ids[1]) else if(button.id == this.ids[1])
{ {
this.storage.setObject(this.storage.getObject() + 1); int value = this.values.getObject();
if(GuiScreen.isShiftKeyDown())
{
this.values.setObject(value + Math.min(10, this.getTotalPages() - 1 - value));
}
else
{
this.values.setObject(value + 1);
}
container.initGui(); container.initGui();
return true; return true;
} }
@@ -119,7 +140,7 @@ public class ElementPageList<T, K> extends Element
if(TextFormatting.shortenString(this.logic.translate(entry), this.width, Minecraft.getMinecraft().fontRenderer).equals(button.displayString)) if(TextFormatting.shortenString(this.logic.translate(entry), this.width, Minecraft.getMinecraft().fontRenderer).equals(button.displayString))
{ {
this.storage.setIndex(x); this.values.setIndex(x);
this.logic.onClick(entry); this.logic.onClick(entry);
container.initGui(); container.initGui();
return true; return true;
@@ -133,7 +154,7 @@ public class ElementPageList<T, K> extends Element
@Override @Override
public void draw() public void draw()
{ {
Minecraft.getMinecraft().fontRenderer.drawString((this.storage.getObject() + 1) + "/" + this.getTotalPages(), this.x, this.y - 11, ConfigSkin.getHeadlineColor()); Minecraft.getMinecraft().fontRenderer.drawString((this.values.getObject() + 1) + "/" + this.getTotalPages(), this.x, this.y - 11, ConfigSkin.getHeadlineColor());
} }
private int getTotalPages() private int getTotalPages()

View File

@@ -0,0 +1,10 @@
package exopandora.worldhandler.gui.content.element.logic;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface ILogic
{
String getId();
}

View File

@@ -4,21 +4,13 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public interface ILogicClickList public interface ILogicClickList extends ILogic
{ {
void consumeKey1(String key); String translate(String... keys);
void consumeKey(String... keys);
default void consumeKey2(String key1, String key2) default void consumeKeyImpl(String... keys)
{ {
this.consumeKey1(key1 + "." + key2); this.consumeKey(keys[0] + "." + keys[1]);
} }
String translate1(String key);
default String translate2(String key1, String key2)
{
return this.translate1(key2);
}
String getId();
} }

View File

@@ -3,7 +3,11 @@ package exopandora.worldhandler.gui.content.element.logic;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
public interface ILogicColorMenu import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface ILogicColorMenu extends ILogic
{ {
default Predicate<String> getValidator() default Predicate<String> getValidator()
{ {
@@ -20,6 +24,7 @@ public interface ILogicColorMenu
return true; return true;
} }
@Override
default String getId() default String getId()
{ {
return "color"; return "color";

View File

@@ -5,7 +5,7 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public interface ILogicPageList<T, K> public interface ILogicPageList<T, K> extends ILogic
{ {
String translate(T key); String translate(T key);
String getRegistryName(T key); String getRegistryName(T key);
@@ -14,6 +14,4 @@ public interface ILogicPageList<T, K>
void onRegister(int id, int x, int y, int width, int height, String display, String registryKey, boolean enabled, T value, Container container); void onRegister(int id, int x, int y, int width, int height, String display, String registryKey, boolean enabled, T value, Container container);
T convert(K object); T convert(K object);
String getId();
} }

View File

@@ -3,10 +3,11 @@ package exopandora.worldhandler.gui.content.impl;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import com.google.common.collect.Lists;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderAdvancement; import exopandora.worldhandler.builder.impl.BuilderAdvancement;
import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumActionType; import exopandora.worldhandler.builder.impl.BuilderAdvancement.EnumActionType;
@@ -16,7 +17,7 @@ import exopandora.worldhandler.gui.button.EnumTooltip;
import exopandora.worldhandler.gui.button.GuiButtonList; import exopandora.worldhandler.gui.button.GuiButtonList;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
import exopandora.worldhandler.gui.button.logic.IListButtonLogic; import exopandora.worldhandler.gui.button.logic.IListButtonLogic;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Categories;
import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
@@ -26,7 +27,6 @@ import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.helper.AdvancementHelper; import exopandora.worldhandler.helper.AdvancementHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.advancements.Advancement; import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementManager; import net.minecraft.advancements.AdvancementManager;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
@@ -43,7 +43,7 @@ public class ContentAdvancements extends Content
private GuiButtonList modeButton; private GuiButtonList modeButton;
private final List<Advancement> advancements = StreamSupport.stream(new AdvancementManager(null).getAdvancements().spliterator(), true).filter(advancement -> advancement.getDisplay() != null).collect(Collectors.toList()); private final List<Advancement> advancements = Lists.newArrayList(new AdvancementManager(null).getAdvancements()).parallelStream().filter(advancement -> advancement.getDisplay() != null).collect(Collectors.toList());
@Override @Override
public ICommandBuilder getCommandBuilder() public ICommandBuilder getCommandBuilder()
@@ -109,9 +109,9 @@ public class ContentAdvancements extends Content
private final EnumMode[] values = Arrays.stream(EnumMode.values()).filter(mode -> !mode.equals(EnumMode.EVERYTHING)).toArray(EnumMode[]::new); private final EnumMode[] values = Arrays.stream(EnumMode.values()).filter(mode -> !mode.equals(EnumMode.EVERYTHING)).toArray(EnumMode[]::new);
@Override @Override
public void actionPerformed(Container container, GuiButton button, ButtonStorage<EnumMode> storage) public void actionPerformed(Container container, GuiButton button, ButtonValues<EnumMode> values)
{ {
builderAdvancement.setMode(storage.getObject()); builderAdvancement.setMode(values.getObject());
} }
@Override @Override
@@ -127,9 +127,9 @@ public class ContentAdvancements extends Content
} }
@Override @Override
public String getDisplayString(ButtonStorage<EnumMode> storage) public String getDisplayString(ButtonValues<EnumMode> values)
{ {
return I18n.format("gui.worldhandler.advancements." + storage.getObject().toString()); return I18n.format("gui.worldhandler.advancements." + values.getObject().toString());
} }
@Override @Override

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl; package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderButcher; import exopandora.worldhandler.builder.impl.BuilderButcher;
import exopandora.worldhandler.config.ConfigButcher; import exopandora.worldhandler.config.ConfigButcher;
@@ -9,7 +10,6 @@ import exopandora.worldhandler.gui.config.GuiConfigWorldHandler;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.helper.EntityHelper; import exopandora.worldhandler.helper.EntityHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;

View File

@@ -5,9 +5,14 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiMultiplayer; import net.minecraft.client.gui.GuiMultiplayer;
import net.minecraft.client.gui.GuiScreen;
import net.minecraft.client.gui.GuiWorldSelection; import net.minecraft.client.gui.GuiWorldSelection;
import net.minecraft.client.multiplayer.ServerData;
import net.minecraft.client.multiplayer.WorldClient;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -33,7 +38,43 @@ public class ContentChangeWorld extends ContentChild
Minecraft.getMinecraft().displayGuiScreen(new GuiWorldSelection(container)); Minecraft.getMinecraft().displayGuiScreen(new GuiWorldSelection(container));
break; break;
case 3: case 3:
Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(container)); ServerData server = Minecraft.getMinecraft().getCurrentServerData();
if(server != null)
{
Minecraft.getMinecraft().world.sendQuittingDisconnectingPacket();
Minecraft.getMinecraft().loadWorld((WorldClient)null);
Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(new GuiScreen()
{
@Override
public void initGui()
{
FMLClientHandler.instance().connectToServer(new GuiMultiplayer(new GuiMainMenu()), server);
Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null);
Minecraft.getMinecraft().setIngameFocus();
}
}));
}
else
{
String worldName = Minecraft.getMinecraft().getIntegratedServer().getWorldName();
String folderName = Minecraft.getMinecraft().getIntegratedServer().getFolderName();
Minecraft.getMinecraft().world.sendQuittingDisconnectingPacket();
Minecraft.getMinecraft().loadWorld((WorldClient)null);
Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(new GuiScreen()
{
@Override
public void initGui()
{
Minecraft.getMinecraft().launchIntegratedServer(folderName, worldName, null);
Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null);
Minecraft.getMinecraft().setIngameFocus();
}
}));
}
break; break;
default: default:
break; break;

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl; package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderGive; import exopandora.worldhandler.builder.impl.BuilderGive;
import exopandora.worldhandler.builder.impl.BuilderSetblock; import exopandora.worldhandler.builder.impl.BuilderSetblock;
import exopandora.worldhandler.builder.types.Coordinate; import exopandora.worldhandler.builder.types.Coordinate;
@@ -12,7 +13,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen; import net.minecraft.client.gui.GuiScreen;

View File

@@ -4,6 +4,7 @@ import org.lwjgl.input.Keyboard;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.ICommandBuilderSyntax; import exopandora.worldhandler.builder.ICommandBuilderSyntax;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
@@ -11,7 +12,6 @@ import exopandora.worldhandler.gui.button.GuiTextFieldTooltip;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;

View File

@@ -7,6 +7,7 @@ import java.util.stream.Stream;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderCustomItem; import exopandora.worldhandler.builder.impl.BuilderCustomItem;
import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes;
@@ -27,7 +28,6 @@ import exopandora.worldhandler.gui.content.element.impl.ElementColorMenu;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.helper.ResourceHelper; import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;

View File

@@ -3,6 +3,7 @@ package exopandora.worldhandler.gui.content.impl;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderClone; import exopandora.worldhandler.builder.impl.BuilderClone;
import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask; import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask;
@@ -13,7 +14,7 @@ import exopandora.worldhandler.gui.button.GuiButtonList;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler; import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
import exopandora.worldhandler.gui.button.GuiTextFieldTooltip; import exopandora.worldhandler.gui.button.GuiTextFieldTooltip;
import exopandora.worldhandler.gui.button.logic.IListButtonLogic; import exopandora.worldhandler.gui.button.logic.IListButtonLogic;
import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.category.Categories; import exopandora.worldhandler.gui.category.Categories;
import exopandora.worldhandler.gui.category.Category; import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
@@ -21,7 +22,6 @@ import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.helper.ResourceHelper; import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
@@ -178,9 +178,9 @@ public class ContentEditBlocks extends Content
container.add(this.cloneButton = new GuiButtonList(9, x + 118, y, 114, 20, EnumTooltip.TOP_RIGHT, this, new IListButtonLogic<EnumMask>() container.add(this.cloneButton = new GuiButtonList(9, x + 118, y, 114, 20, EnumTooltip.TOP_RIGHT, this, new IListButtonLogic<EnumMask>()
{ {
@Override @Override
public void actionPerformed(Container container, GuiButton button, ButtonStorage<EnumMask> storage) public void actionPerformed(Container container, GuiButton button, ButtonValues<EnumMask> values)
{ {
builderClone.setMask(storage.getObject()); builderClone.setMask(values.getObject());
} }
@Override @Override
@@ -196,9 +196,9 @@ public class ContentEditBlocks extends Content
} }
@Override @Override
public String getDisplayString(ButtonStorage<EnumMask> storage) public String getDisplayString(ButtonValues<EnumMask> values)
{ {
return I18n.format("gui.worldhandler.edit_blocks.clone.mode." + storage.getObject().toString()); return I18n.format("gui.worldhandler.edit_blocks.clone.mode." + values.getObject().toString());
} }
@Override @Override

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import java.util.ArrayList; import java.util.ArrayList;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderEnchantment; import exopandora.worldhandler.builder.impl.BuilderEnchantment;
import exopandora.worldhandler.builder.types.Type; import exopandora.worldhandler.builder.types.Type;
@@ -16,7 +17,6 @@ import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.enchantment.Enchantment; import net.minecraft.enchantment.Enchantment;

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl; package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderExperience; import exopandora.worldhandler.builder.impl.BuilderExperience;
import exopandora.worldhandler.config.ConfigSliders; import exopandora.worldhandler.config.ConfigSliders;
@@ -12,7 +13,6 @@ import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.container.Container; import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;

View File

@@ -4,6 +4,7 @@ import java.util.Arrays;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderGamerule; import exopandora.worldhandler.builder.impl.BuilderGamerule;
import exopandora.worldhandler.gui.button.EnumTooltip; import exopandora.worldhandler.gui.button.EnumTooltip;
@@ -16,7 +17,6 @@ import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
@@ -53,6 +53,13 @@ public class ContentGamerules extends Content
@Override @Override
public String translate(String key) public String translate(String key)
{ {
String translated = I18n.format(key);
if(!translated.equals(key))
{
return translated;
}
return I18n.format("gui.worldhandler.gamerules.rule." + key); return I18n.format("gui.worldhandler.gamerules.rule." + key);
} }

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl; package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.config.ConfigSettings; import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.gui.button.EnumIcon; import exopandora.worldhandler.gui.button.EnumIcon;
import exopandora.worldhandler.gui.button.EnumTooltip; import exopandora.worldhandler.gui.button.EnumTooltip;
@@ -11,7 +12,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.Main;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreenResourcePacks; import net.minecraft.client.gui.GuiScreenResourcePacks;

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderGeneric; import exopandora.worldhandler.builder.impl.BuilderGeneric;
import exopandora.worldhandler.builder.impl.BuilderMultiCommand; import exopandora.worldhandler.builder.impl.BuilderMultiCommand;
@@ -19,7 +20,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import org.lwjgl.input.Keyboard; import org.lwjgl.input.Keyboard;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderNoteEditor; import exopandora.worldhandler.builder.impl.BuilderNoteEditor;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
@@ -14,7 +15,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.block.material.Material; import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState; import net.minecraft.block.state.IBlockState;

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import com.mojang.realmsclient.gui.ChatFormatting; import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderGeneric; import exopandora.worldhandler.builder.impl.BuilderGeneric;
import exopandora.worldhandler.builder.impl.BuilderMultiCommand; import exopandora.worldhandler.builder.impl.BuilderMultiCommand;
@@ -14,7 +15,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer; import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiInventory; import net.minecraft.client.gui.inventory.GuiInventory;

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import java.util.ArrayList; import java.util.ArrayList;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderMultiCommand; import exopandora.worldhandler.builder.impl.BuilderMultiCommand;
import exopandora.worldhandler.builder.impl.BuilderPotionEffect; import exopandora.worldhandler.builder.impl.BuilderPotionEffect;
@@ -15,7 +16,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild; import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraft.init.Items; import net.minecraft.init.Items;

View File

@@ -0,0 +1,158 @@
package exopandora.worldhandler.gui.content.impl;
import java.util.ArrayList;
import java.util.List;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderRecipe;
import exopandora.worldhandler.builder.impl.BuilderRecipe.EnumMode;
import exopandora.worldhandler.builder.types.Type;
import exopandora.worldhandler.gui.button.EnumTooltip;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
import exopandora.worldhandler.gui.category.Categories;
import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
import net.minecraft.item.ItemStack;
import net.minecraft.item.crafting.CraftingManager;
import net.minecraft.item.crafting.IRecipe;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ContentRecipes extends Content
{
private final BuilderRecipe builderRecipe = new BuilderRecipe();
@Override
public ICommandBuilder getCommandBuilder()
{
return this.builderRecipe;
}
@Override
public void initGui(Container container, int x, int y)
{
List<IRecipe> recipes = new ArrayList<IRecipe>();
for(IRecipe recipe : CraftingManager.REGISTRY)
{
if(!recipe.isDynamic())
{
recipes.add(recipe);
}
}
ElementPageList<IRecipe, String> list = new ElementPageList<IRecipe, String>(x, y, recipes, null, 114, 20, 3, this, new int[] {4, 5, 6}, new ILogicPageList<IRecipe, String>()
{
@Override
public String translate(IRecipe key)
{
if(!key.getRecipeOutput().equals(ItemStack.EMPTY))
{
return key.getRecipeOutput().getDisplayName();
}
return key.getRegistryName().toString();
}
@Override
public void onClick(IRecipe clicked)
{
builderRecipe.setRecipe(clicked.getRegistryName());
}
@Override
public String getRegistryName(IRecipe key)
{
return key.getRegistryName().toString();
}
@Override
public void onRegister(int id, int x, int y, int width, int height, String display, String registry, boolean enabled, IRecipe value, Container container)
{
GuiButtonWorldHandler button;
container.add(button = new GuiButtonWorldHandler(id, x, y, width, height, display, value.getRegistryName().toString(), EnumTooltip.TOP_RIGHT));
button.enabled = enabled;
}
@Override
public IRecipe convert(String object)
{
return CraftingManager.REGISTRY.getObject(Type.parseResourceLocation(object));
}
@Override
public String getId()
{
return "recipe";
}
});
container.add(list);
}
@Override
public void initButtons(Container container, int x, int y)
{
container.add(new GuiButtonWorldHandler(0, x, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.back")));
container.add(new GuiButtonWorldHandler(1, x + 118, y + 96, 114, 20, I18n.format("gui.worldhandler.generic.backToGame")));
container.add(new GuiButtonWorldHandler(2, x + 118, y + 24, 114, 20, I18n.format("gui.worldhandler.recipes.give")));
container.add(new GuiButtonWorldHandler(3, x + 118, y + 48, 114, 20, I18n.format("gui.worldhandler.recipes.take")));
}
@Override
public void actionPerformed(Container container, GuiButton button)
{
switch(button.id)
{
case 2:
WorldHandler.sendCommand(this.builderRecipe.getBuilderForMode(EnumMode.GIVE));
container.initButtons();
break;
case 3:
WorldHandler.sendCommand(this.builderRecipe.getBuilderForMode(EnumMode.TAKE));
container.initButtons();
break;
default:
break;
}
}
@Override
public Category getCategory()
{
return Categories.WORLD;
}
@Override
public String getTitle()
{
return I18n.format("gui.worldhandler.title.world.recipes");
}
@Override
public String getTabTitle()
{
return I18n.format("gui.worldhandler.tab.world.recipes");
}
@Override
public Content getActiveContent()
{
return Contents.RECIPES;
}
@Override
public void onPlayerNameChanged(String username)
{
this.builderRecipe.setPlayer(username);
}
}

View File

@@ -4,6 +4,7 @@ import java.util.Arrays;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderScoreboardObjectives; import exopandora.worldhandler.builder.impl.BuilderScoreboardObjectives;
import exopandora.worldhandler.format.EnumColor; import exopandora.worldhandler.format.EnumColor;
@@ -16,7 +17,6 @@ import exopandora.worldhandler.gui.content.element.impl.ElementClickList;
import exopandora.worldhandler.gui.content.element.logic.ILogicClickList; import exopandora.worldhandler.gui.content.element.logic.ILogicClickList;
import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard; import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard;
import exopandora.worldhandler.helper.EntityHelper; import exopandora.worldhandler.helper.EntityHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
@@ -48,47 +48,61 @@ public class ContentScoreboardObjectives extends ContentScoreboard
if(this.selectedObjective.equals("create")) if(this.selectedObjective.equals("create"))
{ {
ElementClickList objectives = new ElementClickList(x + 118, y + 24, HELPER.getObjectives(), 7, 8, this, new ILogicClickList() ElementClickList objectives = new ElementClickList(x + 118, y + 24, HELPER.getObjectives(), new int[] {7, 8}, this, new ILogicClickList()
{ {
@Override @Override
public void consumeKey1(String key) public void consumeKey(String... keys)
{ {
builderObjectives.setCriteria(key); if(keys.length > 1)
{
this.consumeKeyImpl(keys);
}
else
{
builderObjectives.setCriteria(keys[0]);
}
} }
@Override @Override
public String translate1(String key) public String translate(String... keys)
{ {
String format = "gui.worldhandler.scoreboard.objectives.criteria." + key; if(keys.length > 1)
String result = I18n.format(format);
if(result.equals(format))
{ {
ResourceLocation location = new ResourceLocation(key); return this.translate(keys[1]);
if(Item.REGISTRY.containsKey(location))
{
result = I18n.format(Item.REGISTRY.getObject(location).getUnlocalizedName() + ".name");
}
else if(Block.REGISTRY.containsKey(location))
{
result = Block.REGISTRY.getObject(location).getLocalizedName();
}
else if(EntityHelper.doesExist(key))
{
result = I18n.format("entity." + key + ".name");
}
else if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(key)))
{
result = I18n.format("gui.worldhandler.color." + key);
}
else
{
result = I18n.format(key);
}
} }
else
{
String format = "gui.worldhandler.scoreboard.objectives.criteria." + keys[0];
String result = I18n.format(format);
return result; if(result.equals(format))
{
ResourceLocation location = new ResourceLocation(keys[0]);
if(Item.REGISTRY.containsKey(location))
{
result = I18n.format(Item.REGISTRY.getObject(location).getUnlocalizedName() + ".name");
}
else if(Block.REGISTRY.containsKey(location))
{
result = Block.REGISTRY.getObject(location).getLocalizedName();
}
else if(EntityHelper.doesExist(keys[0]))
{
result = I18n.format("entity." + keys[0] + ".name");
}
else if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(keys[0])))
{
result = I18n.format("gui.worldhandler.color." + keys[0]);
}
else
{
result = I18n.format(keys[0]);
}
}
return result;
}
} }
@Override @Override
@@ -102,24 +116,32 @@ public class ContentScoreboardObjectives extends ContentScoreboard
} }
else if(this.selectedObjective.equals("display") || this.selectedObjective.equals("undisplay")) else if(this.selectedObjective.equals("display") || this.selectedObjective.equals("undisplay"))
{ {
ElementClickList slots = new ElementClickList(x + 118, y + 24 + (this.selectedObjective.equals("undisplay") ? -12 : 0), HELPER.getSlots(), 9, 10, this, new ILogicClickList() ElementClickList slots = new ElementClickList(x + 118, y + 24 + (this.selectedObjective.equals("undisplay") ? -12 : 0), HELPER.getSlots(), new int[] {9, 10}, this, new ILogicClickList()
{ {
@Override @Override
public String translate1(String key) public String translate(String... keys)
{ {
return I18n.format("gui.worldhandler.scoreboard.slot." + key); if(keys.length > 1)
{
return I18n.format("gui.worldhandler.color." + keys[1]);
}
else
{
return I18n.format("gui.worldhandler.scoreboard.slot." + keys[0]);
}
} }
@Override @Override
public String translate2(String key1, String key2) public void consumeKey(String... keys)
{ {
return I18n.format("gui.worldhandler.color." + key2); if(keys.length > 1)
} {
this.consumeKeyImpl(keys);
@Override }
public void consumeKey1(String key) else
{ {
builderObjectives.setSlot(key); builderObjectives.setSlot(keys[0]);
}
} }
@Override @Override

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers; import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers;
import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers.EnumPoints; import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers.EnumPoints;
@@ -16,7 +17,6 @@ import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content; import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard; import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;

View File

@@ -4,6 +4,7 @@ import java.util.Arrays;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams; import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams;
import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams.EnumMode; import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams.EnumMode;
@@ -16,7 +17,6 @@ import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementClickList; import exopandora.worldhandler.gui.content.element.impl.ElementClickList;
import exopandora.worldhandler.gui.content.element.logic.ILogicClickList; import exopandora.worldhandler.gui.content.element.logic.ILogicClickList;
import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard; import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n; import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
@@ -47,35 +47,37 @@ public class ContentScoreboardTeams extends ContentScoreboard
if(this.selectedTeam.equals("option")) if(this.selectedTeam.equals("option"))
{ {
ElementClickList options = new ElementClickList(x + 118, y + 24, HELPER.getOptions(), 6, 7, this, new ILogicClickList() ElementClickList options = new ElementClickList(x + 118, y + 24, HELPER.getOptions(), new int[] {6, 7}, this, new ILogicClickList()
{ {
@Override @Override
public String translate1(String key) public String translate(String... keys)
{ {
return I18n.format("gui.worldhandler.scoreboard.team.options." + key); if(keys.length > 1)
}
@Override
public String translate2(String key1, String key2)
{
if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(key2)))
{ {
return I18n.format("gui.worldhandler.color." + key2); if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(keys[1])))
{
return I18n.format("gui.worldhandler.color." + keys[1]);
}
return I18n.format("gui.worldhandler.scoreboard.team.suboption." + keys[1]);
}
else
{
return I18n.format("gui.worldhandler.scoreboard.team.options." + keys[0]);
} }
return I18n.format("gui.worldhandler.scoreboard.team.suboption." + key2);
} }
@Override @Override
public void consumeKey1(String key) public void consumeKey(String... keys)
{ {
builderTeams.setRule(key); if(keys.length > 1)
} {
builderTeams.setValue(keys[1]);
@Override }
public void consumeKey2(String key1, String key2) else
{ {
builderTeams.setValue(key2); builderTeams.setRule(keys[0]);
}
} }
@Override @Override

View File

@@ -5,6 +5,8 @@ import org.lwjgl.input.Keyboard;
import com.google.common.base.Predicate; import com.google.common.base.Predicate;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderSignEditor; import exopandora.worldhandler.builder.impl.BuilderSignEditor;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
@@ -18,7 +20,6 @@ import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementColorMenu; import exopandora.worldhandler.gui.content.element.impl.ElementColorMenu;
import exopandora.worldhandler.gui.content.element.logic.ILogicColorMenu; import exopandora.worldhandler.gui.content.element.logic.ILogicColorMenu;
import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer; import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;
@@ -35,7 +36,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class ContentSignEditor extends Content public class ContentSignEditor extends Content
{ {
private static final ResourceLocation LOGO = new ResourceLocation("worldhandler:textures/logo.png"); private static final ResourceLocation LOGO = new ResourceLocation(Main.MODID, "textures/logo.png");
private int selectedLine = 0; private int selectedLine = 0;
private boolean editColor; private boolean editColor;

View File

@@ -9,6 +9,7 @@ import org.lwjgl.opengl.GL11;
import com.google.common.base.Predicates; import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder; import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderSummon; import exopandora.worldhandler.builder.impl.BuilderSummon;
import exopandora.worldhandler.builder.impl.abstr.EnumAttributes; import exopandora.worldhandler.builder.impl.abstr.EnumAttributes;
@@ -27,7 +28,6 @@ import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents; import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.gui.content.element.impl.ElementPageList; import exopandora.worldhandler.gui.content.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList; import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilPlayer; import exopandora.worldhandler.util.UtilPlayer;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton; import net.minecraft.client.gui.GuiButton;

View File

@@ -4,12 +4,14 @@ import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.function.Consumer; import java.util.function.Consumer;
import javax.annotation.Nonnull;
import org.apache.commons.lang3.ArrayUtils; import org.apache.commons.lang3.ArrayUtils;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderSetblock; import exopandora.worldhandler.builder.impl.BuilderSetblock;
import exopandora.worldhandler.builder.types.Coordinate; import exopandora.worldhandler.builder.types.Coordinate;
import exopandora.worldhandler.config.ConfigSettings; import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilPlayer; import exopandora.worldhandler.util.UtilPlayer;
import io.netty.buffer.Unpooled; import io.netty.buffer.Unpooled;
import net.minecraft.block.Block; import net.minecraft.block.Block;
@@ -77,6 +79,7 @@ public class BlockHelper
return new BlockPos(pos.getX(), pos.getY(), z); return new BlockPos(pos.getX(), pos.getY(), z);
} }
@Nonnull
public static BlockPos getPos1() public static BlockPos getPos1()
{ {
return POS_1; return POS_1;
@@ -95,6 +98,7 @@ public class BlockHelper
} }
} }
@Nonnull
public static BlockPos getPos2() public static BlockPos getPos2()
{ {
return POS_2; return POS_2;

View File

@@ -1,11 +1,14 @@
package exopandora.worldhandler.helper; package exopandora.worldhandler.helper;
import javax.annotation.Nullable;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class EnumHelper public class EnumHelper
{ {
@Nullable
public static <T extends Enum<T>> T valueOf(Class<T> klass, String name) public static <T extends Enum<T>> T valueOf(Class<T> klass, String name)
{ {
try try

View File

@@ -4,8 +4,8 @@ import java.util.function.Predicate;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.config.ConfigSkin; import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.main.Main;
import net.minecraft.block.Block; import net.minecraft.block.Block;
import net.minecraft.entity.EntityList; import net.minecraft.entity.EntityList;
import net.minecraft.item.Item; import net.minecraft.item.Item;

View File

@@ -11,77 +11,85 @@ import net.minecraft.util.math.BlockPos;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraft.world.biome.Biome; import net.minecraft.world.biome.Biome;
import net.minecraft.world.chunk.Chunk; import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class BiomeIndicator public class BiomeIndicator
{ {
private static final Set<String> BIOMES; private final Set<String> biomes = new HashSet<String>();
private static String CURRENT_BIOME; private String currentBiome;
private static int TICKS; private int ticksRemaining;
static public BiomeIndicator()
{ {
Set<String> pool = new HashSet<String>(); this.init();
}
private void init()
{
Set<String> biomes = new HashSet<String>();
for(ResourceLocation location : Biome.REGISTRY.getKeys()) for(ResourceLocation location : Biome.REGISTRY.getKeys())
{ {
pool.add(filterName(Biome.REGISTRY.getObject(location).getBiomeName())); biomes.add(this.filterName(Biome.REGISTRY.getObject(location).getBiomeName()));
} }
BIOMES = new HashSet<String>(pool); this.biomes.addAll(biomes);
for(String biome : pool) for(String biome : biomes)
{ {
for(String index : pool) for(String index : biomes)
{ {
if(index.matches(biome + "([A-Za-z ])+") || index.matches("([A-Za-z ])+ " + biome)) if(index.matches(biome + "([A-Za-z ])+") || index.matches("([A-Za-z ])+ " + biome))
{ {
BIOMES.remove(index); this.biomes.remove(index);
} }
} }
} }
BIOMES.remove("River"); this.biomes.remove("River");
BIOMES.remove("Beach"); this.biomes.remove("Beach");
} }
public static void tick() public void tick()
{ {
int posX = MathHelper.floor(Minecraft.getMinecraft().player.posX); int posX = MathHelper.floor(Minecraft.getMinecraft().player.posX);
int posY = MathHelper.floor(Minecraft.getMinecraft().player.posY); int posY = MathHelper.floor(Minecraft.getMinecraft().player.posY);
int posZ = MathHelper.floor(Minecraft.getMinecraft().player.posZ); int posZ = MathHelper.floor(Minecraft.getMinecraft().player.posZ);
BlockPos pos = new BlockPos(posX, posY, posZ); BlockPos pos = new BlockPos(posX, posY, posZ);
if(Minecraft.getMinecraft().world != null && Minecraft.getMinecraft().world.isBlockLoaded(pos)) if(Minecraft.getMinecraft().world != null && Minecraft.getMinecraft().world.isBlockLoaded(pos))
{ {
Chunk chunk = Minecraft.getMinecraft().world.getChunkFromBlockCoords(pos); Chunk chunk = Minecraft.getMinecraft().world.getChunkFromBlockCoords(pos);
String biome = getBaseBiome(filterName(chunk.getBiome(pos, Minecraft.getMinecraft().world.getBiomeProvider()).getBiomeName())); String biome = this.getBaseBiome(this.filterName(chunk.getBiome(pos, Minecraft.getMinecraft().world.getBiomeProvider()).getBiomeName()));
if(TICKS == 0 && biome != null) if(this.ticksRemaining == 0 && biome != null)
{ {
if(CURRENT_BIOME == null || !CURRENT_BIOME.equals(biome)) if(this.currentBiome == null || !this.currentBiome.equals(biome))
{ {
Minecraft.getMinecraft().ingameGUI.displayTitle(biome, null, 20, 60, 20); Minecraft.getMinecraft().ingameGUI.displayTitle(biome, null, 20, 60, 20);
TICKS = 100; this.ticksRemaining = 100;
CURRENT_BIOME = biome; this.currentBiome = biome;
} }
} }
else if(TICKS > 0) else if(this.ticksRemaining > 0)
{ {
TICKS--; this.ticksRemaining--;
} }
} }
} }
private static String filterName(String biome) private String filterName(String biome)
{ {
return biome.replaceAll("([a-z])([A-Z])", "$1 $2").replaceAll("[^A-Za-z ]", "").replaceAll("( [A-Z])$", ""); return biome.replaceAll("([a-z])([A-Z])", "$1 $2").replaceAll("[^A-Za-z ]", "").replaceAll("( [A-Z])$", "");
} }
@Nullable @Nullable
private static String getBaseBiome(String input) private String getBaseBiome(String input)
{ {
for(String biome : BIOMES) for(String biome : this.biomes)
{ {
if(input.matches("([A-Za-z ])*" + biome + "([A-Za-z ])*")) if(input.matches("([A-Za-z ])*" + biome + "([A-Za-z ])*"))
{ {

View File

@@ -7,7 +7,7 @@ import java.io.File;
import javax.swing.JFileChooser; import javax.swing.JFileChooser;
import javax.swing.JTextField; import javax.swing.JTextField;
import exopandora.worldhandler.main.Main; import exopandora.worldhandler.Main;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;

View File

@@ -5,7 +5,6 @@ import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import java.awt.event.ActionListener;
import java.net.URI; import java.net.URI;
import exopandora.worldhandler.main.Main;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -19,7 +18,7 @@ public class ForumListener implements ActionListener
{ {
try try
{ {
Desktop.getDesktop().browse(new URI(Main.URL)); Desktop.getDesktop().browse(new URI("$url"));
} }
catch(Exception e) catch(Exception e)
{ {
@@ -28,4 +27,3 @@ public class ForumListener implements ActionListener
} }
} }
} }

View File

@@ -11,7 +11,7 @@ import javax.swing.JFrame;
import javax.swing.JOptionPane; import javax.swing.JOptionPane;
import javax.swing.JTextField; import javax.swing.JTextField;
import exopandora.worldhandler.main.Main; import exopandora.worldhandler.Main;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@@ -37,7 +37,7 @@ public class InstallListener implements ActionListener
File mods = new File(directory, "mods"); File mods = new File(directory, "mods");
File versions = new File(directory, "versions"); File versions = new File(directory, "versions");
if(!this.isPartialFileNameInFolder(versions, Main.MC_VERSION, "Forge")) if(!this.isPartialFileNameInFolder(versions, "$mcversion", "Forge"))
{ {
JOptionPane.showMessageDialog(null, "Please install Mineceaft Forge", null, JOptionPane.ERROR_MESSAGE); JOptionPane.showMessageDialog(null, "Please install Mineceaft Forge", null, JOptionPane.ERROR_MESSAGE);
} }
@@ -54,8 +54,8 @@ public class InstallListener implements ActionListener
try try
{ {
Path path = new File(InstallListener.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).toPath(); Path path = new File(InstallListener.class.getProtectionDomain().getCodeSource().getLocation().toURI().getPath()).toPath();
Files.copy(path, new File(mods, "WorldHandler-" + Main.FULL_VERSION + "-Universal.jar").toPath(), StandardCopyOption.REPLACE_EXISTING); Files.copy(path, new File(mods, "WorldHandler-$mcversion-$version-Universal.jar").toPath(), StandardCopyOption.REPLACE_EXISTING);
JOptionPane.showMessageDialog(null, Main.NAME_AND_VERSION + " has been successfully installed", null, JOptionPane.INFORMATION_MESSAGE); JOptionPane.showMessageDialog(null, Main.NAME + " $mcversion-$version has been successfully installed", null, JOptionPane.INFORMATION_MESSAGE);
} }
catch(Exception e) catch(Exception e)
{ {

View File

@@ -17,21 +17,22 @@ import javax.swing.JLabel;
import javax.swing.JPanel; import javax.swing.JPanel;
import javax.swing.JTextField; import javax.swing.JTextField;
import exopandora.worldhandler.main.Main; import exopandora.worldhandler.Main;
import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly; import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT) @SideOnly(Side.CLIENT)
public class Window implements Runnable public class Window implements Runnable
{ {
private final String title = Main.NAME_AND_VERSION + " Installer";
private final JFrame frame = new JFrame(); private final JFrame frame = new JFrame();
@Override @Override
public void run() public void run()
{ {
String titleString = Main.NAME + " $mcversion-$version Installer";
this.frame.setResizable(false); this.frame.setResizable(false);
this.frame.setTitle(this.title); this.frame.setTitle(titleString);
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
List<Image> icons = new ArrayList<Image>(); List<Image> icons = new ArrayList<Image>();
@@ -63,7 +64,7 @@ public class Window implements Runnable
gbcPanel.gridy = 0; gbcPanel.gridy = 0;
this.frame.add(panel, gbcPanel); this.frame.add(panel, gbcPanel);
JLabel title = new JLabel(this.title); JLabel title = new JLabel(titleString);
panel.add(title, this.getButtonConstraints(0, 0)); panel.add(title, this.getButtonConstraints(0, 0));
JTextField textField = new JTextField(Main.getInitialDirectory().getAbsolutePath()); JTextField textField = new JTextField(Main.getInitialDirectory().getAbsolutePath());

View File

@@ -0,0 +1,39 @@
package exopandora.worldhandler.util;
import org.apache.commons.lang3.ArrayUtils;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.config.ConfigSettings;
import net.minecraft.client.Minecraft;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class UtilKeyBinding
{
public static void updatePosKeys()
{
boolean isRegistered = arePosKeysRegistered();
if(ConfigSettings.arePosShortcutsEnabled() && !isRegistered)
{
ClientRegistry.registerKeyBinding(WorldHandler.KEY_WORLD_HANDLER_POS1);
ClientRegistry.registerKeyBinding(WorldHandler.KEY_WORLD_HANDLER_POS2);
}
else if(!ConfigSettings.arePosShortcutsEnabled() && isRegistered)
{
removePosKeys();
}
}
public static boolean arePosKeysRegistered()
{
return ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS1) || ArrayUtils.contains(Minecraft.getMinecraft().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS2);
}
public static void removePosKeys()
{
Minecraft.getMinecraft().gameSettings.keyBindings = ArrayUtils.removeElements(Minecraft.getMinecraft().gameSettings.keyBindings, WorldHandler.KEY_WORLD_HANDLER_POS1, WorldHandler.KEY_WORLD_HANDLER_POS2);
}
}

View File

@@ -2,7 +2,10 @@ package exopandora.worldhandler.util;
import net.minecraft.client.Minecraft; import net.minecraft.client.Minecraft;
import net.minecraft.util.math.MathHelper; import net.minecraft.util.math.MathHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class UtilPlayer public class UtilPlayer
{ {
public static boolean canIssueCommand() public static boolean canIssueCommand()

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 KiB

After

Width:  |  Height:  |  Size: 1.8 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 349 B

After

Width:  |  Height:  |  Size: 339 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.5 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 777 B

After

Width:  |  Height:  |  Size: 736 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 952 B

After

Width:  |  Height:  |  Size: 914 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -15,22 +15,24 @@ gui.worldhandler.config.key.settings.smooth_watch=Geschmeidige Uhr
gui.worldhandler.config.key.settings.pause_game=Spiel Pausieren gui.worldhandler.config.key.settings.pause_game=Spiel Pausieren
gui.worldhandler.config.key.settings.custom_times=Benutzerdefinierte Zeiten gui.worldhandler.config.key.settings.custom_times=Benutzerdefinierte Zeiten
gui.worldhandler.config.key.settings.permission_query=Berechtigungsabfrage gui.worldhandler.config.key.settings.permission_query=Berechtigungsabfrage
gui.worldhandler.config.key.settings.highlight_blocks=Blöcke Hervorheben
gui.worldhandler.config.key.settings.custom_time_dawn=Sonnenaufgangszeit gui.worldhandler.config.key.settings.custom_time_dawn=Sonnenaufgangszeit
gui.worldhandler.config.key.settings.custom_time_noon=Mittagszeit gui.worldhandler.config.key.settings.custom_time_noon=Mittagszeit
gui.worldhandler.config.key.settings.custom_time_sunset=Sonnenuntergangszeit gui.worldhandler.config.key.settings.custom_time_sunset=Sonnenuntergangszeit
gui.worldhandler.config.key.settings.custom_time_midnight=Mitternachtszeit gui.worldhandler.config.key.settings.custom_time_midnight=Mitternachtszeit
gui.worldhandler.config.key.settings.block_placing_mode=Platziermodus für Blöcke gui.worldhandler.config.key.settings.block_placing_mode=Platziermodus für Blöcke
gui.worldhandler.config.comment.settings.custom_time_dawn=Biome Indikator Aktiviert gui.worldhandler.config.comment.settings.custom_time_dawn=Aktiviert Biome Indikator
gui.worldhandler.config.comment.settings.command_syntax=Befehlssyntax Aktiviert gui.worldhandler.config.comment.settings.command_syntax=Aktiviert Befehlssyntax
gui.worldhandler.config.comment.settings.shortcuts=Schnellsteuerleiste Aktiviert gui.worldhandler.config.comment.settings.shortcuts=Aktiviert Schnellsteuerleiste
gui.worldhandler.config.comment.settings.key_shortcuts=Tasten Abkürzungen Aktiviert gui.worldhandler.config.comment.settings.key_shortcuts=Aktiviert Tasten Abkürzungen
gui.worldhandler.config.comment.settings.tooltips=Tooltips Aktiviert gui.worldhandler.config.comment.settings.tooltips=Aktiviert Tooltips
gui.worldhandler.config.comment.settings.watch=Uhr Aktiviert gui.worldhandler.config.comment.settings.watch=Aktiviert Uhr
gui.worldhandler.config.comment.settings.smooth_watch=Geschmeidige Uhr Aktiviert gui.worldhandler.config.comment.settings.smooth_watch=Aktiviert Geschmeidige Uhr
gui.worldhandler.config.comment.settings.pause_game=Spiel Pausieren gui.worldhandler.config.comment.settings.pause_game=Spiel Pausieren
gui.worldhandler.config.comment.settings.custom_times=Benutzerdefinierte Zeiten Aktiviert gui.worldhandler.config.comment.settings.custom_times=Aktiviert Benutzerdefinierte Zeiten
gui.worldhandler.config.comment.settings.permission_query=Berechtigungsabfrage Aktiviert gui.worldhandler.config.comment.settings.permission_query=Aktiviert Berechtigungsabfrage
gui.worldhandler.config.comment.settings.highlight_blocks=Hebt ausgewählte Blöcke hervor
gui.worldhandler.config.comment.settings.custom_time_dawn=Sonnenaufgangszeit in Ticks gui.worldhandler.config.comment.settings.custom_time_dawn=Sonnenaufgangszeit in Ticks
gui.worldhandler.config.comment.settings.custom_time_noon=Mittagszeit in Ticks gui.worldhandler.config.comment.settings.custom_time_noon=Mittagszeit in Ticks
gui.worldhandler.config.comment.settings.custom_time_sunset=Sonnenuntergangszeit in Ticks gui.worldhandler.config.comment.settings.custom_time_sunset=Sonnenuntergangszeit in Ticks
@@ -99,6 +101,7 @@ gui.worldhandler.tab.entities.summon=Beschwören
gui.worldhandler.tab.world.world=Welt gui.worldhandler.tab.world.world=Welt
gui.worldhandler.tab.world.gamerules=Spielregeln gui.worldhandler.tab.world.gamerules=Spielregeln
gui.worldhandler.tab.world.recipes=Rezepte
gui.worldhandler.tab.blocks.edit_blocks=Blöcke Ändern gui.worldhandler.tab.blocks.edit_blocks=Blöcke Ändern
gui.worldhandler.tab.blocks.sign_editor=Schilder Ändern gui.worldhandler.tab.blocks.sign_editor=Schilder Ändern
@@ -123,6 +126,7 @@ gui.worldhandler.title.scoreboard=Anzeigetafel
gui.worldhandler.title.world.world=Welt gui.worldhandler.title.world.world=Welt
gui.worldhandler.title.world.gamerules=Gamerules gui.worldhandler.title.world.gamerules=Gamerules
gui.worldhandler.title.world.recipes=Rezepte
gui.worldhandler.title.player.player=Spieler gui.worldhandler.title.player.player=Spieler
gui.worldhandler.title.player.experience=Erfahrung gui.worldhandler.title.player.experience=Erfahrung
@@ -281,6 +285,9 @@ gui.worldhandler.edit_blocks.clone.mode.filtered=Gefiltert
gui.worldhandler.edit_blocks.pos.set_pos_1=Position 1 gui.worldhandler.edit_blocks.pos.set_pos_1=Position 1
gui.worldhandler.edit_blocks.pos.set_pos_2=Position 2 gui.worldhandler.edit_blocks.pos.set_pos_2=Position 2
gui.worldhandler.recipes.give=Geben
gui.worldhandler.recipes.take=Nehmen
gui.worldhandler.scoreboard.slot.list=Liste gui.worldhandler.scoreboard.slot.list=Liste
gui.worldhandler.scoreboard.slot.belowName=Unter Name gui.worldhandler.scoreboard.slot.belowName=Unter Name
gui.worldhandler.scoreboard.slot.sidebar=Seitentafel gui.worldhandler.scoreboard.slot.sidebar=Seitentafel

View File

@@ -15,6 +15,7 @@ gui.worldhandler.config.key.settings.smooth_watch=Smooth Watch
gui.worldhandler.config.key.settings.pause_game=Pause Game gui.worldhandler.config.key.settings.pause_game=Pause Game
gui.worldhandler.config.key.settings.custom_times=Custom Times gui.worldhandler.config.key.settings.custom_times=Custom Times
gui.worldhandler.config.key.settings.permission_query=Permission Query gui.worldhandler.config.key.settings.permission_query=Permission Query
gui.worldhandler.config.key.settings.highlight_blocks=Highlight Blocks
gui.worldhandler.config.key.settings.custom_time_dawn=Custom Dawn Ticks gui.worldhandler.config.key.settings.custom_time_dawn=Custom Dawn Ticks
gui.worldhandler.config.key.settings.custom_time_noon=Custom Noon Ticks gui.worldhandler.config.key.settings.custom_time_noon=Custom Noon Ticks
gui.worldhandler.config.key.settings.custom_time_sunset=Custom Sunset Ticks gui.worldhandler.config.key.settings.custom_time_sunset=Custom Sunset Ticks
@@ -31,6 +32,7 @@ gui.worldhandler.config.comment.settings.smooth_watch=Whether or not the watch p
gui.worldhandler.config.comment.settings.pause_game=Whether or not to pause the game when the gui is opened gui.worldhandler.config.comment.settings.pause_game=Whether or not to pause the game when the gui is opened
gui.worldhandler.config.comment.settings.custom_times=Whether or not to use the custom times gui.worldhandler.config.comment.settings.custom_times=Whether or not to use the custom times
gui.worldhandler.config.comment.settings.permission_query=Whether or not the permission query is enabled gui.worldhandler.config.comment.settings.permission_query=Whether or not the permission query is enabled
gui.worldhandler.config.comment.settings.highlight_blocks=Whether or not selected blocks will be highlighted
gui.worldhandler.config.comment.settings.custom_time_dawn=Ticks upon dawn gui.worldhandler.config.comment.settings.custom_time_dawn=Ticks upon dawn
gui.worldhandler.config.comment.settings.custom_time_noon=Ticks upon noon gui.worldhandler.config.comment.settings.custom_time_noon=Ticks upon noon
gui.worldhandler.config.comment.settings.custom_time_sunset=Ticks upon sunset gui.worldhandler.config.comment.settings.custom_time_sunset=Ticks upon sunset
@@ -99,6 +101,7 @@ gui.worldhandler.tab.entities.summon=Summon
gui.worldhandler.tab.world.world=World gui.worldhandler.tab.world.world=World
gui.worldhandler.tab.world.gamerules=Gamerules gui.worldhandler.tab.world.gamerules=Gamerules
gui.worldhandler.tab.world.recipes=Recipes
gui.worldhandler.tab.blocks.edit_blocks=Edit Blocks gui.worldhandler.tab.blocks.edit_blocks=Edit Blocks
gui.worldhandler.tab.blocks.sign_editor=Sign Editor gui.worldhandler.tab.blocks.sign_editor=Sign Editor
@@ -123,6 +126,7 @@ gui.worldhandler.title.scoreboard=Scoreboard
gui.worldhandler.title.world.world=World gui.worldhandler.title.world.world=World
gui.worldhandler.title.world.gamerules=Gamerules gui.worldhandler.title.world.gamerules=Gamerules
gui.worldhandler.title.world.recipes=Recipes
gui.worldhandler.title.player.player=Player gui.worldhandler.title.player.player=Player
gui.worldhandler.title.player.experience=Experience gui.worldhandler.title.player.experience=Experience
@@ -281,6 +285,9 @@ gui.worldhandler.edit_blocks.clone.mode.filtered=Filtered
gui.worldhandler.edit_blocks.pos.set_pos_1=Set Pos 1 gui.worldhandler.edit_blocks.pos.set_pos_1=Set Pos 1
gui.worldhandler.edit_blocks.pos.set_pos_2=Set Pos 2 gui.worldhandler.edit_blocks.pos.set_pos_2=Set Pos 2
gui.worldhandler.recipes.give=Give
gui.worldhandler.recipes.take=Take
gui.worldhandler.scoreboard.slot.list=List gui.worldhandler.scoreboard.slot.list=List
gui.worldhandler.scoreboard.slot.belowName=Below Name gui.worldhandler.scoreboard.slot.belowName=Below Name
gui.worldhandler.scoreboard.slot.sidebar=Sidebar gui.worldhandler.scoreboard.slot.sidebar=Sidebar

View File

@@ -15,6 +15,7 @@ gui.worldhandler.config.key.settings.smooth_watch=时钟平滑效果
gui.worldhandler.config.key.settings.pause_game=暂停游戏 gui.worldhandler.config.key.settings.pause_game=暂停游戏
gui.worldhandler.config.key.settings.custom_times=自定义时间 gui.worldhandler.config.key.settings.custom_times=自定义时间
gui.worldhandler.config.key.settings.permission_query=权限队列 gui.worldhandler.config.key.settings.permission_query=权限队列
gui.worldhandler.config.key.settings.highlight_blocks=Highlight Blocks
gui.worldhandler.config.key.settings.custom_time_dawn=自定义日出时间 gui.worldhandler.config.key.settings.custom_time_dawn=自定义日出时间
gui.worldhandler.config.key.settings.custom_time_noon=自定义正午时间 gui.worldhandler.config.key.settings.custom_time_noon=自定义正午时间
gui.worldhandler.config.key.settings.custom_time_sunset=自定义日落时间 gui.worldhandler.config.key.settings.custom_time_sunset=自定义日落时间
@@ -31,6 +32,7 @@ gui.worldhandler.config.comment.settings.smooth_watch=时钟平滑效果开启
gui.worldhandler.config.comment.settings.pause_game=暂停游戏 gui.worldhandler.config.comment.settings.pause_game=暂停游戏
gui.worldhandler.config.comment.settings.custom_times=自定义时间开启 gui.worldhandler.config.comment.settings.custom_times=自定义时间开启
gui.worldhandler.config.comment.settings.permission_query=权限队列开启 gui.worldhandler.config.comment.settings.permission_query=权限队列开启
gui.worldhandler.config.comment.settings.highlight_blocks=Whether or not selected blocks will be highlighted
gui.worldhandler.config.comment.settings.custom_time_dawn=日出的时间 gui.worldhandler.config.comment.settings.custom_time_dawn=日出的时间
gui.worldhandler.config.comment.settings.custom_time_noon=正午的时间 gui.worldhandler.config.comment.settings.custom_time_noon=正午的时间
gui.worldhandler.config.comment.settings.custom_time_sunset=日落的时间 gui.worldhandler.config.comment.settings.custom_time_sunset=日落的时间
@@ -99,6 +101,7 @@ gui.worldhandler.tab.entities.summon=召唤
gui.worldhandler.tab.world.world=世界 gui.worldhandler.tab.world.world=世界
gui.worldhandler.tab.world.gamerules=游戏规则 gui.worldhandler.tab.world.gamerules=游戏规则
gui.worldhandler.tab.world.recipes=Recipes
gui.worldhandler.tab.blocks.edit_blocks=编辑方块 gui.worldhandler.tab.blocks.edit_blocks=编辑方块
gui.worldhandler.tab.blocks.sign_editor=告示牌编辑器 gui.worldhandler.tab.blocks.sign_editor=告示牌编辑器
@@ -123,6 +126,7 @@ gui.worldhandler.title.scoreboard=记分板
gui.worldhandler.title.world.world=世界 gui.worldhandler.title.world.world=世界
gui.worldhandler.title.world.gamerules=游戏规则 gui.worldhandler.title.world.gamerules=游戏规则
gui.worldhandler.title.world.recipes=Recipes
gui.worldhandler.title.player.player=玩家 gui.worldhandler.title.player.player=玩家
gui.worldhandler.title.player.experience=经验等级 gui.worldhandler.title.player.experience=经验等级
@@ -281,6 +285,9 @@ gui.worldhandler.edit_blocks.clone.mode.filtered=仅指定方块
gui.worldhandler.edit_blocks.pos.set_pos_1=设置位点 1 gui.worldhandler.edit_blocks.pos.set_pos_1=设置位点 1
gui.worldhandler.edit_blocks.pos.set_pos_2=设置位点 2 gui.worldhandler.edit_blocks.pos.set_pos_2=设置位点 2
gui.worldhandler.recipes.give=Give
gui.worldhandler.recipes.take=Take
gui.worldhandler.scoreboard.slot.list=列表 gui.worldhandler.scoreboard.slot.list=列表
gui.worldhandler.scoreboard.slot.belowName=名称下方 gui.worldhandler.scoreboard.slot.belowName=名称下方
gui.worldhandler.scoreboard.slot.sidebar=侧边栏 gui.worldhandler.scoreboard.slot.sidebar=侧边栏

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 KiB

After

Width:  |  Height:  |  Size: 2.1 KiB

View File

@@ -2,12 +2,12 @@
"homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui", "homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui",
"promos": "promos":
{ {
"1.12.2-latest": "2.0", "1.12.2-latest": "2.1.4",
"1.12.2-recommended": "2.0", "1.12.2-recommended": "2.1.4",
"1.12.1-latest": "2.0", "1.12.1-latest": "2.1.4",
"1.12.1-recommended": "2.0", "1.12.1-recommended": "2.1.4",
"1.12-latest": "2.0", "1.12-latest": "2.1.4",
"1.12-recommended": "2.0", "1.12-recommended": "2.1.4",
"1.11.2-latest": "1.46", "1.11.2-latest": "1.46",
"1.11.2-recommended": "1.46", "1.11.2-recommended": "1.46",
"1.11-latest": "1.42", "1.11-latest": "1.42",
@@ -41,6 +41,11 @@
}, },
"1.12.2": "1.12.2":
{ {
"2.1.4": "- Fixed enchantment level sliders",
"2.1.3": "- Fixed crash when cancelling change to multiplayer server",
"2.1.2": "- Added progress bar\n- Fixed modded gamerule translations\n- Fixed being connected to the old server when changing servers",
"2.1.1": "- Fixed /wh and /worldhandler denying other commands in multiplayer",
"2.1": "- Added option to change the max slider values\n- Fixed Sign Editor showing wrong color\n- Removed Headlines for better visibility\n- Updated Translations",
"2.0": "- Recode 2.0\n- Added headline color as a config option\n- Added option tag and trigger for scoreboard players\n- Added reset for advancements\n- Updated config file format\n- Updated translations\n- Updated layout\n- Updated biome indicator (should work better with modded biomes)\n- Changed command syntax display\n- Changed /worldhandler show to /worldhandler display\n- Fixed setworldspawn and spawnpoint\n- Fixed equipment not working for summon\n- Fixed wrong translation for biome indicator settings\n- Fixed translation typo\n- Fixed potential config file issues\n- Fixed custom potions not having an item model\n- Fixed /worldhandler display not showing the mouse cursor\n- /worldhandler and /wh now work in multiplayer\n- Removed custom data from summon\n- Potions can now be combined if given as an item\n- Open source and signed", "2.0": "- Recode 2.0\n- Added headline color as a config option\n- Added option tag and trigger for scoreboard players\n- Added reset for advancements\n- Updated config file format\n- Updated translations\n- Updated layout\n- Updated biome indicator (should work better with modded biomes)\n- Changed command syntax display\n- Changed /worldhandler show to /worldhandler display\n- Fixed setworldspawn and spawnpoint\n- Fixed equipment not working for summon\n- Fixed wrong translation for biome indicator settings\n- Fixed translation typo\n- Fixed potential config file issues\n- Fixed custom potions not having an item model\n- Fixed /worldhandler display not showing the mouse cursor\n- /worldhandler and /wh now work in multiplayer\n- Removed custom data from summon\n- Potions can now be combined if given as an item\n- Open source and signed",
"1.50": "- Fixed Biome Indicator black screen", "1.50": "- Fixed Biome Indicator black screen",
"1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation", "1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation",
@@ -49,6 +54,11 @@
}, },
"1.12.1": "1.12.1":
{ {
"2.1.4": "- Fixed enchantment level sliders",
"2.1.3": "- Fixed crash when cancelling change to multiplayer server",
"2.1.2": "- Added progress bar\n- Fixed modded gamerule translations\n- Fixed being connected to the old server when changing servers",
"2.1.1": "- Fixed /wh and /worldhandler denying other commands in multiplayer",
"2.1": "- Added option to change the max slider values\n- Fixed Sign Editor showing wrong color\n- Removed Headlines for better visibility\n- Updated Translations",
"2.0": "- Recodee 2.0\n- Added headline color as a config option\n- Added option tag and trigger for scoreboard players\n- Added reset for advancements\n- Updated config file format\n- Updated translations\n- Updated layout\n- Updated biome indicator (should work better with modded biomes)\n- Changed command syntax display\n- Changed /worldhandler show to /worldhandler display\n- Fixed setworldspawn and spawnpoint\n- Fixed equipment not working for summon\n- Fixed wrong translation for biome indicator settings\n- Fixed translation typo\n- Fixed potential config file issues\n- Fixed custom potions not having an item model\n- Fixed /worldhandler display not showing the mouse cursor\n- /worldhandler and /wh now work in multiplayer\n- Removed custom data from summon\n- Potions can now be combined if given as an item\n- Open source and signed", "2.0": "- Recodee 2.0\n- Added headline color as a config option\n- Added option tag and trigger for scoreboard players\n- Added reset for advancements\n- Updated config file format\n- Updated translations\n- Updated layout\n- Updated biome indicator (should work better with modded biomes)\n- Changed command syntax display\n- Changed /worldhandler show to /worldhandler display\n- Fixed setworldspawn and spawnpoint\n- Fixed equipment not working for summon\n- Fixed wrong translation for biome indicator settings\n- Fixed translation typo\n- Fixed potential config file issues\n- Fixed custom potions not having an item model\n- Fixed /worldhandler display not showing the mouse cursor\n- /worldhandler and /wh now work in multiplayer\n- Removed custom data from summon\n- Potions can now be combined if given as an item\n- Open source and signed",
"1.50": "- Fixed Biome Indicator black screen", "1.50": "- Fixed Biome Indicator black screen",
"1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation", "1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation",
@@ -57,6 +67,11 @@
}, },
"1.12": "1.12":
{ {
"2.1.4": "- Fixed enchantment level sliders",
"2.1.3": "- Fixed crash when cancelling change to multiplayer server",
"2.1.2": "- Added progress bar\n- Fixed modded gamerule translations\n- Fixed being connected to the old server when changing servers",
"2.1.1": "- Fixed /wh and /worldhandler denying other commands in multiplayer",
"2.1": "- Added option to change the max slider values\n- Fixed Sign Editor showing wrong color\n- Removed Headlines for better visibility\n- Updated Translations",
"2.0": "- Recodee 2.0\n- Added headline color as a config option\n- Added option tag and trigger for scoreboard players\n- Added reset for advancements\n- Updated config file format\n- Updated translations\n- Updated layout\n- Updated biome indicator (should work better with modded biomes)\n- Changed command syntax display\n- Changed /worldhandler show to /worldhandler display\n- Fixed setworldspawn and spawnpoint\n- Fixed equipment not working for summon\n- Fixed wrong translation for biome indicator settings\n- Fixed translation typo\n- Fixed potential config file issues\n- Fixed custom potions not having an item model\n- Fixed /worldhandler display not showing the mouse cursor\n- /worldhandler and /wh now work in multiplayer\n- Removed custom data from summon\n- Potions can now be combined if given as an item\n- Open source and signed", "2.0": "- Recodee 2.0\n- Added headline color as a config option\n- Added option tag and trigger for scoreboard players\n- Added reset for advancements\n- Updated config file format\n- Updated translations\n- Updated layout\n- Updated biome indicator (should work better with modded biomes)\n- Changed command syntax display\n- Changed /worldhandler show to /worldhandler display\n- Fixed setworldspawn and spawnpoint\n- Fixed equipment not working for summon\n- Fixed wrong translation for biome indicator settings\n- Fixed translation typo\n- Fixed potential config file issues\n- Fixed custom potions not having an item model\n- Fixed /worldhandler display not showing the mouse cursor\n- /worldhandler and /wh now work in multiplayer\n- Removed custom data from summon\n- Potions can now be combined if given as an item\n- Open source and signed",
"1.50": "- Fixed Biome Indicator black screen", "1.50": "- Fixed Biome Indicator black screen",
"1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation", "1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation",