From bcd50892d98b54872d7dff64b4edb185a558d65d Mon Sep 17 00:00:00 2001 From: GirafiStudios Date: Sun, 7 Feb 2016 19:09:23 +0100 Subject: [PATCH] Added support for Forge in-game gui config. --- .../client/gui/GuiBOPConfig.java | 36 ++++++++++++++++ .../biomesoplenty/client/gui/GuiFactory.java | 25 +++++++++++ .../config/GameplayConfigurationHandler.java | 36 ++++++++++++---- .../config/MiscConfigurationHandler.java | 43 +++++++++++++------ .../common/init/ModConfiguration.java | 9 ++-- .../biomesoplenty/core/BiomesOPlenty.java | 5 ++- 6 files changed, 128 insertions(+), 26 deletions(-) create mode 100644 src/main/java/biomesoplenty/client/gui/GuiBOPConfig.java create mode 100644 src/main/java/biomesoplenty/client/gui/GuiFactory.java diff --git a/src/main/java/biomesoplenty/client/gui/GuiBOPConfig.java b/src/main/java/biomesoplenty/client/gui/GuiBOPConfig.java new file mode 100644 index 000000000..93f732937 --- /dev/null +++ b/src/main/java/biomesoplenty/client/gui/GuiBOPConfig.java @@ -0,0 +1,36 @@ +package biomesoplenty.client.gui; + +import biomesoplenty.common.config.GameplayConfigurationHandler; +import biomesoplenty.common.config.MiscConfigurationHandler; +import biomesoplenty.core.BiomesOPlenty; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.fml.client.config.DummyConfigElement; +import net.minecraftforge.fml.client.config.GuiConfig; +import net.minecraftforge.fml.client.config.IConfigElement; + +import java.util.ArrayList; +import java.util.List; + +public class GuiBOPConfig extends GuiConfig +{ + public GuiBOPConfig(GuiScreen parentScreen) + { + super(parentScreen, GuiBOPConfig.getConfigElements(), BiomesOPlenty.MOD_ID, false, false, "/biomesoplenty"); + } + + private static List getConfigElements() + { + List list = new ArrayList(); + + List convenienceSettings = new ConfigElement(GameplayConfigurationHandler.config.getCategory(GameplayConfigurationHandler.convenienceSettings.toLowerCase())).getChildElements(); + List guiSettings = new ConfigElement(MiscConfigurationHandler.config.getCategory(MiscConfigurationHandler.guiSettings.toLowerCase())).getChildElements(); + List textureSettings = new ConfigElement(MiscConfigurationHandler.config.getCategory(MiscConfigurationHandler.textureSettings.toLowerCase())).getChildElements(); + + list.add(new DummyConfigElement.DummyCategoryElement(GameplayConfigurationHandler.convenienceSettings, BiomesOPlenty.MOD_ID.toLowerCase() + ".config.category.convenienceSettings", convenienceSettings)); + list.add(new DummyConfigElement.DummyCategoryElement(MiscConfigurationHandler.guiSettings, BiomesOPlenty.MOD_ID.toLowerCase() + ".config.category.guiSettings", guiSettings)); + list.add(new DummyConfigElement.DummyCategoryElement(MiscConfigurationHandler.textureSettings, BiomesOPlenty.MOD_ID.toLowerCase() + ".config.category.textureSettings", textureSettings)); + + return list; + } +} \ No newline at end of file diff --git a/src/main/java/biomesoplenty/client/gui/GuiFactory.java b/src/main/java/biomesoplenty/client/gui/GuiFactory.java new file mode 100644 index 000000000..a19c7f5e0 --- /dev/null +++ b/src/main/java/biomesoplenty/client/gui/GuiFactory.java @@ -0,0 +1,25 @@ +package biomesoplenty.client.gui; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; + +import java.util.Set; + +public class GuiFactory implements IModGuiFactory { + + @Override + public void initialize(Minecraft minecraftInstance) { } + + @Override + public Class mainConfigGuiClass() + { + return GuiBOPConfig.class; + } + + @Override + public Set runtimeGuiCategories() { return null; } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) { return null; } +} \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/config/GameplayConfigurationHandler.java b/src/main/java/biomesoplenty/common/config/GameplayConfigurationHandler.java index f7ba9ce42..85a5a21cb 100644 --- a/src/main/java/biomesoplenty/common/config/GameplayConfigurationHandler.java +++ b/src/main/java/biomesoplenty/common/config/GameplayConfigurationHandler.java @@ -7,26 +7,35 @@ ******************************************************************************/ package biomesoplenty.common.config; -import java.io.File; - import biomesoplenty.core.BiomesOPlenty; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; -public class GameplayConfigurationHandler +import java.io.File; + +public class GameplayConfigurationHandler { public static Configuration config; - + + public static String convenienceSettings = "Convenience Settings"; + public static boolean flowerDropsNeedShears; public static void init(File configFile) { - config = new Configuration(configFile); + if (config == null) + { + config = new Configuration(configFile); + loadConfiguration(); + } + } + private static void loadConfiguration() + { try { - config.load(); - - flowerDropsNeedShears = config.getBoolean("Flower Drops Need Shears", "Convenience Settings", false, "Require shears to be used to collect flower drops."); + flowerDropsNeedShears = config.getBoolean("Flower Drops Need Shears", convenienceSettings, false, "Require shears to be used to collect flower drops."); } catch (Exception e) { @@ -37,4 +46,13 @@ public class GameplayConfigurationHandler if (config.hasChanged()) config.save(); } } -} + + @SubscribeEvent + public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event) + { + if (event.modID.equalsIgnoreCase(BiomesOPlenty.MOD_ID)) + { + loadConfiguration(); + } + } +} \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/config/MiscConfigurationHandler.java b/src/main/java/biomesoplenty/common/config/MiscConfigurationHandler.java index b68693818..efd7ff1ba 100644 --- a/src/main/java/biomesoplenty/common/config/MiscConfigurationHandler.java +++ b/src/main/java/biomesoplenty/common/config/MiscConfigurationHandler.java @@ -8,40 +8,50 @@ package biomesoplenty.common.config; -import java.io.File; - import biomesoplenty.common.remote.TrailManager; import biomesoplenty.common.remote.TrailManager.TrailVisibilityMode; import biomesoplenty.common.util.entity.PlayerUtil; import biomesoplenty.core.BiomesOPlenty; import net.minecraftforge.common.config.Configuration; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; import net.minecraftforge.fml.common.FMLCommonHandler; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; +import java.io.File; + public class MiscConfigurationHandler { public static Configuration config; - + + public static String guiSettings = "GUI Settings"; + public static String textureSettings = "Texture Settings"; + public static boolean useBoPWorldTypeDefault; public static boolean overrideTitlePanorama; public static boolean overrideForgeBuckets; - + //Client-side only public static TrailVisibilityMode trailVisbilityMode; public static void init(File configFile) { - config = new Configuration(configFile); + if (config == null) + { + config = new Configuration(configFile); + loadConfiguration(); + } + } + private static void loadConfiguration() + { try { - config.load(); - //TODO: Make this default to true once all biomes have been implemented - useBoPWorldTypeDefault = config.getBoolean("Default to BoP World Type", "GUI Settings", false, "Use the Biomes O' Plenty World Type by default when selecting a world."); - overrideTitlePanorama = config.getBoolean("Enable Biomes O\' Plenty Main Menu Panorama", "Texture Settings", true, "Override the main menu panorama and use ours instead (It\'s nicer!)"); - overrideForgeBuckets = config.getBoolean("Enable Biomes O\' Plenty Bucket Textures", "Texture Settings", true, "Override the Forge bucket texture and use ours instead (It\'s nicer!)"); - + useBoPWorldTypeDefault = config.getBoolean("Default to BoP World Type", guiSettings, false, "Use the Biomes O' Plenty World Type by default when selecting a world."); + overrideTitlePanorama = config.getBoolean("Enable Biomes O\' Plenty Main Menu Panorama", textureSettings, true, "Override the main menu panorama and use ours instead (It\'s nicer!)"); + overrideForgeBuckets = config.getBoolean("Enable Biomes O\' Plenty Bucket Textures", textureSettings, true, "Override the Forge bucket texture and use ours instead (It\'s nicer!)"); + //Client-side only options if (FMLCommonHandler.instance().getSide() == Side.CLIENT) { @@ -61,4 +71,13 @@ public class MiscConfigurationHandler if (config.hasChanged()) config.save(); } } -} + + @SubscribeEvent + public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event) + { + if (event.modID.equalsIgnoreCase(BiomesOPlenty.MOD_ID)) + { + loadConfiguration(); + } + } +} \ No newline at end of file diff --git a/src/main/java/biomesoplenty/common/init/ModConfiguration.java b/src/main/java/biomesoplenty/common/init/ModConfiguration.java index 22f0591ef..dc768bcbe 100644 --- a/src/main/java/biomesoplenty/common/init/ModConfiguration.java +++ b/src/main/java/biomesoplenty/common/init/ModConfiguration.java @@ -8,16 +8,19 @@ package biomesoplenty.common.init; -import java.io.File; - import biomesoplenty.common.config.GameplayConfigurationHandler; import biomesoplenty.common.config.MiscConfigurationHandler; +import net.minecraftforge.common.MinecraftForge; + +import java.io.File; public class ModConfiguration { public static void init(File configDirectory) { GameplayConfigurationHandler.init(new File(configDirectory, "gameplay.cfg")); + MinecraftForge.EVENT_BUS.register(new GameplayConfigurationHandler()); MiscConfigurationHandler.init(new File(configDirectory, "misc.cfg")); + MinecraftForge.EVENT_BUS.register(new MiscConfigurationHandler()); } -} +} \ No newline at end of file diff --git a/src/main/java/biomesoplenty/core/BiomesOPlenty.java b/src/main/java/biomesoplenty/core/BiomesOPlenty.java index 234e98992..a50509154 100644 --- a/src/main/java/biomesoplenty/core/BiomesOPlenty.java +++ b/src/main/java/biomesoplenty/core/BiomesOPlenty.java @@ -39,12 +39,13 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.event.FMLServerStartingEvent; import net.minecraftforge.fml.common.network.NetworkRegistry; -@Mod(modid = BiomesOPlenty.MOD_ID, name = BiomesOPlenty.MOD_NAME, dependencies = "required-after:Forge@[11.14.3.1468,)") +@Mod(modid = BiomesOPlenty.MOD_ID, name = BiomesOPlenty.MOD_NAME, dependencies = "required-after:Forge@[11.14.3.1468,)", guiFactory = BiomesOPlenty.GUI_FACTORY) public class BiomesOPlenty { public static final String MOD_NAME = "Biomes O' Plenty"; public static final String MOD_ID = "BiomesOPlenty"; - + public static final String GUI_FACTORY = "biomesoplenty.client.gui.GuiFactory"; + @Instance(MOD_ID) public static BiomesOPlenty instance;