From 2dbac86289370f8bade4b2711ee43be813d8f092 Mon Sep 17 00:00:00 2001 From: 0xSeb Date: Thu, 22 Oct 2015 01:15:26 +0200 Subject: [PATCH] Added AND finished successfully the work on the config file. Perfect with comments and stuff and a in-game config pane. that's a new feature. that's so cool! --- .../java/de/skate702/craftingkeys/Config.java | 85 ------------- .../skate702/craftingkeys/CraftingKeys.java | 17 ++- .../skate702/craftingkeys/config/Config.java | 113 ++++++++++++++++++ .../craftingkeys/config/ConfigGui.java | 50 ++++++++ .../craftingkeys/config/ConfigGuiFactory.java | 32 +++++ .../assets/craftingkeys/lang/en_US.lang | 7 ++ src/main/resources/mcmod.info | 22 ++-- 7 files changed, 226 insertions(+), 100 deletions(-) delete mode 100644 src/main/java/de/skate702/craftingkeys/Config.java create mode 100644 src/main/java/de/skate702/craftingkeys/config/Config.java create mode 100644 src/main/java/de/skate702/craftingkeys/config/ConfigGui.java create mode 100644 src/main/java/de/skate702/craftingkeys/config/ConfigGuiFactory.java diff --git a/src/main/java/de/skate702/craftingkeys/Config.java b/src/main/java/de/skate702/craftingkeys/Config.java deleted file mode 100644 index 7435f76..0000000 --- a/src/main/java/de/skate702/craftingkeys/Config.java +++ /dev/null @@ -1,85 +0,0 @@ -package de.skate702.craftingkeys; - -import cpw.mods.fml.common.event.FMLPreInitializationEvent; -import net.minecraftforge.common.config.Configuration; -import net.minecraftforge.common.config.Property; -import org.lwjgl.input.Keyboard; - -/** - * Configuration Management for Keys, etc. - */ -public class Config { - - - private static final String categoryKeys = "Keys"; - private static final String categoryOther = "Other"; - /** - * Defines all 11 Keys you can use with Crafting Keys. - */ - public static Property keyTopLeft, keyTopCenter, keyTopRight, - keyCenterLeft, keyCenterCenter, keyCenterRight, - keyLowerLeft, keyLowerCenter, keyLowerRight, - keyStack, keyInteract; - /** - * Defines, if NumPad is always active for crafting - */ - public static Property enableNumPad; - - /** - * Initializes the config Files, loads all values (or sets them to default). - * - * @param event PreInitEvent from Main Class - */ - public static void loadConfig(FMLPreInitializationEvent event) { - - Configuration config = new Configuration(event.getSuggestedConfigurationFile()); - - config.load(); - - genComments(config); - - getProperties(config); - - config.save(); - - } - - /** - * Generates comments for easier understanding of the categories. - * - * @param config Mod related Configuration File - */ - private static void genComments(Configuration config) { - - config.addCustomCategoryComment(categoryKeys, "Keyboard codes based on http://minecraft.gamepedia.com/Key_codes"); - config.addCustomCategoryComment(categoryOther, "Other settings which have effects @ crafting keys"); - - } - - /** - * Loads all properties from the config file. - * - * @param config Mod related Configuration File - */ - private static void getProperties(Configuration config) { - - keyTopLeft = config.get(categoryKeys, "1_keyTopLeft", Keyboard.KEY_Q); - keyTopCenter = config.get(categoryKeys, "2_keyTopCenter", Keyboard.KEY_W); - keyTopRight = config.get(categoryKeys, "3_keyTopRight", Keyboard.KEY_E); - - keyCenterLeft = config.get(categoryKeys, "4_keyCenterLeft", Keyboard.KEY_A); - keyCenterCenter = config.get(categoryKeys, "5_keyCenterCenter", Keyboard.KEY_S); - keyCenterRight = config.get(categoryKeys, "6_keyCenterRight", Keyboard.KEY_D); - - keyLowerLeft = config.get(categoryKeys, "7_keyLowerLeft", Keyboard.KEY_Y); // German Keyboard Layout - keyLowerCenter = config.get(categoryKeys, "8_keyLowerCenter", Keyboard.KEY_X); - keyLowerRight = config.get(categoryKeys, "9_keyLowerRight", Keyboard.KEY_C); - - keyStack = config.get(categoryKeys, "keyStack", Keyboard.KEY_LSHIFT, "Key to move stacks instead of single items"); - keyInteract = config.get(categoryKeys, "keyInteract", Keyboard.KEY_LCONTROL, "Key to interact with e.g. crafting output"); - - enableNumPad = config.get(categoryOther, "enableNumPad", true, "Activates the NumPad for crafting"); - - } - -} diff --git a/src/main/java/de/skate702/craftingkeys/CraftingKeys.java b/src/main/java/de/skate702/craftingkeys/CraftingKeys.java index f06f5ff..5f9c57a 100644 --- a/src/main/java/de/skate702/craftingkeys/CraftingKeys.java +++ b/src/main/java/de/skate702/craftingkeys/CraftingKeys.java @@ -1,5 +1,6 @@ package de.skate702.craftingkeys; +import cpw.mods.fml.client.event.ConfigChangedEvent; import cpw.mods.fml.common.FMLCommonHandler; import cpw.mods.fml.common.Mod; import cpw.mods.fml.common.Mod.EventHandler; @@ -11,6 +12,7 @@ import cpw.mods.fml.common.event.FMLPreInitializationEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.gameevent.InputEvent; import cpw.mods.fml.common.gameevent.TickEvent; +import de.skate702.craftingkeys.config.Config; import de.skate702.craftingkeys.manager.ContainerManager; import de.skate702.craftingkeys.proxies.CraftingKeysProxy; import net.minecraft.client.gui.inventory.GuiCrafting; @@ -22,13 +24,18 @@ import net.minecraft.inventory.Slot; * * @author skate702 */ -@Mod(modid = "craftingkeys", name = "Crafting Keys", version = "1.0.0") +@Mod(modid = CraftingKeys.MODID, name = CraftingKeys.VERSION, version = CraftingKeys.NAME, + guiFactory = "de.skate702.craftingkeys.config.ConfigGuiFactory") public class CraftingKeys { + public static final String MODID = "craftingkeys"; + public static final String VERSION = "1.0.0"; + public static final String NAME = "Crafting Keys"; + /** * Current Instance of CraftingKeys. */ - @Instance(value = "CraftingKeys") + @Instance(value = MODID) public static CraftingKeys instance; /** @@ -80,6 +87,12 @@ public class CraftingKeys { public void postInit(FMLPostInitializationEvent event) { } + @SubscribeEvent + public void onConfigChanged(ConfigChangedEvent.OnConfigChangedEvent eventArgs) { + if (eventArgs.modID.equals(MODID)) + Config.syncConfig(); + } + /** * This method will be executed every Ingame Tick. * diff --git a/src/main/java/de/skate702/craftingkeys/config/Config.java b/src/main/java/de/skate702/craftingkeys/config/Config.java new file mode 100644 index 0000000..df00f76 --- /dev/null +++ b/src/main/java/de/skate702/craftingkeys/config/Config.java @@ -0,0 +1,113 @@ +package de.skate702.craftingkeys.config; + +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.common.config.Property; +import org.lwjgl.input.Keyboard; + +/** + * Configuration Management for Keys, etc. + */ +public class Config { + + + /** + * Defines the config string for the keys-category. + */ + public static final String categoryKeys = "keys"; + + /** + * Defines the config string for the other-category. + */ + public static final String categoryOther = "other"; + /** + * Defines all 11 Keys you can use with Crafting Keys. + */ + public static Property keyTopLeft, keyTopCenter, keyTopRight, + keyCenterLeft, keyCenterCenter, keyCenterRight, + keyLowerLeft, keyLowerCenter, keyLowerRight, + keyStack, keyInteract; + /** + * Defines, if NumPad is always active for crafting. + */ + public static Property enableNumPad; + + /** + * Provides the Suggested Config File. + */ + public static Configuration configFile; + + /** + * Initializes the configFile Files, loads all values (or sets them to default). + * + * @param event PreInitEvent from Main Class + */ + public static void loadConfig(FMLPreInitializationEvent event) { + + configFile = new Configuration(event.getSuggestedConfigurationFile()); + + configFile.load(); + + genComments(); + + syncConfig(); + + } + + /** + * Syncs and saves the configFile file. + */ + public static void syncConfig() { + + syncProperties(); + + if (configFile.hasChanged()) + configFile.save(); + + } + + /** + * Generates comments for easier understanding of the categories. + * + * @param config Mod related Configuration File + */ + private static void genComments() { + + configFile.addCustomCategoryComment(categoryKeys, "Keyboard codes based on http://minecraft.gamepedia.com/Key_codes"); + configFile.addCustomCategoryComment(categoryOther, "Other settings which have effects @ crafting keys"); + + } + + /** + * Loads all properties from the configFile file. + * + * @param config Mod related Configuration File + */ + private static void syncProperties() { + + // Standart Keys + + keyTopLeft = configFile.get(categoryKeys, "1. Top Left", Keyboard.KEY_Q, "Top Left crafting key (key value)"); + keyTopCenter = configFile.get(categoryKeys, "2. Top Center", Keyboard.KEY_W, "Top Center crafting key (key value)"); + keyTopRight = configFile.get(categoryKeys, "3. Top Right", Keyboard.KEY_E, "Top Right crafting key (key value)"); + + keyCenterLeft = configFile.get(categoryKeys, "4. Center Left", Keyboard.KEY_A, "Center Left crafting key (key value)"); + keyCenterCenter = configFile.get(categoryKeys, "5. Center Center", Keyboard.KEY_S, "Center Center crafting key (key value)"); + keyCenterRight = configFile.get(categoryKeys, "6. Center Right", Keyboard.KEY_D, "Center Right crafting key (key value)"); + + keyLowerLeft = configFile.get(categoryKeys, "7. Lower Left", Keyboard.KEY_Y, "Lower Left crafting key (key value)"); // German Keyboard Layout + keyLowerCenter = configFile.get(categoryKeys, "8. Lower Center", Keyboard.KEY_X, "Lower Center crafting key (key value)"); + keyLowerRight = configFile.get(categoryKeys, "9. Lower Right", Keyboard.KEY_C, "Lower Right crafting key (key value)"); + + // Special Keys + + keyStack = configFile.get(categoryKeys, "Stack Key", Keyboard.KEY_LSHIFT, "Key to move stacks instead of single items"); + keyInteract = configFile.get(categoryKeys, "Interaction Key", Keyboard.KEY_LCONTROL, "Key to interact with e.g. crafting output"); + + // Other Settings + + enableNumPad = configFile.get(categoryOther, "Enable Num Pad", true, "Activates the NumPad for crafting"); + + } + +} diff --git a/src/main/java/de/skate702/craftingkeys/config/ConfigGui.java b/src/main/java/de/skate702/craftingkeys/config/ConfigGui.java new file mode 100644 index 0000000..43bdfd3 --- /dev/null +++ b/src/main/java/de/skate702/craftingkeys/config/ConfigGui.java @@ -0,0 +1,50 @@ +package de.skate702.craftingkeys.config; + +import cpw.mods.fml.client.config.DummyConfigElement; +import cpw.mods.fml.client.config.GuiConfig; +import cpw.mods.fml.client.config.IConfigElement; +import de.skate702.craftingkeys.CraftingKeys; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.common.config.ConfigElement; + +import java.util.ArrayList; +import java.util.List; + +/** + * Custom Config Gui for Mod Options inside of Minecraft. + */ +public class ConfigGui extends GuiConfig { + public ConfigGui(GuiScreen parent) { + super(parent, getConfigElements(), + CraftingKeys.MODID, false, false, CraftingKeys.NAME); + + } + + /** + * Generates Config Entires based on the main config file. + * + * @return A List of IConfigElement-Items, ready to add to the gui. + */ + private static List getConfigElements() { + List list = new ArrayList(); + + list.add(categoryElement(Config.categoryKeys, Config.categoryKeys, "de.skate702.craftingkeys.keys")); + list.add(categoryElement(Config.categoryOther, Config.categoryOther, "de.skate702.craftingkeys.other")); + + return list; + } + + /** + * Automatically generates category elements for config categories. + * + * @param category the given category string (from the config file) + * @param name the name of the category + * @param tooltip_key a lang-string, must have tooltip available under .tooltip + * @return Returns a IConfigElement ready to add to the list of elements + */ + private static IConfigElement categoryElement(String category, String name, String tooltip_key) { + return new DummyConfigElement.DummyCategoryElement(name, tooltip_key, + new ConfigElement> + (Config.configFile.getCategory(category)).getChildElements()); + } +} diff --git a/src/main/java/de/skate702/craftingkeys/config/ConfigGuiFactory.java b/src/main/java/de/skate702/craftingkeys/config/ConfigGuiFactory.java new file mode 100644 index 0000000..14ef266 --- /dev/null +++ b/src/main/java/de/skate702/craftingkeys/config/ConfigGuiFactory.java @@ -0,0 +1,32 @@ +package de.skate702.craftingkeys.config; + +import cpw.mods.fml.client.IModGuiFactory; +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; + +import java.util.Set; + +/** + * A Config Gui Factory which always returns the ConfigGUI-Class. Nothing more to see here, go away! + */ +public class ConfigGuiFactory implements IModGuiFactory { + @Override + public void initialize(Minecraft minecraftInstance) { + + } + + @Override + public Class mainConfigGuiClass() { + return ConfigGui.class; + } + + @Override + public Set runtimeGuiCategories() { + return null; + } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) { + return null; + } +} diff --git a/src/main/resources/assets/craftingkeys/lang/en_US.lang b/src/main/resources/assets/craftingkeys/lang/en_US.lang index 2c31655..03f07ec 100644 --- a/src/main/resources/assets/craftingkeys/lang/en_US.lang +++ b/src/main/resources/assets/craftingkeys/lang/en_US.lang @@ -10,5 +10,12 @@ key.lowercenter=8. Lower Center key.lowerright=9. Lower Right key.stack=Stack Key key.interact=Interaction Key + # Control Category Name key.categories.craftingkeys=Crafting Keys + +# Config Stuff +de.skate702.craftingkeys.keys=Keys +de.skate702.craftingkeys.other=Other +de.skate702.craftingkeys.keys.tooltip=Set your Keys here (Just google "LWJGL Key codes"!) +de.skate702.craftingkeys.other.tooltip=All other settings are here! diff --git a/src/main/resources/mcmod.info b/src/main/resources/mcmod.info index e6950c8..6c60c75 100644 --- a/src/main/resources/mcmod.info +++ b/src/main/resources/mcmod.info @@ -1,16 +1,12 @@ [ { - "modid": "craftingkeys", - "name": "Crafting Keys", - "description": "TODO", - "version": "${version}", - "mcversion": "${mcversion}", - "url": "http://skate702.de", - "updateUrl": "http://skate702.de", - "authorList": ["skate702, 0xSeb"], - "credits": "Thanks to Inventory-Tweaks!", - "logoFile": "", - "screenshots": [], - "dependencies": [] +"modid": "craftingkeys", +"name": "Crafting Keys", +"description": "Simple better crafting! You can change the Key Bindings by clicking on Config.", +"version": "1.0.0", +"credits": "Based on the open-source InvTweaks-Mod. Thanks a lot!", +"mcversion": "1.7.10 - 1.8", +"url": "http://skate702.de", +"authorList": [ "skate702", "0xSeb" ] } -] +] \ No newline at end of file