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
!/src/
!/gradle/
!gradlew
!gradlew.bat
!build.gradle
!README.md
!version.json

View File

@@ -8,42 +8,60 @@ Curseforge: https://minecraft.curseforge.com/projects/world-handler-command-gui
# Features #
* 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
* World and Player Information
* 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 #
Compiled and signed versions: https://minecraft.curseforge.com/projects/world-handler-command-gui/files
Requires: Minecraft Forge (http://files.minecraftforge.net/)

View File

@@ -10,9 +10,15 @@ buildscript {
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.
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"
group = "src.worldhandler.main.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
version = mcversion + "-" + modversion
group = "exopandora.worldhandler.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html
archivesBaseName = "WorldHandler"
sourceCompatibility = targetCompatibility = '1.8' // Need this here so eclipse task generates correctly.
@@ -22,12 +28,34 @@ compileJava {
jar {
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 {
version = "1.12.2-14.23.2.2611"
version = "1.12.2-14.23.3.2676"
runDir = "run"
// 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.io.File;
@@ -15,13 +15,6 @@ public class Main
{
public static final String NAME = "World Handler";
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)
{

View File

@@ -1,158 +1,171 @@
package exopandora.worldhandler.main;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.ICommandBuilderSyntax;
import exopandora.worldhandler.command.CommandWH;
import exopandora.worldhandler.command.CommandWorldHandler;
import exopandora.worldhandler.config.ConfigButcher;
import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.config.ConfigSliders;
import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.proxy.CommonProxy;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.command.ICommand;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
import net.minecraftforge.fml.common.Mod.Instance;
import net.minecraftforge.fml.common.SidedProxy;
import net.minecraftforge.fml.common.event.FMLInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPostInitializationEvent;
import net.minecraftforge.fml.common.event.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@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)
public class WorldHandler
{
@Instance(Main.MODID)
public WorldHandler INSTANCE;
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_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_WH = new CommandWH();
public static Configuration CONFIG;
public static String USERNAME = null;
@SidedProxy(clientSide = "exopandora.worldhandler.proxy.ClientProxy", serverSide = "exopandora.worldhandler.proxy.CommonProxy")
public static CommonProxy PROXY;
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
LOGGER = event.getModLog();
LOGGER.info("Pre-Initializing " + Main.NAME_AND_VERSION);
LOGGER.info("First Release on March 28 2013 - 02:29 PM CET by Exopandora");
LOGGER.info("Latest Version: " + Main.URL);
CONFIG = new Configuration(event.getSuggestedConfigurationFile());
ConfigSettings.load(CONFIG);
ConfigSkin.load(CONFIG);
ConfigSliders.load(CONFIG);
}
@EventHandler
public void init(FMLInitializationEvent event)
{
LOGGER.info("Initializing " + Main.NAME_AND_VERSION);
USERNAME = Minecraft.getMinecraft().getSession().getUsername();
MinecraftForge.EVENT_BUS.register(new exopandora.worldhandler.event.EventHandler());
ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER);
updateKeyBindings();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
LOGGER.info("Post-Initializing " + Main.NAME_AND_VERSION);
LOGGER.info("Every mod that has not been registered to this point may not be fully featured in this mod");
ConfigButcher.load(CONFIG);
Content.registerContents();
Category.registerCategories();
}
@EventHandler
public void serverLoad(FMLServerStartingEvent event)
{
event.registerServerCommand(COMMAND_WORLD_HANDLER);
event.registerServerCommand(COMMAND_WH);
}
public static void updateConfig()
{
ConfigSettings.load(CONFIG);
ConfigSkin.load(CONFIG);
ConfigButcher.load(CONFIG);
ConfigSliders.load(CONFIG);
updateKeyBindings();
}
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)
{
sendCommand(builder, false);
}
public static void sendCommand(ICommandBuilder builder, boolean special)
{
if(builder != null)
{
String command;
if(builder instanceof ICommandBuilderSyntax)
{
command = ((ICommandBuilderSyntax) builder).toActualCommand();
}
else
{
command = builder.toCommand();
}
LOGGER.info("Command: " + command);
if(builder.needsCommandBlock() || special)
{
BlockHelper.setCommandBlockNearPlayer(command);
}
else
{
Minecraft.getMinecraft().player.sendChatMessage(command);
}
}
}
package exopandora.worldhandler;
import org.apache.commons.lang3.ArrayUtils;
import org.apache.logging.log4j.Logger;
import org.lwjgl.input.Keyboard;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.ICommandBuilderSyntax;
import exopandora.worldhandler.command.CommandWH;
import exopandora.worldhandler.command.CommandWorldHandler;
import exopandora.worldhandler.config.ConfigButcher;
import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.config.ConfigSliders;
import exopandora.worldhandler.event.EventListener;
import exopandora.worldhandler.gui.category.Category;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.proxy.CommonProxy;
import exopandora.worldhandler.util.UtilKeyBinding;
import net.minecraft.client.Minecraft;
import net.minecraft.client.settings.KeyBinding;
import net.minecraft.command.ICommand;
import net.minecraftforge.common.MinecraftForge;
import net.minecraftforge.common.config.Configuration;
import net.minecraftforge.fml.client.registry.ClientRegistry;
import net.minecraftforge.fml.common.Mod;
import net.minecraftforge.fml.common.Mod.EventHandler;
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.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.FMLPreInitializationEvent;
import net.minecraftforge.fml.common.event.FMLServerStartingEvent;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
@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
{
@Instance(Main.MODID)
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_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 final ICommand COMMAND_WORLD_HANDLER = new CommandWorldHandler();
public static final ICommand COMMAND_WH = new CommandWH();
public static Configuration CONFIG;
public static Logger LOGGER;
public static String USERNAME = null;
@SidedProxy(clientSide = "exopandora.worldhandler.proxy.ClientProxy", serverSide = "exopandora.worldhandler.proxy.CommonProxy")
private static CommonProxy PROXY;
private EventListener eventListener = new EventListener();
@EventHandler
public void preInit(FMLPreInitializationEvent event)
{
LOGGER = event.getModLog();
LOGGER.info("Pre-Initialization");
LOGGER.info("First Release on March 28 2013 - 02:29 PM CET by Exopandora");
LOGGER.info("Latest Version: $url");
CONFIG = new Configuration(event.getSuggestedConfigurationFile());
}
@EventHandler
public void init(FMLInitializationEvent event)
{
LOGGER.info("Initialization");
USERNAME = Minecraft.getMinecraft().getSession().getUsername();
MinecraftForge.EVENT_BUS.register(this.eventListener);
ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER);
UtilKeyBinding.updatePosKeys();
}
@EventHandler
public void postInit(FMLPostInitializationEvent event)
{
LOGGER.info("Post-Initialization");
}
@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);
bar.step("Initializing User Interface");
Content.registerContents();
Category.registerCategories();
ProgressManager.pop(bar);
}
@EventHandler
public void serverLoad(FMLServerStartingEvent event)
{
event.registerServerCommand(COMMAND_WORLD_HANDLER);
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()
{
ConfigSettings.load(CONFIG);
ConfigSkin.load(CONFIG);
ConfigButcher.load(CONFIG);
ConfigSliders.load(CONFIG);
UtilKeyBinding.updatePosKeys();
}
public static void sendCommand(ICommandBuilder builder)
{
sendCommand(builder, false);
}
public static void sendCommand(ICommandBuilder builder, boolean special)
{
if(builder != null)
{
String command;
if(builder instanceof ICommandBuilderSyntax)
{
command = ((ICommandBuilderSyntax) builder).toActualCommand();
}
else
{
command = builder.toCommand();
}
LOGGER.info("Command: " + command);
if(builder.needsCommandBlock() || special)
{
BlockHelper.setCommandBlockNearPlayer(command);
}
else
{
Minecraft.getMinecraft().player.sendChatMessage(command);
}
}
}
}

View File

@@ -1,19 +1,18 @@
package exopandora.worldhandler.builder;
import java.util.AbstractMap;
import java.util.ArrayList;
import java.util.AbstractMap.SimpleEntry;
import java.util.List;
import java.util.Map.Entry;
import java.util.stream.Collectors;
import javax.annotation.Nullable;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.Syntax.SyntaxEntry;
import exopandora.worldhandler.builder.types.Coordinate;
import exopandora.worldhandler.builder.types.Level;
import exopandora.worldhandler.builder.types.TargetSelector;
import exopandora.worldhandler.builder.types.Type;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
@@ -232,20 +231,34 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax
{
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
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
public String toActualCommand()
{
List<String> command = new ArrayList<String>();
CommandString command = new CommandString(this.getCommandName());
for(Entry<SyntaxEntry, String> entry : this.command)
{
@@ -254,9 +267,9 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax
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 exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.component.IBuilderComponent;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagByte;
import net.minecraft.nbt.NBTTagByteArray;

View File

@@ -1,5 +1,7 @@
package exopandora.worldhandler.builder.impl;
import javax.annotation.Nullable;
import exopandora.worldhandler.builder.CommandBuilder;
import exopandora.worldhandler.builder.Syntax;
import exopandora.worldhandler.builder.types.Type;
@@ -28,7 +30,8 @@ public class BuilderAdvancement extends CommandBuilder
{
this.setNode(0, action != null ? action.toString() : null);
}
@Nullable
public EnumActionType getActionType()
{
return EnumHelper.valueOf(EnumActionType.class, this.getNodeAsString(1));
@@ -38,7 +41,8 @@ public class BuilderAdvancement extends CommandBuilder
{
this.setNode(1, player);
}
@Nullable
public String getPlayer()
{
return this.getNodeAsString(1);
@@ -48,7 +52,8 @@ public class BuilderAdvancement extends CommandBuilder
{
this.setNode(2, mode != null ? mode.toString() : null);
}
@Nullable
public EnumMode getMode()
{
return EnumHelper.valueOf(EnumMode.class, this.getNodeAsString(2));
@@ -58,7 +63,8 @@ public class BuilderAdvancement extends CommandBuilder
{
this.setNode(3, advancement);
}
@Nullable
public ResourceLocation getAdvancement()
{
return this.getNodeAsResourceLocation(3);
@@ -92,7 +98,8 @@ public class BuilderAdvancement extends CommandBuilder
return syntax;
}
@SideOnly(Side.CLIENT)
public static enum EnumActionType
{
GRANT,
@@ -105,6 +112,7 @@ public class BuilderAdvancement extends CommandBuilder
}
}
@SideOnly(Side.CLIENT)
public static enum EnumMode
{
ONLY,

View File

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

View File

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

View File

@@ -25,12 +25,9 @@ public class BuilderCustomItem extends BuilderGive
this(null, null);
}
public BuilderCustomItem(String username, ResourceLocation item)
public BuilderCustomItem(String player, ResourceLocation item)
{
this.setPlayer(username);
this.setItem(item);
this.setAmount(1);
this.setMetadata(0);
super(player, item);
this.attribute = this.registerNBTComponent(new ComponentAttributeItem(attribute -> attribute.getApplyable().equals(Applyable.BOTH) || attribute.getApplyable().equals(Applyable.PLAYER)));
this.display = this.registerNBTComponent(new ComponentDisplay());
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.Syntax;
import exopandora.worldhandler.builder.types.Type;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
public class BuilderDifficulty extends CommandBuilder
{
@@ -37,6 +39,7 @@ public class BuilderDifficulty extends CommandBuilder
return syntax;
}
@SideOnly(Side.CLIENT)
public static enum EnumDifficulty
{
PEACEFUL,

View File

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

View File

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

View File

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

View File

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

View File

@@ -21,9 +21,7 @@ public class BuilderPotionItem extends BuilderGive
public BuilderPotionItem(ResourceLocation item, String player, ComponentPotionItem potion)
{
this.setItem(item);
this.setPlayer(player);
this.setAmount(1);
super(player, item);
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;
}
@SideOnly(Side.CLIENT)
public static enum EnumTag
{
ADD,
@@ -216,6 +217,7 @@ public class BuilderScoreboardPlayers extends BuilderScoreboard
}
}
@SideOnly(Side.CLIENT)
public static enum EnumPoints
{
ADD,

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,6 +5,7 @@ import java.util.Collections;
import java.util.List;
import java.util.stream.Collectors;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderClone;
import exopandora.worldhandler.builder.impl.BuilderClone.EnumMask;
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.EnumHelper;
import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.block.Block;
import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase;

View File

@@ -5,10 +5,10 @@ import java.util.List;
import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderWorldHandler;
import exopandora.worldhandler.event.EventHandler;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.event.EventListener;
import net.minecraft.client.Minecraft;
import net.minecraft.command.CommandBase;
import net.minecraft.command.CommandException;
@@ -49,13 +49,13 @@ public class CommandWorldHandler extends CommandBase
}
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"))
{
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;
sender.sendMessage(new TextComponentString("Latest: " + Main.MC_VERSION + "-" + (target != null ? target : Main.VERSION)));
sender.sendMessage(new TextComponentString("Latest: $mcversion-" + (target != null ? target : "$version")));
}
else
{

View File

@@ -37,7 +37,7 @@ public class FakeCommandHandler extends CommandHandler
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);
}

View File

@@ -18,6 +18,7 @@ public class ConfigSettings
private static boolean PAUSE;
private static boolean CUSTOM_TIMES;
private static boolean PERMISSION_QEURY;
private static boolean HIGHLIGHT_BLOCKS;
private static int DAWN;
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");
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");
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");
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");
@@ -101,7 +103,12 @@ public class ConfigSettings
{
return PERMISSION_QEURY;
}
public static boolean isHighlightBlocksEnabled()
{
return HIGHLIGHT_BLOCKS;
}
public static int getDawn()
{
return DAWN;

View File

@@ -2,41 +2,102 @@ package exopandora.worldhandler.event;
import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.command.FakeCommandHandler;
import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.gui.container.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.hud.BiomeIndicator;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilPlayer;
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.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.util.text.TextComponentString;
import net.minecraftforge.client.event.ClientChatEvent;
import net.minecraftforge.client.event.RenderWorldLastEvent;
import net.minecraftforge.fml.client.event.ConfigChangedEvent.OnConfigChangedEvent;
import net.minecraftforge.fml.common.eventhandler.SubscribeEvent;
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.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class EventHandler
public class EventListener
{
private final FakeCommandHandler commandHandler = new FakeCommandHandler();
private final BiomeIndicator biomeIndicator = new BiomeIndicator();
@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(ConfigSettings.isBiomeIndicatorEnabled())
{
BiomeIndicator.tick();
this.biomeIndicator.tick();
}
}
}

View File

@@ -2,10 +2,10 @@ package exopandora.worldhandler.gui.button;
import org.lwjgl.input.Mouse;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.main.Main;
import net.minecraft.client.Minecraft;
import net.minecraft.client.audio.PositionedSoundRecord;
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.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.content.Content;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -17,21 +18,21 @@ import net.minecraftforge.fml.relauncher.SideOnly;
public class GuiButtonList<T> extends GuiButtonWorldHandler
{
private final IListButtonLogic<T> logic;
private final ButtonStorage<T> storage;
private final ButtonValues<T> persistence;
private int mouseX;
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);
this.logic = logic;
this.storage = container.getStorage(this.logic.getId());
this.updateStorageObject();
this.persistence = content.getPersistence(this.logic.getId());
this.updatePersistenceObject();
}
@Override
@@ -46,7 +47,7 @@ public class GuiButtonList<T> extends GuiButtonWorldHandler
this.mouseX = mouseX;
this.mouseY = mouseY;
this.displayString = this.logic.getDisplayString(this.storage);
this.displayString = this.logic.getDisplayString(this.persistence);
if(this.displayString != null && !this.displayString.isEmpty())
{
@@ -77,7 +78,7 @@ public class GuiButtonList<T> extends GuiButtonWorldHandler
{
if(this.tooltipType != null)
{
this.displayTooltip = this.logic.getTooltipString(this.storage);
this.displayTooltip = this.logic.getTooltipString(this.persistence);
}
super.drawTooltip(mouseX, mouseY, width, height);
@@ -100,36 +101,67 @@ public class GuiButtonList<T> extends GuiButtonWorldHandler
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.storage.getIndex() > 0)
if(GuiScreen.isShiftKeyDown())
{
this.storage.decrementIndex();
if(index < 10)
{
this.persistence.setIndex(max - (9 - index));
}
else
{
this.persistence.decrementIndex(10);
}
}
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))
{
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
{
this.storage.setIndex(0);
if(index < max)
{
this.persistence.incrementIndex();
}
else
{
this.persistence.setIndex(0);
}
}
}
this.updateStorageObject();
this.logic.actionPerformed(container, button, this.storage);
this.updatePersistenceObject();
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()

View File

@@ -2,8 +2,8 @@ package exopandora.worldhandler.gui.button;
import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.gui.button.logic.ISliderResponder;
import exopandora.worldhandler.gui.button.storage.ButtonStorage;
import exopandora.worldhandler.gui.button.storage.SliderStorage;
import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.button.persistence.SliderValues;
import exopandora.worldhandler.gui.container.Container;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.helper.ResourceHelper;
@@ -25,67 +25,64 @@ public class GuiSlider<T> extends GuiButton
private final String name;
private final ISliderResponder responder;
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);
this.frame = frame;
this.key = key;
this.name = name;
this.responder = responder;
this.storage = container.getStorage(key);
this.initStorage(Math.round(min), Math.round(max), Math.round(start));
this.persistence = content.getPersistence(key);
this.initValues(Math.round(min), Math.round(max), Math.round(start));
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.storage.setObject(new SliderStorage(min, max, 0));
}
else
{
this.storage.setObject(new SliderStorage(min, max, (start - min) / (max - min)));
}
this.persistence.setObject(new SliderValues(min, max, 0.0D));
}
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)
{
this.storage.getObject().setPosition(position);
this.persistence.getObject().setPosition(position);
}
private double getPosition()
{
return this.storage.getObject().getPosition();
return this.persistence.getObject().getPosition();
}
private void setValue(int value)
{
this.storage.getObject().setValue(value);
this.persistence.getObject().setValue(value);
}
private int getValue()
{
return this.storage.getObject().getValue();
return this.persistence.getObject().getValue();
}
private String getDisplayString()
{
return this.responder.getText(this.key, I18n.format(this.name), this.getValue());
}
@Override
protected int getHoverState(boolean mouseOver)
{
@@ -191,7 +188,7 @@ public class GuiSlider<T> extends GuiButton
return false;
}
@Override
public void mouseReleased(int mouseX, int mouseY)
{

View File

@@ -5,7 +5,7 @@ import java.util.Arrays;
import com.mojang.realmsclient.gui.ChatFormatting;
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.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -26,15 +26,15 @@ public abstract class ColorListButtonLogic implements IListButtonLogic<Integer>
}
@Override
public String getTooltipString(ButtonStorage<Integer> storage)
public String getTooltipString(ButtonValues<Integer> values)
{
return null;
}
@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());
}

View File

@@ -1,6 +1,6 @@
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 net.minecraft.client.gui.GuiButton;
import net.minecraftforge.fml.relauncher.Side;
@@ -9,19 +9,19 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface IListButtonLogic<T>
{
void actionPerformed(Container container, GuiButton button, ButtonStorage<T> storage);
void actionPerformed(Container container, GuiButton button, ButtonValues<T> values);
int getMax();
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;

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.SideOnly;
@SideOnly(Side.CLIENT)
public class ButtonStorage<T>
public class ButtonValues<T>
{
private int index;
private T object;
@@ -24,11 +24,21 @@ public class ButtonStorage<T>
this.index++;
}
public void incrementIndex(int amount)
{
this.index += amount;
}
public void decrementIndex()
{
this.index--;
}
public void decrementIndex(int amount)
{
this.index -= amount;
}
public T getObject()
{
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.SideOnly;
@SideOnly(Side.CLIENT)
public class SliderStorage
public class SliderValues
{
private final double min;
private final double max;
private double position;
public SliderStorage(double min, double max, double position)
private SliderValues(double min, double max)
{
this.min = min;
this.max = max;
}
public SliderValues(double min, double max, double position)
{
this(min, max);
this.position = position;
}
public SliderStorage(double min, double max, int value)
public SliderValues(double min, double max, int value)
{
this.min = min;
this.max = max;
this(min, max);
this.position = this.valueToPosition(value);
}
@@ -56,6 +61,11 @@ public class SliderStorage
private double valueToPosition(int value)
{
if(this.min == this.max)
{
return 0;
}
return (value - this.min) / (this.max - this.min);
}
}

View File

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

View File

@@ -1,81 +1,81 @@
package exopandora.worldhandler.gui.category;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nullable;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.Main;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.RegistryNamespaced;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class Category
{
public static final RegistryNamespaced<ResourceLocation, Category> REGISTRY = new RegistryNamespaced<ResourceLocation, Category>();
private final List<Content> contents;
public Category()
{
this.contents = new ArrayList<Content>();
}
public Category(List<Content> contents)
{
this.contents = contents;
}
public Category(Content... contents)
{
this.contents = Arrays.asList(contents);
}
public Category add(Content content)
{
this.contents.add(content);
return this;
}
public List<Content> getContents()
{
return this.contents;
}
public int getSize()
{
return this.contents.size();
}
@Nullable
public Content getContent(int index)
{
return this.contents.get(index);
}
public static void registerCategories()
{
registerCategory(0, "main", new Category(Contents.MAIN, Contents.CONTAINERS, Contents.MULTIPLAYER));
registerCategory(1, "entities", new Category(Contents.SUMMON));
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(4, "world", new Category(Contents.WORLD_INFO, Contents.GAMERULES));
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));
}
private static void registerCategory(int id, String textualID, Category category)
{
registerCategory(id, new ResourceLocation(Main.MODID, textualID), category);
}
private static void registerCategory(int id, ResourceLocation textualID, Category category)
{
REGISTRY.register(id, textualID, category);
}
}
package exopandora.worldhandler.gui.category;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import javax.annotation.Nullable;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.gui.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.RegistryNamespaced;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class Category
{
public static final RegistryNamespaced<ResourceLocation, Category> REGISTRY = new RegistryNamespaced<ResourceLocation, Category>();
private final List<Content> contents;
public Category()
{
this.contents = new ArrayList<Content>();
}
public Category(List<Content> contents)
{
this.contents = contents;
}
public Category(Content... contents)
{
this.contents = Arrays.asList(contents);
}
public Category add(Content content)
{
this.contents.add(content);
return this;
}
public List<Content> getContents()
{
return this.contents;
}
public int getSize()
{
return this.contents.size();
}
@Nullable
public Content getContent(int index)
{
return this.contents.get(index);
}
public static void registerCategories()
{
registerCategory(0, "main", new Category(Contents.MAIN, Contents.CONTAINERS, Contents.MULTIPLAYER));
registerCategory(1, "entities", new Category(Contents.SUMMON));
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(4, "world", new Category(Contents.WORLD_INFO, Contents.GAMERULES, Contents.RECIPES));
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));
}
private static void registerCategory(int id, String textualID, Category category)
{
registerCategory(id, new ResourceLocation(Main.MODID, textualID), category);
}
private static void registerCategory(int id, ResourceLocation textualID, Category category)
{
REGISTRY.register(id, textualID, category);
}
}

View File

@@ -3,12 +3,12 @@ package exopandora.worldhandler.gui.config;
import java.util.ArrayList;
import java.util.List;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.config.ConfigButcher;
import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.config.ConfigSkin;
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.resources.I18n;
import net.minecraftforge.common.config.ConfigCategory;

View File

@@ -12,6 +12,7 @@ import javax.annotation.Nullable;
import com.google.common.base.Predicates;
import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderDifficulty;
import exopandora.worldhandler.builder.impl.BuilderDifficulty.EnumDifficulty;
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.element.IElement;
import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilRender;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
@@ -144,7 +143,7 @@ public class GuiWorldHandlerContainer extends Container
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;
}
}
this.content.actionPerformed(this, button);
break;
}
@@ -351,7 +349,7 @@ public class GuiWorldHandlerContainer extends Container
private void defaultColor()
{
this.defaultColor(1);
this.defaultColor(1.0F);
}
private void defaultColor(float alpha)
@@ -445,8 +443,8 @@ public class GuiWorldHandlerContainer extends Container
}
this.bindBackground();
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 + 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);
if(!ConfigSkin.areSharpEdgesEnabled())
{
@@ -460,7 +458,7 @@ public class GuiWorldHandlerContainer extends Container
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++)
{
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)
{
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)
{
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();
//VERSION LABEL
final String label = "$mcversion-$version";
final int hexAlpha = (int) (0xFF * 0.2) << 24;
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
@@ -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

View File

@@ -1,111 +1,114 @@
package exopandora.worldhandler.gui.content;
import java.util.HashMap;
import java.util.Map;
import exopandora.worldhandler.gui.button.storage.ButtonStorage;
import exopandora.worldhandler.gui.content.impl.ContentAdvancements;
import exopandora.worldhandler.gui.content.impl.ContentButcher;
import exopandora.worldhandler.gui.content.impl.ContentChangeWorld;
import exopandora.worldhandler.gui.content.impl.ContentContainers;
import exopandora.worldhandler.gui.content.impl.ContentContinue;
import exopandora.worldhandler.gui.content.impl.ContentCustomItem;
import exopandora.worldhandler.gui.content.impl.ContentEditBlocks;
import exopandora.worldhandler.gui.content.impl.ContentEnchantment;
import exopandora.worldhandler.gui.content.impl.ContentExperience;
import exopandora.worldhandler.gui.content.impl.ContentGamerules;
import exopandora.worldhandler.gui.content.impl.ContentMain;
import exopandora.worldhandler.gui.content.impl.ContentMultiplayer;
import exopandora.worldhandler.gui.content.impl.ContentNoteEditor;
import exopandora.worldhandler.gui.content.impl.ContentPlayer;
import exopandora.worldhandler.gui.content.impl.ContentPotions;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardObjectives;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardTeams;
import exopandora.worldhandler.gui.content.impl.ContentSignEditor;
import exopandora.worldhandler.gui.content.impl.ContentSummon;
import exopandora.worldhandler.gui.content.impl.ContentWorldInfo;
import exopandora.worldhandler.main.Main;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.RegistryNamespaced;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class Content implements IContent
{
public static final RegistryNamespaced<ResourceLocation, Content> REGISTRY = new RegistryNamespaced<ResourceLocation, Content>();
public static void registerContents()
{
//MAIN
registerContent(0, "main", new ContentMain());
registerContent(1, "containers", new ContentContainers());
registerContent(2, "multiplayer", new ContentMultiplayer());
//ENTITIES
registerContent(3, "summon", new ContentSummon());
//ITEMS
registerContent(5, "custom_item", new ContentCustomItem());
registerContent(4, "enchantment", new ContentEnchantment());
//BLOCKS
registerContent(6, "edit_blocks", new ContentEditBlocks());
registerContent(7, "sign_editor", new ContentSignEditor());
registerContent(8, "note_editor", new ContentNoteEditor());
//WORLD
registerContent(9, "world", new ContentWorldInfo());
registerContent(10, "gamerules", new ContentGamerules());
//PLAYER
registerContent(11, "player", new ContentPlayer());
registerContent(12, "experience", new ContentExperience());
registerContent(13, "advancements", new ContentAdvancements());
//SCOREBOARD
registerContent(14, "scoreboard_objectives", new ContentScoreboardObjectives());
registerContent(15, "scoreboard_teams", new ContentScoreboardTeams());
registerContent(16, "scoreboard_players", new ContentScoreboardPlayers());
//MISC
registerContent(17, "change_world", new ContentChangeWorld());
registerContent(18, "continue", new ContentContinue());
//NO CATEGORY
registerContent(19, "potions", new ContentPotions());
registerContent(20, "butcher", new ContentButcher());
}
private static void registerContent(int id, String textualID, Content content)
{
registerContent(id, new ResourceLocation(Main.MODID, textualID), content);
}
private static void registerContent(int id, ResourceLocation textualID, Content content)
{
REGISTRY.register(id, textualID, content);
}
private Map<Object, ButtonStorage> storage;
public <T> ButtonStorage<T> getStorage(Object id)
{
if(this.storage == null)
{
this.storage = new HashMap<Object, ButtonStorage>();
}
if(this.storage.containsKey(id))
{
return this.storage.get(id);
}
ButtonStorage<T> storage = new ButtonStorage<T>();
this.storage.put(id, storage);
return storage;
}
}
package exopandora.worldhandler.gui.content;
import java.util.HashMap;
import java.util.Map;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.gui.button.persistence.ButtonValues;
import exopandora.worldhandler.gui.content.impl.ContentAdvancements;
import exopandora.worldhandler.gui.content.impl.ContentButcher;
import exopandora.worldhandler.gui.content.impl.ContentChangeWorld;
import exopandora.worldhandler.gui.content.impl.ContentContainers;
import exopandora.worldhandler.gui.content.impl.ContentContinue;
import exopandora.worldhandler.gui.content.impl.ContentCustomItem;
import exopandora.worldhandler.gui.content.impl.ContentEditBlocks;
import exopandora.worldhandler.gui.content.impl.ContentEnchantment;
import exopandora.worldhandler.gui.content.impl.ContentExperience;
import exopandora.worldhandler.gui.content.impl.ContentGamerules;
import exopandora.worldhandler.gui.content.impl.ContentMain;
import exopandora.worldhandler.gui.content.impl.ContentMultiplayer;
import exopandora.worldhandler.gui.content.impl.ContentNoteEditor;
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.ContentRecipes;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardObjectives;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers;
import exopandora.worldhandler.gui.content.impl.ContentScoreboardTeams;
import exopandora.worldhandler.gui.content.impl.ContentSignEditor;
import exopandora.worldhandler.gui.content.impl.ContentSummon;
import exopandora.worldhandler.gui.content.impl.ContentWorldInfo;
import net.minecraft.util.ResourceLocation;
import net.minecraft.util.registry.RegistryNamespaced;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public abstract class Content implements IContent
{
public static final RegistryNamespaced<ResourceLocation, Content> REGISTRY = new RegistryNamespaced<ResourceLocation, Content>();
public static void registerContents()
{
//MAIN
registerContent(0, "main", new ContentMain());
registerContent(1, "containers", new ContentContainers());
registerContent(2, "multiplayer", new ContentMultiplayer());
//ENTITIES
registerContent(3, "summon", new ContentSummon());
//ITEMS
registerContent(5, "custom_item", new ContentCustomItem());
registerContent(4, "enchantment", new ContentEnchantment());
//BLOCKS
registerContent(6, "edit_blocks", new ContentEditBlocks());
registerContent(7, "sign_editor", new ContentSignEditor());
registerContent(8, "note_editor", new ContentNoteEditor());
//WORLD
registerContent(9, "world", new ContentWorldInfo());
registerContent(10, "gamerules", new ContentGamerules());
registerContent(11, "recipes", new ContentRecipes());
//PLAYER
registerContent(12, "player", new ContentPlayer());
registerContent(13, "experience", new ContentExperience());
registerContent(14, "advancements", new ContentAdvancements());
//SCOREBOARD
registerContent(15, "scoreboard_objectives", new ContentScoreboardObjectives());
registerContent(16, "scoreboard_teams", new ContentScoreboardTeams());
registerContent(17, "scoreboard_players", new ContentScoreboardPlayers());
//MISC
registerContent(18, "change_world", new ContentChangeWorld());
registerContent(19, "continue", new ContentContinue());
//NO CATEGORY
registerContent(20, "potions", new ContentPotions());
registerContent(21, "butcher", new ContentButcher());
}
private static void registerContent(int id, String textualID, Content content)
{
registerContent(id, new ResourceLocation(Main.MODID, textualID), content);
}
private static void registerContent(int id, ResourceLocation textualID, Content content)
{
REGISTRY.register(id, textualID, content);
}
private Map<Object, ButtonValues> persistence;
public <T> ButtonValues<T> getPersistence(Object id)
{
if(this.persistence == null)
{
this.persistence = new HashMap<Object, ButtonValues>();
}
if(this.persistence.containsKey(id))
{
return this.persistence.get(id);
}
ButtonValues<T> values = new ButtonValues<T>();
this.persistence.put(id, values);
return values;
}
}

View File

@@ -1,87 +1,89 @@
package exopandora.worldhandler.gui.content;
import exopandora.worldhandler.gui.content.impl.ContentContinue;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.main.Main;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class Contents
{
public static final Content MAIN;
public static final Content CONTAINERS;
public static final Content MULTIPLAYER;
public static final Content SUMMON;
public static final Content CUSTOM_ITEM;
public static final Content ENCHANTMENT;
public static final Content EDIT_BLOCKS;
public static final Content SIGN_EDITOR;
public static final Content NOTE_EDITOR;
public static final Content WORLD_INFO;
public static final Content GAMERULES;
public static final Content PLAYER;
public static final Content EXPERIENCE;
public static final Content ADVANCEMENTS;
public static final Content SCOREBOARD_OBJECTIVES;
public static final Content SCOREBOARD_TEAMS;
public static final Content SCOREBOARD_PLAYERS;
public static final ContentChild CHANGE_WORLD;
public static final ContentContinue CONTINUE;
public static final ContentChild POTIONS;
public static final ContentChild BUTCHER;
static
{
MAIN = Contents.getRegisteredContainer("main");
CONTAINERS = Contents.getRegisteredContainer("containers");
MULTIPLAYER = Contents.getRegisteredContainer("multiplayer");
SUMMON = Contents.getRegisteredContainer("summon");
CUSTOM_ITEM = Contents.getRegisteredContainer("custom_item");
ENCHANTMENT = Contents.getRegisteredContainer("enchantment");
EDIT_BLOCKS = Contents.getRegisteredContainer("edit_blocks");
SIGN_EDITOR = Contents.getRegisteredContainer("sign_editor");
NOTE_EDITOR = Contents.getRegisteredContainer("note_editor");
WORLD_INFO = Contents.getRegisteredContainer("world");
GAMERULES = Contents.getRegisteredContainer("gamerules");
PLAYER = Contents.getRegisteredContainer("player");
EXPERIENCE = Contents.getRegisteredContainer("experience");
ADVANCEMENTS = Contents.getRegisteredContainer("advancements");
SCOREBOARD_OBJECTIVES = Contents.getRegisteredContainer("scoreboard_objectives");
SCOREBOARD_TEAMS = Contents.getRegisteredContainer("scoreboard_teams");
SCOREBOARD_PLAYERS = Contents.getRegisteredContainer("scoreboard_players");
CHANGE_WORLD = Contents.getRegisteredContainer("change_world");
CONTINUE = Contents.getRegisteredContainer("continue");
POTIONS = Contents.getRegisteredContainer("potions");
BUTCHER = Contents.getRegisteredContainer("butcher");
}
private static <T extends Content> T getRegisteredContainer(String name)
{
Content container = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name));
if(container == null)
{
throw new IllegalStateException("Invalid Container requested: " + name);
}
return (T) container;
}
package exopandora.worldhandler.gui.content;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.gui.content.impl.ContentContinue;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import net.minecraft.util.ResourceLocation;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class Contents
{
public static final Content MAIN;
public static final Content CONTAINERS;
public static final Content MULTIPLAYER;
public static final Content SUMMON;
public static final Content CUSTOM_ITEM;
public static final Content ENCHANTMENT;
public static final Content EDIT_BLOCKS;
public static final Content SIGN_EDITOR;
public static final Content NOTE_EDITOR;
public static final Content WORLD_INFO;
public static final Content GAMERULES;
public static final Content RECIPES;
public static final Content PLAYER;
public static final Content EXPERIENCE;
public static final Content ADVANCEMENTS;
public static final Content SCOREBOARD_OBJECTIVES;
public static final Content SCOREBOARD_TEAMS;
public static final Content SCOREBOARD_PLAYERS;
public static final ContentChild CHANGE_WORLD;
public static final ContentContinue CONTINUE;
public static final ContentChild POTIONS;
public static final ContentChild BUTCHER;
static
{
MAIN = Contents.getRegisteredContainer("main");
CONTAINERS = Contents.getRegisteredContainer("containers");
MULTIPLAYER = Contents.getRegisteredContainer("multiplayer");
SUMMON = Contents.getRegisteredContainer("summon");
CUSTOM_ITEM = Contents.getRegisteredContainer("custom_item");
ENCHANTMENT = Contents.getRegisteredContainer("enchantment");
EDIT_BLOCKS = Contents.getRegisteredContainer("edit_blocks");
SIGN_EDITOR = Contents.getRegisteredContainer("sign_editor");
NOTE_EDITOR = Contents.getRegisteredContainer("note_editor");
WORLD_INFO = Contents.getRegisteredContainer("world");
GAMERULES = Contents.getRegisteredContainer("gamerules");
RECIPES = Contents.getRegisteredContainer("recipes");
PLAYER = Contents.getRegisteredContainer("player");
EXPERIENCE = Contents.getRegisteredContainer("experience");
ADVANCEMENTS = Contents.getRegisteredContainer("advancements");
SCOREBOARD_OBJECTIVES = Contents.getRegisteredContainer("scoreboard_objectives");
SCOREBOARD_TEAMS = Contents.getRegisteredContainer("scoreboard_teams");
SCOREBOARD_PLAYERS = Contents.getRegisteredContainer("scoreboard_players");
CHANGE_WORLD = Contents.getRegisteredContainer("change_world");
CONTINUE = Contents.getRegisteredContainer("continue");
POTIONS = Contents.getRegisteredContainer("potions");
BUTCHER = Contents.getRegisteredContainer("butcher");
}
private static <T extends Content> T getRegisteredContainer(String name)
{
Content content = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name));
if(content == null)
{
throw new IllegalStateException("Invalid Container requested: " + name);
}
return (T) content;
}
}

View File

@@ -14,10 +14,4 @@ public abstract class Element implements IElement
this.x = x;
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.GuiButtonList;
import exopandora.worldhandler.gui.button.GuiButtonWorldHandler;
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.content.Content;
import exopandora.worldhandler.gui.content.element.Element;
@@ -20,22 +21,30 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class ElementClickList extends Element
{
private final int buttonId1;
private final int buttonId2;
private final int[] buttonIds;
private final List<Node> list;
private final ILogicClickList logic;
private GuiButtonList button1;
private GuiButtonList button2;
private final Content master;
private final Content content;
private final ElementClickList parent;
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);
this.list = list;
this.buttonId1 = buttonId1;
this.buttonId2 = buttonId2;
this.buttonIds = buttonIds;
this.logic = logic;
this.master = container;
this.content = content;
this.parent = parent;
this.depth = this.parent != null ? this.parent.depth + 1 : 1;
}
@Override
@@ -47,12 +56,12 @@ public class ElementClickList extends Element
@Override
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
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();
}
@@ -67,19 +76,19 @@ public class ElementClickList extends Element
{
return list.get(index);
}
@Override
public String getDisplayString(ButtonStorage<Node> storage)
public String getDisplayString(ButtonValues<Node> values)
{
return logic.translate1(storage.getObject().getKey());
return logic.translate(getKeys());
}
@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;
@@ -88,101 +97,32 @@ public class ElementClickList extends Element
@Override
public String getId()
{
return logic.getId() + 1;
return logic.getId() + depth;
}
}));
final Node node = this.getStorage1().getObject();
this.logic.consumeKey1(node.getKey());
Node node = this.getValues().getObject();
this.logic.consumeKey(this.getKeys());
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.logic.consumeKey2(node.getKey(), node.getEntries().get(this.getStorage2().getIndex()).getKey());
this.child = new ElementClickList(this.x, this.y + 24, node.getEntries(), this.buttonIds, this.content, this.logic, this);
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));
this.button2.enabled = false;
GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.getButtonId(), this.x, this.y + 24, 114, 20, null);
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
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 null;
}
@Nullable
private ButtonStorage<Node> getStorage2()
{
if(this.button2 != null)
{
return this.master.<Node>getStorage(this.button2.getLogic().getId());
return this.content.<Node>getPersistence(this.button.getLogic().getId());
}
return null;
@@ -191,17 +131,42 @@ public class ElementClickList extends Element
@Override
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;
}
else if(button.id == this.buttonId2)
else if(this.child != null)
{
this.button2.actionPerformed(container, button);
return true;
return this.child.actionPerformed(container, button);
}
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.GuiTextFieldTooltip;
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.content.Content;
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()
{
@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

View File

@@ -5,13 +5,14 @@ import java.util.List;
import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.format.TextFormatting;
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.content.Content;
import exopandora.worldhandler.gui.content.element.Element;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -24,9 +25,9 @@ public class ElementPageList<T, K> extends Element
private final int width;
private final int height;
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);
this.list = list;
@@ -34,15 +35,15 @@ public class ElementPageList<T, K> extends Element
this.width = width;
this.height = height;
this.logic = logic;
this.storage = container.getStorage(logic.getId());
this.values = content.getPersistence(logic.getId());
this.ids = ids;
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.storage.setIndex(Math.max(0, this.list.indexOf(this.logic.convert(initial))));
this.values.setObject(0);
this.values.setIndex(Math.max(0, this.list.indexOf(this.logic.convert(initial))));
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 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;
right.enabled = this.storage.getObject() < this.getTotalPages() - 1;
left.enabled = this.values.getObject() > 0;
right.enabled = this.values.getObject() < this.getTotalPages() - 1;
container.add(left);
container.add(right);
@@ -80,12 +81,12 @@ public class ElementPageList<T, K> extends Element
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())
{
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
{
@@ -101,13 +102,33 @@ public class ElementPageList<T, K> extends Element
{
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();
return true;
}
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();
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))
{
this.storage.setIndex(x);
this.values.setIndex(x);
this.logic.onClick(entry);
container.initGui();
return true;
@@ -133,7 +154,7 @@ public class ElementPageList<T, K> extends Element
@Override
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()

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;
@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.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()
{
@@ -20,6 +24,7 @@ public interface ILogicColorMenu
return true;
}
@Override
default String getId()
{
return "color";

View File

@@ -5,7 +5,7 @@ import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public interface ILogicPageList<T, K>
public interface ILogicPageList<T, K> extends ILogic
{
String translate(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);
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.List;
import java.util.stream.Collectors;
import java.util.stream.StreamSupport;
import com.google.common.collect.Lists;
import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderAdvancement;
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.GuiButtonWorldHandler;
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.Category;
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.logic.ILogicPageList;
import exopandora.worldhandler.helper.AdvancementHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.advancements.Advancement;
import net.minecraft.advancements.AdvancementManager;
import net.minecraft.client.Minecraft;
@@ -43,7 +43,7 @@ public class ContentAdvancements extends Content
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
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);
@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
@@ -127,9 +127,9 @@ public class ContentAdvancements extends Content
}
@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

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderButcher;
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.content.impl.abstr.ContentChild;
import exopandora.worldhandler.helper.EntityHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
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 net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiMainMenu;
import net.minecraft.client.gui.GuiMultiplayer;
import net.minecraft.client.gui.GuiScreen;
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.minecraftforge.fml.client.FMLClientHandler;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -33,7 +38,43 @@ public class ContentChangeWorld extends ContentChild
Minecraft.getMinecraft().displayGuiScreen(new GuiWorldSelection(container));
break;
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;
default:
break;

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.impl.BuilderGive;
import exopandora.worldhandler.builder.impl.BuilderSetblock;
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.Contents;
import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.GuiScreen;

View File

@@ -4,6 +4,7 @@ import org.lwjgl.input.Keyboard;
import com.mojang.realmsclient.gui.ChatFormatting;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.ICommandBuilderSyntax;
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.impl.GuiWorldHandlerContainer;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;

View File

@@ -7,6 +7,7 @@ import java.util.stream.Stream;
import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderCustomItem;
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.logic.ILogicPageList;
import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
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.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderClone;
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.GuiTextFieldTooltip;
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.Category;
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.helper.BlockHelper;
import exopandora.worldhandler.helper.ResourceHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
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>()
{
@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
@@ -196,9 +196,9 @@ public class ContentEditBlocks extends Content
}
@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

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import java.util.ArrayList;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderEnchantment;
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.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
import net.minecraft.enchantment.Enchantment;

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderExperience;
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.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;

View File

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

View File

@@ -1,5 +1,6 @@
package exopandora.worldhandler.gui.content.impl;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.config.ConfigSettings;
import exopandora.worldhandler.gui.button.EnumIcon;
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.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.Main;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
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 exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderGeneric;
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.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import org.lwjgl.input.Keyboard;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderNoteEditor;
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.Contents;
import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.block.Block;
import net.minecraft.block.material.Material;
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 exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderGeneric;
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.content.Content;
import exopandora.worldhandler.gui.content.Contents;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.gui.inventory.GuiInventory;

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import java.util.ArrayList;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderMultiCommand;
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.logic.ILogicPageList;
import exopandora.worldhandler.gui.content.impl.abstr.ContentChild;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
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 exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderScoreboardObjectives;
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.impl.abstr.ContentScoreboard;
import exopandora.worldhandler.helper.EntityHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.block.Block;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
@@ -48,47 +48,61 @@ public class ContentScoreboardObjectives extends ContentScoreboard
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
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
public String translate1(String key)
public String translate(String... keys)
{
String format = "gui.worldhandler.scoreboard.objectives.criteria." + key;
String result = I18n.format(format);
if(result.equals(format))
if(keys.length > 1)
{
ResourceLocation location = new ResourceLocation(key);
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);
}
return this.translate(keys[1]);
}
else
{
String format = "gui.worldhandler.scoreboard.objectives.criteria." + keys[0];
String result = I18n.format(format);
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;
}
return result;
}
@Override
@@ -102,24 +116,32 @@ public class ContentScoreboardObjectives extends ContentScoreboard
}
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
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
public String translate2(String key1, String key2)
public void consumeKey(String... keys)
{
return I18n.format("gui.worldhandler.color." + key2);
}
@Override
public void consumeKey1(String key)
{
builderObjectives.setSlot(key);
if(keys.length > 1)
{
this.consumeKeyImpl(keys);
}
else
{
builderObjectives.setSlot(keys[0]);
}
}
@Override

View File

@@ -2,6 +2,7 @@ package exopandora.worldhandler.gui.content.impl;
import com.google.common.base.Predicate;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderScoreboardPlayers;
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.Contents;
import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.relauncher.Side;

View File

@@ -4,6 +4,7 @@ import java.util.Arrays;
import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderScoreboardTeams;
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.logic.ILogicClickList;
import exopandora.worldhandler.gui.content.impl.abstr.ContentScoreboard;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.gui.GuiButton;
import net.minecraft.client.resources.I18n;
import net.minecraftforge.fml.relauncher.Side;
@@ -47,37 +47,39 @@ public class ContentScoreboardTeams extends ContentScoreboard
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
public String translate1(String key)
public String translate(String... keys)
{
return I18n.format("gui.worldhandler.scoreboard.team.options." + key);
}
@Override
public String translate2(String key1, String key2)
{
if(Arrays.stream(EnumColor.values()).map(EnumColor::getFormat).anyMatch(Predicates.equalTo(key2)))
if(keys.length > 1)
{
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
public void consumeKey1(String key)
public void consumeKey(String... keys)
{
builderTeams.setRule(key);
if(keys.length > 1)
{
builderTeams.setValue(keys[1]);
}
else
{
builderTeams.setRule(keys[0]);
}
}
@Override
public void consumeKey2(String key1, String key2)
{
builderTeams.setValue(key2);
}
@Override
public String getId()
{

View File

@@ -5,6 +5,8 @@ import org.lwjgl.input.Keyboard;
import com.google.common.base.Predicate;
import com.google.common.base.Predicates;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderSignEditor;
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.logic.ILogicColorMenu;
import exopandora.worldhandler.helper.BlockHelper;
import exopandora.worldhandler.main.WorldHandler;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.FontRenderer;
import net.minecraft.client.gui.GuiButton;
@@ -35,7 +36,7 @@ import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
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 boolean editColor;

View File

@@ -9,6 +9,7 @@ import org.lwjgl.opengl.GL11;
import com.google.common.base.Predicates;
import exopandora.worldhandler.WorldHandler;
import exopandora.worldhandler.builder.ICommandBuilder;
import exopandora.worldhandler.builder.impl.BuilderSummon;
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.element.impl.ElementPageList;
import exopandora.worldhandler.gui.content.element.logic.ILogicPageList;
import exopandora.worldhandler.main.WorldHandler;
import exopandora.worldhandler.util.UtilPlayer;
import net.minecraft.client.Minecraft;
import net.minecraft.client.gui.GuiButton;

View File

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

View File

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

View File

@@ -4,8 +4,8 @@ import java.util.function.Predicate;
import javax.annotation.Nullable;
import exopandora.worldhandler.Main;
import exopandora.worldhandler.config.ConfigSkin;
import exopandora.worldhandler.main.Main;
import net.minecraft.block.Block;
import net.minecraft.entity.EntityList;
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.world.biome.Biome;
import net.minecraft.world.chunk.Chunk;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class BiomeIndicator
{
private static final Set<String> BIOMES;
private static String CURRENT_BIOME;
private static int TICKS;
private final Set<String> biomes = new HashSet<String>();
private String currentBiome;
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())
{
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))
{
BIOMES.remove(index);
this.biomes.remove(index);
}
}
}
BIOMES.remove("River");
BIOMES.remove("Beach");
this.biomes.remove("River");
this.biomes.remove("Beach");
}
public static void tick()
public void tick()
{
int posX = MathHelper.floor(Minecraft.getMinecraft().player.posX);
int posY = MathHelper.floor(Minecraft.getMinecraft().player.posY);
int posZ = MathHelper.floor(Minecraft.getMinecraft().player.posZ);
BlockPos pos = new BlockPos(posX, posY, posZ);
if(Minecraft.getMinecraft().world != null && Minecraft.getMinecraft().world.isBlockLoaded(pos))
{
Chunk chunk = Minecraft.getMinecraft().world.getChunkFromBlockCoords(pos);
String biome = getBaseBiome(filterName(chunk.getBiome(pos, Minecraft.getMinecraft().world.getBiomeProvider()).getBiomeName()));
if(TICKS == 0 && biome != null)
{
if(CURRENT_BIOME == null || !CURRENT_BIOME.equals(biome))
{
Minecraft.getMinecraft().ingameGUI.displayTitle(biome, null, 20, 60, 20);
TICKS = 100;
CURRENT_BIOME = biome;
}
}
else if(TICKS > 0)
{
TICKS--;
}
}
int posX = MathHelper.floor(Minecraft.getMinecraft().player.posX);
int posY = MathHelper.floor(Minecraft.getMinecraft().player.posY);
int posZ = MathHelper.floor(Minecraft.getMinecraft().player.posZ);
BlockPos pos = new BlockPos(posX, posY, posZ);
if(Minecraft.getMinecraft().world != null && Minecraft.getMinecraft().world.isBlockLoaded(pos))
{
Chunk chunk = Minecraft.getMinecraft().world.getChunkFromBlockCoords(pos);
String biome = this.getBaseBiome(this.filterName(chunk.getBiome(pos, Minecraft.getMinecraft().world.getBiomeProvider()).getBiomeName()));
if(this.ticksRemaining == 0 && biome != null)
{
if(this.currentBiome == null || !this.currentBiome.equals(biome))
{
Minecraft.getMinecraft().ingameGUI.displayTitle(biome, null, 20, 60, 20);
this.ticksRemaining = 100;
this.currentBiome = biome;
}
}
else if(this.ticksRemaining > 0)
{
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])$", "");
}
@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 ])*"))
{

View File

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

View File

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

View File

@@ -11,7 +11,7 @@ import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.Main;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@@ -37,7 +37,7 @@ public class InstallListener implements ActionListener
File mods = new File(directory, "mods");
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);
}
@@ -54,8 +54,8 @@ public class InstallListener implements ActionListener
try
{
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);
JOptionPane.showMessageDialog(null, Main.NAME_AND_VERSION + " has been successfully installed", null, JOptionPane.INFORMATION_MESSAGE);
Files.copy(path, new File(mods, "WorldHandler-$mcversion-$version-Universal.jar").toPath(), StandardCopyOption.REPLACE_EXISTING);
JOptionPane.showMessageDialog(null, Main.NAME + " $mcversion-$version has been successfully installed", null, JOptionPane.INFORMATION_MESSAGE);
}
catch(Exception e)
{

View File

@@ -17,21 +17,22 @@ import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;
import exopandora.worldhandler.main.Main;
import exopandora.worldhandler.Main;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class Window implements Runnable
{
private final String title = Main.NAME_AND_VERSION + " Installer";
private final JFrame frame = new JFrame();
@Override
public void run()
{
String titleString = Main.NAME + " $mcversion-$version Installer";
this.frame.setResizable(false);
this.frame.setTitle(this.title);
this.frame.setTitle(titleString);
this.frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
List<Image> icons = new ArrayList<Image>();
@@ -63,7 +64,7 @@ public class Window implements Runnable
gbcPanel.gridy = 0;
this.frame.add(panel, gbcPanel);
JLabel title = new JLabel(this.title);
JLabel title = new JLabel(titleString);
panel.add(title, this.getButtonConstraints(0, 0));
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.util.math.MathHelper;
import net.minecraftforge.fml.relauncher.Side;
import net.minecraftforge.fml.relauncher.SideOnly;
@SideOnly(Side.CLIENT)
public class UtilPlayer
{
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.custom_times=Benutzerdefinierte Zeiten
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_noon=Mittagszeit
gui.worldhandler.config.key.settings.custom_time_sunset=Sonnenuntergangszeit
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.comment.settings.custom_time_dawn=Biome Indikator Aktiviert
gui.worldhandler.config.comment.settings.command_syntax=Befehlssyntax Aktiviert
gui.worldhandler.config.comment.settings.shortcuts=Schnellsteuerleiste Aktiviert
gui.worldhandler.config.comment.settings.key_shortcuts=Tasten Abkürzungen Aktiviert
gui.worldhandler.config.comment.settings.tooltips=Tooltips Aktiviert
gui.worldhandler.config.comment.settings.watch=Uhr Aktiviert
gui.worldhandler.config.comment.settings.smooth_watch=Geschmeidige Uhr Aktiviert
gui.worldhandler.config.comment.settings.custom_time_dawn=Aktiviert Biome Indikator
gui.worldhandler.config.comment.settings.command_syntax=Aktiviert Befehlssyntax
gui.worldhandler.config.comment.settings.shortcuts=Aktiviert Schnellsteuerleiste
gui.worldhandler.config.comment.settings.key_shortcuts=Aktiviert Tasten Abkürzungen
gui.worldhandler.config.comment.settings.tooltips=Aktiviert Tooltips
gui.worldhandler.config.comment.settings.watch=Aktiviert Uhr
gui.worldhandler.config.comment.settings.smooth_watch=Aktiviert Geschmeidige Uhr
gui.worldhandler.config.comment.settings.pause_game=Spiel Pausieren
gui.worldhandler.config.comment.settings.custom_times=Benutzerdefinierte Zeiten Aktiviert
gui.worldhandler.config.comment.settings.permission_query=Berechtigungsabfrage Aktiviert
gui.worldhandler.config.comment.settings.custom_times=Aktiviert Benutzerdefinierte Zeiten
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_noon=Mittagszeit 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.gamerules=Spielregeln
gui.worldhandler.tab.world.recipes=Rezepte
gui.worldhandler.tab.blocks.edit_blocks=Blöcke Ä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.gamerules=Gamerules
gui.worldhandler.title.world.recipes=Rezepte
gui.worldhandler.title.player.player=Spieler
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_2=Position 2
gui.worldhandler.recipes.give=Geben
gui.worldhandler.recipes.take=Nehmen
gui.worldhandler.scoreboard.slot.list=Liste
gui.worldhandler.scoreboard.slot.belowName=Unter Name
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.custom_times=Custom Times
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_noon=Custom Noon 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.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.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_noon=Ticks upon noon
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.gamerules=Gamerules
gui.worldhandler.tab.world.recipes=Recipes
gui.worldhandler.tab.blocks.edit_blocks=Edit Blocks
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.gamerules=Gamerules
gui.worldhandler.title.world.recipes=Recipes
gui.worldhandler.title.player.player=Player
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_2=Set Pos 2
gui.worldhandler.recipes.give=Give
gui.worldhandler.recipes.take=Take
gui.worldhandler.scoreboard.slot.list=List
gui.worldhandler.scoreboard.slot.belowName=Below Name
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.custom_times=自定义时间
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_noon=自定义正午时间
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.custom_times=自定义时间开启
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_noon=正午的时间
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.gamerules=游戏规则
gui.worldhandler.tab.world.recipes=Recipes
gui.worldhandler.tab.blocks.edit_blocks=编辑方块
gui.worldhandler.tab.blocks.sign_editor=告示牌编辑器
@@ -123,6 +126,7 @@ gui.worldhandler.title.scoreboard=记分板
gui.worldhandler.title.world.world=世界
gui.worldhandler.title.world.gamerules=游戏规则
gui.worldhandler.title.world.recipes=Recipes
gui.worldhandler.title.player.player=玩家
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_2=设置位点 2
gui.worldhandler.recipes.give=Give
gui.worldhandler.recipes.take=Take
gui.worldhandler.scoreboard.slot.list=列表
gui.worldhandler.scoreboard.slot.belowName=名称下方
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",
"promos":
{
"1.12.2-latest": "2.0",
"1.12.2-recommended": "2.0",
"1.12.1-latest": "2.0",
"1.12.1-recommended": "2.0",
"1.12-latest": "2.0",
"1.12-recommended": "2.0",
"1.12.2-latest": "2.1.4",
"1.12.2-recommended": "2.1.4",
"1.12.1-latest": "2.1.4",
"1.12.1-recommended": "2.1.4",
"1.12-latest": "2.1.4",
"1.12-recommended": "2.1.4",
"1.11.2-latest": "1.46",
"1.11.2-recommended": "1.46",
"1.11-latest": "1.42",
@@ -41,6 +41,11 @@
},
"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",
"1.50": "- Fixed Biome Indicator black screen",
"1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation",
@@ -49,6 +54,11 @@
},
"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",
"1.50": "- Fixed Biome Indicator black screen",
"1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation",
@@ -57,6 +67,11 @@
},
"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",
"1.50": "- Fixed Biome Indicator black screen",
"1.49": "- Fixed Bone Block in Note Editor\n- Fixed missing translation",