From 21d31344a151dfe94c79a20b503af55120c63b63 Mon Sep 17 00:00:00 2001 From: DeDiamondPro <67508414+DeDiamondPro@users.noreply.github.com> Date: Mon, 6 Jun 2022 18:20:23 +0200 Subject: rewrite config system --- .../java/cc/polyfrost/oneconfig/config/Config.java | 101 +------ .../oneconfig/config/annotations/Button.java | 24 ++ .../oneconfig/config/annotations/Checkbox.java | 22 ++ .../oneconfig/config/annotations/Color.java | 22 ++ .../oneconfig/config/annotations/Dropdown.java | 24 ++ .../oneconfig/config/annotations/DualOption.java | 26 ++ .../oneconfig/config/annotations/Header.java | 22 ++ .../oneconfig/config/annotations/Info.java | 25 ++ .../oneconfig/config/annotations/KeyBind.java | 22 ++ .../oneconfig/config/annotations/Option.java | 85 ------ .../oneconfig/config/annotations/Slider.java | 26 ++ .../oneconfig/config/annotations/Switch.java | 22 ++ .../oneconfig/config/annotations/Text.java | 28 ++ .../config/annotations/VigilanceName.java | 16 -- .../compatibility/vigilance/VigilanceConfig.java | 14 +- .../compatibility/vigilance/VigilanceName.java | 16 ++ .../oneconfig/config/core/ConfigUtils.java | 81 ++++-- .../cc/polyfrost/oneconfig/config/data/Mod.java | 2 +- .../oneconfig/config/elements/BasicOption.java | 35 +-- .../config/elements/OptionSubcategory.java | 15 +- .../oneconfig/config/migration/Migrator.java | 14 + .../config/migration/VigilanceMigrator.java | 84 ++++++ .../config/migration/vigilance/Migrator.java | 14 - .../migration/vigilance/VigilanceMigrator.java | 84 ------ .../oneconfig/config/profiles/Profiles.java | 2 +- .../java/cc/polyfrost/oneconfig/gui/Colors.java | 46 ---- .../java/cc/polyfrost/oneconfig/gui/HudGui.java | 2 +- .../cc/polyfrost/oneconfig/gui/OneConfigGui.java | 3 +- .../java/cc/polyfrost/oneconfig/gui/SideBar.java | 3 +- .../oneconfig/gui/elements/BasicButton.java | 4 +- .../oneconfig/gui/elements/ColorSelector.java | 6 +- .../polyfrost/oneconfig/gui/elements/ModCard.java | 4 +- .../polyfrost/oneconfig/gui/elements/Slider.java | 2 +- .../gui/elements/config/ConfigButton.java | 16 +- .../gui/elements/config/ConfigCheckbox.java | 14 +- .../gui/elements/config/ConfigColorElement.java | 14 +- .../gui/elements/config/ConfigDropdown.java | 14 +- .../gui/elements/config/ConfigDualOption.java | 15 +- .../gui/elements/config/ConfigHeader.java | 13 +- .../oneconfig/gui/elements/config/ConfigInfo.java | 12 +- .../gui/elements/config/ConfigKeyBind.java | 14 +- .../gui/elements/config/ConfigPageButton.java | 11 +- .../gui/elements/config/ConfigSlider.java | 17 +- .../gui/elements/config/ConfigSwitch.java | 12 +- .../gui/elements/config/ConfigTextBox.java | 23 +- .../gui/elements/text/NumberInputField.java | 4 +- .../gui/elements/text/TextInputField.java | 4 +- .../polyfrost/oneconfig/gui/pages/CreditsPage.java | 2 +- .../cc/polyfrost/oneconfig/gui/pages/HomePage.java | 4 +- .../cc/polyfrost/oneconfig/gui/pages/ModsPage.java | 2 +- .../cc/polyfrost/oneconfig/internal/OneConfig.java | 2 +- .../oneconfig/internal/assets/Colors.java | 46 ++++ .../oneconfig/internal/assets/Images.java | 21 ++ .../polyfrost/oneconfig/internal/assets/SVGs.java | 54 ++++ .../oneconfig/internal/config/ConfigCore.java | 25 -- .../internal/config/annotations/Option.java | 14 + .../oneconfig/internal/config/core/ConfigCore.java | 25 ++ .../plugin/asm/tweakers/VigilantTransformer.java | 2 +- .../polyfrost/oneconfig/renderer/AssetLoader.java | 192 +++++++++++++ .../oneconfig/renderer/RenderManager.java | 27 +- .../oneconfig/renderer/image/ImageLoader.java | 190 ------------- .../polyfrost/oneconfig/renderer/image/Images.java | 19 -- .../polyfrost/oneconfig/renderer/image/SVGs.java | 52 ---- .../polyfrost/oneconfig/test/ButtonTestPage.java | 2 +- .../cc/polyfrost/oneconfig/test/TestConfig.java | 297 ++++----------------- .../java/cc/polyfrost/oneconfig/test/TestHud.java | 10 - .../java/cc/polyfrost/oneconfig/test/TestPage.java | 40 --- .../oneconfig/utils/color/ColorPalette.java | 4 +- 68 files changed, 1041 insertions(+), 1068 deletions(-) create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Button.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Checkbox.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Color.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Dropdown.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/DualOption.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Header.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Info.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/KeyBind.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Option.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Slider.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Switch.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/Text.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/config/annotations/VigilanceName.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceName.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/migration/Migrator.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/config/migration/VigilanceMigrator.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/Migrator.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/VigilanceMigrator.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/gui/Colors.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/assets/Colors.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/assets/Images.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/assets/SVGs.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/config/ConfigCore.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/config/annotations/Option.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/internal/config/core/ConfigCore.java create mode 100644 src/main/java/cc/polyfrost/oneconfig/renderer/AssetLoader.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/renderer/image/ImageLoader.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/renderer/image/Images.java delete mode 100644 src/main/java/cc/polyfrost/oneconfig/renderer/image/SVGs.java (limited to 'src/main/java/cc/polyfrost') diff --git a/src/main/java/cc/polyfrost/oneconfig/config/Config.java b/src/main/java/cc/polyfrost/oneconfig/config/Config.java index 2c51387..de6c575 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/Config.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/Config.java @@ -1,24 +1,19 @@ package cc.polyfrost.oneconfig.config; -import cc.polyfrost.oneconfig.config.annotations.ConfigPage; -import cc.polyfrost.oneconfig.config.annotations.Option; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; import cc.polyfrost.oneconfig.config.core.ConfigUtils; -import cc.polyfrost.oneconfig.internal.config.ConfigCore; +import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; import cc.polyfrost.oneconfig.config.data.*; import cc.polyfrost.oneconfig.config.elements.BasicOption; -import cc.polyfrost.oneconfig.config.elements.OptionCategory; import cc.polyfrost.oneconfig.config.elements.OptionPage; -import cc.polyfrost.oneconfig.config.elements.OptionSubcategory; import cc.polyfrost.oneconfig.config.profiles.Profiles; import cc.polyfrost.oneconfig.gui.OneConfigGui; -import cc.polyfrost.oneconfig.gui.elements.config.*; import cc.polyfrost.oneconfig.gui.pages.ModConfigPage; -import cc.polyfrost.oneconfig.hud.BasicHud; -import cc.polyfrost.oneconfig.internal.hud.HudCore; import cc.polyfrost.oneconfig.utils.gui.GuiUtils; import com.google.gson.*; import java.io.*; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.nio.charset.StandardCharsets; @@ -87,89 +82,11 @@ public class Config { * @param migrate whether the migrator should be run */ protected void generateOptionList(Object instance, OptionPage page, Mod mod, boolean migrate) { - Class clazz = instance.getClass(); - for (Field field : clazz.getDeclaredFields()) { - String pagePrefix = page.equals(mod.defaultPage) ? "" : page.name + "."; - if (!field.isAnnotationPresent(Option.class) && !field.isAnnotationPresent(ConfigPage.class)) { - processCustomOption(field, page); - continue; - } else if (field.isAnnotationPresent(ConfigPage.class)) { - ConfigPage option = field.getAnnotation(ConfigPage.class); - if (!page.categories.containsKey(option.category())) - page.categories.put(option.category(), new OptionCategory()); - OptionCategory category = page.categories.get(option.category()); - if (category.subcategories.size() == 0 || !category.subcategories.get(category.subcategories.size() - 1).getName().equals(option.subcategory())) - category.subcategories.add(new OptionSubcategory(option.subcategory())); - OptionSubcategory subcategory = category.subcategories.get(category.subcategories.size() - 1); - OptionPage newPage = new OptionPage(option.name(), mod); - try { - field.setAccessible(true); - Object object = field.get(clazz); - generateOptionList(object, newPage, mod, migrate); - ConfigPageButton configPageButton = new ConfigPageButton(field, instance, option.name(), option.description(), newPage); - switch (option.location()) { - case TOP: - subcategory.topButtons.add(configPageButton); - break; - case BOTTOM: - subcategory.bottomButtons.add(configPageButton); - break; - } - optionNames.put(pagePrefix + field.getName(), configPageButton); - } catch (IllegalAccessException ignored) { - } - continue; - } - Option option = field.getAnnotation(Option.class); - if (!page.categories.containsKey(option.category())) - page.categories.put(option.category(), new OptionCategory()); - OptionCategory category = page.categories.get(option.category()); - if (category.subcategories.size() == 0 || !category.subcategories.get(category.subcategories.size() - 1).getName().equals(option.subcategory())) - category.subcategories.add(new OptionSubcategory(option.subcategory())); - if (migrate) { - try { - Object value = mod.migrator.getValue(field, option.name(), option.category(), option.subcategory()); - if (value != null) { - field.setAccessible(true); - field.set(instance, value); - } - } catch (Exception e) { - e.printStackTrace(); - } - } - ArrayList options = category.subcategories.get(category.subcategories.size() - 1).options; - if (option.type() == OptionType.HUD) { - try { - field.setAccessible(true); - BasicHud hud = (BasicHud) field.get(instance); - HudCore.huds.add(hud); - options.add(new ConfigHeader(field, hud, option.name(), 1)); - options.add(new ConfigSwitch(hud.getClass().getField("enabled"), hud, "Enabled", 1)); - options.addAll(ConfigUtils.getClassOptions(hud)); - options.add(new ConfigCheckbox(hud.getClass().getField("rounded"), hud, "Rounded corners", 1)); - options.get(options.size() - 1).setDependency(() -> hud.enabled); - options.add(new ConfigCheckbox(hud.getClass().getField("border"), hud, "Outline/border", 1)); - options.get(options.size() - 1).setDependency(() -> hud.enabled); - options.add(new ConfigColorElement(hud.getClass().getField("bgColor"), hud, "Background color:", 1)); - options.get(options.size() - 1).setDependency(() -> hud.enabled); - options.add(new ConfigColorElement(hud.getClass().getField("borderColor"), hud, "Border color:", 1)); - options.get(options.size() - 1).setDependency(() -> hud.enabled && hud.border); - options.add(new ConfigSlider(hud.getClass().getField("cornerRadius"), hud, "Corner radius:", 2, 0, 10, 0)); - options.get(options.size() - 1).setDependency(() -> hud.enabled && hud.rounded); - options.add(new ConfigSlider(hud.getClass().getField("borderSize"), hud, "Border thickness:", 2, 0, 10, 0)); - options.get(options.size() - 1).setDependency(() -> hud.enabled && hud.border); - options.add(new ConfigSlider(hud.getClass().getField("paddingX"), hud, "X-Padding", 2, 0, 50, 0)); - options.get(options.size() - 1).setDependency(() -> hud.enabled); - options.add(new ConfigSlider(hud.getClass().getField("paddingY"), hud, "Y-Padding", 2, 0, 50, 0)); - options.get(options.size() - 1).setDependency(() -> hud.enabled); - } catch (IllegalAccessException | NoSuchFieldException e) { - e.printStackTrace(); - } - } else { - options.add(ConfigUtils.getOption(option, field, instance)); - } - if (!option.type().equals(OptionType.HUD)) - optionNames.put(pagePrefix + field.getName(), options.get(options.size() - 1)); + for (Field field : instance.getClass().getDeclaredFields()) { + Option option = ConfigUtils.findAnnotation(field, Option.class); + if (option != null) + ConfigUtils.addOptionToPage(page, option, field, instance, migrate ? mod.migrator : null); + // TODO: Make dependencies work, pages, hud } } @@ -227,6 +144,6 @@ public class Config { */ protected void addDependency(String option, Supplier condition) { if (!optionNames.containsKey(option)) return; - optionNames.get(option).setDependency(condition); + optionNames.get(option).addDependency(condition); } } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Button.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Button.java new file mode 100644 index 0000000..300651f --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Button.java @@ -0,0 +1,24 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.BUTTON) +public @interface Button { + String name(); + + String text(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Checkbox.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Checkbox.java new file mode 100644 index 0000000..eae35e4 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Checkbox.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.CHECKBOX) +public @interface Checkbox { + String name(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Color.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Color.java new file mode 100644 index 0000000..98cc5ec --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Color.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.COLOR) +public @interface Color { + String name(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Dropdown.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Dropdown.java new file mode 100644 index 0000000..1fbf162 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Dropdown.java @@ -0,0 +1,24 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.DROPDOWN) +public @interface Dropdown { + String name(); + + String[] options(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/DualOption.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/DualOption.java new file mode 100644 index 0000000..f01d074 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/DualOption.java @@ -0,0 +1,26 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.DUAL_OPTION) +public @interface DualOption { + String name(); + + String left(); + + String right(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Header.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Header.java new file mode 100644 index 0000000..3821a01 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Header.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.HEADER) +public @interface Header { + String text(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Info.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Info.java new file mode 100644 index 0000000..3f058ed --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Info.java @@ -0,0 +1,25 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.InfoType; +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.INFO) +public @interface Info { + String text(); + + InfoType type(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/KeyBind.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/KeyBind.java new file mode 100644 index 0000000..7d6cfdc --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/KeyBind.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.KEYBIND) +public @interface KeyBind { + String name(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Option.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Option.java deleted file mode 100644 index f30f01e..0000000 --- a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Option.java +++ /dev/null @@ -1,85 +0,0 @@ -package cc.polyfrost.oneconfig.config.annotations; - -import cc.polyfrost.oneconfig.config.data.InfoType; -import cc.polyfrost.oneconfig.config.data.OptionType; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface Option { - /** - * The name of the option that will be displayed to the user - */ - String name(); - - /** - * The type of the option - */ - OptionType type(); - - /** - * The category of the component - */ - String category() default "General"; - - /** - * The subcategory of the component (displayed as header) - */ - String subcategory() default ""; - - /** - * The width of the option (1 = half width, 2 = full width) - */ - int size() default 1; - - /** - * A String array of all the possible values for the UniSelector, dropdownList, and ComboBox. - * Also used in the DualOption slider, index 0 is the left, index 1 is the right; for example: - * {"Option 1", "Option 2"} - */ - String[] options() default {}; - - /** - * The placeholder in the text field - */ - String placeholder() default ""; - - /** - * If the text field is secure or not - */ - boolean secure() default false; - - /** - * If the text field is multi line or not - */ - boolean multiLine() default false; - - /** - * Minimum value of slider - */ - float min() default 0; - - /** - * The maximum value of the slider - */ - float max() default 0; - - /** - * Steps of slider (0 for no steps) - */ - int step() default 0; - - /** - * Option for info option type - */ - InfoType infoType() default InfoType.INFO; - - /** - * Text displayed inside button - */ - String buttonText() default "Activate"; -} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Slider.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Slider.java new file mode 100644 index 0000000..144d329 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Slider.java @@ -0,0 +1,26 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.SLIDER) +public @interface Slider { + String name(); + + float min(); + + float max(); + + int step() default 0; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Switch.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Switch.java new file mode 100644 index 0000000..d3b8e80 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Switch.java @@ -0,0 +1,22 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.SWITCH) +public @interface Switch { + String name(); + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/Text.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Text.java new file mode 100644 index 0000000..90e5779 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/annotations/Text.java @@ -0,0 +1,28 @@ +package cc.polyfrost.oneconfig.config.annotations; + +import cc.polyfrost.oneconfig.config.data.OptionType; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +@Option(type = OptionType.TEXT) +public @interface Text { + String name(); + + String placeholder() default ""; + + boolean secure() default false; + + boolean multiline() default false; + + int size() default 1; + + String category() default "General"; + + String subcategory() default ""; +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/annotations/VigilanceName.java b/src/main/java/cc/polyfrost/oneconfig/config/annotations/VigilanceName.java deleted file mode 100644 index e4b042a..0000000 --- a/src/main/java/cc/polyfrost/oneconfig/config/annotations/VigilanceName.java +++ /dev/null @@ -1,16 +0,0 @@ -package cc.polyfrost.oneconfig.config.annotations; - -import java.lang.annotation.ElementType; -import java.lang.annotation.Retention; -import java.lang.annotation.RetentionPolicy; -import java.lang.annotation.Target; - -@Retention(RetentionPolicy.RUNTIME) -@Target(ElementType.FIELD) -public @interface VigilanceName { - String name(); - - String category(); - - String subcategory(); -} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig.java b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig.java index 3b0fcd6..a34b792 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceConfig.java @@ -1,6 +1,6 @@ package cc.polyfrost.oneconfig.config.compatibility.vigilance; -import cc.polyfrost.oneconfig.internal.config.ConfigCore; +import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; import cc.polyfrost.oneconfig.config.core.OneColor; import cc.polyfrost.oneconfig.config.data.Mod; import cc.polyfrost.oneconfig.config.elements.OptionCategory; @@ -55,7 +55,7 @@ public class VigilanceConfig extends Config { } private void generateOptionsList(OptionPage page) { - for (PropertyData option : ((VigilantAccessor) vigilant).getPropertyCollector().getProperties()) { + /*for (PropertyData option : ((VigilantAccessor) vigilant).getPropertyCollector().getProperties()) { PropertyAttributesExt attributes = option.getAttributesExt(); if (attributes.getHidden()) continue; if (!page.categories.containsKey(getCategory(attributes))) @@ -66,7 +66,7 @@ public class VigilanceConfig extends Config { ArrayList options = category.subcategories.get(category.subcategories.size() - 1).options; switch (attributes.getType()) { case SWITCH: - options.add(new ConfigSwitch(getFieldOfProperty(option), option.getInstance(), getName(attributes), 2)); + options.add(new ConfigSwitch(getFieldOfProperty(option), option.getInstance(), getName(attributes), "", "", 2)); break; case CHECKBOX: options.add(new ConfigCheckbox(getFieldOfProperty(option), option.getInstance(), getName(attributes), 2)); @@ -97,7 +97,7 @@ public class VigilanceConfig extends Config { if (attributes.getType() == PropertyType.SWITCH || attributes.getType() == PropertyType.CHECKBOX) { optionNames.put(PropertyKt.fullPropertyPath(option.getAttributesExt()), options.get(options.size() - 1)); } - } + }*/ } private Field getFieldOfProperty(PropertyData data) { @@ -163,11 +163,11 @@ public class VigilanceConfig extends Config { public void addDependency(PropertyData property, PropertyData dependency) { BasicOption option = optionNames.get(PropertyKt.fullPropertyPath(property.getAttributesExt())); if (option != null) { - option.setDependency(() -> Objects.equals(dependency.getValue().getValue(vigilant), true)); + option.addDependency(() -> Objects.equals(dependency.getValue().getValue(vigilant), true)); } } - private static class CompatConfigColorElement extends ConfigColorElement { + /*private static class CompatConfigColorElement extends ConfigColorElement { private final Field color; private Color prevColor = null; private OneColor cachedColor = null; @@ -198,5 +198,5 @@ public class VigilanceConfig extends Config { } } } - } + }*/ } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceName.java b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceName.java new file mode 100644 index 0000000..8417ad8 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/compatibility/vigilance/VigilanceName.java @@ -0,0 +1,16 @@ +package cc.polyfrost.oneconfig.config.compatibility.vigilance; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target(ElementType.FIELD) +public @interface VigilanceName { + String name(); + + String category(); + + String subcategory(); +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java b/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java index d44488d..2002b01 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigUtils.java @@ -1,9 +1,15 @@ package cc.polyfrost.oneconfig.config.core; -import cc.polyfrost.oneconfig.config.annotations.Option; import cc.polyfrost.oneconfig.config.elements.BasicOption; +import cc.polyfrost.oneconfig.config.elements.OptionCategory; +import cc.polyfrost.oneconfig.config.elements.OptionPage; +import cc.polyfrost.oneconfig.config.elements.OptionSubcategory; +import cc.polyfrost.oneconfig.config.migration.Migrator; import cc.polyfrost.oneconfig.gui.elements.config.*; +import cc.polyfrost.oneconfig.internal.config.annotations.Option; +import org.jetbrains.annotations.Nullable; +import java.lang.annotation.Annotation; import java.lang.reflect.Field; import java.util.ArrayList; @@ -11,38 +17,69 @@ public class ConfigUtils { public static BasicOption getOption(Option option, Field field, Object instance) { switch (option.type()) { case SWITCH: - return new ConfigSwitch(field, instance, option.name(), option.size()); + return ConfigSwitch.create(field, instance); case CHECKBOX: - return new ConfigCheckbox(field, instance, option.name(), option.size()); - case TEXT: - return new ConfigTextBox(field, instance, option.name(), option.size(), option.placeholder(), option.secure(), option.multiLine()); - case DUAL_OPTION: - return new ConfigDualOption(field, instance, option.name(), option.size(), option.options()); - case DROPDOWN: - return new ConfigDropdown(field, instance, option.name(), option.size(), option.options()); - case SLIDER: - return new ConfigSlider(field, instance, option.name(), option.size(), option.min(), option.max(), option.step()); + return ConfigCheckbox.create(field, instance); case INFO: - return new ConfigInfo(field, instance, option.name(), option.size(), option.infoType()); - case COLOR: - return new ConfigColorElement(field, instance, option.name(), option.size()); + return ConfigInfo.create(field, instance); case HEADER: - return new ConfigHeader(field, instance, option.name(), option.size()); + return ConfigHeader.create(field, instance); + case COLOR: + return ConfigColorElement.create(field, instance); + case DROPDOWN: + return ConfigDropdown.create(field, instance); + case TEXT: + return ConfigTextBox.create(field, instance); case BUTTON: - return new ConfigButton(field, instance, option.name(), option.size(), option.buttonText()); + return ConfigButton.create(field, instance); + case SLIDER: + return ConfigSlider.create(field, instance); case KEYBIND: - return new ConfigKeyBind(field, instance, option.name(), option.size()); + return ConfigKeyBind.create(field, instance); + case DUAL_OPTION: + return ConfigDualOption.create(field, instance); } return null; } - public static ArrayList getClassOptions(Object hud) { + public static ArrayList getClassOptions(Object object) { ArrayList options = new ArrayList<>(); - for (Field field : hud.getClass().getDeclaredFields()) { - if (!field.isAnnotationPresent(Option.class)) continue; - Option option = field.getAnnotation(Option.class); - options.add(getOption(option, field, hud)); + for (Field field : object.getClass().getDeclaredFields()) { + Option option = findAnnotation(field, Option.class); + if (option == null) continue; + options.add(getOption(option, field, object)); } return options; } + + public static void addOptionToPage(OptionPage page, Option option, Field field, Object instance, @Nullable Migrator migrator) { + BasicOption configOption = getOption(option, field, instance); + if (configOption == null) return; + if (migrator != null) { + Object value = migrator.getValue(field, configOption.name, configOption.category, configOption.subcategory); + if (value != null) { + try { + field.set(instance, value); + } catch (IllegalAccessException ignored) { + } + } + } + getOptions(page, configOption.category, configOption.subcategory).add(configOption); + } + + public static ArrayList getOptions(OptionPage page, String categoryName, String subcategoryName) { + if (!page.categories.containsKey(categoryName)) page.categories.put(categoryName, new OptionCategory()); + OptionCategory category = page.categories.get(categoryName); + if (category.subcategories.size() == 0 || !category.subcategories.get(category.subcategories.size() - 1).getName().equals(subcategoryName)) + category.subcategories.add(new OptionSubcategory(subcategoryName)); + return category.subcategories.get(category.subcategories.size() - 1).options; + } + + public static T findAnnotation(Field field, Class annotationType) { + for (Annotation ann : field.getDeclaredAnnotations()) { + if (ann.annotationType().isAnnotationPresent(annotationType)) + return ann.annotationType().getAnnotation(annotationType); + } + return null; + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java b/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java index 090d1f8..ca931b7 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/data/Mod.java @@ -2,7 +2,7 @@ package cc.polyfrost.oneconfig.config.data; import cc.polyfrost.oneconfig.config.Config; import cc.polyfrost.oneconfig.config.elements.OptionPage; -import cc.polyfrost.oneconfig.config.migration.vigilance.Migrator; +import cc.polyfrost.oneconfig.config.migration.Migrator; import org.jetbrains.annotations.Nullable; public class Mod { diff --git a/src/main/java/cc/polyfrost/oneconfig/config/elements/BasicOption.java b/src/main/java/cc/polyfrost/oneconfig/config/elements/BasicOption.java index d4efeaa..947156a 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/elements/BasicOption.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/elements/BasicOption.java @@ -1,15 +1,18 @@ package cc.polyfrost.oneconfig.config.elements; import java.lang.reflect.Field; +import java.util.ArrayList; import java.util.function.Supplier; @SuppressWarnings({"unused"}) public abstract class BasicOption { public final int size; protected final Field field; - protected final String name; protected final Object parent; - private Supplier dependency; + public final String name; + public final String category; + public final String subcategory; + private final ArrayList> dependencies = new ArrayList<>(); /** * Initialize option @@ -19,11 +22,13 @@ public abstract class BasicOption { * @param name name of option * @param size size of option, 0 for single column, 1 for double. */ - public BasicOption(Field field, Object parent, String name, int size) { + public BasicOption(Field field, Object parent, String name, String category, String subcategory, int size) { this.field = field; this.parent = parent; this.name = name; this.size = size; + this.category = category; + this.subcategory = subcategory; if (field != null) field.setAccessible(true); } @@ -78,21 +83,21 @@ public abstract class BasicOption { } /** - * @return If the component has an option to render at half size + * Add a condition to this option + * + * @param supplier The dependency */ - public boolean hasHalfSize() { - return true; - } - - public String getName() { - return name; - } - - public void setDependency(Supplier supplier) { - this.dependency = supplier; + public void addDependency(Supplier supplier) { + this.dependencies.add(supplier); } + /** + * @return If the option is enabled, based on the dependencies + */ protected boolean isEnabled() { - return dependency == null || dependency.get(); + for (Supplier dependency : dependencies) { + if (!dependency.get()) return false; + } + return true; } } diff --git a/src/main/java/cc/polyfrost/oneconfig/config/elements/OptionSubcategory.java b/src/main/java/cc/polyfrost/oneconfig/config/elements/OptionSubcategory.java index ff1d770..66714a4 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/elements/OptionSubcategory.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/elements/OptionSubcategory.java @@ -1,7 +1,6 @@ package cc.polyfrost.oneconfig.config.elements; -import cc.polyfrost.oneconfig.gui.Colors; -import cc.polyfrost.oneconfig.config.elements.BasicOption; +import cc.polyfrost.oneconfig.internal.assets.Colors; import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.gui.elements.config.ConfigPageButton; import cc.polyfrost.oneconfig.renderer.RenderManager; @@ -31,14 +30,14 @@ public class OptionSubcategory { filteredTop.clear(); filteredBottom.clear(); for (BasicOption option : options) { - if (option.getName().toLowerCase().contains(filter)) filteredOptions.add(option); + if (option.name.toLowerCase().contains(filter)) filteredOptions.add(option); } for (ConfigPageButton page : topButtons) { - if (page.getName().toLowerCase().contains(filter) || page.description.toLowerCase().contains(filter)) + if (page.name.toLowerCase().contains(filter) || page.description.toLowerCase().contains(filter)) filteredTop.add(page); } for (ConfigPageButton page : bottomButtons) { - if (page.getName().toLowerCase().contains(filter) || page.description.toLowerCase().contains(filter)) + if (page.name.toLowerCase().contains(filter) || page.description.toLowerCase().contains(filter)) filteredBottom.add(page); } } @@ -60,7 +59,7 @@ public class OptionSubcategory { BasicOption option = filteredOptions.get(i); if (i + 1 < filteredOptions.size()) { BasicOption nextOption = filteredOptions.get(i + 1); - if (option.size == 1 && option.hasHalfSize() && nextOption.size == 1 && nextOption.hasHalfSize()) { + if (option.size == 1 && nextOption.size == 1) { backgroundSize += Math.max(option.getHeight(), nextOption.getHeight()) + 16; i++; continue; @@ -79,7 +78,7 @@ public class OptionSubcategory { option.draw(vg, x, optionY); if (i + 1 < filteredOptions.size()) { BasicOption nextOption = filteredOptions.get(i + 1); - if (option.size == 1 && option.hasHalfSize() && nextOption.size == 1 && nextOption.hasHalfSize()) { + if (option.size == 1 && nextOption.size == 1) { nextOption.draw(vg, x + 512, optionY); optionY += Math.max(option.getHeight(), nextOption.getHeight()) + 16; i++; @@ -105,7 +104,7 @@ public class OptionSubcategory { option.drawLast(vg, x, drawLastY); if (i + 1 < filteredOptions.size()) { BasicOption nextOption = filteredOptions.get(i + 1); - if (option.size == 1 && option.hasHalfSize() && nextOption.size == 1 && nextOption.hasHalfSize()) { + if (option.size == 1 && nextOption.size == 1) { nextOption.drawLast(vg, x + 512, drawLastY); drawLastY += Math.max(option.getHeight(), nextOption.getHeight()) + 16; i++; diff --git a/src/main/java/cc/polyfrost/oneconfig/config/migration/Migrator.java b/src/main/java/cc/polyfrost/oneconfig/config/migration/Migrator.java new file mode 100644 index 0000000..abfb2a0 --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/migration/Migrator.java @@ -0,0 +1,14 @@ +package cc.polyfrost.oneconfig.config.migration; + +import java.lang.reflect.Field; + +public interface Migrator { + /** + * @param field The field of the option + * @param name The name of the option + * @param category The category of the option + * @param subcategory The subcategory of the option + * @return Value of the option, null if not found + */ + Object getValue(Field field, String name, String category, String subcategory); +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/migration/VigilanceMigrator.java b/src/main/java/cc/polyfrost/oneconfig/config/migration/VigilanceMigrator.java new file mode 100644 index 0000000..4a9cd3b --- /dev/null +++ b/src/main/java/cc/polyfrost/oneconfig/config/migration/VigilanceMigrator.java @@ -0,0 +1,84 @@ +package cc.polyfrost.oneconfig.config.migration; + +import cc.polyfrost.oneconfig.config.compatibility.vigilance.VigilanceName; + +import java.io.BufferedReader; +import java.io.FileReader; +import java.lang.reflect.Field; +import java.util.HashMap; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class VigilanceMigrator implements Migrator { + private static final Pattern categoryPattern = Pattern.compile("\\[\"?(?[^.\\[\\]\"]+)\"?\\.\"?(?[^.\\[\\]\"]+)\"?]"); + private static final Pattern booleanPattern = Pattern.compile("\"?(?[^\\s\"]+)\"? = (?true|false)"); + private static final Pattern numberPattern = Pattern.compile("\"?(?[^\\s\"]+)\"? = (?[\\d.]+)"); + private static final Pattern stringPattern = Pattern.compile("\"?(?[^\\s\"]+)\"? = \"(?.+)\""); + protected final String filePath; + protected HashMap>> values = null; + + public VigilanceMigrator(String filePath) { + this.filePath = filePath; + } + + @Override + public Object getValue(Field field, String name, String category, String subcategory) { + if (values == null) getOptions(); + if (field.isAnnotationPresent(VigilanceName.class)) { + VigilanceName annotation = field.getAnnotation(VigilanceName.class); + name = annotation.name(); + category = annotation.category(); + subcategory = annotation.subcategory(); + } + name = parse(name); + category = parse(category); + subcategory = parse(subcategory); + if (values.containsKey(category) && values.get(category).containsKey(subcategory) && values.get(category).get(subcategory).containsKey(name)) + return values.get(category).get(subcategory).get(name); + return null; + } + + protected String parse(String value) { + return value.toLowerCase().replace(" ", "_"); + } + + protected void getOptions() { + if (values == null) values = new HashMap<>(); + try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { + String currentCategory = null; + String currentSubcategory = null; + String line; + while ((line = reader.readLine()) != null) { + Matcher categoryMatcher = categoryPattern.matcher(line); + if (categoryMatcher.find()) { + currentCategory = categoryMatcher.group("category"); + currentSubcategory = categoryMatcher.group("subcategory"); + if (!values.containsKey(currentCategory)) values.put(currentCategory, new HashMap<>()); + if (!values.get(currentCategory).containsKey(currentSubcategory)) + values.get(currentCategory).put(currentSubcategory, new HashMap<>()); + continue; + } + if (currentCategory == null) continue; + HashMap options = values.get(currentCategory).get(currentSubcategory); + Matcher booleanMatcher = booleanPattern.matcher(line); + if (booleanMatcher.find()) { + options.put(booleanMatcher.group("name"), Boolean.parseBoolean(booleanMatcher.group("value"))); + continue; + } + Matcher numberMatcher = numberPattern.matcher(line); + if (numberMatcher.find()) { + String value = numberMatcher.group("value"); + if (value.contains(".")) options.put(numberMatcher.group("name"), Float.parseFloat(value)); + else options.put(numberMatcher.group("name"), Integer.parseInt(value)); + continue; + } + Matcher stringMatcher = stringPattern.matcher(line); + if (stringMatcher.find()) { + options.put(stringMatcher.group("name"), stringMatcher.group("value")); + } + } + } catch (Exception e) { + e.printStackTrace(); + } + } +} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/Migrator.java b/src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/Migrator.java deleted file mode 100644 index f3f60b7..0000000 --- a/src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/Migrator.java +++ /dev/null @@ -1,14 +0,0 @@ -package cc.polyfrost.oneconfig.config.migration.vigilance; - -import java.lang.reflect.Field; - -public interface Migrator { - /** - * @param field The field of the option - * @param name The name of the option - * @param category The category of the option - * @param subcategory The subcategory of the option - * @return Value of the option, null if not found - */ - Object getValue(Field field, String name, String category, String subcategory); -} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/VigilanceMigrator.java b/src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/VigilanceMigrator.java deleted file mode 100644 index 2870e03..0000000 --- a/src/main/java/cc/polyfrost/oneconfig/config/migration/vigilance/VigilanceMigrator.java +++ /dev/null @@ -1,84 +0,0 @@ -package cc.polyfrost.oneconfig.config.migration.vigilance; - -import cc.polyfrost.oneconfig.config.annotations.VigilanceName; - -import java.io.BufferedReader; -import java.io.FileReader; -import java.lang.reflect.Field; -import java.util.HashMap; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -public class VigilanceMigrator implements Migrator { - private static final Pattern categoryPattern = Pattern.compile("\\[\"?(?[^.\\[\\]\"]+)\"?\\.\"?(?[^.\\[\\]\"]+)\"?]"); - private static final Pattern booleanPattern = Pattern.compile("\"?(?[^\\s\"]+)\"? = (?true|false)"); - private static final Pattern numberPattern = Pattern.compile("\"?(?[^\\s\"]+)\"? = (?[\\d.]+)"); - private static final Pattern stringPattern = Pattern.compile("\"?(?[^\\s\"]+)\"? = \"(?.+)\""); - protected final String filePath; - protected HashMap>> values = null; - - public VigilanceMigrator(String filePath) { - this.filePath = filePath; - } - - @Override - public Object getValue(Field field, String name, String category, String subcategory) { - if (values == null) getOptions(); - if (field.isAnnotationPresent(VigilanceName.class)) { - VigilanceName annotation = field.getAnnotation(VigilanceName.class); - name = annotation.name(); - category = annotation.category(); - subcategory = annotation.subcategory(); - } - name = parse(name); - category = parse(category); - subcategory = parse(subcategory); - if (values.containsKey(category) && values.get(category).containsKey(subcategory) && values.get(category).get(subcategory).containsKey(name)) - return values.get(category).get(subcategory).get(name); - return null; - } - - protected String parse(String value) { - return value.toLowerCase().replace(" ", "_"); - } - - protected void getOptions() { - if (values == null) values = new HashMap<>(); - try (BufferedReader reader = new BufferedReader(new FileReader(filePath))) { - String currentCategory = null; - String currentSubcategory = null; - String line; - while ((line = reader.readLine()) != null) { - Matcher categoryMatcher = categoryPattern.matcher(line); - if (categoryMatcher.find()) { - currentCategory = categoryMatcher.group("category"); - currentSubcategory = categoryMatcher.group("subcategory"); - if (!values.containsKey(currentCategory)) values.put(currentCategory, new HashMap<>()); - if (!values.get(currentCategory).containsKey(currentSubcategory)) - values.get(currentCategory).put(currentSubcategory, new HashMap<>()); - continue; - } - if (currentCategory == null) continue; - HashMap options = values.get(currentCategory).get(currentSubcategory); - Matcher booleanMatcher = booleanPattern.matcher(line); - if (booleanMatcher.find()) { - options.put(booleanMatcher.group("name"), Boolean.parseBoolean(booleanMatcher.group("value"))); - continue; - } - Matcher numberMatcher = numberPattern.matcher(line); - if (numberMatcher.find()) { - String value = numberMatcher.group("value"); - if (value.contains(".")) options.put(numberMatcher.group("name"), Float.parseFloat(value)); - else options.put(numberMatcher.group("name"), Integer.parseInt(value)); - continue; - } - Matcher stringMatcher = stringPattern.matcher(line); - if (stringMatcher.find()) { - options.put(stringMatcher.group("name"), stringMatcher.group("value")); - } - } - } catch (Exception e) { - e.printStackTrace(); - } - } -} diff --git a/src/main/java/cc/polyfrost/oneconfig/config/profiles/Profiles.java b/src/main/java/cc/polyfrost/oneconfig/config/profiles/Profiles.java index 2b0a97e..07ce53e 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/profiles/Profiles.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/profiles/Profiles.java @@ -1,7 +1,7 @@ package cc.polyfrost.oneconfig.config.profiles; import cc.polyfrost.oneconfig.internal.OneConfig; -import cc.polyfrost.oneconfig.internal.config.ConfigCore; +import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; import cc.polyfrost.oneconfig.internal.config.OneConfigConfig; import org.apache.commons.io.FileUtils; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/Colors.java b/src/main/java/cc/polyfrost/oneconfig/gui/Colors.java deleted file mode 100644 index 6cb9567..0000000 --- a/src/main/java/cc/polyfrost/oneconfig/gui/Colors.java +++ /dev/null @@ -1,46 +0,0 @@ -package cc.polyfrost.oneconfig.gui; - -import java.awt.*; - -public class Colors { - // the color library - public static final int TRANSPARENT = new Color(0, 0, 0, 0).getRGB(); // Transparent - public static final int BLACK = new Color(0, 0, 0, 255).getRGB(); // Black - public static final int GRAY_900 = new Color(13, 14, 15, 255).getRGB(); // Gray 900 - public static final int GRAY_900_80 = new Color(13, 14, 15, 204).getRGB(); // Gray 900 80% - public static final int GRAY_800 = new Color(21, 22, 23, 255).getRGB(); // Gray 800 - public static final int GRAY_800_95 = new Color(21, 22, 23, 242).getRGB(); - public static final int GRAY_700 = new Color(34, 35, 38, 255).getRGB(); // Gray 700 - public static final int GRAY_600 = new Color(42, 44, 48, 255).getRGB(); // Gray 600 - public static final int GRAY_500 = new Color(49, 51, 56, 255).getRGB(); // Gray 500 // button sidebar hover, button gray normal - public static final int GRAY_500_80 = new Color(49, 51, 56, 204).getRGB(); // Gray 500 80% // button sidebar pressed - public static final int GRAY_400 = new Color(55, 59, 69, 255).getRGB(); // Gray 400 - public static final int GRAY_300 = new Color(73, 79, 92, 255).getRGB(); // Gray 300 // button gray hover - public static final int GRAY_400_80 = new Color(55, 59, 69, 204).getRGB(); // Gray 400 80% // button gray pressed - public static final int PRIMARY_800 = new Color(13, 51, 128, 255).getRGB(); // Blue 800 - public static final int PRIMARY_700 = new Color(18, 71, 178, 255).getRGB(); // Blue 700 - public static final int PRIMARY_700_80 = new Color(18, 71, 178, 204).getRGB(); // Blue 700 80% - public static final int PRIMARY_600 = new Color(20, 82, 204, 255).getRGB(); // Blue 600 // button blue normal - public static final int PRIMARY_500 = new Color(25, 103, 255, 255).getRGB(); // Blue 500 // button blue hover - public static final int PRIMARY_400 = new Color(48, 129, 242, 255).getRGB(); - public static final int WHITE_50 = new Color(255, 255, 255, 127).getRGB(); // White 60% - public static final int WHITE_60 = new Color(255, 255, 255, 153).getRGB(); // White 60% - public static final int WHITE_80 = new Color(255, 255, 255, 204).getRGB(); // White 80% - public static final int WHITE_90 = new Color(255, 255, 255, 229).getRGB(); // White 90% - public static final int WHITE_95 = new Color(255, 255, 255, 242).getRGB(); // White 90% - public static final int WHITE = new Color(255, 255, 255, 255).getRGB(); // White 100% - public static final int SUCCESS_600 = new Color(3, 152, 85).getRGB(); - public static final int SUCCESS_700 = new Color(2, 121, 72).getRGB(); - public static final int WARNING_500 = new Color(247, 144, 9).getRGB(); - public static final int WARNING_600 = new Color(220, 104, 3).getRGB(); - public static final int ERROR_600_80 = new Color(217, 32, 32, 204).getRGB(); - public static final int ERROR_600 = new Color(217, 32, 32).getRGB(); - public static final int ERROR_700 = new Color(180, 24, 24).getRGB(); // Red 700 - public static final int ERROR_800 = new Color(145, 24, 24).getRGB(); // Red 800 - public static final int ERROR_800_80 = new Color(145, 24, 24, 204).getRGB(); // Red 800 - public static final int ERROR_300 = new Color(253, 155, 155).getRGB(); - public static final int ERROR_300_80 = new Color(253, 155, 155, 204).getRGB(); - public static boolean ROUNDED_CORNERS = true; - public static final float CORNER_RADIUS_WIN = 20f; - public static final float CORNER_RADIUS = 12f; -} diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java index 7f3bf15..13174ab 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/HudGui.java @@ -1,6 +1,6 @@ package cc.polyfrost.oneconfig.gui; -import cc.polyfrost.oneconfig.internal.config.ConfigCore; +import cc.polyfrost.oneconfig.internal.config.core.ConfigCore; import cc.polyfrost.oneconfig.hud.BasicHud; import cc.polyfrost.oneconfig.internal.hud.HudCore; import cc.polyfrost.oneconfig.renderer.RenderManager; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java index 81fe9c0..0ddf469 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/OneConfigGui.java @@ -8,9 +8,10 @@ import cc.polyfrost.oneconfig.gui.elements.ColorSelector; import cc.polyfrost.oneconfig.gui.elements.text.TextInputField; import cc.polyfrost.oneconfig.gui.pages.ModsPage; import cc.polyfrost.oneconfig.gui.pages.Page; +import cc.polyfrost.oneconfig.internal.assets.Colors; import cc.polyfrost.oneconfig.renderer.RenderManager; import cc.polyfrost.oneconfig.renderer.font.Fonts; -import cc.polyfrost.oneconfig.renderer.image.SVGs; +import cc.polyfrost.oneconfig.internal.assets.SVGs; import cc.polyfrost.oneconfig.renderer.scissor.ScissorManager; import cc.polyfrost.oneconfig.utils.gui.GuiUtils; import cc.polyfrost.oneconfig.utils.InputUtils; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java index b6f1160..5678189 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/SideBar.java @@ -6,9 +6,10 @@ import cc.polyfrost.oneconfig.gui.animations.EaseInOutQuart; import cc.polyfrost.oneconfig.gui.elements.BasicButton; import cc.polyfrost.oneconfig.gui.pages.CreditsPage; import cc.polyfrost.oneconfig.gui.pages.ModsPage; +import cc.polyfrost.oneconfig.internal.assets.Colors; import cc.polyfrost.oneconfig.renderer.RenderManager; import cc.polyfrost.oneconfig.renderer.font.Fonts; -import cc.polyfrost.oneconfig.renderer.image.SVGs; +import cc.polyfrost.oneconfig.internal.assets.SVGs; import cc.polyfrost.oneconfig.test.ButtonTestPage; import cc.polyfrost.oneconfig.utils.gui.GuiUtils; import cc.polyfrost.oneconfig.utils.color.ColorPalette; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java index f3168dd..7869114 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/BasicButton.java @@ -1,11 +1,11 @@ package cc.polyfrost.oneconfig.gui.elements; -import cc.polyfrost.oneconfig.gui.Colors; +import cc.polyfrost.oneconfig.internal.assets.Colors; import cc.polyfrost.oneconfig.gui.OneConfigGui; import cc.polyfrost.oneconfig.gui.pages.Page; import cc.polyfrost.oneconfig.renderer.RenderManager; import cc.polyfrost.oneconfig.renderer.font.Fonts; -import cc.polyfrost.oneconfig.renderer.image.SVGs; +import cc.polyfrost.oneconfig.internal.assets.SVGs; import cc.polyfrost.oneconfig.utils.color.ColorPalette; import cc.polyfrost.oneconfig.utils.color.ColorUtils; import org.jetbrains.annotations.NotNull; diff --git a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java index d42d465..4729684 100644 --- a/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java +++ b/src/main/java/cc/polyfrost/oneconfig/gui/elements/ColorSelector.java @@ -1,6 +1,6 @@ package cc.polyfrost.oneconfig.gui.elements; -import cc.polyfrost.oneconfig.gui.Colors; +import cc.polyfrost.oneconfig.internal.assets.Colors; import cc.polyfrost.oneconfig.config.core.OneColor;