diff options
Diffstat (limited to 'src/main/java')
4 files changed, 107 insertions, 67 deletions
diff --git a/src/main/java/cc/polyfrost/oneconfig/config/Config.java b/src/main/java/cc/polyfrost/oneconfig/config/Config.java index d0d8acf..65d6b00 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/Config.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/Config.java @@ -137,67 +137,35 @@ public class Config { } } ArrayList<BasicOption> options = category.subcategories.get(category.subcategories.size() - 1).options; - switch (option.type()) { - case SWITCH: - options.add(new ConfigSwitch(field, instance, option.name(), option.size())); - break; - case CHECKBOX: - options.add(new ConfigCheckbox(field, instance, option.name(), option.size())); - break; - case TEXT: - options.add(new ConfigTextBox(field, instance, option.name(), option.size(), option.placeholder(), option.secure(), option.multiLine())); - break; - case DUAL_OPTION: - options.add(new ConfigDualOption(field, instance, option.name(), option.size(), option.options())); - break; - case DROPDOWN: - options.add(new ConfigDropdown(field, instance, option.name(), option.size(), option.options())); - break; - case SLIDER: - options.add(new ConfigSlider(field, instance, option.name(), option.size(), option.min(), option.max(), option.step())); - break; - case INFO: - options.add(new ConfigInfo(field, instance, option.name(), option.size(), option.infoType())); - break; - case COLOR: - options.add(new ConfigColorElement(field, instance, option.name(), option.size())); - break; - case HEADER: - options.add(new ConfigHeader(field, instance, option.name(), option.size())); - break; - case BUTTON: - options.add(new ConfigButton(field, instance, option.name(), option.size(), option.buttonText())); - break; - case KEYBIND: - options.add(new ConfigKeyBind(field, instance, option.name(), option.size())); - break; - case 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.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(); - } - break; + 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(ConfigCore.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(ConfigCore.getOption(option, field, instance)); } if (!option.type().equals(OptionType.HUD)) optionNames.put(pagePrefix + field.getName(), options.get(options.size() - 1)); diff --git a/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigCore.java b/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigCore.java index a000f7c..f1aa1ab 100644 --- a/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigCore.java +++ b/src/main/java/cc/polyfrost/oneconfig/config/core/ConfigCore.java @@ -1,8 +1,12 @@ package cc.polyfrost.oneconfig.config.core; +import cc.polyfrost.oneconfig.config.annotations.Option; import cc.polyfrost.oneconfig.config.data.Mod; +import cc.polyfrost.oneconfig.config.elements.BasicOption; +import cc.polyfrost.oneconfig.gui.elements.config.*; import cc.polyfrost.oneconfig.hud.HudCore; +import java.lang.reflect.Field; import java.util.ArrayList; public class ConfigCore { @@ -22,4 +26,42 @@ public class ConfigCore { modData.config.init(modData); } } + + public static BasicOption getOption(Option option, Field field, Object instance) { + switch (option.type()) { + case SWITCH: + return new ConfigSwitch(field, instance, option.name(), option.size()); + 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()); + case INFO: + return new ConfigInfo(field, instance, option.name(), option.size(), option.infoType()); + case COLOR: + return new ConfigColorElement(field, instance, option.name(), option.size()); + case HEADER: + return new ConfigHeader(field, instance, option.name(), option.size()); + case BUTTON: + return new ConfigButton(field, instance, option.name(), option.size(), option.buttonText()); + case KEYBIND: + return new ConfigKeyBind(field, instance, option.name(), option.size()); + } + return null; + } + + public static ArrayList<BasicOption> getClassOptions(Object hud) { + ArrayList<BasicOption> 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)); + } + return options; + } } diff --git a/src/main/java/cc/polyfrost/oneconfig/hud/TextHud.java b/src/main/java/cc/polyfrost/oneconfig/hud/TextHud.java index f868660..99df46b 100644 --- a/src/main/java/cc/polyfrost/oneconfig/hud/TextHud.java +++ b/src/main/java/cc/polyfrost/oneconfig/hud/TextHud.java @@ -3,25 +3,35 @@ package cc.polyfrost.oneconfig.hud; import cc.polyfrost.oneconfig.renderer.RenderManager; import gg.essential.universal.UMinecraft; +import java.util.List; + public abstract class TextHud extends BasicHud { + private transient int width = 100; + private transient int height; public TextHud(boolean enabled, int x, int y) { super(enabled, x, y); } @Override public int getWidth(float scale) { - return (int) (UMinecraft.getFontRenderer().getStringWidth(getText()) * scale); + return (int) (width * scale); } @Override public int getHeight(float scale) { - return (int) (9 * scale); + return (int) (height * scale); } @Override public void draw(int x, int y, float scale) { - RenderManager.drawScaledString(getText(), x, y, 0xffffff, false, scale); + int textY = y; + for (String line : getLines()) { + RenderManager.drawScaledString(line, x, textY, 0xffffff, false, scale); + width = Math.max(width, UMinecraft.getFontRenderer().getStringWidth(line)); + textY += 12 * scale; + } + height = (int) ((textY - y) / scale); } - public abstract String getText(); + public abstract List<String> getLines(); } diff --git a/src/main/java/cc/polyfrost/oneconfig/test/TestHud.java b/src/main/java/cc/polyfrost/oneconfig/test/TestHud.java index d11340c..930d827 100644 --- a/src/main/java/cc/polyfrost/oneconfig/test/TestHud.java +++ b/src/main/java/cc/polyfrost/oneconfig/test/TestHud.java @@ -1,15 +1,35 @@ package cc.polyfrost.oneconfig.test; +import cc.polyfrost.oneconfig.config.annotations.Option; +import cc.polyfrost.oneconfig.config.data.OptionType; import cc.polyfrost.oneconfig.hud.TextHud; import net.minecraft.client.Minecraft; +import java.util.ArrayList; +import java.util.List; + public class TestHud extends TextHud { public TestHud(boolean enabled, int x, int y) { super(enabled, x, y); } @Override - public String getText() { - return "FPS: " + Minecraft.getDebugFPS(); + public List<String> getLines() { + ArrayList<String> lines = new ArrayList<>(); + lines.add("FPS: " + Minecraft.getDebugFPS()); + if (hasSecondLine) lines.add(secondLine); + return lines; } + + @Option( + name = "Enable Second Line", + type = OptionType.SWITCH + ) + public boolean hasSecondLine = false; + + @Option( + name = "Second Line Text", + type = OptionType.TEXT + ) + public String secondLine = "Epic text"; } |