diff --git a/common/src/main/java/com/seibel/lod/common/LodCommonMain.java b/common/src/main/java/com/seibel/lod/common/LodCommonMain.java index c5275934d..2e9ea984b 100644 --- a/common/src/main/java/com/seibel/lod/common/LodCommonMain.java +++ b/common/src/main/java/com/seibel/lod/common/LodCommonMain.java @@ -22,6 +22,7 @@ package com.seibel.lod.common; import com.seibel.lod.common.forge.LodForgeMethodCaller; import com.seibel.lod.common.networking.NetworkReceiver; import com.seibel.lod.common.wrappers.DependencySetup; +import com.seibel.lod.core.ModInfo; import com.seibel.lod.core.api.internal.a7.SharedApi; import com.seibel.lod.core.config.Config; import com.seibel.lod.core.config.ConfigBase; @@ -49,6 +50,6 @@ public class LodCommonMain { } public static void initConfig() { - ConfigBase.init(Config.class); + ConfigBase.INSTANCE = new ConfigBase(ModInfo.ID, ModInfo.NAME, Config.class,1); } } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/gui/ClassicConfigGUI.java b/common/src/main/java/com/seibel/lod/common/wrappers/gui/ClassicConfigGUI.java index 79e0fdb10..272a7d12c 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/gui/ClassicConfigGUI.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/gui/ClassicConfigGUI.java @@ -15,6 +15,7 @@ import java.util.regex.Pattern; // Logger (for debug stuff) +import com.seibel.lod.core.ModInfo; import com.seibel.lod.core.config.file.ConfigFileHandling; import com.seibel.lod.core.config.types.AbstractConfigType; import com.seibel.lod.core.config.types.ConfigCategory; @@ -24,7 +25,6 @@ import com.seibel.lod.core.config.types.ConfigEntry; // Gets info from our own mod -import com.seibel.lod.core.ModInfo; import com.seibel.lod.core.config.*; // Minecraft imports @@ -93,53 +93,6 @@ public abstract class ClassicConfigGUI { int index; } - private static void initEntry(AbstractConfigType info) { - info.guiValue = new EntryInfo(); - Class fieldClass = info.getType(); - - if (ConfigEntry.class.isAssignableFrom(info.getClass())) { - if (fieldClass == Integer.class) { - // For int - textField(info, Integer::parseInt, INTEGER_ONLY_REGEX, true); - } else if (fieldClass == Double.class) { - // For double - textField(info, Double::parseDouble, DECIMAL_ONLY_REGEX, false); - } else if (fieldClass == String.class || fieldClass == List.class) { - // For string or list - textField(info, String::length, null, true); - } else if (fieldClass == Boolean.class) { - // For boolean - #if PRE_MC_1_19 - Function func = value -> new TextComponent((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED); - #else - Function func = value -> Component.translatable((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED); - #endif - ((EntryInfo) info.guiValue).widget = new AbstractMap.SimpleEntry>(button -> { - ((ConfigEntry) info).setWithoutSaving(!(Boolean) info.get()); - button.setMessage(func.apply(info.get())); - }, func); - } - else if (fieldClass.isEnum()) - { - // For enum - List values = Arrays.asList(info.getType().getEnumConstants()); - #if PRE_MC_1_19 - Function func = value -> new TranslatableComponent(ModInfo.ID + ".config." + "enum." + fieldClass.getSimpleName() + "." + info.get().toString()); - #else - Function func = value -> Component.translatable(ModInfo.ID + ".config." + "enum." + fieldClass.getSimpleName() + "." + info.get().toString()); - #endif - ((EntryInfo) info.guiValue).widget = new AbstractMap.SimpleEntry>(button -> { - int index = values.indexOf(info.get()) + 1; - info.set(values.get(index >= values.size() ? 0 : index)); - button.setMessage(func.apply(info.get())); - }, func); - } - } else if (ConfigCategory.class.isAssignableFrom(info.getClass())) { -// if (!info.info.getName().equals("")) -// info.name = new TranslatableComponent(info.info.getName()); - } -// return info; - } /** @@ -195,28 +148,30 @@ public abstract class ClassicConfigGUI { /** * if you want to get this config gui's screen call this */ - public static Screen getScreen(Screen parent, String category) { - return new ConfigScreen(parent, category); + public static Screen getScreen(ConfigBase configBase, Screen parent, String category) { + return new ConfigScreen(configBase, parent, category); } /** * Pain */ private static class ConfigScreen extends Screen { - protected ConfigScreen(Screen parent, String category) { + protected ConfigScreen(ConfigBase configBase, Screen parent, String category) { #if PRE_MC_1_19 super(new TranslatableComponent( #else super(Component.translatable( #endif - I18n.exists(ModInfo.ID + ".config" + (category.isEmpty() ? "." + category : "") + ".title") ? - ModInfo.ID + ".config.title" : - ModInfo.ID + ".config" + (category.isEmpty() ? "" : "." + category) + ".title") + I18n.exists(configBase.modID + ".config" + (category.isEmpty() ? "." + category : "") + ".title") ? + configBase.modID + ".config.title" : + configBase.modID + ".config" + (category.isEmpty() ? "" : "." + category) + ".title") ); + this.configBase = configBase; this.parent = parent; this.category = category; - this.translationPrefix = ModInfo.ID + ".config."; + this.translationPrefix = configBase.modID + ".config."; } + private final ConfigBase configBase; private final String translationPrefix; private final Screen parent; @@ -236,7 +191,7 @@ public abstract class ClassicConfigGUI { */ @Override public void onClose() { - ConfigFileHandling.saveToFile(); + ConfigBase.INSTANCE.configFileINSTANCE.saveToFile(); Objects.requireNonNull(minecraft).setScreen(this.parent); } @@ -255,14 +210,14 @@ public abstract class ClassicConfigGUI { protected void init() { super.init(); if (!reload) - ConfigFileHandling.loadFromFile(); + ConfigBase.INSTANCE.configFileINSTANCE.loadFromFile(); addBtn(new Button(this.width / 2 - 154, this.height - 28, 150, 20, CommonComponents.GUI_CANCEL, button -> { - ConfigFileHandling.loadFromFile(); + ConfigBase.INSTANCE.configFileINSTANCE.loadFromFile(); Objects.requireNonNull(minecraft).setScreen(parent); })); Button done = addBtn(new Button(this.width / 2 + 4, this.height - 28, 150, 20, CommonComponents.GUI_DONE, (button) -> { - ConfigFileHandling.saveToFile(); + ConfigBase.INSTANCE.configFileINSTANCE.saveToFile(); Objects.requireNonNull(minecraft).setScreen(parent); })); @@ -270,9 +225,9 @@ public abstract class ClassicConfigGUI { if (this.minecraft != null && this.minecraft.level != null) this.list.setRenderBackground(false); this.addWidget(this.list); - for (AbstractConfigType info : ConfigBase.entries) { + for (AbstractConfigType info : ConfigBase.INSTANCE.entries) { if (info.getCategory().matches(category) && info.getAppearance().showInGui) { - initEntry(info); + initEntry(info, this.translationPrefix); #if PRE_MC_1_19 TranslatableComponent name = new TranslatableComponent(translationPrefix + info.getNameWCategory()); #else @@ -309,8 +264,8 @@ public abstract class ClassicConfigGUI { } } else if (ConfigCategory.class.isAssignableFrom(info.getClass())) { Button widget = new Button(this.width / 2 - 100, this.height - 28, 100 * 2, 20, name, (button -> { - ConfigFileHandling.saveToFile(); - Objects.requireNonNull(minecraft).setScreen(ClassicConfigGUI.getScreen(this, ((ConfigCategory) info).getDestination())); + ConfigBase.INSTANCE.configFileINSTANCE.saveToFile(); + Objects.requireNonNull(minecraft).setScreen(ClassicConfigGUI.getScreen(this.configBase, this, ((ConfigCategory) info).getDestination())); })); this.list.addButton(widget, null, null, null); } @@ -326,7 +281,7 @@ public abstract class ClassicConfigGUI { drawCenteredString(matrices, font, title, width / 2, 15, 0xFFFFFF); // Render title // Render the tooltip only if it can find a tooltip in the language file - for (AbstractConfigType info : ConfigBase.entries) { // idk why this is using the normal entries but as long as it works, it works + for (AbstractConfigType info : ConfigBase.INSTANCE.entries) { // idk why this is using the normal entries but as long as it works, it works if (info.getCategory().matches(category) && info.getAppearance().showInGui) { if (list.getHoveredButton(mouseX, mouseY).isPresent()) { AbstractWidget buttonWidget = list.getHoveredButton(mouseX, mouseY).get(); @@ -361,6 +316,53 @@ public abstract class ClassicConfigGUI { + private static void initEntry(AbstractConfigType info, String translationPrefix) { + info.guiValue = new EntryInfo(); + Class fieldClass = info.getType(); + + if (ConfigEntry.class.isAssignableFrom(info.getClass())) { + if (fieldClass == Integer.class) { + // For int + textField(info, Integer::parseInt, INTEGER_ONLY_REGEX, true); + } else if (fieldClass == Double.class) { + // For double + textField(info, Double::parseDouble, DECIMAL_ONLY_REGEX, false); + } else if (fieldClass == String.class || fieldClass == List.class) { + // For string or list + textField(info, String::length, null, true); + } else if (fieldClass == Boolean.class) { + // For boolean + #if PRE_MC_1_19 + Function func = value -> new TextComponent((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED); + #else + Function func = value -> Component.translatable((Boolean) value ? "True" : "False").withStyle((Boolean) value ? ChatFormatting.GREEN : ChatFormatting.RED); + #endif + ((EntryInfo) info.guiValue).widget = new AbstractMap.SimpleEntry>(button -> { + ((ConfigEntry) info).setWithoutSaving(!(Boolean) info.get()); + button.setMessage(func.apply(info.get())); + }, func); + } + else if (fieldClass.isEnum()) + { + // For enum + List values = Arrays.asList(info.getType().getEnumConstants()); + #if PRE_MC_1_19 + Function func = value -> new TranslatableComponent(translationPrefix + "enum." + fieldClass.getSimpleName() + "." + info.get().toString()); + #else + Function func = value -> Component.translatable(translationPrefix + "enum." + fieldClass.getSimpleName() + "." + info.get().toString()); + #endif + ((EntryInfo) info.guiValue).widget = new AbstractMap.SimpleEntry>(button -> { + int index = values.indexOf(info.get()) + 1; + info.set(values.get(index >= values.size() ? 0 : index)); + button.setMessage(func.apply(info.get())); + }, func); + } + } else if (ConfigCategory.class.isAssignableFrom(info.getClass())) { +// if (!info.info.getName().equals("")) +// info.name = new TranslatableComponent(info.info.getName()); + } +// return info; + } diff --git a/common/src/main/java/com/seibel/lod/common/wrappers/gui/GetConfigScreen.java b/common/src/main/java/com/seibel/lod/common/wrappers/gui/GetConfigScreen.java index 1ddc59612..fe9b33a96 100644 --- a/common/src/main/java/com/seibel/lod/common/wrappers/gui/GetConfigScreen.java +++ b/common/src/main/java/com/seibel/lod/common/wrappers/gui/GetConfigScreen.java @@ -1,5 +1,6 @@ package com.seibel.lod.common.wrappers.gui; +import com.seibel.lod.core.config.ConfigBase; import com.seibel.lod.core.config.gui.ConfigScreen; import net.minecraft.client.gui.screens.Screen; @@ -12,7 +13,7 @@ public class GetConfigScreen { public static Screen getScreen(Screen parent) { if (useScreen == type.Classic) { - return ClassicConfigGUI.getScreen(parent, "client"); + return ClassicConfigGUI.getScreen(ConfigBase.INSTANCE, parent, "client"); } else if (useScreen == type.OpenGL) { return ConfigScreenMC.getScreen(parent, new ConfigScreen()); }