From bd74bce5228f943810a30065c65e5484c2a7141f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?K=C3=A4seToatz?= Date: Tue, 4 Nov 2025 13:52:26 +0100 Subject: [PATCH] better abstraction --- .../fastGhast/configscreen/ConfigEntry.java | 13 ++++++------ .../configscreen/ConfigEntryList.java | 19 +++++++++++++++++- .../configscreen/options/BoolOption.java | 20 +++++-------------- .../configscreen/options/ButtonOption.java | 15 ++++++++++++++ .../configscreen/options/FloatOption.java | 18 ++++------------- .../configscreen/options/InputOption.java | 3 +++ .../configscreen/options/Option.java | 4 ---- 7 files changed, 52 insertions(+), 40 deletions(-) create mode 100644 src/main/java/com/kasetoatz/fastGhast/configscreen/options/ButtonOption.java diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntry.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntry.java index 0a8f8cb..7d1d205 100644 --- a/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntry.java +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntry.java @@ -8,18 +8,14 @@ import net.minecraft.client.gui.widget.ClickableWidget; import net.minecraft.client.gui.widget.ElementListWidget; import net.minecraft.client.gui.widget.TextWidget; +import java.util.ArrayList; import java.util.List; import static com.kasetoatz.fastghast.configscreen.DumbassConfig.*; public class ConfigEntry extends ElementListWidget.Entry { - private final List widgets; - - public ConfigEntry(ClickableWidget... widgets) - { - this.widgets = List.of(widgets); - } + private final ArrayList widgets = new ArrayList<>(); @Override public List selectableChildren() @@ -58,4 +54,9 @@ public class ConfigEntry extends ElementListWidget.Entry widget.render(context, mouseX, mouseY, deltaTicks); } } + + public void add(ClickableWidget widget) + { + widgets.add(widget); + } } diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntryList.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntryList.java index 602a597..db5d300 100644 --- a/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntryList.java +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/ConfigEntryList.java @@ -1,5 +1,8 @@ package com.kasetoatz.fastghast.configscreen; +import com.kasetoatz.fastghast.configscreen.options.BoolOption; +import com.kasetoatz.fastghast.configscreen.options.ButtonOption; +import com.kasetoatz.fastghast.configscreen.options.InputOption; import com.kasetoatz.fastghast.configscreen.options.Option; import net.minecraft.client.MinecraftClient; import net.minecraft.client.gui.DrawContext; @@ -51,6 +54,20 @@ public class ConfigEntryList extends ElementListWidget public void add(Option option) { - this.addEntry(option.toEntry(this.client.textRenderer, this.getWidth())); + ConfigEntry entry = new ConfigEntry(); + entry.add(new TextWidget(option.getText(), this.client.textRenderer)); + if (option instanceof ButtonOption buttonOption) + { + entry.add(ButtonWidget.builder(buttonOption.getButtonText(), buttonOption::onClick).build()); + } + else if (option instanceof InputOption inputOption) + { + inputOption.textField = new InputField(this.client.textRenderer, inputOption.getText()); + inputOption.textField.setText(inputOption.getValue().toString()); + inputOption.textField.setTextPredicate(inputOption::predicate); + inputOption.textField.setChangedListener(inputOption::changeListener); + entry.add(inputOption.textField); + } + this.addEntry(entry); } } diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/BoolOption.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/BoolOption.java index 7bc7398..a73bd44 100644 --- a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/BoolOption.java +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/BoolOption.java @@ -1,38 +1,28 @@ package com.kasetoatz.fastghast.configscreen.options; -import com.kasetoatz.fastghast.configscreen.ConfigEntry; -import net.minecraft.client.font.TextRenderer; import net.minecraft.client.gui.widget.ButtonWidget; -import net.minecraft.client.gui.widget.TextWidget; import net.minecraft.text.Text; import static com.kasetoatz.fastghast.configscreen.DumbassConfig.BOOLEAN_FALSE_COLOR; import static com.kasetoatz.fastghast.configscreen.DumbassConfig.BOOLEAN_TRUE_COLOR; -public class BoolOption extends Option +public class BoolOption extends ButtonOption { public BoolOption(String text, String key, boolean defaultValue) { super(text, key, defaultValue); } - private Text getButtonText() + @Override + public Text getButtonText() { return this.getValue() ? Text.literal("True").withColor(BOOLEAN_TRUE_COLOR) : Text.literal("False").withColor(BOOLEAN_FALSE_COLOR); } - private void onClick(ButtonWidget button) + @Override + public void onClick(ButtonWidget button) { this.setValue(!this.getValue()); button.setMessage(this.getButtonText()); } - - @Override - public ConfigEntry toEntry(TextRenderer textRenderer, int maxWidth) - { - return new ConfigEntry( - new TextWidget(this.getText(), textRenderer), - ButtonWidget.builder(getButtonText(), this::onClick).build() - ); - } } diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/ButtonOption.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/ButtonOption.java new file mode 100644 index 0000000..a9b2a34 --- /dev/null +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/ButtonOption.java @@ -0,0 +1,15 @@ +package com.kasetoatz.fastghast.configscreen.options; + +import net.minecraft.client.gui.widget.ButtonWidget; +import net.minecraft.text.Text; + +public abstract class ButtonOption extends Option +{ + public ButtonOption(String text, String key, T defaultValue) + { + super(text, key, defaultValue); + } + + public abstract Text getButtonText(); + public abstract void onClick(ButtonWidget button); +} diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/FloatOption.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/FloatOption.java index 08b2aa8..1b5c6d8 100644 --- a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/FloatOption.java +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/FloatOption.java @@ -1,10 +1,6 @@ package com.kasetoatz.fastghast.configscreen.options; -import com.kasetoatz.fastghast.configscreen.ConfigEntry; -import com.kasetoatz.fastghast.configscreen.InputField; import com.kasetoatz.fastghast.configscreen.options.validators.Validator; -import net.minecraft.client.font.TextRenderer; -import net.minecraft.client.gui.widget.TextWidget; public class FloatOption extends InputOption { @@ -18,7 +14,8 @@ public class FloatOption extends InputOption super(text, key, defaultValue); } - private boolean predicate(String text) + @Override + public boolean predicate(String text) { if (text.isEmpty() || text.equals(".") || text.equals("-")) { @@ -36,15 +33,8 @@ public class FloatOption extends InputOption } @Override - public ConfigEntry toEntry(TextRenderer textRenderer, int maxWidth) + public void changeListener(String text) { - this.textField = new InputField(textRenderer, this.getText()); - textField.setText(this.getValue().toString()); - textField.setTextPredicate(this::predicate); - textField.setChangedListener(text -> this.onChange((text.isEmpty() || text.equals(".") || text.equals("-")) ? 0.F : Float.parseFloat(text))); - return new ConfigEntry( - new TextWidget(this.getText(), textRenderer), - textField - ); + this.onChange((text.isEmpty() || text.equals(".") || text.equals("-")) ? 0.F : Float.parseFloat(text)); } } diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/InputOption.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/InputOption.java index 19eafbf..d8feca6 100644 --- a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/InputOption.java +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/InputOption.java @@ -43,4 +43,7 @@ public abstract class InputOption extends Option this.textField.setEditableColor(INVALID_INPUT_COLOR); this.textField.setTooltip(Tooltip.of(Text.literal(message).withColor(INVALID_INPUT_COLOR))); } + + public abstract boolean predicate(String value); + public abstract void changeListener(String value); } diff --git a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/Option.java b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/Option.java index 31370cb..fe38885 100644 --- a/src/main/java/com/kasetoatz/fastGhast/configscreen/options/Option.java +++ b/src/main/java/com/kasetoatz/fastGhast/configscreen/options/Option.java @@ -1,7 +1,5 @@ package com.kasetoatz.fastghast.configscreen.options; -import com.kasetoatz.fastghast.configscreen.ConfigEntry; -import net.minecraft.client.font.TextRenderer; import net.minecraft.text.Text; public abstract class Option @@ -43,6 +41,4 @@ public abstract class Option { this.value = value; } - - public abstract ConfigEntry toEntry(TextRenderer textRenderer, int maxWidth); }