diff --git a/java/squeek/quakemovement/ModConfig.java b/java/squeek/quakemovement/ModConfig.java index ea3f7aa..8ff0c27 100644 --- a/java/squeek/quakemovement/ModConfig.java +++ b/java/squeek/quakemovement/ModConfig.java @@ -1,12 +1,15 @@ package squeek.quakemovement; -import java.io.File; import net.minecraftforge.common.config.Configuration; import net.minecraftforge.common.config.Property; +import net.minecraftforge.fml.client.event.ConfigChangedEvent; +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; + +import java.io.File; public class ModConfig { - private static final String CATEGORY_MOVEMENT = "movement"; + public static final String CATEGORY_MOVEMENT = "movement"; public static float TRIMP_MULTIPLIER; private static final String TRIMP_MULTIPLIER_NAME = "trimpMultiplier"; @@ -65,14 +68,19 @@ public class ModConfig private static final String ENABLED_NAME = "enabled"; private static final boolean ENABLED_DEFAULT = true; - private static Configuration config; + public static Configuration config; public static void init(File file) { - config = new Configuration(file); - - load(); + if (config == null) + { + config = new Configuration(file); + load(); + } + } + public static void load() + { UNCAPPED_BUNNYHOP_ENABLED = config.get(CATEGORY_MOVEMENT, UNCAPPED_BUNNYHOP_ENABLED_NAME, UNCAPPED_BUNNYHOP_ENABLED_DEFAULT, "if enabled, the soft and hard caps will not be applied at all").getBoolean(UNCAPPED_BUNNYHOP_ENABLED_DEFAULT); AIR_ACCELERATE = config.get(CATEGORY_MOVEMENT, AIR_ACCELERATE_NAME, AIR_ACCELERATE_DEFAULT, "a higher value means you can turn more sharply in the air without losing speed").getDouble(AIR_ACCELERATE_DEFAULT); MAX_AIR_ACCEL_PER_TICK = config.get(CATEGORY_MOVEMENT, MAX_AIR_ACCEL_PER_TICK_NAME, MAX_AIR_ACCEL_PER_TICK_DEFAULT, "a higher value means faster air acceleration").getDouble(MAX_AIR_ACCEL_PER_TICK_DEFAULT); @@ -105,11 +113,18 @@ public class ModConfig public static void save() { - config.save(); + if (config.hasChanged()) + { + config.save(); + } } - public static void load() + @SubscribeEvent + public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event) { - config.load(); + if (event.getModID().equalsIgnoreCase(ModInfo.MODID)) + { + load(); + } } } diff --git a/java/squeek/quakemovement/ModConfigGui.java b/java/squeek/quakemovement/ModConfigGui.java new file mode 100644 index 0000000..078dc10 --- /dev/null +++ b/java/squeek/quakemovement/ModConfigGui.java @@ -0,0 +1,13 @@ +package squeek.quakemovement; + +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.common.config.ConfigElement; +import net.minecraftforge.fml.client.config.GuiConfig; + +public class ModConfigGui extends GuiConfig +{ + public ModConfigGui(GuiScreen parentScreen) + { + super(parentScreen, new ConfigElement(ModConfig.config.getCategory(ModConfig.CATEGORY_MOVEMENT)).getChildElements(), ModInfo.MODID, false, false, GuiConfig.getAbridgedConfigPath(ModConfig.config.toString())); + } +} diff --git a/java/squeek/quakemovement/ModConfigGuiFactory.java b/java/squeek/quakemovement/ModConfigGuiFactory.java new file mode 100644 index 0000000..a06e599 --- /dev/null +++ b/java/squeek/quakemovement/ModConfigGuiFactory.java @@ -0,0 +1,33 @@ +package squeek.quakemovement; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraftforge.fml.client.IModGuiFactory; + +import java.util.Set; + +public class ModConfigGuiFactory implements IModGuiFactory +{ + @Override + public void initialize(Minecraft minecraftInstance) + { + } + + @Override + public Class mainConfigGuiClass() + { + return ModConfigGui.class; + } + + @Override + public Set runtimeGuiCategories() + { + return null; + } + + @Override + public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) + { + return null; + } +} diff --git a/java/squeek/quakemovement/ModInfo.java b/java/squeek/quakemovement/ModInfo.java index c074654..8af102b 100644 --- a/java/squeek/quakemovement/ModInfo.java +++ b/java/squeek/quakemovement/ModInfo.java @@ -4,4 +4,5 @@ public final class ModInfo { public static final String MODID = "squake"; public static final String VERSION = "${version}"; + public static final String CONFIG_GUI_FACTORY_CLASS = "squeek.quakemovement.ModConfigGuiFactory"; } diff --git a/java/squeek/quakemovement/ModQuakeMovement.java b/java/squeek/quakemovement/ModQuakeMovement.java index 4983f34..069553c 100644 --- a/java/squeek/quakemovement/ModQuakeMovement.java +++ b/java/squeek/quakemovement/ModQuakeMovement.java @@ -11,7 +11,7 @@ import net.minecraftforge.fml.common.event.FMLPreInitializationEvent; import net.minecraftforge.fml.common.eventhandler.SubscribeEvent; import net.minecraftforge.fml.relauncher.Side; -@Mod(modid = ModInfo.MODID, version = ModInfo.VERSION, name="Squake", acceptedMinecraftVersions="[1.12.2]", dependencies = "after:squeedometer") +@Mod(modid = ModInfo.MODID, version = ModInfo.VERSION, name="Squake", acceptedMinecraftVersions="[1.12.2]", dependencies = "after:squeedometer", guiFactory = ModInfo.CONFIG_GUI_FACTORY_CLASS) public class ModQuakeMovement { // The instance of your mod that Forge uses. @@ -22,6 +22,7 @@ public class ModQuakeMovement public void preInit(FMLPreInitializationEvent event) { ModConfig.init(event.getSuggestedConfigurationFile()); + MinecraftForge.EVENT_BUS.register(new ModConfig()); MinecraftForge.EVENT_BUS.register(this); if (event.getSide() == Side.CLIENT) {