From 5716966c5182e7c2fe24c0eab27f0ef2c0a91f8b Mon Sep 17 00:00:00 2001 From: Marcel Konrad Date: Fri, 22 Jun 2018 00:51:48 +0200 Subject: [PATCH] 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