diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/Main.java b/common/src/main/java/io/github/kurrycat/mpkmod/Main.java index a477427e..5d85f983 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/Main.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/Main.java @@ -13,11 +13,11 @@ import io.github.kurrycat.mpkmod.gui.screens.LandingBlockGuiScreen; import io.github.kurrycat.mpkmod.gui.screens.main_gui.LabelConfiguration; import io.github.kurrycat.mpkmod.gui.screens.main_gui.MainGuiScreen; -import io.github.kurrycat.mpkmod.gui.screens.options_gui.Option; import io.github.kurrycat.mpkmod.gui.screens.options_gui.OptionsGuiScreen; import io.github.kurrycat.mpkmod.landingblock.LandingBlock; import io.github.kurrycat.mpkmod.modules.MPKModule; import io.github.kurrycat.mpkmod.modules.ModuleManager; +import io.github.kurrycat.mpkmod.settings.Settings; import io.github.kurrycat.mpkmod.ticks.TimingStorage; import io.github.kurrycat.mpkmod.util.BoundingBox3D; import io.github.kurrycat.mpkmod.util.ItrUtil; @@ -35,27 +35,6 @@ public class Main implements MPKModule { public static MainGuiScreen mainGUI; public static InfoTree infoTree; - @Option.Field( - category = "labels", - displayName = "Display Overlay", - description = "Whether to show all the components on the overlay while playing" - ) - public static boolean displayOverlay = true; - - @Option.Field( - category = "landingblocks", - displayName = "Highlight Landing Blocks", - description = "Whether to highlight all enabled landing blocks" - ) - public static boolean highlightLandingBlocks = true; - - @Option.Field( - category = "debug", - displayName = "Copy Position Shortcut", - description = "Whether to override the vanilla F3+C shortcut to copy your precise position" - ) - public static boolean copyPositionShortcutEnabled = true; - @Override public void init() { infoTree = InfoString.createInfoTree(); @@ -112,7 +91,7 @@ public void loaded() { ModuleManager.reloadAllModules(); } } else if (event.keyCode == InputConstants.KEY_C) { - if (!copyPositionShortcutEnabled) return; + if (!Settings.copyPositionShortcutEnabled.getValue()) return; if (Player.getLatest() == null) return; Player p = Player.getLatest(); @@ -144,7 +123,7 @@ public void loaded() { EventAPI.addListener( EventAPI.EventListener.onRenderOverlay( e -> { - if (!displayOverlay) return; + if (!Settings.displayOverlay.getValue()) return; if (Minecraft.isF3Enabled()) return; Profiler.startSection("components"); @@ -164,7 +143,7 @@ public void loaded() { EventAPI.addListener( new EventAPI.EventListener( e -> { - if (!highlightLandingBlocks) return; + if (!Settings.highlightLandingBlocks.getValue()) return; Profiler.startSection("renderLBOverlays"); LandingBlockGuiScreen.lbs.forEach(lb -> { diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java index a3a0fde1..e43d877c 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/compatibility/API.java @@ -6,13 +6,13 @@ import io.github.kurrycat.mpkmod.discord.DiscordRPC; import io.github.kurrycat.mpkmod.events.*; import io.github.kurrycat.mpkmod.gui.MPKGuiScreen; -import io.github.kurrycat.mpkmod.gui.screens.options_gui.Option; import io.github.kurrycat.mpkmod.modules.MPKModule; import io.github.kurrycat.mpkmod.modules.MPKModuleImpl; import io.github.kurrycat.mpkmod.modules.ModuleFinder; import io.github.kurrycat.mpkmod.modules.ModuleManager; import io.github.kurrycat.mpkmod.network.impl.MPKPacketListenerClientImpl; import io.github.kurrycat.mpkmod.save.Serializer; +import io.github.kurrycat.mpkmod.settings.Settings; import io.github.kurrycat.mpkmod.util.ClassUtil; import io.github.kurrycat.mpkmod.util.JSONConfig; import io.github.kurrycat.mpkmod.util.Mouse; @@ -50,12 +50,8 @@ public class API { public static Map guiScreenMap = new HashMap<>(); public static Map keyBindingMap = new HashMap<>(); - public static HashMap optionsMap; private static FunctionHolder functionHolder; - /*@Option.Field - public static String testOption = "String Option";*/ - /*public static int metronome = 0;*/ /** @@ -70,15 +66,15 @@ public static void preInit(Class callerClass) { JSONConfig.setupFiles(); Serializer.registerSerializer(); - optionsMap = Option.createOptionMap(); - Option.updateOptionMapFromJSON(true); - MPKModule mainModule = new Main(); ModuleManager.moduleMap.put("main", new MPKModuleImpl("main", mainModule, null)); mainModule.init(); ModuleFinder.init(); ModuleManager.initAllModules(); + + Settings.init(); + Settings.loadSettings(); } /** diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/discord/DiscordRPC.java b/common/src/main/java/io/github/kurrycat/mpkmod/discord/DiscordRPC.java index e9a5063b..219864cb 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/discord/DiscordRPC.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/discord/DiscordRPC.java @@ -7,7 +7,7 @@ import io.github.kurrycat.mpkmod.Main; import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Minecraft; -import io.github.kurrycat.mpkmod.gui.screens.options_gui.Option; +import io.github.kurrycat.mpkmod.settings.Settings; import java.io.File; @@ -16,13 +16,6 @@ public class DiscordRPC { public static Core core = null; public static boolean LIBRARY_LOADED = false; - @Option.Field( - category = "discord", - displayName = "Discord Rich Presence", - description = "Show \"Playing MPKMod\" in Discord" - ) - public static boolean discordRPCEnabled = true; - public static void init() { new Thread(DiscordRPC::_init).start(); } @@ -38,20 +31,20 @@ private static void _init() { API.LOGGER.info(API.DISCORD_RPC_MARKER, "DiscordRPC Core initialized."); LIBRARY_LOADED = true; + Settings.discordRPCEnabled.onChange(setting -> onEnabledStatusChanged()); onEnabledStatusChanged(); startCallbackThread(); API.LOGGER.info(API.DISCORD_RPC_MARKER, "Started DiscordRPC callback thread"); } - @Option.ChangeListener(field = "discordRPCEnabled") public static void onEnabledStatusChanged() { if (!LIBRARY_LOADED) { API.LOGGER.info(API.DISCORD_RPC_MARKER, "DiscordRPC library not loaded correctly, unable to update rich presence"); return; } - if (discordRPCEnabled) enableRPC(); + if (Settings.discordRPCEnabled.getValue()) enableRPC(); else disableRPC(); } @@ -125,7 +118,7 @@ public static void updateWorldAndPlayState() { private static void updateActivity(String details, String state) { if (!LIBRARY_LOADED) return; if (!Main.discordRpcInitialized) return; - if (!discordRPCEnabled) return; + if (!Settings.discordRPCEnabled.getValue()) return; try (Activity activity = new Activity()) { activity.setDetails(details); diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/Label.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/Label.java index 3aa89e49..43ebd3f4 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/Label.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/components/Label.java @@ -3,13 +3,13 @@ import com.fasterxml.jackson.annotation.JsonProperty; import io.github.kurrycat.mpkmod.compatibility.MCClasses.FontRenderer; import io.github.kurrycat.mpkmod.compatibility.MCClasses.Renderer2D; -import io.github.kurrycat.mpkmod.gui.screens.options_gui.Option; import io.github.kurrycat.mpkmod.util.Vector2D; import java.awt.*; public class Label extends Component { - @Option.Field(showInOptionList = false) + + // TODO: Setting? public static double DEFAULT_FONT_SIZE = FontRenderer.DEFAULT_FONT_SIZE; @JsonProperty diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/main_gui/OptionsPane.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/main_gui/OptionsPane.java index 5a29746c..520d42b4 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/main_gui/OptionsPane.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/main_gui/OptionsPane.java @@ -4,7 +4,7 @@ import io.github.kurrycat.mpkmod.gui.components.Button; import io.github.kurrycat.mpkmod.gui.components.Label; import io.github.kurrycat.mpkmod.gui.components.*; -import io.github.kurrycat.mpkmod.gui.screens.options_gui.Option; +import io.github.kurrycat.mpkmod.settings.Settings; import io.github.kurrycat.mpkmod.util.ItrUtil; import io.github.kurrycat.mpkmod.util.Vector2D; import io.github.kurrycat.mpkmod.util.WorldToFile; @@ -21,8 +21,7 @@ public OptionsPane(Vector2D pos, Vector2D size) { @Override public void close() { - Option.updateOptionMapFromFields(); - Option.saveOptionMapToJSON(); + Settings.saveSettings(); super.close(); } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/Option.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/Option.java deleted file mode 100644 index c5351313..00000000 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/Option.java +++ /dev/null @@ -1,342 +0,0 @@ -package io.github.kurrycat.mpkmod.gui.screens.options_gui; - -import com.fasterxml.jackson.annotation.JsonGetter; -import com.fasterxml.jackson.core.type.TypeReference; -import io.github.kurrycat.mpkmod.compatibility.API; -import io.github.kurrycat.mpkmod.save.Serializer; -import io.github.kurrycat.mpkmod.util.ClassUtil; -import io.github.kurrycat.mpkmod.util.JSONConfig; -import io.github.kurrycat.mpkmod.util.Tuple; - -import java.awt.*; -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; -import java.lang.reflect.InvocationTargetException; -import java.lang.reflect.Method; -import java.util.HashMap; -import java.util.List; -import java.util.Objects; - -public class Option { - private String name; - private String value; - private String defaultValue; - private ValueType type; - private String category = ""; - private OptionChangeListener changeListener; - private java.lang.reflect.Field linkedField = null; - private String displayName = null; - private String description = null; - private boolean showInOptionList; - - public Option(String name, String value, String defaultValue) { - this(name, value, defaultValue, ValueType.STRING); - } - - public Option(String name, String value, String defaultValue, ValueType type) { - this.name = name; - this.value = value; - this.defaultValue = defaultValue; - this.type = type; - } - - public Option(String name, Boolean value, Boolean defaultValue) { - this(name, value.toString(), defaultValue.toString(), ValueType.BOOLEAN); - } - - public static HashMap createOptionMap() { - HashMap optionMap = new HashMap<>(); - - List> annotations = ClassUtil.getFieldAnnotations(Field.class); - for (Tuple t : annotations) { - Field a = t.getFirst(); - java.lang.reflect.Field f = t.getSecond(); - String id = f.getName(); - String value; - try { - value = f.get(null).toString(); - } catch (IllegalAccessException e) { - API.LOGGER.debug(API.CONFIG_MARKER, - "OptionMap: IllegalAccessException while trying to access field {} from {}", - id, f.getDeclaringClass().getName()); - continue; - } catch (NullPointerException e) { - API.LOGGER.debug(API.CONFIG_MARKER, - "OptionMap: Option field for Option with id: {} in the class {} is not static", - id, f.getDeclaringClass().getName()); - continue; - } - - ValueType type = ValueType.STRING; - if (f.getType() == Boolean.class || f.getType() == boolean.class) type = ValueType.BOOLEAN; - if (f.getType() == Double.class || f.getType() == double.class) type = ValueType.DOUBLE; - if (f.getType() == Integer.class || f.getType() == int.class) type = ValueType.INTEGER; - if (f.getType() == Color.class) type = ValueType.COLOR; - - Option option = new Option(id, value, value, type) - .setCategory(a.category()) - .setDisplayName(a.displayName()) - .setDescription(a.description()) - .setShowInOptionList(a.showInOptionList()) - .link(f); - optionMap.put(id, option); - - API.LOGGER.debug("Option of type {} added to map: {} with default value: {}", type, id, value); - } - - List> listeners = ClassUtil.getMethodAnnotations(ChangeListener.class); - for (Tuple l : listeners) { - ChangeListener c = l.getFirst(); - Method m = l.getSecond(); - - String fieldName = c.field(); - - if (!optionMap.containsKey(fieldName)) - continue; - - optionMap.get(fieldName).setChangeListener(() -> { - try { - m.invoke(m.getDeclaringClass()); - } catch (IllegalAccessException | InvocationTargetException ignored) { - API.LOGGER.debug("Failed to invoke changeListener for option: {} ", fieldName); - } - }); - - API.LOGGER.debug("Option listener added for: {} ", fieldName); - } - - API.LOGGER.info("{} Options registered", optionMap.size()); - - return optionMap; - } - - public Option link(java.lang.reflect.Field field) { - this.linkedField = field; - return this; - } - - public Option setShowInOptionList(boolean showInOptionList) { - this.showInOptionList = showInOptionList; - return this; - } - - public static void updateOptionMapFromFields() { - for (Option o : API.optionsMap.values()) { - o.updateFromField(); - } - } - - private void updateFromField() { - if (linkedField == null) return; - try { - value = linkedField.get(null).toString(); - } catch (IllegalAccessException ignored) { - } - } - - public static void updateOptionMapFromJSON(boolean suppressChangeListener) { - HashMap deserializedInfo = Serializer.deserializeAny(JSONConfig.optionsFile, new TypeReference>() { - }); - if (deserializedInfo == null) return; - - for (String key : deserializedInfo.keySet()) { - if (!API.optionsMap.containsKey(key)) continue; - API.optionsMap.get(key).setValue(deserializedInfo.get(key), suppressChangeListener); - } - } - - public Option setValue(String value, boolean suppressChangeListener) { - if (this.value.equals(value)) - return this; - - this.value = value; - - if (this.linkedField != null) { - try { - this.linkedField.set(this.linkedField.getDeclaringClass(), this.getAsType()); - } catch (IllegalAccessException ignored) { - } - } - - if (!suppressChangeListener && changeListener != null) - changeListener.onOptionChange(); - return this; - } - - public Object getAsType() { - switch (this.type) { - case BOOLEAN: - return getBoolean(); - case INTEGER: - return getInteger(); - case DOUBLE: - return getDouble(); - default: - return getValue(); - } - } - - public Boolean getBoolean() { - if (this.type == ValueType.BOOLEAN) - return this.value.equals("true"); - return null; - } - - public Option setBoolean(Boolean value) { - if (ValueType.BOOLEAN.equals(this.type)) - this.setValue(value.toString()); - return this; - } - - public Integer getInteger() { - if (this.type == ValueType.INTEGER) - return Integer.parseInt(this.value); - return 0; - } - - public Double getDouble() { - if (this.type == ValueType.DOUBLE) - return Double.parseDouble(this.value); - return 0.0; - } - - @JsonGetter("value") - public String getValue() { - return value; - } - - public Option setValue(String value) { - return setValue(value, false); - } - - public static void saveOptionMapToJSON() { - HashMap options = new HashMap<>(); - for (String key : API.optionsMap.keySet()) { - options.put(key, API.optionsMap.get(key).getValue()); - } - Serializer.serialize(JSONConfig.optionsFile, options, HashMap.class); - } - - public String getDisplayName() { - return displayName; - } - - public Option setDisplayName(String s) { - this.displayName = s; - return this; - } - - public String getDescription() { - return description; - } - - public Option setDescription(String s) { - this.description = s; - return this; - } - - @JsonGetter("name") - public String getName() { - return name; - } - - public Option setName(String name) { - this.name = name; - return this; - } - - public String getCategory() { - return category; - } - - public Option setCategory(String category) { - this.category = category; - return this; - } - - public boolean shouldShowInOptionList() { - return showInOptionList; - } - - public OptionChangeListener getChangeListener() { - return changeListener; - } - - @SuppressWarnings("UnusedReturnValue") - public Option setChangeListener(OptionChangeListener changeListener) { - this.changeListener = changeListener; - return this; - } - - @JsonGetter("defaultValue") - public String getDefaultValue() { - return defaultValue; - } - - public Option setDefaultValue(String defaultValue) { - this.defaultValue = defaultValue; - return this; - } - - @JsonGetter("valueType") - public ValueType getType() { - return type; - } - - public Option setType(ValueType type) { - this.type = type; - return this; - } - - @Override - public int hashCode() { - return Objects.hash(name); - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - Option option = (Option) o; - return name.equals(option.name); - } - - public enum ValueType { - STRING, - DOUBLE, //TODO: OptionListItemDouble - INTEGER, - BOOLEAN, - COLOR, //TODO: OptionListItemColor - } - - /** - * Marks a field as a MPK-Option. The field has to be public. - */ - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.FIELD) - public @interface Field { - String category() default ""; - - String displayName() default ""; - - String description() default ""; - - boolean showInOptionList() default true; - } - - /** - * Marks a method as a MPK-Option change listener. The method has to be public. - */ - @Retention(RetentionPolicy.RUNTIME) - @Target(ElementType.METHOD) - public @interface ChangeListener { - String field(); - } - - @FunctionalInterface - public interface OptionChangeListener { - void onOptionChange(); - } -} diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItem.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItem.java index 03dcca3d..3fe82c24 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItem.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItem.java @@ -4,6 +4,7 @@ import io.github.kurrycat.mpkmod.compatibility.MCClasses.Renderer2D; import io.github.kurrycat.mpkmod.gui.components.Button; import io.github.kurrycat.mpkmod.gui.components.*; +import io.github.kurrycat.mpkmod.settings.Setting; import io.github.kurrycat.mpkmod.util.Mouse; import io.github.kurrycat.mpkmod.util.Vector2D; @@ -13,17 +14,13 @@ public abstract class OptionListItem extends ScrollableListItem private static final Color optionListColorItemEdge = new Color(255, 255, 255, 95); private static final Color optionListColorBg = new Color(31, 31, 31, 150); private final Button resetButton; - public Option option; - protected String value; - protected Option.ValueType type; protected Div hoverText; protected TextRectangle helpHover; + protected Setting option; - public OptionListItem(ScrollableList parent, Option option) { + public OptionListItem(ScrollableList parent, Setting option) { super(parent); this.option = option; - this.value = option.getValue(); - this.type = option.getType(); resetButton = new Button("Reset", new Vector2D(15, 0), new Vector2D(30, 11), mouseButton -> { if (mouseButton == Mouse.Button.LEFT) { @@ -49,16 +46,13 @@ public OptionListItem(ScrollableList parent, Option option) { hoverText.setMaxWidth(0.5); } - public void loadDefaultValue() { - value = option.getDefaultValue(); - updateDisplayValue(); - } + public abstract void loadDefaultValue(); protected abstract void updateDisplayValue(); - public void update() { - option.setValue(value); - } + public abstract void update(); + + protected abstract boolean isDefaultValue(); public int getHeight() { return 21; @@ -80,7 +74,7 @@ public void render(int index, Vector2D pos, Vector2D size, Vector2D mouse) { renderTypeSpecific(index, pos, size, mouse); if (resetButton != null) { - resetButton.enabled = !option.getDefaultValue().equals(value); + resetButton.enabled = !isDefaultValue(); resetButton.render(mouse); } } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemBoolean.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemBoolean.java index 9e9c157d..906a0afb 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemBoolean.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemBoolean.java @@ -3,28 +3,46 @@ import io.github.kurrycat.mpkmod.gui.components.Anchor; import io.github.kurrycat.mpkmod.gui.components.CheckButton; import io.github.kurrycat.mpkmod.gui.components.ScrollableList; +import io.github.kurrycat.mpkmod.settings.BooleanSetting; import io.github.kurrycat.mpkmod.util.Vector2D; public class OptionListItemBoolean extends OptionListItem { private final CheckButton checkButton; - public OptionListItemBoolean(ScrollableList parent, Option option) { + public OptionListItemBoolean(ScrollableList parent, BooleanSetting option) { super(parent, option); - checkButton = new CheckButton(new Vector2D(50, 0), checked -> value = String.valueOf(checked)); - checkButton.enabled = option.getType() == Option.ValueType.BOOLEAN; + checkButton = new CheckButton(new Vector2D(50, 0), option::setValue); + checkButton.setChecked(option.getValue()); + addChild(checkButton, PERCENT.NONE, Anchor.CENTER_RIGHT); + + } + + @Override + public void loadDefaultValue() { if (checkButton.enabled) { - checkButton.setChecked(option.getBoolean()); - addChild(checkButton, PERCENT.NONE, Anchor.CENTER_RIGHT); + checkButton.setChecked(((BooleanSetting)option).getDefaultValue()); } } protected void updateDisplayValue() { if (checkButton.enabled) { - checkButton.setChecked(Boolean.parseBoolean(value)); + checkButton.setChecked(((BooleanSetting)option).getValue()); } } + @Override + public void update() { + if (checkButton.enabled) { + ((BooleanSetting)option).setValue(checkButton.isChecked()); + } + } + + @Override + protected boolean isDefaultValue() { + return ((BooleanSetting)option).getValue() == ((BooleanSetting)option).getDefaultValue(); + } + protected void renderTypeSpecific(int index, Vector2D pos, Vector2D size, Vector2D mouse) { checkButton.render(mouse); } diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemDefault.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemDefault.java deleted file mode 100644 index ecc8357c..00000000 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemDefault.java +++ /dev/null @@ -1,25 +0,0 @@ -package io.github.kurrycat.mpkmod.gui.screens.options_gui; - -import io.github.kurrycat.mpkmod.compatibility.MCClasses.FontRenderer; -import io.github.kurrycat.mpkmod.gui.components.ScrollableList; -import io.github.kurrycat.mpkmod.util.Vector2D; - -import java.awt.*; - -public class OptionListItemDefault extends OptionListItem { - public OptionListItemDefault(ScrollableList parent, Option option) { - super(parent, option); - } - - protected void updateDisplayValue() { - } - - protected void renderTypeSpecific(int index, Vector2D pos, Vector2D size, Vector2D mouse) { - FontRenderer.drawRightCenteredString( - value, - pos.add(5, size.getY() / 2), - Color.WHITE, - false - ); - } -} diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemInteger.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemInteger.java deleted file mode 100644 index 0e47ede8..00000000 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemInteger.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.github.kurrycat.mpkmod.gui.screens.options_gui; - -import io.github.kurrycat.mpkmod.gui.components.Anchor; -import io.github.kurrycat.mpkmod.gui.components.InputField; -import io.github.kurrycat.mpkmod.gui.components.ScrollableList; -import io.github.kurrycat.mpkmod.util.Vector2D; - -public class OptionListItemInteger extends OptionListItem { - private final InputField inputField; - - public OptionListItemInteger(ScrollableList parent, Option option) { - super(parent, option); - - inputField = new InputField(option.getValue(), new Vector2D(50, 0), 1 / 2.1, true); - inputField.setOnContentChange(content -> { - this.value = content.getContent(); - }); - - addChild(inputField, PERCENT.SIZE_X, Anchor.CENTER_RIGHT); - } - - protected void updateDisplayValue() { - inputField.content = this.value; - } - - protected void renderTypeSpecific(int index, Vector2D pos, Vector2D size, Vector2D mouse) { - inputField.render(mouse); - } -} diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemString.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemString.java deleted file mode 100644 index 7363da98..00000000 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionListItemString.java +++ /dev/null @@ -1,29 +0,0 @@ -package io.github.kurrycat.mpkmod.gui.screens.options_gui; - -import io.github.kurrycat.mpkmod.gui.components.Anchor; -import io.github.kurrycat.mpkmod.gui.components.InputField; -import io.github.kurrycat.mpkmod.gui.components.ScrollableList; -import io.github.kurrycat.mpkmod.util.Vector2D; - -public class OptionListItemString extends OptionListItem { - private final InputField inputField; - - public OptionListItemString(ScrollableList parent, Option option) { - super(parent, option); - - inputField = new InputField(option.getValue(), new Vector2D(50, 0), 1 / 2.1); - inputField.setOnContentChange(content -> { - this.value = content.getContent(); - }); - - addChild(inputField, PERCENT.SIZE_X, Anchor.CENTER_RIGHT); - } - - protected void updateDisplayValue() { - inputField.content = this.value; - } - - protected void renderTypeSpecific(int index, Vector2D pos, Vector2D size, Vector2D mouse) { - inputField.render(mouse); - } -} diff --git a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionsGuiScreen.java b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionsGuiScreen.java index a6c495e4..f47942e5 100644 --- a/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionsGuiScreen.java +++ b/common/src/main/java/io/github/kurrycat/mpkmod/gui/screens/options_gui/OptionsGuiScreen.java @@ -1,17 +1,19 @@ package io.github.kurrycat.mpkmod.gui.screens.options_gui; -import io.github.kurrycat.mpkmod.compatibility.API; import io.github.kurrycat.mpkmod.gui.ComponentScreen; import io.github.kurrycat.mpkmod.gui.components.Anchor; import io.github.kurrycat.mpkmod.gui.components.Button; import io.github.kurrycat.mpkmod.gui.components.ScrollableList; -import io.github.kurrycat.mpkmod.save.Serializer; -import io.github.kurrycat.mpkmod.util.JSONConfig; +import io.github.kurrycat.mpkmod.settings.BooleanSetting; +import io.github.kurrycat.mpkmod.settings.Setting; +import io.github.kurrycat.mpkmod.settings.Settings; import io.github.kurrycat.mpkmod.util.Vector2D; import java.util.ArrayList; -import java.util.HashMap; +// TODO: This whole gui needs a cleanup +// We no longer need the apply button +// Theres a lot of most likely unnecessary code public class OptionsGuiScreen extends ComponentScreen { private OptionList optionList; @@ -26,7 +28,7 @@ public void onGuiInit() { optionList = new OptionList( new Vector2D(0, 16), new Vector2D(3 / 5D, -40), - new ArrayList<>(API.optionsMap.values()) + (ArrayList) Settings.getSettingsList() ); addChild(optionList, PERCENT.SIZE_X, Anchor.TOP_CENTER); @@ -65,37 +67,28 @@ public void onGuiInit() { @Override public void onGuiClosed() { super.onGuiClosed(); - Option.saveOptionMapToJSON(); + Settings.saveSettings(); } - public void render(Vector2D mouse, float partialTicks) { super.render(mouse, partialTicks); optionList.renderHover(mouse); } public static class OptionList extends ScrollableList { - public OptionList(Vector2D pos, Vector2D size, ArrayList