From 12c980841ba0427db8d5f49148eedbcba05e548d Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Sun, 18 Feb 2018 19:58:57 +0100 Subject: [PATCH 01/40] Release 2.1 --- build.gradle | 2 +- version.json | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/build.gradle b/build.gradle index 28ca043..1691d34 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ 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. -version = "1.12.2-2.0" +version = "1.12.2-2.1" group = "src.worldhandler.main.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "WorldHandler" diff --git a/version.json b/version.json index e0fda07..342daa2 100644 --- a/version.json +++ b/version.json @@ -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", + "1.12.2-recommended": "2.1", + "1.12.1-latest": "2.1", + "1.12.1-recommended": "2.1", + "1.12-latest": "2.1", + "1.12-recommended": "2.1", "1.11.2-latest": "1.46", "1.11.2-recommended": "1.46", "1.11-latest": "1.42", @@ -41,6 +41,7 @@ }, "1.12.2": { + "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 +50,7 @@ }, "1.12.1": { + "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 +59,7 @@ }, "1.12": { + "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", From adcdeb533fb26ba5247eb2e92a6f751283d271d4 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Mon, 19 Feb 2018 22:58:09 +0100 Subject: [PATCH 02/40] Fixed /wh and /worldhandler denying other commands in multiplayer --- build.gradle | 2 +- .../worldhandler/command/FakeCommandHandler.java | 2 +- .../java/exopandora/worldhandler/main/Main.java | 2 +- version.json | 15 +++++++++------ 4 files changed, 12 insertions(+), 9 deletions(-) diff --git a/build.gradle b/build.gradle index 1691d34..044a924 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ 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. -version = "1.12.2-2.1" +version = "1.12.2-2.1.1" group = "src.worldhandler.main.WorldHandler" // http://maven.apache.org/guides/mini/guide-naming-conventions.html archivesBaseName = "WorldHandler" diff --git a/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java b/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java index 1b0c332..68580eb 100644 --- a/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java +++ b/src/main/java/exopandora/worldhandler/command/FakeCommandHandler.java @@ -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); } diff --git a/src/main/java/exopandora/worldhandler/main/Main.java b/src/main/java/exopandora/worldhandler/main/Main.java index 15f96af..9622f38 100644 --- a/src/main/java/exopandora/worldhandler/main/Main.java +++ b/src/main/java/exopandora/worldhandler/main/Main.java @@ -17,7 +17,7 @@ public class Main 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 VERSION = "2.1.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"; diff --git a/version.json b/version.json index 342daa2..02d9ec7 100644 --- a/version.json +++ b/version.json @@ -2,12 +2,12 @@ "homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui", "promos": { - "1.12.2-latest": "2.1", - "1.12.2-recommended": "2.1", - "1.12.1-latest": "2.1", - "1.12.1-recommended": "2.1", - "1.12-latest": "2.1", - "1.12-recommended": "2.1", + "1.12.2-latest": "2.1.1", + "1.12.2-recommended": "2.1.1", + "1.12.1-latest": "2.1.1", + "1.12.1-recommended": "2.1.1", + "1.12-latest": "2.1.1", + "1.12-recommended": "2.1.1", "1.11.2-latest": "1.46", "1.11.2-recommended": "1.46", "1.11-latest": "1.42", @@ -41,6 +41,7 @@ }, "1.12.2": { + "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", @@ -50,6 +51,7 @@ }, "1.12.1": { + "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", @@ -59,6 +61,7 @@ }, "1.12": { + "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", From 6f4364ee8f669fa28d4c3467c3910555cc19228a Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Tue, 10 Apr 2018 17:37:32 +0200 Subject: [PATCH 03/40] Added automatic jar signing --- build.gradle | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/build.gradle b/build.gradle index 044a924..d3e7ab0 100644 --- a/build.gradle +++ b/build.gradle @@ -26,6 +26,16 @@ jar { } } +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" runDir = "run" From abf13e088afb57934ba78e799364b8fe2e040513 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Tue, 10 Apr 2018 17:39:30 +0200 Subject: [PATCH 04/40] Make use of FMLLoadCompleteEvent --- .../java/exopandora/worldhandler/main/Main.java | 1 + .../worldhandler/main/WorldHandler.java | 17 +++++++++++------ 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/main/Main.java b/src/main/java/exopandora/worldhandler/main/Main.java index 9622f38..8912b17 100644 --- a/src/main/java/exopandora/worldhandler/main/Main.java +++ b/src/main/java/exopandora/worldhandler/main/Main.java @@ -22,6 +22,7 @@ public class Main 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 final String CERTIFICATE = "d6261bb645f41db84c74f98e512c2bb43f188af2"; public static void main(String[] args) { diff --git a/src/main/java/exopandora/worldhandler/main/WorldHandler.java b/src/main/java/exopandora/worldhandler/main/WorldHandler.java index fc9cf9a..9258e54 100644 --- a/src/main/java/exopandora/worldhandler/main/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/main/WorldHandler.java @@ -27,6 +27,7 @@ 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.FMLLoadCompleteEvent; import net.minecraftforge.fml.common.event.FMLPostInitializationEvent; import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; @@ -34,7 +35,7 @@ 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) +@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, certificateFingerprint = Main.CERTIFICATE) public class WorldHandler { @Instance(Main.MODID) @@ -60,7 +61,7 @@ public class WorldHandler public void preInit(FMLPreInitializationEvent event) { LOGGER = event.getModLog(); - LOGGER.info("Pre-Initializing " + Main.NAME_AND_VERSION); + LOGGER.info("Pre-Initialisation"); 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()); @@ -73,7 +74,7 @@ public class WorldHandler @EventHandler public void init(FMLInitializationEvent event) { - LOGGER.info("Initializing " + Main.NAME_AND_VERSION); + LOGGER.info("Initialisation"); USERNAME = Minecraft.getMinecraft().getSession().getUsername(); MinecraftForge.EVENT_BUS.register(new exopandora.worldhandler.event.EventHandler()); @@ -84,9 +85,13 @@ public class WorldHandler @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"); - + LOGGER.info("Post-Initialisation"); + } + + @EventHandler + public void loadComplete(FMLLoadCompleteEvent event) + { + LOGGER.info("Load-Complete"); ConfigButcher.load(CONFIG); Content.registerContents(); Category.registerCategories(); From 24b2a18a220d0909248b84157778004c8480e7e9 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 14:22:32 +0200 Subject: [PATCH 05/40] Fixed modded gamerule translations --- .../worldhandler/gui/content/impl/ContentGamerules.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java index b1cddff..05f9ed0 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java @@ -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); } From 3684da3f60f77b0cbeaf3fbe573c31ea14f3e2d5 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 14:23:32 +0200 Subject: [PATCH 06/40] Add progress bar --- .../worldhandler/main/WorldHandler.java | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/main/WorldHandler.java b/src/main/java/exopandora/worldhandler/main/WorldHandler.java index 9258e54..7466851 100644 --- a/src/main/java/exopandora/worldhandler/main/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/main/WorldHandler.java @@ -25,6 +25,8 @@ 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; @@ -39,7 +41,7 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class WorldHandler { @Instance(Main.MODID) - public WorldHandler INSTANCE; + private static WorldHandler INSTANCE; public static KeyBinding KEY_WORLD_HANDLER = new KeyBinding(Main.NAME, Keyboard.KEY_V, "key.categories.misc"); public static KeyBinding KEY_WORLD_HANDLER_POS1 = new KeyBinding(Main.NAME + " Pos1", Keyboard.KEY_O, "key.categories.misc"); @@ -65,10 +67,6 @@ public class WorldHandler 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 @@ -92,9 +90,20 @@ public class WorldHandler 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("Initialising User Interface"); + Content.registerContents(); Category.registerCategories(); + + ProgressManager.pop(bar); } @EventHandler From 112c887bfba474a20208a3089fb62287c6c53680 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 14:25:11 +0200 Subject: [PATCH 07/40] Make client disconnect from old server before connecting to a new one --- .../gui/content/impl/ContentChangeWorld.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java index 9b85969..2dae353 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java @@ -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,21 @@ 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(); + + 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(); + } + })); break; default: break; From e6f0fe4c4dbc0e0880bee8e9a88bd2bb50e6c32f Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 14:33:45 +0200 Subject: [PATCH 08/40] Move Main.java and WorldHandler.java from exopandora.worldhandler.main to exopandora.worldhandler --- src/main/java/exopandora/worldhandler/{main => }/Main.java | 2 +- .../java/exopandora/worldhandler/{main => }/WorldHandler.java | 2 +- .../java/exopandora/worldhandler/builder/CommandBuilder.java | 2 +- .../worldhandler/builder/component/impl/ComponentTag.java | 2 +- src/main/java/exopandora/worldhandler/command/CommandWH.java | 2 +- .../exopandora/worldhandler/command/CommandWorldHandler.java | 4 ++-- src/main/java/exopandora/worldhandler/event/EventHandler.java | 4 ++-- .../exopandora/worldhandler/gui/button/GuiButtonKeyboard.java | 2 +- .../java/exopandora/worldhandler/gui/category/Categories.java | 2 +- .../java/exopandora/worldhandler/gui/category/Category.java | 2 +- .../worldhandler/gui/config/GuiConfigWorldHandler.java | 4 ++-- .../gui/container/impl/GuiWorldHandlerContainer.java | 4 ++-- .../java/exopandora/worldhandler/gui/content/Content.java | 2 +- .../java/exopandora/worldhandler/gui/content/Contents.java | 2 +- .../worldhandler/gui/content/impl/ContentAdvancements.java | 2 +- .../worldhandler/gui/content/impl/ContentButcher.java | 2 +- .../worldhandler/gui/content/impl/ContentContainers.java | 2 +- .../worldhandler/gui/content/impl/ContentContinue.java | 2 +- .../worldhandler/gui/content/impl/ContentCustomItem.java | 2 +- .../worldhandler/gui/content/impl/ContentEditBlocks.java | 2 +- .../worldhandler/gui/content/impl/ContentEnchantment.java | 2 +- .../worldhandler/gui/content/impl/ContentExperience.java | 2 +- .../worldhandler/gui/content/impl/ContentGamerules.java | 2 +- .../exopandora/worldhandler/gui/content/impl/ContentMain.java | 2 +- .../worldhandler/gui/content/impl/ContentMultiplayer.java | 2 +- .../worldhandler/gui/content/impl/ContentNoteEditor.java | 2 +- .../worldhandler/gui/content/impl/ContentPlayer.java | 2 +- .../worldhandler/gui/content/impl/ContentPotions.java | 2 +- .../gui/content/impl/ContentScoreboardObjectives.java | 2 +- .../gui/content/impl/ContentScoreboardPlayers.java | 2 +- .../worldhandler/gui/content/impl/ContentScoreboardTeams.java | 2 +- .../worldhandler/gui/content/impl/ContentSignEditor.java | 2 +- .../worldhandler/gui/content/impl/ContentSummon.java | 2 +- src/main/java/exopandora/worldhandler/helper/BlockHelper.java | 2 +- .../java/exopandora/worldhandler/helper/ResourceHelper.java | 2 +- .../worldhandler/installer/ChangeFolderListener.java | 2 +- .../java/exopandora/worldhandler/installer/ForumListener.java | 2 +- .../exopandora/worldhandler/installer/InstallListener.java | 2 +- src/main/java/exopandora/worldhandler/installer/Window.java | 2 +- 39 files changed, 43 insertions(+), 43 deletions(-) rename src/main/java/exopandora/worldhandler/{main => }/Main.java (97%) rename src/main/java/exopandora/worldhandler/{main => }/WorldHandler.java (99%) diff --git a/src/main/java/exopandora/worldhandler/main/Main.java b/src/main/java/exopandora/worldhandler/Main.java similarity index 97% rename from src/main/java/exopandora/worldhandler/main/Main.java rename to src/main/java/exopandora/worldhandler/Main.java index 8912b17..366b52c 100644 --- a/src/main/java/exopandora/worldhandler/main/Main.java +++ b/src/main/java/exopandora/worldhandler/Main.java @@ -1,4 +1,4 @@ -package exopandora.worldhandler.main; +package exopandora.worldhandler; import java.awt.EventQueue; import java.io.File; diff --git a/src/main/java/exopandora/worldhandler/main/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java similarity index 99% rename from src/main/java/exopandora/worldhandler/main/WorldHandler.java rename to src/main/java/exopandora/worldhandler/WorldHandler.java index 7466851..ca72850 100644 --- a/src/main/java/exopandora/worldhandler/main/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -1,4 +1,4 @@ -package exopandora.worldhandler.main; +package exopandora.worldhandler; import org.apache.commons.lang3.ArrayUtils; import org.apache.logging.log4j.Logger; diff --git a/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java b/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java index cc52194..ef0c1c8 100644 --- a/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java +++ b/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java @@ -8,12 +8,12 @@ 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; diff --git a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java index 057e79a..14180d5 100644 --- a/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java +++ b/src/main/java/exopandora/worldhandler/builder/component/impl/ComponentTag.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/command/CommandWH.java b/src/main/java/exopandora/worldhandler/command/CommandWH.java index 4e10c29..aa4ec6e 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWH.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWH.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java index 5b3eb2b..6969162 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java @@ -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 net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; diff --git a/src/main/java/exopandora/worldhandler/event/EventHandler.java b/src/main/java/exopandora/worldhandler/event/EventHandler.java index 81fcf47..0cec12d 100644 --- a/src/main/java/exopandora/worldhandler/event/EventHandler.java +++ b/src/main/java/exopandora/worldhandler/event/EventHandler.java @@ -2,14 +2,14 @@ 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.resources.I18n; diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java index cd04ba4..6190686 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonKeyboard.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/category/Categories.java b/src/main/java/exopandora/worldhandler/gui/category/Categories.java index d209df7..ecef943 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Categories.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Categories.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/category/Category.java b/src/main/java/exopandora/worldhandler/gui/category/Category.java index 9c7338a..716955d 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Category.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Category.java @@ -6,9 +6,9 @@ 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 exopandora.worldhandler.main.Main; import net.minecraft.util.ResourceLocation; import net.minecraft.util.registry.RegistryNamespaced; import net.minecraftforge.fml.relauncher.Side; diff --git a/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java b/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java index f558c71..15aa168 100644 --- a/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/gui/config/GuiConfigWorldHandler.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java index 6e269ef..20cd80a 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java +++ b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java @@ -12,6 +12,8 @@ import javax.annotation.Nullable; import com.google.common.base.Predicates; import com.mojang.realmsclient.gui.ChatFormatting; +import exopandora.worldhandler.Main; +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 +36,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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/Content.java b/src/main/java/exopandora/worldhandler/gui/content/Content.java index cd66241..cd08d5d 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Content.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Content.java @@ -3,6 +3,7 @@ package exopandora.worldhandler.gui.content; import java.util.HashMap; import java.util.Map; +import exopandora.worldhandler.Main; import exopandora.worldhandler.gui.button.storage.ButtonStorage; import exopandora.worldhandler.gui.content.impl.ContentAdvancements; import exopandora.worldhandler.gui.content.impl.ContentButcher; @@ -25,7 +26,6 @@ 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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/Contents.java b/src/main/java/exopandora/worldhandler/gui/content/Contents.java index 323ce38..376aa6b 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Contents.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Contents.java @@ -1,8 +1,8 @@ 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 exopandora.worldhandler.main.Main; import net.minecraft.util.ResourceLocation; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java index a2e141e..8d52a7e 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java @@ -7,6 +7,7 @@ import java.util.stream.StreamSupport; 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; @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java index 1e964ac..87fb016 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentButcher.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java index 605900b..28a4508 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContainers.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java index 4aa6885..5b5d94e 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentContinue.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java index 7a94c62..3918069 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentCustomItem.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java index 731887c..f1f13e2 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java @@ -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; @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java index 5c8db65..ab59d04 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEnchantment.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java index c10bba6..7c77a82 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentExperience.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java index 05f9ed0..279ccea 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentGamerules.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java index 9db8e11..c775df4 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMain.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java index 1ed41f3..57af421 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentMultiplayer.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java index 66367cd..1f0eb6b 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentNoteEditor.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java index 3656ea1..b15c509 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlayer.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java index 90169bb..b26ca88 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPotions.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java index 6295969..9ba816b 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java index 1038054..56a1ea6 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardPlayers.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java index 3e9a47e..ca6d344 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java index 0331603..89e569d 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java @@ -5,6 +5,7 @@ import org.lwjgl.input.Keyboard; 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.BuilderSignEditor; import exopandora.worldhandler.config.ConfigSkin; @@ -18,7 +19,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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java index 56fa1c2..9e39267 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSummon.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/helper/BlockHelper.java b/src/main/java/exopandora/worldhandler/helper/BlockHelper.java index 12c996e..88e2b83 100644 --- a/src/main/java/exopandora/worldhandler/helper/BlockHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/BlockHelper.java @@ -6,10 +6,10 @@ import java.util.function.Consumer; 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; diff --git a/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java b/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java index 77afb55..3221f92 100644 --- a/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/ResourceHelper.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java b/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java index 5555f0e..8f3e625 100644 --- a/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java +++ b/src/main/java/exopandora/worldhandler/installer/ChangeFolderListener.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/installer/ForumListener.java b/src/main/java/exopandora/worldhandler/installer/ForumListener.java index e038ee2..9bc7a8d 100644 --- a/src/main/java/exopandora/worldhandler/installer/ForumListener.java +++ b/src/main/java/exopandora/worldhandler/installer/ForumListener.java @@ -5,7 +5,7 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URI; -import exopandora.worldhandler.main.Main; +import exopandora.worldhandler.Main; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; diff --git a/src/main/java/exopandora/worldhandler/installer/InstallListener.java b/src/main/java/exopandora/worldhandler/installer/InstallListener.java index e8e663d..cc95c9a 100644 --- a/src/main/java/exopandora/worldhandler/installer/InstallListener.java +++ b/src/main/java/exopandora/worldhandler/installer/InstallListener.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/installer/Window.java b/src/main/java/exopandora/worldhandler/installer/Window.java index 4c6d166..6c87c03 100644 --- a/src/main/java/exopandora/worldhandler/installer/Window.java +++ b/src/main/java/exopandora/worldhandler/installer/Window.java @@ -17,7 +17,7 @@ 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; From 1c353c664c6a7c05fc4e6f7d65eefe150cae3bfe Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 15:22:10 +0200 Subject: [PATCH 09/40] Move version numbers, urls and certificate hash to build.gradle --- build.gradle | 25 ++++++++++++++----- .../java/exopandora/worldhandler/Main.java | 8 ------ .../exopandora/worldhandler/WorldHandler.java | 4 +-- .../command/CommandWorldHandler.java | 4 +-- .../impl/GuiWorldHandlerContainer.java | 2 +- .../worldhandler/installer/ForumListener.java | 6 ++--- .../installer/InstallListener.java | 6 ++--- .../worldhandler/installer/Window.java | 2 +- 8 files changed, 30 insertions(+), 27 deletions(-) diff --git a/build.gradle b/build.gradle index d3e7ab0..449a446 100644 --- a/build.gradle +++ b/build.gradle @@ -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.2" +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.1.1" -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,7 +28,7 @@ compileJava { jar { manifest { - attributes 'Main-Class': 'exopandora.worldhandler.main.Main' + attributes 'Main-Class': 'exopandora.worldhandler.Main' } } @@ -39,7 +45,14 @@ build.dependsOn signJar minecraft { version = "1.12.2-14.23.2.2611" runDir = "run" - + + replace '$version', modversion + replace '$mcversion', mcversion + replace '$compatible', mccompatible + replace '$url', url + replace '$update_url', update_url + replace '$certificate', certificate + // the mappings can be changed at any time, and must be in the following format. // snapshot_YYYYMMDD snapshot are built nightly. // stable_# stables are built at the discretion of the MCP team. @@ -81,11 +94,11 @@ processResources { // replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' - + // replace version and mcversion expand 'version':project.version, 'mcversion':project.minecraft.version } - + // copy everything else except the mcmod.info from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' diff --git a/src/main/java/exopandora/worldhandler/Main.java b/src/main/java/exopandora/worldhandler/Main.java index 366b52c..ddb79d8 100644 --- a/src/main/java/exopandora/worldhandler/Main.java +++ b/src/main/java/exopandora/worldhandler/Main.java @@ -15,14 +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.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 final String CERTIFICATE = "d6261bb645f41db84c74f98e512c2bb43f188af2"; public static void main(String[] args) { diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index ca72850..9761244 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -37,7 +37,7 @@ 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, certificateFingerprint = Main.CERTIFICATE) +@Mod(modid = Main.MODID, name = Main.NAME, acceptedMinecraftVersions = "[$compatible,)", version = "$version", canBeDeactivated = false, guiFactory = "exopandora.worldhandler.gui.config.GuiFactoryWorldHandler", updateJSON = "$update_url", clientSideOnly = true, certificateFingerprint = "$certificate") public class WorldHandler { @Instance(Main.MODID) @@ -65,7 +65,7 @@ public class WorldHandler LOGGER = event.getModLog(); LOGGER.info("Pre-Initialisation"); LOGGER.info("First Release on March 28 2013 - 02:29 PM CET by Exopandora"); - LOGGER.info("Latest Version: " + Main.URL); + LOGGER.info("Latest Version: $url"); CONFIG = new Configuration(event.getSuggestedConfigurationFile()); } diff --git a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java index 6969162..f2d02b1 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java @@ -53,9 +53,9 @@ public class CommandWorldHandler extends CommandBase } 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 { diff --git a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java index 20cd80a..d988f2b 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java +++ b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java @@ -541,7 +541,7 @@ public class GuiWorldHandlerContainer extends Container final int hexAlpha = (int) (0xFF * 0.2) << 24; final int color = ConfigSkin.getLabelColor() + hexAlpha; - 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("$mcversion-$version", this.width - this.fontRenderer.getStringWidth("$mcversion-$version") - 2, this.height - 10, color); //TITLE diff --git a/src/main/java/exopandora/worldhandler/installer/ForumListener.java b/src/main/java/exopandora/worldhandler/installer/ForumListener.java index 9bc7a8d..490bcbd 100644 --- a/src/main/java/exopandora/worldhandler/installer/ForumListener.java +++ b/src/main/java/exopandora/worldhandler/installer/ForumListener.java @@ -5,7 +5,6 @@ import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.net.URI; -import exopandora.worldhandler.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 } } } -} - \ No newline at end of file +} \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/installer/InstallListener.java b/src/main/java/exopandora/worldhandler/installer/InstallListener.java index cc95c9a..f8d4cab 100644 --- a/src/main/java/exopandora/worldhandler/installer/InstallListener.java +++ b/src/main/java/exopandora/worldhandler/installer/InstallListener.java @@ -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) { diff --git a/src/main/java/exopandora/worldhandler/installer/Window.java b/src/main/java/exopandora/worldhandler/installer/Window.java index 6c87c03..bf1f685 100644 --- a/src/main/java/exopandora/worldhandler/installer/Window.java +++ b/src/main/java/exopandora/worldhandler/installer/Window.java @@ -24,7 +24,7 @@ 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 String title = Main.NAME + " $mcversion-$version Installer"; private final JFrame frame = new JFrame(); @Override From 9ae2a732f54f57cd83c9557f31a08dc0c78d2fcd Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 15:24:58 +0200 Subject: [PATCH 10/40] Optimization --- .../java/exopandora/worldhandler/installer/Window.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/installer/Window.java b/src/main/java/exopandora/worldhandler/installer/Window.java index bf1f685..31ef12d 100644 --- a/src/main/java/exopandora/worldhandler/installer/Window.java +++ b/src/main/java/exopandora/worldhandler/installer/Window.java @@ -24,14 +24,15 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class Window implements Runnable { - private final String title = Main.NAME + " $mcversion-$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 icons = new ArrayList(); @@ -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()); From 36a2ffa3355cdceb7844455e9fb414f96be0a700 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 15:33:05 +0200 Subject: [PATCH 11/40] Update changelog for 2.1.2 --- version.json | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/version.json b/version.json index 02d9ec7..d39d069 100644 --- a/version.json +++ b/version.json @@ -2,12 +2,12 @@ "homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui", "promos": { - "1.12.2-latest": "2.1.1", - "1.12.2-recommended": "2.1.1", - "1.12.1-latest": "2.1.1", - "1.12.1-recommended": "2.1.1", - "1.12-latest": "2.1.1", - "1.12-recommended": "2.1.1", + "1.12.2-latest": "2.1.2", + "1.12.2-recommended": "2.1.2", + "1.12.1-latest": "2.1.2", + "1.12.1-recommended": "2.1.2", + "1.12-latest": "2.1.2", + "1.12-recommended": "2.1.2", "1.11.2-latest": "1.46", "1.11.2-recommended": "1.46", "1.11-latest": "1.42", @@ -41,6 +41,7 @@ }, "1.12.2": { + "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", @@ -51,6 +52,7 @@ }, "1.12.1": { + "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", @@ -61,6 +63,7 @@ }, "1.12": { + "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", From a6c6e171f5959eab888895c5cbb4be52b47db302 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 15:50:34 +0200 Subject: [PATCH 12/40] Fix crash when cancelling change to multiplayer server --- build.gradle | 2 +- .../gui/content/impl/ContentChangeWorld.java | 44 ++++++++++++++----- 2 files changed, 34 insertions(+), 12 deletions(-) diff --git a/build.gradle b/build.gradle index 449a446..67de361 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ 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.2" +def modversion = "2.1.3" 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" diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java index 2dae353..5af55ff 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentChangeWorld.java @@ -40,19 +40,41 @@ public class ContentChangeWorld extends ContentChild case 3: ServerData server = Minecraft.getMinecraft().getCurrentServerData(); - Minecraft.getMinecraft().world.sendQuittingDisconnectingPacket(); - Minecraft.getMinecraft().loadWorld((WorldClient)null); - - Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(new GuiScreen() + if(server != null) { - @Override - public void initGui() + Minecraft.getMinecraft().world.sendQuittingDisconnectingPacket(); + Minecraft.getMinecraft().loadWorld((WorldClient)null); + + Minecraft.getMinecraft().displayGuiScreen(new GuiMultiplayer(new GuiScreen() { - FMLClientHandler.instance().connectToServer(new GuiMultiplayer(new GuiMainMenu()), server); - Minecraft.getMinecraft().displayGuiScreen((GuiScreen) null); - Minecraft.getMinecraft().setIngameFocus(); - } - })); + @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; From 7a5637478a72b4499294096974dfddcc02248d2b Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Wed, 11 Apr 2018 15:54:04 +0200 Subject: [PATCH 13/40] Update changelog for 2.1.3 --- version.json | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/version.json b/version.json index d39d069..63c041a 100644 --- a/version.json +++ b/version.json @@ -2,12 +2,12 @@ "homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui", "promos": { - "1.12.2-latest": "2.1.2", - "1.12.2-recommended": "2.1.2", - "1.12.1-latest": "2.1.2", - "1.12.1-recommended": "2.1.2", - "1.12-latest": "2.1.2", - "1.12-recommended": "2.1.2", + "1.12.2-latest": "2.1.3", + "1.12.2-recommended": "2.1.3", + "1.12.1-latest": "2.1.3", + "1.12.1-recommended": "2.1.3", + "1.12-latest": "2.1.3", + "1.12-recommended": "2.1.3", "1.11.2-latest": "1.46", "1.11.2-recommended": "1.46", "1.11-latest": "1.42", @@ -41,6 +41,7 @@ }, "1.12.2": { + "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", @@ -52,6 +53,7 @@ }, "1.12.1": { + "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", @@ -63,6 +65,7 @@ }, "1.12": { + "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", From 0df3e928a2a82b4a4977664c044c0faaee64facb Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 13 Apr 2018 21:11:58 +0200 Subject: [PATCH 14/40] Fix wrong position calculation when min and max value are equal --- .../worldhandler/gui/button/GuiSlider.java | 19 ++++++++----------- .../gui/button/storage/SliderStorage.java | 16 +++++++++++++--- 2 files changed, 21 insertions(+), 14 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java b/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java index 42ca799..3b3d9db 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java @@ -41,24 +41,21 @@ public class GuiSlider extends GuiButton private void initStorage(double min, double max, double start) { - if(this.storage.getObject() == null || this.storage.getObject().getMin() != min || this.storage.getObject().getMax() != max) + if(this.storage.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.storage.setObject(new SliderStorage(min, max, 0.0D)); } else { - this.storage.setObject(new SliderStorage(min, max, (int) MathHelper.clamp(this.getValue(), min, max))); + this.storage.setObject(new SliderStorage(min, max, (start - min) / (max - min))); } } + else if(this.storage.getObject().getMin() != min || this.storage.getObject().getMax() != max) + { + this.storage.setObject(new SliderStorage(min, max, (int) MathHelper.clamp(this.getValue(), min, max))); + } } private void setPosition(double position) diff --git a/src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java b/src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java index fd38fa8..594a505 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java +++ b/src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java @@ -3,6 +3,7 @@ package exopandora.worldhandler.gui.button.storage; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; + @SideOnly(Side.CLIENT) public class SliderStorage { @@ -10,17 +11,21 @@ public class SliderStorage private final double max; private double position; - public SliderStorage(double min, double max, double position) + private SliderStorage(double min, double max) { this.min = min; this.max = max; + } + + public SliderStorage(double min, double max, double position) + { + this(min, max); this.position = position; } public SliderStorage(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); } } \ No newline at end of file From 826ee0338474084f91aec21196f528c01473ce0b Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 13 Apr 2018 21:13:21 +0200 Subject: [PATCH 15/40] Fix modid reference --- .../worldhandler/gui/content/impl/ContentSignEditor.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java index 89e569d..f84084b 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentSignEditor.java @@ -5,6 +5,7 @@ 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; @@ -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; From c326ddf59d742d5c564fcc460af15c7dd6ffc147 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 13 Apr 2018 21:14:48 +0200 Subject: [PATCH 16/40] Update changelog for 2.1.4 --- version.json | 17 ++++++++++------- 1 file changed, 10 insertions(+), 7 deletions(-) diff --git a/version.json b/version.json index 63c041a..897d568 100644 --- a/version.json +++ b/version.json @@ -2,12 +2,12 @@ "homepage": "https://minecraft.curseforge.com/projects/world-handler-command-gui", "promos": { - "1.12.2-latest": "2.1.3", - "1.12.2-recommended": "2.1.3", - "1.12.1-latest": "2.1.3", - "1.12.1-recommended": "2.1.3", - "1.12-latest": "2.1.3", - "1.12-recommended": "2.1.3", + "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,7 @@ }, "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", @@ -53,7 +54,8 @@ }, "1.12.1": { - "2.1.3": "- Fixed crash when cancelling change to multiplayer server", + "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", @@ -65,6 +67,7 @@ }, "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", From 02b1554a8f74a37683a45ec58de8bad5c2e6a372 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 13 Apr 2018 21:15:07 +0200 Subject: [PATCH 17/40] Bump version --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 67de361..39eb666 100644 --- a/build.gradle +++ b/build.gradle @@ -11,7 +11,7 @@ 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.3" +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" From d5158a5737049e4f5228bd552b0803e34ccc0e34 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Sun, 29 Apr 2018 23:42:07 +0200 Subject: [PATCH 18/40] Update logo --- .../worldhandler/installer/icon/icon128.png | Bin 1827 -> 1812 bytes .../worldhandler/installer/icon/icon16.png | Bin 349 -> 339 bytes .../worldhandler/installer/icon/icon256.png | Bin 2704 -> 2537 bytes .../worldhandler/installer/icon/icon32.png | Bin 777 -> 736 bytes .../worldhandler/installer/icon/icon64.png | Bin 952 -> 914 bytes .../assets/worldhandler/installer/logo.png | Bin 2255 -> 2197 bytes .../assets/worldhandler/textures/logo.png | Bin 2624 -> 2114 bytes 7 files changed, 0 insertions(+), 0 deletions(-) diff --git a/src/main/resources/assets/worldhandler/installer/icon/icon128.png b/src/main/resources/assets/worldhandler/installer/icon/icon128.png index 6b3e178150e3111a6c7d1eed14dc1bcaae34ee8e..73c275a4e90b77754bd1811abf561c363ba3b792 100644 GIT binary patch delta 784 zcmV+r1MmE!4wMd%B#|*5165U3ky{=EcXxM@d?6-aYN26kqGWHTaC*0Ke7JLcxpaQH zb$_~cfV+5tyn2MZdxgDxhLO)D42O}#h?2zr|DeXk#h(&c}YY;RCr$Po7-{{K@>&fEh>rCqRb{6KNO7=s?$n1TZU}*P2(bF6J}yXv zK=T4Mhr=&HtXYIW`vkbVXYM7)4uN(F_z&zGj}L(m2!XZ>9NaFxtKom~A&`T>*%m%H zK0W&=e7KdeEJGl3fydYINE`~roleKrbTzu&F1HTfh%XQs!s)E(o2^=Xh8lLm+Q~Pr`Ey!c*~* z#1Eltvaaw}^m@Gz$XI|9rqE}C!f^-@&e~n!Szp1&=MN(tNGE?g{}qHl;{p_|3gKJ{ zC%}@HOA}BTFSPNS7>~yx@DB+PUM-)8Q#QM@R+Ug07dszBo^6CcBLW;go^NkP39p9y z+`?=&1J3BBqI5<^RRajklX=!O|Yin$5Y;A3A zZfQb8~Zbb#-=jc9CWwGHr5@adwk*d6aZ{m34ZRc6*k0e3xKqp2R1%r^F@;3v^FF7dOt8fNTqNOCYXq zoXEF;1uW2UfvxotyDo@)3lt!5x`aQbKS;+!9d&Wxb~N_DABeut2#295U=iW6@N|P}jp^{VpU6F@GEm zPvBTQ5*8>|fF>ja0XELf$efX8WYjWlN$#~!?|sNT6BZ~};G@VJ{}zmZ05w94^0)?s z{}SrI6iy@V2@8}fKocUsVMEYmaXZL$jOpex76|luJ+e=zEl|Dy;Yj2_<}_li8E3N@ zxfK#fO=yAg1-=NvAO~_|s@DpiDSxmc1jru06ZeD#$`zmqX*xo4AmbguxGf^^I}jRm zYC=7jj8=XZSfF)*)PaIP$TGS4>H=Ry)VPd)h^N8=YZIUc;Ejl&ERbGvLZeOsJQJ*Z z4n)2M{$l|?goMK`;V%T;P5=Tia^{Q(WK_*}6URucd=Ocnbpbwv3c0WuX8tiA}nxWf&5+ZE5Yl_ro86w#gWKsOQ?k2 z3JX}^!U7yZR|SU&KRnzQ%;BM6ji=sNIu{F+EAUdp9(xDkP~<>7O;Q?+7XECgax`Gz@LqnoW0lt7N`V(BG#LLxW#|X oQo68!1t6_9LnK+W-In07*qoM6N<$g4T|9rvLx| diff --git a/src/main/resources/assets/worldhandler/installer/icon/icon16.png b/src/main/resources/assets/worldhandler/installer/icon/icon16.png index 39458ffa9095af9e62d426a6456a0f12416f3085..6d19b4e5f1ef7b4c01df5dc07d136c9274f1d1ae 100644 GIT binary patch delta 264 zcmV+j0r&ph0@DJJJPyDB01m(bYSxJf0000PkxCnXGBNQWX_Wu~0MJQ9K~y+Tosdlm z!Y~jjm^U z%Q6gafP8V)eNbA|ii%q4cugKBFJ<;E83?E}p@LV*ll1uA5MyipY{zyWv@RTyLJ Y32d11(v!rfk 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 diff --git a/src/main/resources/assets/worldhandler/installer/icon/icon32.png b/src/main/resources/assets/worldhandler/installer/icon/icon32.png index 501e35c031cf8d5da2168695ad3417a3c34e0a19..c98457b160c263a698c2be2bbe8fa35b72cb0cd8 100644 GIT binary patch delta 691 zcmV;k0!;mh2H*vdB#|)~f5HF&4#EKyC`y0;000?uMObuGZ)S9NVRB^vaA9d~bS`dX zbRaY?FfKAN@gQlH0007ANkl&QYP9r#?1>zM|r8Yd$mEd3h$IP(9Ue`Aj)32n(_QsUAd z%cDkcI2^{N07Ts8sNe4&L4*OAoU~G@l#zjO0Y?3J68bj)e(%m$<*t2VfKI1#Os!VS zNXPAVJ1`&C;>NBYK%r0=seC>!*=*MIi^ZaSqDrM==E@7(a^}iwKLCs}nM}Yum&-}1 zR0_nxV=}+9(v$Poe>S57P+k@zD>4EmY^L#At!Cn=@$9GEUHdMTrLS^s_N`w96o7@b z5(+>icoJ8*h4me&-S0`gv19tv>8Iv6AP+{GBv}ZK7Gl1Es(@u;xf$KMX23DW!%f%b-qXX!-fGqW5 zp{(<(Jt@wAwz040FA+@A5BUDb8Q6U(xGD_ Z@e7PV9~WzW@LvD`002ovPDHLkV1mfJM{)oF delta 707 zcmV;!0zCcT1&IcbBnkm@Qb$4nuFf3kks%un!vFvd!vV){sAK>D02q-<8-Fwsf&%jZ z00MeRL_t(oN9C5=P8v}ZhPmfOdg&#J7d{2i+FG^RTI5`q5%7Gh*0h?oYOH53fWQMZ zHdL!^cn;pc7a&>XUuNy>88I=lVG`4eKWiVz{=c>MVF(ZrD;NxtUlLD9nKzqF-=stM zZVuJ!bp>$`0F&KTI2>ld+kXMj?#JEG(*Ovx&Sxj3ul;C%N~Lm7rBaC{{c^eNn0L#b z-ZcYACX;QINF*p0i*Y-ZN~s80mc?`N_uDk^dfyBHM$u^0VIGgiDV&{ga^<8C za~O&Q0Or}b3knY#zJCMA7^Zs0wrz9l?d?&9%b%_tTYw7S8X9kbUI9p8By$~L;p5#_ zpg+HHMXOsk^y=M7=KxRvXliCp8A-&c*DHWF4x;fE$eo8^p0>YorZ5mAMBIHCBBGB+ z2vEjbfGdZ$9i^A6CMVq81_0nTzWk-d&1+W2&H&6Mb6pr)Z+{uCZU1r1;|#2PzM-Ls zWA6a+Ey(6~)Wd?Z7FKGMD*RAmZoyoDMkdd^1EBl^LwPPEJ}Uhqd)$VekA3GcoN^g^ zNS*<*`EP2G(dapiCyUAupIJc2Jfy=&+vxv5C#A3bD1dJ2{{|3q1<-ms8Nxm3hZKN7 pwEI!F1V8vH033nvOLv|W_y_ThSaEaISa<*c002ovPDHLkV1i@{LjC{% diff --git a/src/main/resources/assets/worldhandler/installer/icon/icon64.png b/src/main/resources/assets/worldhandler/installer/icon/icon64.png index 4a1b9a394f43aa49c695224132b2b5822b045c54..2ee8100d10069096e10587112c3944ffaabf7a4a 100644 GIT binary patch delta 870 zcmV-s1DX7|2a*SnB#|)~f5HF&4#EKyC`y0;000?uMObuGZ)S9NVRB^vaA9d~bS`dX zbRaY?FfKAN@gQlH0009INkl7x684ipH~`;-MC3n_8(@4$4uD z#|w>T^r8^@0E$)=Bs>QXLQ?5(KZKRp8A!-Xnb|w}E@sc(Wd1K}f3KEl#*S<@+fE|g zc;O>xa}wyra}O5o?Cd0xP!VYnusbpx_D0f!!`9Z8Aa6H*dIjuNLYM$Ho^*1#+yTh# z1-JwR{gIQ57vKeW0mma?_mi`y33}!ZUchk+SXo&)6iZ7>2e9{-mzRZ|KP(dqzl0YM zmw;licqB$fM#Rw2e~@6lR4NI34b^H@u&*+{D$ZPaBfNmP1Q4iDC

rhKGkmxm*@O zYdVD8r{wQWx5W8t?}Zl-wE&tI4@Rj{qKM(XE0|qhtJMVSVea`Kac}mgs7`(t=LX*i zFCc0G907tLfCsimf_bhv5?r(1iW{F_6SW5|QJ-5A%=hOPe}xwiwSY#WA?yRg_V%{m z+6o{rA|Rj73j)&gD1GL+zHt46@B*S1z!5+I&CCWyM5R&@92HA!veLK->bF&8Dz{fZ(>&t%!w}n}Xm33*+|0 zs>t=f5?(;me*!oHHt6W+sGziIegtP-U*9QVgH1nK7j~ZJ#}VM4q1bys>IG2BE(p#w z!3jX~BNzf)M`H5fKW3k8h)Xv=2``}61Q6U+@&pDegmo?v9EsSQU{LrDsS!Z4vjX@+ zL~vJ-c6;$ql-b8{%TL#SJ_cu=ZitIFJ_;`&Y614OIHkXW<1z zEr8}n69RsyI6d%M*!yR%z7?$FtE^pjRJ?$w1=Qy{|C;`PEe)3oU&LUsA#6Z?%tXZg zz58*AT(R@9{XCv}0liAlGk5R;j!VEv#S8EPynu8Hu))C#Kmdb@u#HK<3$Owh+z8r~ w1f0PcsTaUtVbbWv3m-w7lR!6KcVseu0RZlZO;|RZL;wH)07*qoM6N<$f@k7@t^fc4 delta 883 zcmV-(1C0EV2e=22Bnkm@Qb$4nuFf3kks%un!vFvd!vV){sAK>D02q-<8-Fwsf&%jZ z00SvWL_t(|UhSLPP7^^Khq>oPy!4WU3!b784+ttAYAJ1n)|R8nLC~l~1)_LBFA9MN zFdCGDhUef7cma}?{`525zq=_UWEZw`@g@Dw%#!(inVH>fLyPBmK3ZE_y(D6D!ha1x z7bgLm6aIZ*;K9K`A_)`W1b-wwIPC833M;}1Xe59O&pN48$_KfffG`0;f8;FV1ULas zz{v<`Ied0H%>>Q4h7)ko0@l{nj>O8!iVxery1FWC`%x(kF9;_fE&;h*?pXBq_lv&1 zK0$jvpBJ`m&=0jF#2do3{QO*#qn?AQty&*0-_ec79a=$n6TXv zv{SPss2Oj?6^G_U`O$_Lnf@V0AOE2{y)2x7s0CE3RbeN*x3?##0Ri+Am>MDJbXpMH z^OglmpWxJ2ZoL;yK!4N%*a8UPFe6Y~Tbmdd81P~HZOv_NY-Up+prhlQAUOR_K->Zd zjtCowcD91;r{3S+5(Ks&fJ4v;h+Dw=`nn)kSU_%%Vf_Rrpv4Lx_~6)Ak?LL$PC(QG z*a9qZg4%%8rBX>yx3`}cHsHjwZ9!1m&lcciDE2d;=>^m;|9|==4pxj^@?ioVJlPVq ze|&aROug6a~qs|z9YJBe-KVU)B^0+;)9iW!O~^I99Bb<8zMjSMc8qT zAh;FObN7>Q0-_ec;n&$!5gbPRP;sGWQP2(-Z@d+Z<5AX*J1$N@)B*-8uZ5k+wajPH zo2v>NkRLMH0VgHktW4qrH~~&Ta|*D*!3jWs_xGQN zXlQg{Qg8yS04pNsq9i~*@;U*0urM%b*qpwio}i19fIp|#@*4ypVbEOO@*V&H002ov JPDHLkV1lMsjMxAG diff --git a/src/main/resources/assets/worldhandler/installer/logo.png b/src/main/resources/assets/worldhandler/installer/logo.png index 7d0e11a9cef336c0f3413498ff004fdb3772f616..de3c7ede871660f6c20863d126db5b9a3c7530eb 100644 GIT binary patch delta 1172 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 T#yr3Y00000NkvXXu0mjf9E&=^ delta 1663 zcmV-_27vj(5Wp0WLJT=MG&ndoRaI43U3rm69s_oEc9CfzMQ?J1ZgZ7zbAWPnf^~V3 zb$XL_dzW{8n|FPlU}~XZYocUtrgnUwaC*0Nez|pjx_W`Ac!IooguHu&y?lngeu%$< ziLjBk9ukO>#Q*=G^76Uy@w~>y#_Q|IvEeiV1ovZ~5VJi47Xg2}000iV0mt~%HUIzs z7<5HgbW?9;ba!ELWdLwtX>N2bZe?^JG%heMIczh2P5=M}rb$FWRCr$Pnu~VRI1q+u z$U^QZx2B=opuugJugWwL)$OWJw66q)!^CObP9wX~H~A`@TCq%M(*i}Uj>q!O9rqHsa`MyAydvh6O3~b_rRG8;kis!(%27yLa`MyA zyy?ey_HLN`Ce6NylPlEty#r{;9^3B^26%qJq|@p3S}hPdJe*8Y(xXR9napWMGy%4V zkjvwyI3|B8X||G+BHM>co7~AQLW7K!ighDo5D%olOt74o!KKcN&PX6d3Gz4%UvpAq z`{W? z8m0}4+4D?zik#*H3u=qhB4+v&rHe(ji3bTC5GsF{p>qg@V}hl2hRA~~#;OUdYH1#1 zvB(Ic3|dH=BHNT3>uQ&`UQ_|MJ86=g$TUOtS35hkN%bnBc)) zL2eQJ#kLXljFm1JUcs2~%K*;*$lVHQ(z*qU%D!$ISFa^|Y`-th%$+-Ve)A?+oSw=a zo2HXV^?Qemyasr##+nE$hvc<^F67%+hm(KflyOWBSvZJoT49;!-NJKKix&fYw(_ae zyf)B>U!&!m%o{y$)*Sj%TYk!hRmnu2ojeDbA3x-oIX#_Dan7={vx9@BOnBVx7q2nS z9OnvIds|(qVBh3$;x-vuy?F&?g8Km;Svu5WrQu7QD~fx8qooSS)#ubhUjTi%F%Z^$^ z7JL|%8!cJHoi-aoX5*@4BELy$HXlEpPO}Ug8jZ;$NhXs<V(C&t($nNGid|A&86$%JohU%ET6H8QR09-j0PMX}dwwd<^^U`*&y zue`N&S1e^ThAyj2#+2L3FYdIskh&qXbdP=U0?&;IEWUj+?X$Co4=b2p6Qt4clJS~~ zkGBSViD|}6k__*ih)WHuiNJEmmP^brNW0OJt*eks=%BIi(&GjYUo9PSQ*eLAVM6ng z5FKhw5nJl*FyRms*Wm{42OTWZjHyI(f#{l(%#-^bZ`LAmCpq0Bm~6A_%JXYCE}cy z3=P|q>3$-UQER#vzA4ri`XkOhQaDK=qSA>owG@sCtrHDR1__@h1(y$`cu=^%R--icEY(CcYw*MS)0UQr0#z0TnaD^%a@;+Eyl@qElQ`TSp`^ zsgh*^Ds`ltw@HzSFNaB#Dl+jEnfQuKd_^X{A`@Sc$)YYV{{>kv_@FCaQO^JX002ov JPDHLkV1kXnGjRX_ From 52a1678442b946056c51923e360e24a31c868b10 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:01:45 +0200 Subject: [PATCH 19/40] Update README --- README.md | 81 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index 9021bf1..576c4d0 100644 --- a/README.md +++ b/README.md @@ -8,42 +8,59 @@ 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 + + + + + + + + + +
+ Featured Client Commands
+
+ Featured Server Commands
+
+
    +
  • /advancement
  • +
  • /blockdata
  • +
  • /clear
  • +
  • /clone
  • +
  • /difficulty
  • +
  • /effect
  • +
  • /enchant
  • +
  • /fill
  • +
  • /gamemode
  • +
  • /gamerule
  • +
  • /give
  • +
  • /kill
  • +
  • /scoreboard
  • +
  • /setworldspawn
  • +
  • /spawnpoint
  • +
  • /summon
  • +
  • /time
  • +
  • /weather
  • +
  • /xp
  • +
+
+
    +
  • /ban
  • +
  • /deop
  • +
  • /kick
  • +
  • /op
  • +
  • /pardon
  • +
  • /save-all
  • +
  • /save-off
  • +
  • /save-on
  • +
  • /whitelist
  • +
+
+ # Download # Compiled and signed versions: https://minecraft.curseforge.com/projects/world-handler-command-gui/files Requires: Minecraft Forge (http://files.minecraftforge.net/) From def22e1ebb778721d82302c584986eb268abc624 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:16:32 +0200 Subject: [PATCH 20/40] Update variable names --- .../gui/button/GuiButtonList.java | 38 +- .../worldhandler/gui/button/GuiSlider.java | 36 +- .../button/logic/ColorListButtonLogic.java | 8 +- .../gui/button/logic/IListButtonLogic.java | 12 +- .../ButtonValues.java} | 4 +- .../SliderValues.java} | 10 +- .../worldhandler/gui/category/Category.java | 2 +- .../impl/GuiWorldHandlerContainer.java | 32 +- .../worldhandler/gui/content/Content.java | 22 +- .../worldhandler/gui/content/Contents.java | 8 +- .../element/impl/ElementClickList.java | 62 +-- .../element/impl/ElementColorMenu.java | 6 +- .../content/element/impl/ElementPageList.java | 30 +- .../gui/content/impl/ContentAdvancements.java | 10 +- .../gui/content/impl/ContentEditBlocks.java | 10 +- .../gui/content/impl/ContentPlaysound.java | 470 ++++++++++++++++++ 16 files changed, 621 insertions(+), 139 deletions(-) rename src/main/java/exopandora/worldhandler/gui/button/{storage/ButtonStorage.java => persistence/ButtonValues.java} (85%) rename src/main/java/exopandora/worldhandler/gui/button/{storage/SliderStorage.java => persistence/SliderValues.java} (79%) create mode 100644 src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java index e8dd642..0addb1e 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java @@ -4,7 +4,7 @@ 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; @@ -17,21 +17,21 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class GuiButtonList extends GuiButtonWorldHandler { private final IListButtonLogic logic; - private final ButtonStorage storage; + private final ButtonValues persistence; private int mouseX; private int mouseY; - public GuiButtonList(int id, int x, int y, int width, int height, Content container, IListButtonLogic logic) + public GuiButtonList(int id, int x, int y, int width, int height, Content content, IListButtonLogic 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 logic) + public GuiButtonList(int id, int x, int y, int width, int height, EnumTooltip tooltipType, Content content, IListButtonLogic 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 +46,7 @@ public class GuiButtonList 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 +77,7 @@ public class GuiButtonList 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); @@ -102,34 +102,34 @@ public class GuiButtonList extends GuiButtonWorldHandler { if(this.isHoveringLeft(this.mouseX, this.mouseY)) { - if(this.storage.getIndex() > 0) + if(this.persistence.getIndex() > 0) { - this.storage.decrementIndex(); + this.persistence.decrementIndex(); } else { - this.storage.setIndex(this.logic.getMax() - 1); + this.persistence.setIndex(this.logic.getMax() - 1); } } else if(this.isHoveringRight(this.mouseX, this.mouseY)) { - if(this.storage.getIndex() < this.logic.getMax() - 1) + if(this.persistence.getIndex() < this.logic.getMax() - 1) { - this.storage.incrementIndex(); + this.persistence.incrementIndex(); } else { - this.storage.setIndex(0); + 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 getLogic() diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java b/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java index 3b3d9db..835da31 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiSlider.java @@ -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,64 +25,64 @@ public class GuiSlider extends GuiButton private final String name; private final ISliderResponder responder; private final Container frame; - private final ButtonStorage storage; + private final ButtonValues 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) + if(this.persistence.getObject() == null) { if(min == max) { - this.storage.setObject(new SliderStorage(min, max, 0.0D)); + this.persistence.setObject(new SliderValues(min, max, 0.0D)); } else { - this.storage.setObject(new SliderStorage(min, max, (start - min) / (max - min))); + this.persistence.setObject(new SliderValues(min, max, (start - min) / (max - min))); } } - else if(this.storage.getObject().getMin() != min || this.storage.getObject().getMax() != max) + else if(this.persistence.getObject().getMin() != min || this.persistence.getObject().getMax() != max) { - this.storage.setObject(new SliderStorage(min, max, (int) MathHelper.clamp(this.getValue(), min, 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) { @@ -188,7 +188,7 @@ public class GuiSlider extends GuiButton return false; } - + @Override public void mouseReleased(int mouseX, int mouseY) { diff --git a/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java b/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java index 3711650..a2350b6 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java +++ b/src/main/java/exopandora/worldhandler/gui/button/logic/ColorListButtonLogic.java @@ -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 } @Override - public String getTooltipString(ButtonStorage storage) + public String getTooltipString(ButtonValues 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()); } diff --git a/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java b/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java index a5e1db4..0f3ce55 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java +++ b/src/main/java/exopandora/worldhandler/gui/button/logic/IListButtonLogic.java @@ -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 { - void actionPerformed(Container container, GuiButton button, ButtonStorage storage); + void actionPerformed(Container container, GuiButton button, ButtonValues values); int getMax(); T getObject(int index); - String getDisplayString(ButtonStorage storage); + String getDisplayString(ButtonValues values); - default String getTooltipString(ButtonStorage storage) + default String getTooltipString(ButtonValues 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; diff --git a/src/main/java/exopandora/worldhandler/gui/button/storage/ButtonStorage.java b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java similarity index 85% rename from src/main/java/exopandora/worldhandler/gui/button/storage/ButtonStorage.java rename to src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java index b8a6dc6..531ddab 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/storage/ButtonStorage.java +++ b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java @@ -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 +public class ButtonValues { private int index; private T object; diff --git a/src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java b/src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValues.java similarity index 79% rename from src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java rename to src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValues.java index 594a505..01b54c3 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/storage/SliderStorage.java +++ b/src/main/java/exopandora/worldhandler/gui/button/persistence/SliderValues.java @@ -1,29 +1,29 @@ -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; - private SliderStorage(double min, double max) + private SliderValues(double min, double max) { this.min = min; this.max = max; } - public SliderStorage(double min, double max, double position) + 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, max); this.position = this.valueToPosition(value); diff --git a/src/main/java/exopandora/worldhandler/gui/category/Category.java b/src/main/java/exopandora/worldhandler/gui/category/Category.java index 716955d..502da52 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Category.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Category.java @@ -61,7 +61,7 @@ public class Category public static void registerCategories() { registerCategory(0, "main", new Category(Contents.MAIN, Contents.CONTAINERS, Contents.MULTIPLAYER)); - registerCategory(1, "entities", new Category(Contents.SUMMON)); + registerCategory(1, "entities", new Category(Contents.SUMMON, Contents.PLAYSOUND)); 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)); diff --git a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java index d988f2b..665799f 100644 --- a/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java +++ b/src/main/java/exopandora/worldhandler/gui/container/impl/GuiWorldHandlerContainer.java @@ -12,7 +12,6 @@ import javax.annotation.Nullable; import com.google.common.base.Predicates; import com.mojang.realmsclient.gui.ChatFormatting; -import exopandora.worldhandler.Main; import exopandora.worldhandler.WorldHandler; import exopandora.worldhandler.builder.impl.BuilderDifficulty; import exopandora.worldhandler.builder.impl.BuilderDifficulty.EnumDifficulty; @@ -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("$mcversion-$version", this.width - this.fontRenderer.getStringWidth("$mcversion-$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 diff --git a/src/main/java/exopandora/worldhandler/gui/content/Content.java b/src/main/java/exopandora/worldhandler/gui/content/Content.java index cd08d5d..032d6f6 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Content.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Content.java @@ -4,7 +4,7 @@ import java.util.HashMap; import java.util.Map; import exopandora.worldhandler.Main; -import exopandora.worldhandler.gui.button.storage.ButtonStorage; +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; @@ -19,6 +19,7 @@ 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.ContentScoreboardObjectives; import exopandora.worldhandler.gui.content.impl.ContentScoreboardPlayers; @@ -45,6 +46,7 @@ public abstract class Content implements IContent //ENTITIES registerContent(3, "summon", new ContentSummon()); + registerContent(21, "playsound", new ContentPlaysound()); //ITEMS registerContent(5, "custom_item", new ContentCustomItem()); @@ -88,24 +90,24 @@ public abstract class Content implements IContent REGISTRY.register(id, textualID, content); } - private Map storage; + private Map persistence; - public ButtonStorage getStorage(Object id) + public ButtonValues getPersistence(Object id) { - if(this.storage == null) + if(this.persistence == null) { - this.storage = new HashMap(); + this.persistence = new HashMap(); } - if(this.storage.containsKey(id)) + if(this.persistence.containsKey(id)) { - return this.storage.get(id); + return this.persistence.get(id); } - ButtonStorage storage = new ButtonStorage(); + ButtonValues values = new ButtonValues(); - this.storage.put(id, storage); + this.persistence.put(id, values); - return storage; + return values; } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/Contents.java b/src/main/java/exopandora/worldhandler/gui/content/Contents.java index 376aa6b..dbbddfe 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Contents.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Contents.java @@ -15,6 +15,7 @@ public class Contents public static final Content MULTIPLAYER; public static final Content SUMMON; + public static final Content PLAYSOUND; public static final Content CUSTOM_ITEM; public static final Content ENCHANTMENT; @@ -47,6 +48,7 @@ public class Contents MULTIPLAYER = Contents.getRegisteredContainer("multiplayer"); SUMMON = Contents.getRegisteredContainer("summon"); + PLAYSOUND = Contents.getRegisteredContainer("playsound"); CUSTOM_ITEM = Contents.getRegisteredContainer("custom_item"); ENCHANTMENT = Contents.getRegisteredContainer("enchantment"); @@ -75,13 +77,13 @@ public class Contents private static T getRegisteredContainer(String name) { - Content container = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name)); + Content content = Content.REGISTRY.getObject(new ResourceLocation(Main.MODID, name)); - if(container == null) + if(content == null) { throw new IllegalStateException("Invalid Container requested: " + name); } - return (T) container; + return (T) content; } } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java index b7da6df..0758d8a 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java @@ -7,7 +7,7 @@ import javax.annotation.Nullable; import exopandora.worldhandler.gui.button.EnumTooltip; import exopandora.worldhandler.gui.button.GuiButtonList; 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; @@ -26,16 +26,16 @@ public class ElementClickList extends Element private final ILogicClickList logic; private GuiButtonList button1; private GuiButtonList button2; - private final Content master; + private final Content content; - public ElementClickList(int x, int y, List list, int buttonId1, int buttonId2, Content container, ILogicClickList logic) + public ElementClickList(int x, int y, List list, int buttonId1, int buttonId2, Content content, ILogicClickList logic) { super(x, y); this.list = list; this.buttonId1 = buttonId1; this.buttonId2 = buttonId2; this.logic = logic; - this.master = container; + this.content = content; } @Override @@ -47,12 +47,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() + container.add(this.button1 = new GuiButtonList(this.buttonId1, this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.content, new IListButtonLogic() { @Override - public void actionPerformed(Container container, GuiButton button, ButtonStorage storage) + public void actionPerformed(Container container, GuiButton button, ButtonValues values) { - master.getStorage(listButtonLogic2.getId()).setIndex(0); + content.getPersistence(listButtonLogic2.getId()).setIndex(0); container.initButtons(); } @@ -69,17 +69,17 @@ public class ElementClickList extends Element } @Override - public String getDisplayString(ButtonStorage storage) + public String getDisplayString(ButtonValues values) { - return logic.translate1(storage.getObject().getKey()); + return logic.translate1(values.getObject().getKey()); } @Override - public String getTooltipString(ButtonStorage storage) + public String getTooltipString(ButtonValues 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; @@ -92,17 +92,17 @@ public class ElementClickList extends Element } })); - final Node node = this.getStorage1().getObject(); + final Node node = this.getValues1().getObject(); this.logic.consumeKey1(node.getKey()); 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()); + container.add(this.button2 = new GuiButtonList(this.buttonId2, this.x, this.y + 24, 114, 20, EnumTooltip.TOP_RIGHT, this.content, this.listButtonLogic2)); + this.logic.consumeKey2(node.getKey(), node.getEntries().get(this.getValues2().getIndex()).getKey()); } else { - container.add(this.button2 = new GuiButtonList(this.buttonId2, this.x, this.y + 24, 114, 20, EnumTooltip.TOP_RIGHT, this.master, this.listButtonLogic2)); + container.add(this.button2 = new GuiButtonList(this.buttonId2, this.x, this.y + 24, 114, 20, EnumTooltip.TOP_RIGHT, this.content, this.listButtonLogic2)); this.button2.enabled = false; } } @@ -110,7 +110,7 @@ public class ElementClickList extends Element private final IListButtonLogic listButtonLogic2 = new IListButtonLogic() { @Override - public void actionPerformed(Container container, GuiButton button, ButtonStorage storage) + public void actionPerformed(Container container, GuiButton button, ButtonValues values) { container.initButtons(); } @@ -118,9 +118,9 @@ public class ElementClickList extends Element @Override public int getMax() { - if(getStorage1().getObject() != null) + if(getValues1().getObject() != null) { - return getStorage1().getObject().getEntries().size(); + return getValues1().getObject().getEntries().size(); } return 0; @@ -129,31 +129,31 @@ public class ElementClickList extends Element @Override public Node getObject(int index) { - if(getStorage1().getObject().getEntries() != null) + if(getValues1().getObject().getEntries() != null) { - return getStorage1().getObject().getEntries().get(index); + return getValues1().getObject().getEntries().get(index); } return null; } @Override - public String getDisplayString(ButtonStorage storage) + public String getDisplayString(ButtonValues values) { - if(storage.getObject() != null) + if(values.getObject() != null) { - return logic.translate2(getStorage1().getObject().getKey(), storage.getObject().getKey()); + return logic.translate2(getValues1().getObject().getKey(), values.getObject().getKey()); } return null; } @Override - public String getTooltipString(ButtonStorage storage) + public String getTooltipString(ButtonValues values) { - if(getStorage1().getObject().getEntries() != null) + if(getValues1().getObject().getEntries() != null) { - return storage.getObject().getKey() + " (" + (storage.getIndex() + 1) + "/" + getStorage1().getObject().getEntries().size() + ")"; + return values.getObject().getKey() + " (" + (values.getIndex() + 1) + "/" + getValues1().getObject().getEntries().size() + ")"; } return null; @@ -167,22 +167,22 @@ public class ElementClickList extends Element }; @Nullable - private ButtonStorage getStorage1() + private ButtonValues getValues1() { if(this.button1 != null) { - return this.master.getStorage(this.button1.getLogic().getId()); + return this.content.getPersistence(this.button1.getLogic().getId()); } return null; } @Nullable - private ButtonStorage getStorage2() + private ButtonValues getValues2() { if(this.button2 != null) { - return this.master.getStorage(this.button2.getLogic().getId()); + return this.content.getPersistence(this.button2.getLogic().getId()); } return null; diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java index 50b3a71..6a8082a 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementColorMenu.java @@ -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 storage) + public void actionPerformed(Container container, GuiButton button, ButtonValues values) { - string.setColor(storage.getIndex()); + string.setColor(values.getIndex()); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java index b76bd1b..d7eae58 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java @@ -5,7 +5,7 @@ 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; @@ -24,9 +24,9 @@ public class ElementPageList extends Element private final int width; private final int height; private final int[] ids; - private final ButtonStorage storage; + private final ButtonValues values; - public ElementPageList(int x, int y, List list, K initial, int width, int height, int length, Content container, int[] ids, ILogicPageList logic) + public ElementPageList(int x, int y, List list, K initial, int width, int height, int length, Content content, int[] ids, ILogicPageList logic) { super(x, y); this.list = list; @@ -34,15 +34,15 @@ public class ElementPageList 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 +69,8 @@ public class ElementPageList 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 +80,12 @@ public class ElementPageList 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 +101,13 @@ public class ElementPageList extends Element { if(button.id == this.ids[0]) { - this.storage.setObject(this.storage.getObject() - 1); + this.values.setObject(this.values.getObject() - 1); container.initGui(); return true; } else if(button.id == this.ids[1]) { - this.storage.setObject(this.storage.getObject() + 1); + this.values.setObject(this.values.getObject() + 1); container.initGui(); return true; } @@ -119,7 +119,7 @@ public class ElementPageList 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 +133,7 @@ public class ElementPageList 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() diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java index 8d52a7e..4dfd8f6 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java @@ -17,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; @@ -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 storage) + public void actionPerformed(Container container, GuiButton button, ButtonValues values) { - builderAdvancement.setMode(storage.getObject()); + builderAdvancement.setMode(values.getObject()); } @Override @@ -127,9 +127,9 @@ public class ContentAdvancements extends Content } @Override - public String getDisplayString(ButtonStorage storage) + public String getDisplayString(ButtonValues values) { - return I18n.format("gui.worldhandler.advancements." + storage.getObject().toString()); + return I18n.format("gui.worldhandler.advancements." + values.getObject().toString()); } @Override diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java index f1f13e2..4e26113 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentEditBlocks.java @@ -14,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; @@ -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() { @Override - public void actionPerformed(Container container, GuiButton button, ButtonStorage storage) + public void actionPerformed(Container container, GuiButton button, ButtonValues values) { - builderClone.setMask(storage.getObject()); + builderClone.setMask(values.getObject()); } @Override @@ -196,9 +196,9 @@ public class ContentEditBlocks extends Content } @Override - public String getDisplayString(ButtonStorage storage) + public String getDisplayString(ButtonValues 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 diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java new file mode 100644 index 0000000..62faaf8 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java @@ -0,0 +1,470 @@ +package exopandora.worldhandler.gui.content.impl; + +import java.nio.FloatBuffer; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Set; +import java.util.Stack; +import java.util.function.Consumer; + +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; +import org.lwjgl.util.vector.Vector3f; + +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 net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; +import net.minecraft.client.gui.inventory.GuiInventory; +import net.minecraft.client.model.ModelBox; +import net.minecraft.client.model.ModelRenderer; +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.entity.Render; +import net.minecraft.client.renderer.entity.RenderLiving; +import net.minecraft.client.resources.I18n; +import net.minecraft.entity.Entity; +import net.minecraft.entity.EntityList; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.util.ResourceLocation; +import net.minecraft.util.math.MathHelper; + +public class ContentPlaysound extends Content +{ + @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 / 2, y + 72, 114, 20, "Test")); + } + + @Override + public void actionPerformed(Container container, GuiButton button) + { + if(button.id == 2) + { + try + { + GlStateManager.pushMatrix(); + FloatBuffer buffer = BufferUtils.createFloatBuffer(16); + buffer.clear(); + buffer.put(new float[] {1, 0, 0, 1, + 0, 1, 0, 0, + 0, 0, 1, 0, + 0, 0, 0, 0}); + buffer.rewind(); + + System.out.println("-----------------"); + for(int x = 0; x < buffer.capacity(); x++) + { + if(x % 4 == 0 && x > 0) + { + System.out.println(); + } + System.out.printf("%02.2f ", buffer.get(x)); + } + System.out.println(); + + GL11.glLoadMatrix(buffer); + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + + GlStateManager.rotate(90, 0, 1, 0); +// GlStateManager.translate(1, 1, 1); + + float[] array = new float[buffer.capacity()]; + GlStateManager.getFloat(GL11.GL_MODELVIEW_MATRIX, buffer); + buffer.get(array); + + System.out.println("-----------------"); + for(int x = 0; x < array.length; x++) + { + if(x % 4 == 0 && x > 0) + { + System.out.println(); + } + System.out.printf("%02.2f ", array[x]); + } + System.out.println(); + } + catch(Exception e) + { + e.printStackTrace(); + } + } + } + + private Vector3f low = null; + private Vector3f high = null; + + @Override + public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) + { + int width = x + 232 / 2; + int height = y + 50; + + container.drawRect(width - 20, height - 40, width + 20, height, 0xFFFFFFFF); + + Class entityClass = EntityList.getClass(new ResourceLocation("witch")); + + try + { + Entity entity = EntityList.newEntity(entityClass, Minecraft.getMinecraft().world); +// entity.ticksExisted++; + +// if(entity instanceof EntityLiving) +// { +// ((EntityLiving) entity).onInitialSpawn(new DifficultyInstance(EnumDifficulty.NORMAL, 0, 0, 0), null); +// } + + if(entity instanceof EntityLivingBase) + { + int maxWidth = 40; + int maxHeight = 40; + + int xScale = 0; + int yScale = 0; + + Render render = Minecraft.getMinecraft().getRenderManager().entityRenderMap.get(entity.getClass()); + + if(render instanceof RenderLiving) + { + final RenderLiving living = (RenderLiving) render; + living.getMainModel().setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, entity); + + System.out.println("--------------"); + + this.high = new Vector3f(Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE); + this.low = new Vector3f(Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE); + + this.iterateModel(this.getBaseModels(living.getMainModel().boxList), new Stack(), vectors -> + { + for(int i = 0; i < vectors.length; i++) + { + this.low = new Vector3f(Math.min(this.low.x, vectors[i].x), Math.min(this.low.y, vectors[i].y), Math.min(this.low.z, vectors[i].z)); + this.high = new Vector3f(Math.max(this.high.x, vectors[i].x), Math.max(this.high.y, vectors[i].y), Math.max(this.high.z, vectors[i].z)); + } + }); + +// System.out.println(this.high.y - this.low.y); + + float widthInBlocks = Math.abs(this.high.x - this.low.x) / 16; + float heightInBlocks = Math.abs(this.high.y - this.low.y) / 16; + +// System.out.println("Height: " + heightInBlocks); +// System.out.println("Ent: " + entity.height); +// System.out.println("High: " + this.high); +// System.out.println("Low: " + this.low); + + xScale = MathHelper.floor(maxWidth / widthInBlocks); + yScale = MathHelper.floor(maxHeight / heightInBlocks); + } + +// xScale = MathHelper.floor(maxWidth / entity.width); +// yScale = MathHelper.floor(maxHeight / entity.height); + +// System.out.println(low); +// System.out.println(high); + int scale = Math.min(xScale, yScale); + int yAdjust = scale == xScale ? (maxHeight - scale) / 2 : 0; + +// System.out.println(scale); + GuiInventory.drawEntityOnScreen(width, height - yAdjust, scale, (float) width - mouseX, (float) height - mouseY - entity.getEyeHeight() * yScale - yAdjust, (EntityLivingBase) entity); + } + } + catch(Exception e) + { + e.printStackTrace(); + } + } + + private void iterateModel(List list, Stack shifts, Consumer consumer) + { + for(ModelRenderer model : list) + { + if(!model.isHidden) + { + if(model.showModel) + { + /* + * offset = box width/height/depth + * point = box offset x/y/z + * rotation = rotation + */ + Vector3f modelOffset = new Vector3f(model.offsetX, model.offsetY, model.offsetZ); + Vector3f modelRotationAngle = new Vector3f(model.rotateAngleX, model.rotateAngleY, model.rotateAngleZ); + Vector3f modelRotationPoint = new Vector3f(model.rotationPointX, model.rotationPointY, model.rotationPointZ); + + shifts.push(new ModelShifts(modelOffset, modelRotationAngle, modelRotationPoint)); + + if(model.childModels != null) + { + this.iterateModel(model.childModels, shifts, consumer); + } + + for(ModelBox box : model.cubeList) + { + if(box != null) + { + Vector3f[] vectors = new Vector3f[] + { + new Vector3f(box.posX1, box.posY1, box.posZ1), + new Vector3f(box.posX2, box.posY1, box.posZ1), + new Vector3f(box.posX2, box.posY1, box.posZ2), + new Vector3f(box.posX1, box.posY1, box.posZ2), + new Vector3f(box.posX1, box.posY2, box.posZ1), + new Vector3f(box.posX2, box.posY2, box.posZ1), + new Vector3f(box.posX2, box.posY2, box.posZ2), + new Vector3f(box.posX1, box.posY2, box.posZ2) + }; + +// System.out.println(shifts.size()); + + for(int x = 0; x < 2; x++) + { + for(ModelShifts shift : shifts) + { + this.translate(shift.getOffset(), x, vectors); +// GlStateManager.translate(shift.getOffset().x, shift.getOffset().y, shift.getOffset().z); + + if(shift.getAngle().equals(ORIGIN)) + { + if(!shift.getPoint().equals(ORIGIN)) + { + this.translate(shift.getPoint(), x, vectors); +// GlStateManager.translate(shift.getPoint().x, shift.getPoint().y, shift.getPoint().z); + } + } + else + { + this.translate(shift.getPoint(), x, vectors); +// GlStateManager.translate(shift.getPoint().x, shift.getPoint().y, shift.getPoint().z); + + GlStateManager.pushMatrix(); + FloatBuffer buffer = BufferUtils.createFloatBuffer(16); + buffer.clear(); + this.loadMatrix(buffer, x, vectors); + + if(shift.getAngle().y != 0.0F) + { + GlStateManager.rotate(-shift.getAngle().y * RADIANT, 0.0F, 0.0F, 1.0F); + } + + if(shift.getAngle().z != 0.0F) + { + GlStateManager.rotate(-shift.getAngle().z * RADIANT, 0.0F, 1.0F, 0.0F); + } + + if(shift.getAngle().x != 0.0F) + { + GlStateManager.rotate(-shift.getAngle().x * RADIANT, 1.0F, 0.0F, 0.0F); + } + + this.getMatrix(buffer, x, vectors); + GlStateManager.popMatrix(); + } + } + } + + for(Vector3f vec : vectors) + { + System.out.println(vec.x + "\t" + -vec.y + "\t" + vec.z); + } + + consumer.accept(vectors); + } + } + + shifts.pop(); + } + } + } + } + + private void translate(Vector3f translation, int vectorArrayIndex, Vector3f[] vectors) + { + int arrayPartLength = 4; + int arrayPart = vectorArrayIndex * arrayPartLength; + int arrayPartMax = arrayPart + arrayPartLength; + + for(int y = arrayPart; y < arrayPartMax; y++) + { + Vector3f.add(vectors[y], translation, vectors[y]); + } + } + + private void loadMatrix(FloatBuffer buffer, int vectorArrayIndex, Vector3f[] vectors) + { + GlStateManager.matrixMode(GL11.GL_MODELVIEW); + + for(int y = 0; y < buffer.capacity(); y++) + { + final int index = vectorArrayIndex * 4 + y % 4; + + if(y < 4) + { + buffer.put(vectors[index].x); + } + else if(y >= 4 && y < 8) + { + buffer.put(vectors[index].y); + } + else if(y >= 8 && y < 12) + { + buffer.put(vectors[index].z); + } + else + { + buffer.put(0); + } + } + + buffer.rewind(); + GL11.glLoadMatrix(buffer); + } + + private void getMatrix(FloatBuffer buffer, int vectorArrayIndex, Vector3f[] vectors) + { + float[] array = new float[buffer.capacity()]; + GlStateManager.getFloat(GL11.GL_MODELVIEW_MATRIX, buffer); + buffer.get(array); + + for(int y = 0; y < array.length; y++) + { + final int index = vectorArrayIndex * 4 + y % 4; + + if(y < 4) + { + vectors[index].x = array[y]; + } + else if(y >= 4 && y < 8) + { + vectors[index].y = array[y]; + } + else if(y >= 8 && y < 12) + { + vectors[index].z = array[y]; + } + } + } + + private static final class ModelShifts + { + private final Vector3f offset; + private final Vector3f angle; + private final Vector3f point; + + public ModelShifts(Vector3f offset, Vector3f angle, Vector3f point) + { + this.offset = offset; + this.angle = angle; + this.point = point; + } + + public Vector3f getOffset() + { + return this.offset; + } + + public Vector3f getAngle() + { + return this.angle; + } + + public Vector3f getPoint() + { + return this.point; + } + } + + //TODO + @Deprecated + private void printGLMatrix() + { + FloatBuffer buffer = BufferUtils.createFloatBuffer(16); + GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, buffer); + float[] array = new float[buffer.capacity()]; + buffer.get(array); + + System.out.println(); + + for(int x = 0; x < buffer.capacity(); x += 4) + { + System.out.println(String.format("%02.2f %02.2f %02.2f %02.2f", array[x], array[x + 1], array[x + 2], array[x + 3])); + } + } + + private static final float RADIANT = (float) (180F / Math.PI); + private static final Vector3f ORIGIN = new Vector3f(); + + private List getBaseModels(List list) + { + Set baseModels = this.getModels(list); + baseModels.removeAll(this.getAllChildren(list)); + return new ArrayList(baseModels); + } + + private Set getAllChildren(List list) + { + Set result = new HashSet(); + + for(ModelRenderer model : list) + { + if(model.childModels != null) + { + result.addAll(this.getModels(model.childModels)); + } + } + + return result; + } + + private Set getModels(List list) + { + Set result = new HashSet(); + + for(ModelRenderer model : list) + { + if(!result.contains(model)) + { + result.add(model); + } + + if(model.childModels != null) + { + result.addAll(this.getModels(model.childModels)); + } + } + + return result; + } + + @Override + public Category getCategory() + { + return Categories.ENTITIES; + } + + @Override + public String getTitle() + { + return "Playsound"; + } + + @Override + public String getTabTitle() + { + return "Playsound"; + } + + @Override + public Content getActiveContent() + { + return Contents.PLAYSOUND; + } +} From 89a8ef67ad3ab1de1d23bf6279840fc01db28c2b Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:17:50 +0200 Subject: [PATCH 21/40] Update forge version --- build.gradle | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/build.gradle b/build.gradle index 39eb666..594f863 100644 --- a/build.gradle +++ b/build.gradle @@ -43,7 +43,7 @@ task signJar(type: SignJar, dependsOn: reobfJar) { build.dependsOn signJar minecraft { - version = "1.12.2-14.23.2.2611" + version = "1.12.2-14.23.3.2676" runDir = "run" replace '$version', modversion @@ -52,7 +52,7 @@ minecraft { replace '$url', url replace '$update_url', update_url replace '$certificate', certificate - + // the mappings can be changed at any time, and must be in the following format. // snapshot_YYYYMMDD snapshot are built nightly. // stable_# stables are built at the discretion of the MCP team. @@ -94,11 +94,11 @@ processResources { // replace stuff in mcmod.info, nothing else from(sourceSets.main.resources.srcDirs) { include 'mcmod.info' - + // replace version and mcversion expand 'version':project.version, 'mcversion':project.minecraft.version } - + // copy everything else except the mcmod.info from(sourceSets.main.resources.srcDirs) { exclude 'mcmod.info' From 23252d451f9d958480175e9a6ff297ca87db1036 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:21:51 +0200 Subject: [PATCH 22/40] Add @Nonnull annotations --- src/main/java/exopandora/worldhandler/helper/BlockHelper.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/exopandora/worldhandler/helper/BlockHelper.java b/src/main/java/exopandora/worldhandler/helper/BlockHelper.java index 88e2b83..831d045 100644 --- a/src/main/java/exopandora/worldhandler/helper/BlockHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/BlockHelper.java @@ -4,6 +4,8 @@ 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; @@ -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; From 2ef6bb1762c3c7ddecec3e9d0813ffb025b6e464 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:22:44 +0200 Subject: [PATCH 23/40] Add @SideOnly annotation --- src/main/java/exopandora/worldhandler/util/UtilPlayer.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/main/java/exopandora/worldhandler/util/UtilPlayer.java b/src/main/java/exopandora/worldhandler/util/UtilPlayer.java index 4c335c9..d621734 100644 --- a/src/main/java/exopandora/worldhandler/util/UtilPlayer.java +++ b/src/main/java/exopandora/worldhandler/util/UtilPlayer.java @@ -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() From e791e71389f89bb8c7496dd12772eb04129b29ec Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:24:45 +0200 Subject: [PATCH 24/40] Make biome indicator non-static --- .../worldhandler/hud/BiomeIndicator.java | 90 ++++++++++--------- 1 file changed, 49 insertions(+), 41 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java b/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java index cc36077..811d785 100644 --- a/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java +++ b/src/main/java/exopandora/worldhandler/hud/BiomeIndicator.java @@ -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 BIOMES; - private static String CURRENT_BIOME; - private static int TICKS; + private final Set biomes = new HashSet(); + private String currentBiome; + private int ticksRemaining; - static + public BiomeIndicator() { - Set pool = new HashSet(); + this.init(); + } + + private void init() + { + Set biomes = new HashSet(); 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(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 ])*")) { From 06ba59fca4c760eb651696c843ce7d265a0363f2 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:26:40 +0200 Subject: [PATCH 25/40] Add block highlighting for edit blocks --- .../worldhandler/config/ConfigSettings.java | 9 ++- .../worldhandler/event/EventHandler.java | 67 ++++++++++++++++++- .../assets/worldhandler/lang/de_de.lang | 20 +++--- .../assets/worldhandler/lang/en_us.lang | 2 + .../assets/worldhandler/lang/zh_cn.lang | 2 + 5 files changed, 87 insertions(+), 13 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/config/ConfigSettings.java b/src/main/java/exopandora/worldhandler/config/ConfigSettings.java index f1b59df..06cc6ff 100644 --- a/src/main/java/exopandora/worldhandler/config/ConfigSettings.java +++ b/src/main/java/exopandora/worldhandler/config/ConfigSettings.java @@ -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; diff --git a/src/main/java/exopandora/worldhandler/event/EventHandler.java b/src/main/java/exopandora/worldhandler/event/EventHandler.java index 0cec12d..a61f83e 100644 --- a/src/main/java/exopandora/worldhandler/event/EventHandler.java +++ b/src/main/java/exopandora/worldhandler/event/EventHandler.java @@ -12,14 +12,18 @@ import exopandora.worldhandler.helper.BlockHelper; import exopandora.worldhandler.hud.BiomeIndicator; 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; @@ -28,15 +32,72 @@ import net.minecraftforge.fml.relauncher.SideOnly; public class EventHandler { 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(); } } } diff --git a/src/main/resources/assets/worldhandler/lang/de_de.lang b/src/main/resources/assets/worldhandler/lang/de_de.lang index bbf1410..f543a98 100644 --- a/src/main/resources/assets/worldhandler/lang/de_de.lang +++ b/src/main/resources/assets/worldhandler/lang/de_de.lang @@ -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 diff --git a/src/main/resources/assets/worldhandler/lang/en_us.lang b/src/main/resources/assets/worldhandler/lang/en_us.lang index 6b1a53e..35ea4e5 100644 --- a/src/main/resources/assets/worldhandler/lang/en_us.lang +++ b/src/main/resources/assets/worldhandler/lang/en_us.lang @@ -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 diff --git a/src/main/resources/assets/worldhandler/lang/zh_cn.lang b/src/main/resources/assets/worldhandler/lang/zh_cn.lang index 0def381..7b203b8 100644 --- a/src/main/resources/assets/worldhandler/lang/zh_cn.lang +++ b/src/main/resources/assets/worldhandler/lang/zh_cn.lang @@ -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=日落的时间 From cf3839880aa82f2517fee653d419b3d7fd3b6d4d Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:49:19 +0200 Subject: [PATCH 26/40] Renamed EventHandler -> EventListener --- .../event/{EventHandler.java => EventListener.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename src/main/java/exopandora/worldhandler/event/{EventHandler.java => EventListener.java} (99%) diff --git a/src/main/java/exopandora/worldhandler/event/EventHandler.java b/src/main/java/exopandora/worldhandler/event/EventListener.java similarity index 99% rename from src/main/java/exopandora/worldhandler/event/EventHandler.java rename to src/main/java/exopandora/worldhandler/event/EventListener.java index a61f83e..02d464b 100644 --- a/src/main/java/exopandora/worldhandler/event/EventHandler.java +++ b/src/main/java/exopandora/worldhandler/event/EventListener.java @@ -29,7 +29,7 @@ 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(); From 8ccebd66f0c4314656e755bfda7f0060d553c910 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:49:51 +0200 Subject: [PATCH 27/40] Cleanup --- .../exopandora/worldhandler/command/CommandWorldHandler.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java index f2d02b1..404efc4 100644 --- a/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java +++ b/src/main/java/exopandora/worldhandler/command/CommandWorldHandler.java @@ -8,7 +8,7 @@ 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.event.EventListener; import net.minecraft.client.Minecraft; import net.minecraft.command.CommandBase; import net.minecraft.command.CommandException; @@ -49,7 +49,7 @@ 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")) { From 5716966c5182e7c2fe24c0eab27f0ef2c0a91f8b Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:51:48 +0200 Subject: [PATCH 28/40] Added theoretical support for deactivation at runtime and moved keybinding operations to UtilKeyBinding --- .../exopandora/worldhandler/WorldHandler.java | 45 +++++++++---------- .../worldhandler/util/UtilKeyBinding.java | 39 ++++++++++++++++ 2 files changed, 61 insertions(+), 23 deletions(-) create mode 100644 src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index 9761244..5d581df 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -12,10 +12,12 @@ 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; @@ -30,6 +32,7 @@ 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; @@ -37,7 +40,7 @@ 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 = false, guiFactory = "exopandora.worldhandler.gui.config.GuiFactoryWorldHandler", updateJSON = "$update_url", clientSideOnly = true, certificateFingerprint = "$certificate") +@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) @@ -47,17 +50,16 @@ public class WorldHandler 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 Logger LOGGER; public static String USERNAME = null; @SidedProxy(clientSide = "exopandora.worldhandler.proxy.ClientProxy", serverSide = "exopandora.worldhandler.proxy.CommonProxy") - public static CommonProxy PROXY; + private static CommonProxy PROXY; + private EventListener eventListener = new EventListener(); @EventHandler public void preInit(FMLPreInitializationEvent event) @@ -75,9 +77,9 @@ public class WorldHandler LOGGER.info("Initialisation"); USERNAME = Minecraft.getMinecraft().getSession().getUsername(); - MinecraftForge.EVENT_BUS.register(new exopandora.worldhandler.event.EventHandler()); + MinecraftForge.EVENT_BUS.register(this.eventListener); ClientRegistry.registerKeyBinding(KEY_WORLD_HANDLER); - updateKeyBindings(); + UtilKeyBinding.updatePosKeys(); } @EventHandler @@ -113,28 +115,25 @@ public class WorldHandler 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); - 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); - } + UtilKeyBinding.updatePosKeys(); } public static void sendCommand(ICommandBuilder builder) diff --git a/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java b/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java new file mode 100644 index 0000000..7ddeda8 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/util/UtilKeyBinding.java @@ -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); + } +} \ No newline at end of file From 307aafe0104f6ed721610d63fb7253cffdff6985 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Sat, 23 Jun 2018 17:39:11 +0200 Subject: [PATCH 29/40] Refactoring --- .../gui/button/persistence/ButtonValues.java | 10 ++ .../element/impl/ElementClickList.java | 136 ++++++------------ .../gui/content/element/logic/ILogic.java | 10 ++ .../element/logic/ILogicClickList.java | 18 +-- .../element/logic/ILogicColorMenu.java | 7 +- .../content/element/logic/ILogicPageList.java | 4 +- .../impl/ContentScoreboardObjectives.java | 108 ++++++++------ .../content/impl/ContentScoreboardTeams.java | 42 +++--- 8 files changed, 163 insertions(+), 172 deletions(-) create mode 100644 src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java diff --git a/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java index 531ddab..8d0f444 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java +++ b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java @@ -24,11 +24,21 @@ public class ButtonValues this.index++; } + public void incrementIndexBy(int amount) + { + this.index += amount; + } + public void decrementIndex() { this.index--; } + public void decrementIndexBy(int amount) + { + this.index -= amount; + } + public T getObject() { return this.object; diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java index 0758d8a..e3983d8 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java @@ -6,6 +6,7 @@ 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.persistence.ButtonValues; import exopandora.worldhandler.gui.container.Container; @@ -20,22 +21,32 @@ 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 buttonId; private final List list; private final ILogicClickList logic; - private GuiButtonList button1; - private GuiButtonList button2; private final Content content; + private final ElementClickList parent; + private final int depth; + private final int maxDepth; - public ElementClickList(int x, int y, List list, int buttonId1, int buttonId2, Content content, ILogicClickList logic) + private GuiButtonList button; + private ElementClickList child; + + public ElementClickList(int x, int y, List list, int buttonId, int maxDepth, Content content, ILogicClickList logic) + { + this(x, y, list, buttonId, maxDepth, content, logic, null); + } + + private ElementClickList(int x, int y, List list, int buttonId, int maxDepth, Content content, ILogicClickList logic, ElementClickList parent) { super(x, y); this.list = list; - this.buttonId1 = buttonId1; - this.buttonId2 = buttonId2; + this.buttonId = buttonId; this.logic = logic; this.content = content; + this.parent = parent; + this.maxDepth = maxDepth; + this.depth = this.parent != null ? this.parent.depth + 1 : 1; } @Override @@ -47,12 +58,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.content, new IListButtonLogic() + container.add(this.button = new GuiButtonList(this.buttonId, this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.content, new IListButtonLogic() { @Override public void actionPerformed(Container container, GuiButton button, ButtonValues values) { - content.getPersistence(listButtonLogic2.getId()).setIndex(0); + content.getPersistence(logic.getId() + (depth + 1)).setIndex(0); container.initButtons(); } @@ -67,11 +78,11 @@ public class ElementClickList extends Element { return list.get(index); } - + @Override public String getDisplayString(ButtonValues values) { - return logic.translate1(values.getObject().getKey()); + return logic.translate(getKeys()); } @Override @@ -88,101 +99,43 @@ public class ElementClickList extends Element @Override public String getId() { - return logic.getId() + 1; + return logic.getId() + depth; } })); - final Node node = this.getValues1().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.content, this.listButtonLogic2)); - this.logic.consumeKey2(node.getKey(), node.getEntries().get(this.getValues2().getIndex()).getKey()); + this.child = new ElementClickList(this.x, this.y + 24, node.getEntries(), this.buttonId + 1, this.maxDepth, this.content, this.logic, this); + this.child.initButtons(container); } - else + else if(this.depth < this.maxDepth) { - container.add(this.button2 = new GuiButtonList(this.buttonId2, this.x, this.y + 24, 114, 20, EnumTooltip.TOP_RIGHT, this.content, this.listButtonLogic2)); - this.button2.enabled = false; + GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.buttonId + 1, this.x, this.y + 24, 114, 20, null); + button.enabled = false; + container.add(button); } } - private final IListButtonLogic listButtonLogic2 = new IListButtonLogic() + private String[] getKeys() { - @Override - public void actionPerformed(Container container, GuiButton button, ButtonValues values) - { - container.initButtons(); - } - - @Override - public int getMax() - { - if(getValues1().getObject() != null) - { - return getValues1().getObject().getEntries().size(); - } - - return 0; - } - - @Override - public Node getObject(int index) - { - if(getValues1().getObject().getEntries() != null) - { - return getValues1().getObject().getEntries().get(index); - } - - return null; - } - - @Override - public String getDisplayString(ButtonValues values) - { - if(values.getObject() != null) - { - return logic.translate2(getValues1().getObject().getKey(), values.getObject().getKey()); - } - - return null; - } - - @Override - public String getTooltipString(ButtonValues values) - { - if(getValues1().getObject().getEntries() != null) - { - return values.getObject().getKey() + " (" + (values.getIndex() + 1) + "/" + getValues1().getObject().getEntries().size() + ")"; - } - - return null; - } - - @Override - public String getId() - { - return logic.getId() + 2; - } - }; + return this.getKeys(new String[this.depth]); + } - @Nullable - private ButtonValues getValues1() + private String[] getKeys(String[] keys) { - if(this.button1 != null) - { - return this.content.getPersistence(this.button1.getLogic().getId()); - } - - return null; + keys[this.depth - 1] = this.getValues().getObject().getKey(); + return this.parent != null ? this.parent.getKeys(keys) : keys; } @Nullable - private ButtonValues getValues2() + private ButtonValues getValues() { - if(this.button2 != null) + if(this.button != null) { - return this.content.getPersistence(this.button2.getLogic().getId()); + return this.content.getPersistence(this.button.getLogic().getId()); } return null; @@ -191,15 +144,14 @@ public class ElementClickList extends Element @Override public boolean actionPerformed(Container container, GuiButton button) { - if(button.id == this.buttonId1) + if(button.id == this.buttonId) { - 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; diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java new file mode 100644 index 0000000..0d5851c --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogic.java @@ -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(); +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java index b08b730..7d6311c 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicClickList.java @@ -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(); } diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java index 851aff3..3a41108 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicColorMenu.java @@ -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 getValidator() { @@ -20,6 +24,7 @@ public interface ILogicColorMenu return true; } + @Override default String getId() { return "color"; diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java index be5db0a..4062537 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/logic/ILogicPageList.java @@ -5,7 +5,7 @@ import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) -public interface ILogicPageList +public interface ILogicPageList extends ILogic { String translate(T key); String getRegistryName(T key); @@ -14,6 +14,4 @@ public interface ILogicPageList 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(); } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java index 9ba816b..bd3fc34 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java @@ -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(), 7, 2, 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(), 9, 2, 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 diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java index ca6d344..6753f68 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java @@ -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(), 6, 2, 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() { From 70c741979599ea597d7ef271b2fb61066df9ab7a Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 01:06:32 +0200 Subject: [PATCH 30/40] Add recipe gui --- .../builder/impl/BuilderRecipe.java | 97 +++++++++++ .../worldhandler/gui/content/Contents.java | 2 + .../gui/content/impl/ContentRecipes.java | 158 ++++++++++++++++++ .../assets/worldhandler/lang/de_de.lang | 3 + .../assets/worldhandler/lang/en_us.lang | 3 + .../assets/worldhandler/lang/zh_cn.lang | 3 + 6 files changed, 266 insertions(+) create mode 100644 src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java create mode 100644 src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java new file mode 100644 index 0000000..a97899e --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderRecipe.java @@ -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(); + } + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/Contents.java b/src/main/java/exopandora/worldhandler/gui/content/Contents.java index dbbddfe..5e10223 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Contents.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Contents.java @@ -26,6 +26,7 @@ public class Contents 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; @@ -59,6 +60,7 @@ public class Contents WORLD_INFO = Contents.getRegisteredContainer("world"); GAMERULES = Contents.getRegisteredContainer("gamerules"); + RECIPES = Contents.getRegisteredContainer("recipes"); PLAYER = Contents.getRegisteredContainer("player"); EXPERIENCE = Contents.getRegisteredContainer("experience"); diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java new file mode 100644 index 0000000..7849ae4 --- /dev/null +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java @@ -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 recipes = new ArrayList(); + + for(IRecipe recipe : CraftingManager.REGISTRY) + { + if(!recipe.isDynamic()) + { + recipes.add(recipe); + } + } + + ElementPageList list = new ElementPageList(x, y, recipes, null, 114, 20, 3, this, new int[] {6, 7, 8}, new ILogicPageList() + { + @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 "Recipes"; + } + + @Override + public String getTabTitle() + { + return "Recipes"; + } + + @Override + public Content getActiveContent() + { + return Contents.RECIPES; + } + + @Override + public void onPlayerNameChanged(String username) + { + this.builderRecipe.setPlayer(username); + } +} diff --git a/src/main/resources/assets/worldhandler/lang/de_de.lang b/src/main/resources/assets/worldhandler/lang/de_de.lang index f543a98..cc1102c 100644 --- a/src/main/resources/assets/worldhandler/lang/de_de.lang +++ b/src/main/resources/assets/worldhandler/lang/de_de.lang @@ -283,6 +283,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 diff --git a/src/main/resources/assets/worldhandler/lang/en_us.lang b/src/main/resources/assets/worldhandler/lang/en_us.lang index 35ea4e5..f09b1b0 100644 --- a/src/main/resources/assets/worldhandler/lang/en_us.lang +++ b/src/main/resources/assets/worldhandler/lang/en_us.lang @@ -283,6 +283,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 diff --git a/src/main/resources/assets/worldhandler/lang/zh_cn.lang b/src/main/resources/assets/worldhandler/lang/zh_cn.lang index 7b203b8..278e42b 100644 --- a/src/main/resources/assets/worldhandler/lang/zh_cn.lang +++ b/src/main/resources/assets/worldhandler/lang/zh_cn.lang @@ -283,6 +283,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=侧边栏 From eb91ad9753123792d5e01b4d537915b310235b67 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 01:07:15 +0200 Subject: [PATCH 31/40] Refactoring and fixes --- .../exopandora/worldhandler/WorldHandler.java | 2 +- .../worldhandler/builder/CommandBuilder.java | 27 ++++++--- .../worldhandler/builder/CommandString.java | 52 ++++++++++++++++ .../builder/impl/BuilderAdvancement.java | 18 ++++-- .../builder/impl/BuilderButcher.java | 7 ++- .../builder/impl/BuilderClone.java | 1 + .../builder/impl/BuilderCustomItem.java | 7 +-- .../builder/impl/BuilderDifficulty.java | 3 + .../builder/impl/BuilderFill.java | 1 + .../builder/impl/BuilderGamemode.java | 3 + .../builder/impl/BuilderGeneric.java | 3 +- .../builder/impl/BuilderGive.java | 1 + .../builder/impl/BuilderPotionItem.java | 4 +- .../impl/BuilderScoreboardPlayers.java | 2 + .../builder/impl/BuilderScoreboardTeams.java | 1 + .../builder/impl/BuilderTime.java | 3 + .../builder/impl/BuilderWeather.java | 3 + .../builder/impl/BuilderWhitelist.java | 1 + .../worldhandler/builder/types/Level.java | 3 + .../builder/types/TargetSelector.java | 7 ++- .../gui/button/GuiButtonList.java | 44 ++++++++++++-- .../gui/button/persistence/ButtonValues.java | 4 +- .../worldhandler/gui/category/Category.java | 2 +- .../worldhandler/gui/content/Content.java | 22 +++---- .../gui/content/element/Element.java | 6 -- .../element/impl/ElementClickList.java | 59 +++++++++++-------- .../content/element/impl/ElementPageList.java | 25 +++++++- .../gui/content/impl/ContentAdvancements.java | 4 +- .../impl/ContentScoreboardObjectives.java | 4 +- .../content/impl/ContentScoreboardTeams.java | 2 +- .../worldhandler/helper/EnumHelper.java | 3 + 31 files changed, 245 insertions(+), 79 deletions(-) create mode 100644 src/main/java/exopandora/worldhandler/builder/CommandString.java diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index 5d581df..f4ab40f 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -100,7 +100,7 @@ public class WorldHandler ConfigSliders.load(CONFIG); ConfigButcher.load(CONFIG); - bar.step("Initialising User Interface"); + bar.step("Initializing User Interface"); Content.registerContents(); Category.registerCategories(); diff --git a/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java b/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java index ef0c1c8..ed27226 100644 --- a/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java +++ b/src/main/java/exopandora/worldhandler/builder/CommandBuilder.java @@ -1,7 +1,6 @@ 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; @@ -232,20 +231,34 @@ public abstract class CommandBuilder implements ICommandBuilderSyntax { if(syntax != null) { - this.command = syntax.getSyntaxEntries().stream().map(entry -> new AbstractMap.SimpleEntry(entry, entry.toString())).collect(Collectors.toList()); + this.command = syntax.getSyntaxEntries().stream().map(entry -> new SimpleEntry(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 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 command = new ArrayList(); + CommandString command = new CommandString(this.getCommandName()); for(Entry 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(); } } diff --git a/src/main/java/exopandora/worldhandler/builder/CommandString.java b/src/main/java/exopandora/worldhandler/builder/CommandString.java new file mode 100644 index 0000000..c69a1ff --- /dev/null +++ b/src/main/java/exopandora/worldhandler/builder/CommandString.java @@ -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(); + } +} diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java index 0f9868b..c6d9a20 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderAdvancement.java @@ -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, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java index fd4e1d3..75a59d4 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderButcher.java @@ -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.get("r"); @@ -42,6 +46,7 @@ public class BuilderButcher extends CommandBuilder this.setNode(0, this.targetSelector); } + @Nonnull public ResourceLocation getEntity() { return this.targetSelector.get("type"); diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java index 44b6c17..e828fe2 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderClone.java @@ -129,6 +129,7 @@ public class BuilderClone extends BuilderDoubleBlockPos return syntax; } + @SideOnly(Side.CLIENT) public static enum EnumMask { REPLACE, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java index a0611a2..1a610d5 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderCustomItem.java @@ -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()); diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java index 348a31a..e8fbacd 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderDifficulty.java @@ -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, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java index 1fca3af..a420e09 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderFill.java @@ -148,6 +148,7 @@ public class BuilderFill extends BuilderDoubleBlockPos return syntax; } + @SideOnly(Side.CLIENT) public static enum EnumBlockHandling { REPLACE, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java index b2a57e6..6382650 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGamemode.java @@ -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, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java index 739c145..b27e693 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGeneric.java @@ -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() diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java index 2c0aa17..ab2a6c2 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderGive.java @@ -16,6 +16,7 @@ public class BuilderGive extends CommandBuilderNBT { this.setPlayer(player); this.setItem(item); + this.setAmount(1); this.setMetadata(0); } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java index a1257b6..7587abc 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderPotionItem.java @@ -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); } diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java index 61d3877..d4182f5 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardPlayers.java @@ -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, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java index ba086d8..5de448a 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderScoreboardTeams.java @@ -238,6 +238,7 @@ public class BuilderScoreboardTeams extends BuilderScoreboard return syntax; } + @SideOnly(Side.CLIENT) public static enum EnumMode { JOIN, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java index 0eb9ad9..2bfd052 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderTime.java @@ -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, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java index 61d05d4..5818299 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWeather.java @@ -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, diff --git a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java index c03eab8..d0d9ed6 100644 --- a/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java +++ b/src/main/java/exopandora/worldhandler/builder/impl/BuilderWhitelist.java @@ -76,6 +76,7 @@ public class BuilderWhitelist extends CommandBuilder return syntax; } + @SideOnly(Side.CLIENT) public static enum EnumMode { ADD, diff --git a/src/main/java/exopandora/worldhandler/builder/types/Level.java b/src/main/java/exopandora/worldhandler/builder/types/Level.java index c6c580a..17e1805 100644 --- a/src/main/java/exopandora/worldhandler/builder/types/Level.java +++ b/src/main/java/exopandora/worldhandler/builder/types/Level.java @@ -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) diff --git a/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java b/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java index d00afbf..c27e711 100644 --- a/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java +++ b/src/main/java/exopandora/worldhandler/builder/types/TargetSelector.java @@ -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 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)); diff --git a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java index 0addb1e..7a02174 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java +++ b/src/main/java/exopandora/worldhandler/gui/button/GuiButtonList.java @@ -10,6 +10,7 @@ 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; @@ -100,26 +101,57 @@ public class GuiButtonList 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.persistence.getIndex() > 0) + if(GuiScreen.isShiftKeyDown()) { - this.persistence.decrementIndex(); + if(index < 10) + { + this.persistence.setIndex(max - (9 - index)); + } + else + { + this.persistence.decrementIndex(10); + } } else { - this.persistence.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.persistence.getIndex() < this.logic.getMax() - 1) + if(GuiScreen.isShiftKeyDown()) { - this.persistence.incrementIndex(); + if(index > max - 10) + { + this.persistence.setIndex(9 - (max - index)); + } + else + { + this.persistence.incrementIndex(10); + } } else { - this.persistence.setIndex(0); + if(index < max) + { + this.persistence.incrementIndex(); + } + else + { + this.persistence.setIndex(0); + } } } diff --git a/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java index 8d0f444..8f9018e 100644 --- a/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java +++ b/src/main/java/exopandora/worldhandler/gui/button/persistence/ButtonValues.java @@ -24,7 +24,7 @@ public class ButtonValues this.index++; } - public void incrementIndexBy(int amount) + public void incrementIndex(int amount) { this.index += amount; } @@ -34,7 +34,7 @@ public class ButtonValues this.index--; } - public void decrementIndexBy(int amount) + public void decrementIndex(int amount) { this.index -= amount; } diff --git a/src/main/java/exopandora/worldhandler/gui/category/Category.java b/src/main/java/exopandora/worldhandler/gui/category/Category.java index 502da52..f3c3199 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Category.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Category.java @@ -64,7 +64,7 @@ public class Category registerCategory(1, "entities", new Category(Contents.SUMMON, Contents.PLAYSOUND)); 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(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)); } diff --git a/src/main/java/exopandora/worldhandler/gui/content/Content.java b/src/main/java/exopandora/worldhandler/gui/content/Content.java index 032d6f6..9710d58 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Content.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Content.java @@ -21,6 +21,7 @@ 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; @@ -60,24 +61,25 @@ public abstract class Content implements IContent //WORLD registerContent(9, "world", new ContentWorldInfo()); registerContent(10, "gamerules", new ContentGamerules()); + registerContent(11, "recipes", new ContentRecipes()); //PLAYER - registerContent(11, "player", new ContentPlayer()); - registerContent(12, "experience", new ContentExperience()); - registerContent(13, "advancements", new ContentAdvancements()); + registerContent(12, "player", new ContentPlayer()); + registerContent(13, "experience", new ContentExperience()); + registerContent(14, "advancements", new ContentAdvancements()); //SCOREBOARD - registerContent(14, "scoreboard_objectives", new ContentScoreboardObjectives()); - registerContent(15, "scoreboard_teams", new ContentScoreboardTeams()); - registerContent(16, "scoreboard_players", new ContentScoreboardPlayers()); + registerContent(15, "scoreboard_objectives", new ContentScoreboardObjectives()); + registerContent(16, "scoreboard_teams", new ContentScoreboardTeams()); + registerContent(17, "scoreboard_players", new ContentScoreboardPlayers()); //MISC - registerContent(17, "change_world", new ContentChangeWorld()); - registerContent(18, "continue", new ContentContinue()); + registerContent(18, "change_world", new ContentChangeWorld()); + registerContent(19, "continue", new ContentContinue()); //NO CATEGORY - registerContent(19, "potions", new ContentPotions()); - registerContent(20, "butcher", new ContentButcher()); + registerContent(20, "potions", new ContentPotions()); + registerContent(21, "butcher", new ContentButcher()); } private static void registerContent(int id, String textualID, Content content) diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/Element.java b/src/main/java/exopandora/worldhandler/gui/content/element/Element.java index cef184d..216731e 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/Element.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/Element.java @@ -14,10 +14,4 @@ public abstract class Element implements IElement this.x = x; this.y = y; } - - @Override - public void draw() - { - - } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java index e3983d8..05f09ce 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementClickList.java @@ -21,31 +21,29 @@ import net.minecraftforge.fml.relauncher.SideOnly; @SideOnly(Side.CLIENT) public class ElementClickList extends Element { - private final int buttonId; + private final int[] buttonIds; private final List list; private final ILogicClickList logic; private final Content content; private final ElementClickList parent; private final int depth; - private final int maxDepth; private GuiButtonList button; private ElementClickList child; - public ElementClickList(int x, int y, List list, int buttonId, int maxDepth, Content content, ILogicClickList logic) + public ElementClickList(int x, int y, List list, int[] buttonIds, Content content, ILogicClickList logic) { - this(x, y, list, buttonId, maxDepth, content, logic, null); + this(x, y, list, buttonIds, content, logic, null); } - private ElementClickList(int x, int y, List list, int buttonId, int maxDepth, Content content, ILogicClickList logic, ElementClickList parent) + private ElementClickList(int x, int y, List list, int[] buttonIds, Content content, ILogicClickList logic, ElementClickList parent) { super(x, y); this.list = list; - this.buttonId = buttonId; + this.buttonIds = buttonIds; this.logic = logic; this.content = content; this.parent = parent; - this.maxDepth = maxDepth; this.depth = this.parent != null ? this.parent.depth + 1 : 1; } @@ -58,7 +56,7 @@ public class ElementClickList extends Element @Override public void initButtons(Container container) { - container.add(this.button = new GuiButtonList(this.buttonId, this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.content, new IListButtonLogic() + container.add(this.button = new GuiButtonList(this.getButtonId(), this.x, this.y, 114, 20, EnumTooltip.TOP_RIGHT, this.content, new IListButtonLogic() { @Override public void actionPerformed(Container container, GuiButton button, ButtonValues values) @@ -108,28 +106,17 @@ public class ElementClickList extends Element if(node.getEntries() != null) { - this.child = new ElementClickList(this.x, this.y + 24, node.getEntries(), this.buttonId + 1, this.maxDepth, this.content, this.logic, this); + this.child = new ElementClickList(this.x, this.y + 24, node.getEntries(), this.buttonIds, this.content, this.logic, this); this.child.initButtons(container); } - else if(this.depth < this.maxDepth) + else if(this.depth < this.buttonIds.length) { - GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.buttonId + 1, this.x, this.y + 24, 114, 20, null); + GuiButtonWorldHandler button = new GuiButtonWorldHandler(this.getButtonId(), this.x, this.y + 24, 114, 20, null); button.enabled = false; container.add(button); } } - private String[] getKeys() - { - return this.getKeys(new String[this.depth]); - } - - private String[] getKeys(String[] keys) - { - keys[this.depth - 1] = this.getValues().getObject().getKey(); - return this.parent != null ? this.parent.getKeys(keys) : keys; - } - @Nullable private ButtonValues getValues() { @@ -144,7 +131,7 @@ public class ElementClickList extends Element @Override public boolean actionPerformed(Container container, GuiButton button) { - if(button.id == this.buttonId) + if(button.id == this.getButtonId()) { this.button.actionPerformed(container, button); return true; @@ -156,4 +143,30 @@ public class ElementClickList extends Element 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; + } } diff --git a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java index d7eae58..a176279 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java +++ b/src/main/java/exopandora/worldhandler/gui/content/element/impl/ElementPageList.java @@ -12,6 +12,7 @@ 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; @@ -101,13 +102,33 @@ public class ElementPageList extends Element { if(button.id == this.ids[0]) { - this.values.setObject(this.values.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.values.setObject(this.values.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; } diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java index 4dfd8f6..57be352 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentAdvancements.java @@ -3,8 +3,8 @@ 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; @@ -43,7 +43,7 @@ public class ContentAdvancements extends Content private GuiButtonList modeButton; - private final List advancements = StreamSupport.stream(new AdvancementManager(null).getAdvancements().spliterator(), true).filter(advancement -> advancement.getDisplay() != null).collect(Collectors.toList()); + private final List advancements = Lists.newArrayList(new AdvancementManager(null).getAdvancements()).parallelStream().filter(advancement -> advancement.getDisplay() != null).collect(Collectors.toList()); @Override public ICommandBuilder getCommandBuilder() diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java index bd3fc34..c90950e 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardObjectives.java @@ -48,7 +48,7 @@ public class ContentScoreboardObjectives extends ContentScoreboard if(this.selectedObjective.equals("create")) { - ElementClickList objectives = new ElementClickList(x + 118, y + 24, HELPER.getObjectives(), 7, 2, this, new ILogicClickList() + ElementClickList objectives = new ElementClickList(x + 118, y + 24, HELPER.getObjectives(), new int[] {7, 8}, this, new ILogicClickList() { @Override public void consumeKey(String... keys) @@ -116,7 +116,7 @@ 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, 2, 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 translate(String... keys) diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java index 6753f68..66514e4 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentScoreboardTeams.java @@ -47,7 +47,7 @@ public class ContentScoreboardTeams extends ContentScoreboard if(this.selectedTeam.equals("option")) { - ElementClickList options = new ElementClickList(x + 118, y + 24, HELPER.getOptions(), 6, 2, this, new ILogicClickList() + ElementClickList options = new ElementClickList(x + 118, y + 24, HELPER.getOptions(), new int[] {6, 7}, this, new ILogicClickList() { @Override public String translate(String... keys) diff --git a/src/main/java/exopandora/worldhandler/helper/EnumHelper.java b/src/main/java/exopandora/worldhandler/helper/EnumHelper.java index 5d5bb4a..92a994c 100644 --- a/src/main/java/exopandora/worldhandler/helper/EnumHelper.java +++ b/src/main/java/exopandora/worldhandler/helper/EnumHelper.java @@ -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 valueOf(Class klass, String name) { try From 9e3e2476eef1eccb5ae22ec5418d03ad6c8c9e4f Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 01:17:15 +0200 Subject: [PATCH 32/40] Add missing recipe gui translations --- .../worldhandler/gui/content/impl/ContentRecipes.java | 4 ++-- src/main/resources/assets/worldhandler/lang/de_de.lang | 2 ++ src/main/resources/assets/worldhandler/lang/en_us.lang | 2 ++ src/main/resources/assets/worldhandler/lang/zh_cn.lang | 2 ++ 4 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java index 7849ae4..8eb6985 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java @@ -135,13 +135,13 @@ public class ContentRecipes extends Content @Override public String getTitle() { - return "Recipes"; + return I18n.format("gui.worldhandler.title.world.recipes"); } @Override public String getTabTitle() { - return "Recipes"; + return I18n.format("gui.worldhandler.tab.world.recipes"); } @Override diff --git a/src/main/resources/assets/worldhandler/lang/de_de.lang b/src/main/resources/assets/worldhandler/lang/de_de.lang index cc1102c..de5a620 100644 --- a/src/main/resources/assets/worldhandler/lang/de_de.lang +++ b/src/main/resources/assets/worldhandler/lang/de_de.lang @@ -101,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 @@ -125,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 diff --git a/src/main/resources/assets/worldhandler/lang/en_us.lang b/src/main/resources/assets/worldhandler/lang/en_us.lang index f09b1b0..9464519 100644 --- a/src/main/resources/assets/worldhandler/lang/en_us.lang +++ b/src/main/resources/assets/worldhandler/lang/en_us.lang @@ -101,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 @@ -125,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 diff --git a/src/main/resources/assets/worldhandler/lang/zh_cn.lang b/src/main/resources/assets/worldhandler/lang/zh_cn.lang index 278e42b..c68697d 100644 --- a/src/main/resources/assets/worldhandler/lang/zh_cn.lang +++ b/src/main/resources/assets/worldhandler/lang/zh_cn.lang @@ -101,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=告示牌编辑器 @@ -125,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=经验等级 From e919ac9837853c8b9b6d67035d37d0fdc9e5df11 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 01:37:29 +0200 Subject: [PATCH 33/40] Change button ids --- .../worldhandler/gui/content/impl/ContentRecipes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java index 8eb6985..fc0b409 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java +++ b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentRecipes.java @@ -49,7 +49,7 @@ public class ContentRecipes extends Content } } - ElementPageList list = new ElementPageList(x, y, recipes, null, 114, 20, 3, this, new int[] {6, 7, 8}, new ILogicPageList() + ElementPageList list = new ElementPageList(x, y, recipes, null, 114, 20, 3, this, new int[] {4, 5, 6}, new ILogicPageList() { @Override public String translate(IRecipe key) From 42ef784a4fdcfa5d7151247bbafb6f9c912a2a02 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 02:04:15 +0200 Subject: [PATCH 34/40] Fix project setup --- .../worldhandler/gui/category/Category.java | 162 +++--- .../worldhandler/gui/content/Content.java | 229 +++++---- .../worldhandler/gui/content/Contents.java | 178 ++++--- .../gui/content/impl/ContentPlaysound.java | 470 ------------------ 4 files changed, 283 insertions(+), 756 deletions(-) delete mode 100644 src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java diff --git a/src/main/java/exopandora/worldhandler/gui/category/Category.java b/src/main/java/exopandora/worldhandler/gui/category/Category.java index f3c3199..4ae1d3f 100644 --- a/src/main/java/exopandora/worldhandler/gui/category/Category.java +++ b/src/main/java/exopandora/worldhandler/gui/category/Category.java @@ -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.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 REGISTRY = new RegistryNamespaced(); - - private final List contents; - - public Category() - { - this.contents = new ArrayList(); - } - - public Category(List 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 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, Contents.PLAYSOUND)); - 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); - } -} +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 REGISTRY = new RegistryNamespaced(); + + private final List contents; + + public Category() + { + this.contents = new ArrayList(); + } + + public Category(List 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 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); + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/Content.java b/src/main/java/exopandora/worldhandler/gui/content/Content.java index 9710d58..97fadf2 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Content.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Content.java @@ -1,115 +1,114 @@ -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 REGISTRY = new RegistryNamespaced(); - - 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()); - registerContent(21, "playsound", new ContentPlaysound()); - - //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 persistence; - - public ButtonValues getPersistence(Object id) - { - if(this.persistence == null) - { - this.persistence = new HashMap(); - } - - if(this.persistence.containsKey(id)) - { - return this.persistence.get(id); - } - - ButtonValues values = new ButtonValues(); - - this.persistence.put(id, values); - - return values; - } -} +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 REGISTRY = new RegistryNamespaced(); + + 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 persistence; + + public ButtonValues getPersistence(Object id) + { + if(this.persistence == null) + { + this.persistence = new HashMap(); + } + + if(this.persistence.containsKey(id)) + { + return this.persistence.get(id); + } + + ButtonValues values = new ButtonValues(); + + this.persistence.put(id, values); + + return values; + } +} diff --git a/src/main/java/exopandora/worldhandler/gui/content/Contents.java b/src/main/java/exopandora/worldhandler/gui/content/Contents.java index 5e10223..c83f674 100644 --- a/src/main/java/exopandora/worldhandler/gui/content/Contents.java +++ b/src/main/java/exopandora/worldhandler/gui/content/Contents.java @@ -1,91 +1,89 @@ -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 PLAYSOUND; - - 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"); - PLAYSOUND = Contents.getRegisteredContainer("playsound"); - - 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 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; - } +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 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; + } } \ No newline at end of file diff --git a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java b/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java deleted file mode 100644 index 62faaf8..0000000 --- a/src/main/java/exopandora/worldhandler/gui/content/impl/ContentPlaysound.java +++ /dev/null @@ -1,470 +0,0 @@ -package exopandora.worldhandler.gui.content.impl; - -import java.nio.FloatBuffer; -import java.util.ArrayList; -import java.util.HashSet; -import java.util.List; -import java.util.Set; -import java.util.Stack; -import java.util.function.Consumer; - -import org.lwjgl.BufferUtils; -import org.lwjgl.opengl.GL11; -import org.lwjgl.util.vector.Vector3f; - -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 net.minecraft.client.Minecraft; -import net.minecraft.client.gui.GuiButton; -import net.minecraft.client.gui.inventory.GuiInventory; -import net.minecraft.client.model.ModelBox; -import net.minecraft.client.model.ModelRenderer; -import net.minecraft.client.renderer.GlStateManager; -import net.minecraft.client.renderer.entity.Render; -import net.minecraft.client.renderer.entity.RenderLiving; -import net.minecraft.client.resources.I18n; -import net.minecraft.entity.Entity; -import net.minecraft.entity.EntityList; -import net.minecraft.entity.EntityLivingBase; -import net.minecraft.util.ResourceLocation; -import net.minecraft.util.math.MathHelper; - -public class ContentPlaysound extends Content -{ - @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 / 2, y + 72, 114, 20, "Test")); - } - - @Override - public void actionPerformed(Container container, GuiButton button) - { - if(button.id == 2) - { - try - { - GlStateManager.pushMatrix(); - FloatBuffer buffer = BufferUtils.createFloatBuffer(16); - buffer.clear(); - buffer.put(new float[] {1, 0, 0, 1, - 0, 1, 0, 0, - 0, 0, 1, 0, - 0, 0, 0, 0}); - buffer.rewind(); - - System.out.println("-----------------"); - for(int x = 0; x < buffer.capacity(); x++) - { - if(x % 4 == 0 && x > 0) - { - System.out.println(); - } - System.out.printf("%02.2f ", buffer.get(x)); - } - System.out.println(); - - GL11.glLoadMatrix(buffer); - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - - GlStateManager.rotate(90, 0, 1, 0); -// GlStateManager.translate(1, 1, 1); - - float[] array = new float[buffer.capacity()]; - GlStateManager.getFloat(GL11.GL_MODELVIEW_MATRIX, buffer); - buffer.get(array); - - System.out.println("-----------------"); - for(int x = 0; x < array.length; x++) - { - if(x % 4 == 0 && x > 0) - { - System.out.println(); - } - System.out.printf("%02.2f ", array[x]); - } - System.out.println(); - } - catch(Exception e) - { - e.printStackTrace(); - } - } - } - - private Vector3f low = null; - private Vector3f high = null; - - @Override - public void drawScreen(Container container, int x, int y, int mouseX, int mouseY, float partialTicks) - { - int width = x + 232 / 2; - int height = y + 50; - - container.drawRect(width - 20, height - 40, width + 20, height, 0xFFFFFFFF); - - Class entityClass = EntityList.getClass(new ResourceLocation("witch")); - - try - { - Entity entity = EntityList.newEntity(entityClass, Minecraft.getMinecraft().world); -// entity.ticksExisted++; - -// if(entity instanceof EntityLiving) -// { -// ((EntityLiving) entity).onInitialSpawn(new DifficultyInstance(EnumDifficulty.NORMAL, 0, 0, 0), null); -// } - - if(entity instanceof EntityLivingBase) - { - int maxWidth = 40; - int maxHeight = 40; - - int xScale = 0; - int yScale = 0; - - Render render = Minecraft.getMinecraft().getRenderManager().entityRenderMap.get(entity.getClass()); - - if(render instanceof RenderLiving) - { - final RenderLiving living = (RenderLiving) render; - living.getMainModel().setRotationAngles(0.0F, 0.0F, 0.0F, 0.0F, 0.0F, 1.0F, entity); - - System.out.println("--------------"); - - this.high = new Vector3f(Float.MIN_VALUE, Float.MIN_VALUE, Float.MIN_VALUE); - this.low = new Vector3f(Float.MAX_VALUE, Float.MAX_VALUE, Float.MAX_VALUE); - - this.iterateModel(this.getBaseModels(living.getMainModel().boxList), new Stack(), vectors -> - { - for(int i = 0; i < vectors.length; i++) - { - this.low = new Vector3f(Math.min(this.low.x, vectors[i].x), Math.min(this.low.y, vectors[i].y), Math.min(this.low.z, vectors[i].z)); - this.high = new Vector3f(Math.max(this.high.x, vectors[i].x), Math.max(this.high.y, vectors[i].y), Math.max(this.high.z, vectors[i].z)); - } - }); - -// System.out.println(this.high.y - this.low.y); - - float widthInBlocks = Math.abs(this.high.x - this.low.x) / 16; - float heightInBlocks = Math.abs(this.high.y - this.low.y) / 16; - -// System.out.println("Height: " + heightInBlocks); -// System.out.println("Ent: " + entity.height); -// System.out.println("High: " + this.high); -// System.out.println("Low: " + this.low); - - xScale = MathHelper.floor(maxWidth / widthInBlocks); - yScale = MathHelper.floor(maxHeight / heightInBlocks); - } - -// xScale = MathHelper.floor(maxWidth / entity.width); -// yScale = MathHelper.floor(maxHeight / entity.height); - -// System.out.println(low); -// System.out.println(high); - int scale = Math.min(xScale, yScale); - int yAdjust = scale == xScale ? (maxHeight - scale) / 2 : 0; - -// System.out.println(scale); - GuiInventory.drawEntityOnScreen(width, height - yAdjust, scale, (float) width - mouseX, (float) height - mouseY - entity.getEyeHeight() * yScale - yAdjust, (EntityLivingBase) entity); - } - } - catch(Exception e) - { - e.printStackTrace(); - } - } - - private void iterateModel(List list, Stack shifts, Consumer consumer) - { - for(ModelRenderer model : list) - { - if(!model.isHidden) - { - if(model.showModel) - { - /* - * offset = box width/height/depth - * point = box offset x/y/z - * rotation = rotation - */ - Vector3f modelOffset = new Vector3f(model.offsetX, model.offsetY, model.offsetZ); - Vector3f modelRotationAngle = new Vector3f(model.rotateAngleX, model.rotateAngleY, model.rotateAngleZ); - Vector3f modelRotationPoint = new Vector3f(model.rotationPointX, model.rotationPointY, model.rotationPointZ); - - shifts.push(new ModelShifts(modelOffset, modelRotationAngle, modelRotationPoint)); - - if(model.childModels != null) - { - this.iterateModel(model.childModels, shifts, consumer); - } - - for(ModelBox box : model.cubeList) - { - if(box != null) - { - Vector3f[] vectors = new Vector3f[] - { - new Vector3f(box.posX1, box.posY1, box.posZ1), - new Vector3f(box.posX2, box.posY1, box.posZ1), - new Vector3f(box.posX2, box.posY1, box.posZ2), - new Vector3f(box.posX1, box.posY1, box.posZ2), - new Vector3f(box.posX1, box.posY2, box.posZ1), - new Vector3f(box.posX2, box.posY2, box.posZ1), - new Vector3f(box.posX2, box.posY2, box.posZ2), - new Vector3f(box.posX1, box.posY2, box.posZ2) - }; - -// System.out.println(shifts.size()); - - for(int x = 0; x < 2; x++) - { - for(ModelShifts shift : shifts) - { - this.translate(shift.getOffset(), x, vectors); -// GlStateManager.translate(shift.getOffset().x, shift.getOffset().y, shift.getOffset().z); - - if(shift.getAngle().equals(ORIGIN)) - { - if(!shift.getPoint().equals(ORIGIN)) - { - this.translate(shift.getPoint(), x, vectors); -// GlStateManager.translate(shift.getPoint().x, shift.getPoint().y, shift.getPoint().z); - } - } - else - { - this.translate(shift.getPoint(), x, vectors); -// GlStateManager.translate(shift.getPoint().x, shift.getPoint().y, shift.getPoint().z); - - GlStateManager.pushMatrix(); - FloatBuffer buffer = BufferUtils.createFloatBuffer(16); - buffer.clear(); - this.loadMatrix(buffer, x, vectors); - - if(shift.getAngle().y != 0.0F) - { - GlStateManager.rotate(-shift.getAngle().y * RADIANT, 0.0F, 0.0F, 1.0F); - } - - if(shift.getAngle().z != 0.0F) - { - GlStateManager.rotate(-shift.getAngle().z * RADIANT, 0.0F, 1.0F, 0.0F); - } - - if(shift.getAngle().x != 0.0F) - { - GlStateManager.rotate(-shift.getAngle().x * RADIANT, 1.0F, 0.0F, 0.0F); - } - - this.getMatrix(buffer, x, vectors); - GlStateManager.popMatrix(); - } - } - } - - for(Vector3f vec : vectors) - { - System.out.println(vec.x + "\t" + -vec.y + "\t" + vec.z); - } - - consumer.accept(vectors); - } - } - - shifts.pop(); - } - } - } - } - - private void translate(Vector3f translation, int vectorArrayIndex, Vector3f[] vectors) - { - int arrayPartLength = 4; - int arrayPart = vectorArrayIndex * arrayPartLength; - int arrayPartMax = arrayPart + arrayPartLength; - - for(int y = arrayPart; y < arrayPartMax; y++) - { - Vector3f.add(vectors[y], translation, vectors[y]); - } - } - - private void loadMatrix(FloatBuffer buffer, int vectorArrayIndex, Vector3f[] vectors) - { - GlStateManager.matrixMode(GL11.GL_MODELVIEW); - - for(int y = 0; y < buffer.capacity(); y++) - { - final int index = vectorArrayIndex * 4 + y % 4; - - if(y < 4) - { - buffer.put(vectors[index].x); - } - else if(y >= 4 && y < 8) - { - buffer.put(vectors[index].y); - } - else if(y >= 8 && y < 12) - { - buffer.put(vectors[index].z); - } - else - { - buffer.put(0); - } - } - - buffer.rewind(); - GL11.glLoadMatrix(buffer); - } - - private void getMatrix(FloatBuffer buffer, int vectorArrayIndex, Vector3f[] vectors) - { - float[] array = new float[buffer.capacity()]; - GlStateManager.getFloat(GL11.GL_MODELVIEW_MATRIX, buffer); - buffer.get(array); - - for(int y = 0; y < array.length; y++) - { - final int index = vectorArrayIndex * 4 + y % 4; - - if(y < 4) - { - vectors[index].x = array[y]; - } - else if(y >= 4 && y < 8) - { - vectors[index].y = array[y]; - } - else if(y >= 8 && y < 12) - { - vectors[index].z = array[y]; - } - } - } - - private static final class ModelShifts - { - private final Vector3f offset; - private final Vector3f angle; - private final Vector3f point; - - public ModelShifts(Vector3f offset, Vector3f angle, Vector3f point) - { - this.offset = offset; - this.angle = angle; - this.point = point; - } - - public Vector3f getOffset() - { - return this.offset; - } - - public Vector3f getAngle() - { - return this.angle; - } - - public Vector3f getPoint() - { - return this.point; - } - } - - //TODO - @Deprecated - private void printGLMatrix() - { - FloatBuffer buffer = BufferUtils.createFloatBuffer(16); - GL11.glGetFloat(GL11.GL_MODELVIEW_MATRIX, buffer); - float[] array = new float[buffer.capacity()]; - buffer.get(array); - - System.out.println(); - - for(int x = 0; x < buffer.capacity(); x += 4) - { - System.out.println(String.format("%02.2f %02.2f %02.2f %02.2f", array[x], array[x + 1], array[x + 2], array[x + 3])); - } - } - - private static final float RADIANT = (float) (180F / Math.PI); - private static final Vector3f ORIGIN = new Vector3f(); - - private List getBaseModels(List list) - { - Set baseModels = this.getModels(list); - baseModels.removeAll(this.getAllChildren(list)); - return new ArrayList(baseModels); - } - - private Set getAllChildren(List list) - { - Set result = new HashSet(); - - for(ModelRenderer model : list) - { - if(model.childModels != null) - { - result.addAll(this.getModels(model.childModels)); - } - } - - return result; - } - - private Set getModels(List list) - { - Set result = new HashSet(); - - for(ModelRenderer model : list) - { - if(!result.contains(model)) - { - result.add(model); - } - - if(model.childModels != null) - { - result.addAll(this.getModels(model.childModels)); - } - } - - return result; - } - - @Override - public Category getCategory() - { - return Categories.ENTITIES; - } - - @Override - public String getTitle() - { - return "Playsound"; - } - - @Override - public String getTabTitle() - { - return "Playsound"; - } - - @Override - public Content getActiveContent() - { - return Contents.PLAYSOUND; - } -} From a38bff54be855cd410afc1233b7ebdda7ad59719 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 02:12:40 +0200 Subject: [PATCH 35/40] Minor language adjustments --- .../exopandora/worldhandler/WorldHandler.java | 340 +++++++++--------- 1 file changed, 170 insertions(+), 170 deletions(-) diff --git a/src/main/java/exopandora/worldhandler/WorldHandler.java b/src/main/java/exopandora/worldhandler/WorldHandler.java index f4ab40f..703de49 100644 --- a/src/main/java/exopandora/worldhandler/WorldHandler.java +++ b/src/main/java/exopandora/worldhandler/WorldHandler.java @@ -1,171 +1,171 @@ -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-Initialisation"); - 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("Initialisation"); - 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-Initialisation"); - } - - @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); - } - } - } +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); + } + } + } } \ No newline at end of file From e20bcc8f0c1fb9394518df2bde16a6b75cd61e36 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 15:10:25 +0200 Subject: [PATCH 36/40] Update .gitignore --- .gitignore | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/.gitignore b/.gitignore index 30c2437..3415440 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,10 @@ # Except !/src/ +!/gradle/ +!gradlew +!gradlew.bat +!gradle.properties !build.gradle !README.md !version.json \ No newline at end of file From d70457725a0430ca36e46d820baddc4042af5612 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 15:13:19 +0200 Subject: [PATCH 37/40] Add gradle wrapper --- gradle.properties | 3 + gradle/wrapper/gradle-wrapper.jar | Bin 0 -> 52271 bytes gradle/wrapper/gradle-wrapper.properties | 6 + gradlew | 164 +++++++++++++++++++++++ gradlew.bat | 90 +++++++++++++ 5 files changed, 263 insertions(+) create mode 100644 gradle.properties create mode 100644 gradle/wrapper/gradle-wrapper.jar create mode 100644 gradle/wrapper/gradle-wrapper.properties create mode 100644 gradlew create mode 100644 gradlew.bat diff --git a/gradle.properties b/gradle.properties new file mode 100644 index 0000000..911de12 --- /dev/null +++ b/gradle.properties @@ -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 \ No newline at end of file diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar new file mode 100644 index 0000000000000000000000000000000000000000..30d399d8d2bf522ff5de94bf434a7cc43a9a74b5 GIT binary patch literal 52271 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 p \(.*\)$'` + 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 "$@" diff --git a/gradlew.bat b/gradlew.bat new file mode 100644 index 0000000..8a0b282 --- /dev/null +++ b/gradlew.bat @@ -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 From 0988ceef7005c4c364ce3b214cc5fdc094a9e3b1 Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 15:13:47 +0200 Subject: [PATCH 38/40] Update .gitignore --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3415440..6bb5f66 100644 --- a/.gitignore +++ b/.gitignore @@ -7,7 +7,6 @@ !/gradle/ !gradlew !gradlew.bat -!gradle.properties !build.gradle !README.md !version.json \ No newline at end of file From 1f3f81e33f544b5b414d36eb96c13548912de8ed Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Thu, 28 Jun 2018 15:19:23 +0200 Subject: [PATCH 39/40] Add gradle wrapper --- build.gradle | 35 ++++++++++++++++++++--------------- 1 file changed, 20 insertions(+), 15 deletions(-) diff --git a/build.gradle b/build.gradle index 594f863..38aac18 100644 --- a/build.gradle +++ b/build.gradle @@ -32,26 +32,31 @@ jar { } } -task signJar(type: SignJar, dependsOn: reobfJar) { - keyStore = project.keyStore - alias = project.keyStoreAlias - storePass = project.keyStorePass - keyPass = project.keyStoreKeyPass - inputFile = jar.archivePath - outputFile = jar.archivePath +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 } -build.dependsOn signJar minecraft { version = "1.12.2-14.23.3.2676" runDir = "run" - - replace '$version', modversion - replace '$mcversion', mcversion - replace '$compatible', mccompatible - replace '$url', url - replace '$update_url', update_url - replace '$certificate', certificate // the mappings can be changed at any time, and must be in the following format. // snapshot_YYYYMMDD snapshot are built nightly. From 86d789d5a3e75136378ec95a1bbc0178d8d2861c Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 29 Jun 2018 12:32:16 +0200 Subject: [PATCH 40/40] Add recipe command --- README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/README.md b/README.md index 576c4d0..2c37671 100644 --- a/README.md +++ b/README.md @@ -36,6 +36,7 @@ Curseforge: https://minecraft.curseforge.com/projects/world-handler-command-gui

  • /gamerule
  • /give
  • /kill
  • +
  • /recipe
  • /scoreboard
  • /setworldspawn
  • /spawnpoint