pitman-87 Posted July 19, 2014 Posted July 19, 2014 Hey guys, I love the new GuiConfig-System, but I'm struggling with the sliders. I don't really know how to register them the proper way. That's my code so far: ConfigHandler: package de.pitman87.TF2Teleporter.common; import java.io.File; import net.minecraftforge.common.config.Configuration; import cpw.mods.fml.client.event.ConfigChangedEvent; import cpw.mods.fml.common.eventhandler.SubscribeEvent; public class ConfigHandler { public static Configuration configuration; public static final String CATEGORY_SOUND = "sound"; public static boolean hdTextures = false; public static boolean checkForUpdates = true; public static float teleportVolume = 0.2F; public static float spinVolume = 0.05F; public static int maxFrequencies; public static void init(File configFile) { if (configuration == null) { configuration = new Configuration(configFile); loadConfiguration(); } } private static void loadConfiguration() { hdTextures = configuration.getBoolean("HDTextures", Configuration.CATEGORY_GENERAL, false, "set to true, if you want HD textures, needs restart"); checkForUpdates = configuration.getBoolean("checkForUpdates", Configuration.CATEGORY_GENERAL, true, "set to false, to turn off updatechecker"); maxFrequencies = configuration.getInt("numFrequencies", Configuration.CATEGORY_GENERAL, 100, 10, 10000, "amount of frequencies, could cause data loss of the teleporter locations"); teleportVolume = configuration.getFloat("teleportVolume", CATEGORY_SOUND, 0.2f, 0.0f, 1.0f, ""); spinVolume = configuration.getFloat("spinVolume", CATEGORY_SOUND, 0.05f, 0.0f, 1.0f, ""); // if (configuration.hasChanged()) // { configuration.save(); // } } @SubscribeEvent public void onConfigurationChangedEvent(ConfigChangedEvent.OnConfigChangedEvent event) { if (event.modID.equalsIgnoreCase(TF2TeleporterMod.MODID)) { loadConfiguration(); } } } GuiFactory: package de.pitman87.TF2Teleporter.client.gui; import java.util.ArrayList; import java.util.List; import java.util.Set; import net.minecraft.client.Minecraft; import net.minecraft.client.gui.GuiScreen; import net.minecraftforge.common.config.ConfigElement; import net.minecraftforge.common.config.Configuration; import cpw.mods.fml.client.IModGuiFactory; import cpw.mods.fml.client.config.ConfigGuiType; import cpw.mods.fml.client.config.DummyConfigElement; import cpw.mods.fml.client.config.DummyConfigElement.DummyCategoryElement; import cpw.mods.fml.client.config.GuiConfig; import cpw.mods.fml.client.config.GuiConfigEntries; import cpw.mods.fml.client.config.GuiConfigEntries.CategoryEntry; import cpw.mods.fml.client.config.GuiConfigEntries.NumberSliderEntry; import cpw.mods.fml.client.config.IConfigElement; import de.pitman87.TF2Teleporter.common.ConfigHandler; import de.pitman87.TF2Teleporter.common.TF2TeleporterMod; public class GuiFactory implements IModGuiFactory { @Override public void initialize(Minecraft minecraftInstance) { } @Override public Class<? extends GuiScreen> mainConfigGuiClass() { return GuiModConfig.class; } @Override public Set<RuntimeOptionCategoryElement> runtimeGuiCategories() { return null; } @Override public RuntimeOptionGuiHandler getHandlerFor(RuntimeOptionCategoryElement element) { return null; } @SuppressWarnings( { "rawtypes", "unchecked" }) public static class GuiModConfig extends GuiConfig { public GuiModConfig(GuiScreen guiScreen) { super(guiScreen, getConfigElements(), TF2TeleporterMod.MODID, false, false, GuiConfig.getAbridgedConfigPath(ConfigHandler.configuration.toString())); } private static List<IConfigElement> getConfigElements() { List<IConfigElement> list = new ArrayList<IConfigElement>(); list.addAll(new ConfigElement(ConfigHandler.configuration.getCategory(Configuration.CATEGORY_GENERAL)).getChildElements()); list.add(new DummyCategoryElement("Sound", "Sound", SoundEntry.class)); return list; } public static class SoundEntry extends CategoryEntry { public SoundEntry(GuiConfig owningScreen, GuiConfigEntries owningEntryList, IConfigElement prop) { super(owningScreen, owningEntryList, prop); } @Override protected GuiScreen buildChildScreen() { List<IConfigElement> list = new ConfigElement(ConfigHandler.configuration.getCategory(ConfigHandler.CATEGORY_SOUND)).getChildElements(); List<IConfigElement> sound = new ArrayList<IConfigElement>(); for (IConfigElement ce : list) { sound.add(new DummyConfigElement<Double>(ce.getName(), Double.parseDouble((String) ce.getDefault()), ConfigGuiType.DOUBLE, ce.getName(), 0.0, 1.0).setCustomListEntryClass(NumberSliderEntry.class)); } return new GuiConfig(this.owningScreen, list, this.owningScreen.modID,this.owningScreen.configID, false, false, "Sound"); } } } } The most important part is this one: @Override protected GuiScreen buildChildScreen() { List<IConfigElement> list = new ConfigElement(ConfigHandler.configuration.getCategory(ConfigHandler.CATEGORY_SOUND)).getChildElements(); List<IConfigElement> sound = new ArrayList<IConfigElement>(); for (IConfigElement ce : list) { sound.add(new DummyConfigElement<Double>(ce.getName(), Double.parseDouble((String) ce.getDefault()), ConfigGuiType.DOUBLE, ce.getName(), 0.0, 1.0).setCustomListEntryClass(NumberSliderEntry.class)); } return new GuiConfig(this.owningScreen, list, this.owningScreen.modID,this.owningScreen.configID, false, false, "Sound"); } The Gui looks right so far, but the new values don't get saved and I couldn't figured out why. How the first Screen looks (general category): How the secound screen looks (that's what I want it to be, but new values don't get saved): The secound screen when I use the "list" instead of "sounds" (gets saved regularly): I appreciate any help, thanks. Quote My mods: TF2 Teleporter + Sentry + Dispenser Familiars API SpecialArmor & PrinterBlock
pitman-87 Posted July 19, 2014 Author Posted July 19, 2014 I'd figured out with the help of this tweet: You have to set the Sliderclass when generating the properites: teleportVolume = (float) configuration.get(CATEGORY_SOUND, "teleportVolume", 0.2,"", 0.0, 1.0).setConfigEntryClass(TF2TeleporterMod.proxy.getSliderClass()).getDouble(); spinVolume = (float) configuration.get(CATEGORY_SOUND, "spinVolume", 0.05, "", 0.0, 1.0).setConfigEntryClass(TF2TeleporterMod.proxy.getSliderClass()).getDouble(); @Override public Class<? extends IConfigEntry> getSliderClass() { return NumberSliderEntry.class; } Thats all! Remember to delete old configfiles, that have bugged me for hours. Quote My mods: TF2 Teleporter + Sentry + Dispenser Familiars API SpecialArmor & PrinterBlock
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.