aboutsummaryrefslogtreecommitdiff
path: root/src/testmod/java/dev
diff options
context:
space:
mode:
Diffstat (limited to 'src/testmod/java/dev')
-rw-r--r--src/testmod/java/dev/isxander/yacl/test/GuiTest.java (renamed from src/testmod/java/dev/isxander/yacl/test/ModMenuIntegration.java)191
-rw-r--r--src/testmod/java/dev/isxander/yacl/test/config/ConfigData.java4
-rw-r--r--src/testmod/java/dev/isxander/yacl/test/config/Entrypoint.java3
-rw-r--r--src/testmod/java/dev/isxander/yacl/test/mixins/TitleScreenMixin.java26
4 files changed, 138 insertions, 86 deletions
diff --git a/src/testmod/java/dev/isxander/yacl/test/ModMenuIntegration.java b/src/testmod/java/dev/isxander/yacl/test/GuiTest.java
index 596a0bf..492a573 100644
--- a/src/testmod/java/dev/isxander/yacl/test/ModMenuIntegration.java
+++ b/src/testmod/java/dev/isxander/yacl/test/GuiTest.java
@@ -1,7 +1,5 @@
package dev.isxander.yacl.test;
-import com.terraformersmc.modmenu.api.ConfigScreenFactory;
-import com.terraformersmc.modmenu.api.ModMenuApi;
import dev.isxander.yacl.api.*;
import dev.isxander.yacl.gui.RequireRestartScreen;
import dev.isxander.yacl.gui.controllers.*;
@@ -11,6 +9,10 @@ import dev.isxander.yacl.gui.controllers.slider.FloatSliderController;
import dev.isxander.yacl.gui.controllers.slider.IntegerSliderController;
import dev.isxander.yacl.gui.controllers.slider.LongSliderController;
import dev.isxander.yacl.gui.controllers.string.StringController;
+import dev.isxander.yacl.gui.controllers.string.number.DoubleFieldController;
+import dev.isxander.yacl.gui.controllers.string.number.FloatFieldController;
+import dev.isxander.yacl.gui.controllers.string.number.IntegerFieldController;
+import dev.isxander.yacl.gui.controllers.string.number.LongFieldController;
import dev.isxander.yacl.test.config.ConfigData;
import dev.isxander.yacl.test.config.Entrypoint;
import net.minecraft.client.MinecraftClient;
@@ -23,10 +25,9 @@ import net.minecraft.text.Text;
import java.awt.*;
-public class ModMenuIntegration implements ModMenuApi {
- @Override
- public ConfigScreenFactory<?> getModConfigScreenFactory() {
- return (parent) -> Entrypoint.getConfig().buildConfig((config, builder) -> builder
+public class GuiTest {
+ public static Screen getModConfigScreenFactory(Screen parent) {
+ return YetAnotherConfigLib.create(Entrypoint.getConfig(), (defaults, config, builder) -> builder
.title(Text.of("Test Suites"))
.category(ConfigCategory.createBuilder()
.name(Text.of("Suites"))
@@ -55,8 +56,8 @@ public class ModMenuIntegration implements ModMenuApi {
.generateScreen(parent);
}
- private Screen getFullTestSuite(Screen parent) {
- return Entrypoint.getConfig().buildConfig((config, builder) -> builder
+ private static Screen getFullTestSuite(Screen parent) {
+ return YetAnotherConfigLib.create(Entrypoint.getConfig(), (defaults, config, builder) -> builder
.title(Text.of("Test GUI"))
.category(ConfigCategory.createBuilder()
.name(Text.of("Control Examples"))
@@ -69,9 +70,9 @@ public class ModMenuIntegration implements ModMenuApi {
.name(Text.of("Boolean Toggle"))
.tooltip(value -> Text.of("A simple toggle button that contains the value '" + value + "'"))
.binding(
- config.getDefaults().booleanToggle,
- () -> config.getConfig().booleanToggle,
- (value) -> config.getConfig().booleanToggle = value
+ defaults.booleanToggle,
+ () -> config.booleanToggle,
+ (value) -> config.booleanToggle = value
)
.controller(BooleanController::new)
.flag(OptionFlag.GAME_RESTART)
@@ -81,19 +82,19 @@ public class ModMenuIntegration implements ModMenuApi {
.name(Text.of("Custom Boolean Toggle"))
.tooltip(Text.of("You can customize these controllers like this!"))
.binding(
- config.getDefaults().customBooleanToggle,
- () -> config.getConfig().customBooleanToggle,
- (value) -> config.getConfig().customBooleanToggle = value
+ defaults.customBooleanToggle,
+ () -> config.customBooleanToggle,
+ (value) -> config.customBooleanToggle = value
)
.controller(opt -> new BooleanController(opt, state -> state ? Text.of("Amazing") : Text.of("Not Amazing"), true))
.build())
.option(Option.createBuilder(boolean.class)
- .name(Text.of("Tick Box"))
+ .name(Text.of("Tick Box aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"))
.tooltip(Text.of("There are even alternate methods of displaying the same data type!"))
.binding(
- config.getDefaults().tickbox,
- () -> config.getConfig().tickbox,
- (value) -> config.getConfig().tickbox = value
+ defaults.tickbox,
+ () -> config.tickbox,
+ (value) -> config.tickbox = value
)
.controller(TickBoxController::new)
.build())
@@ -104,9 +105,9 @@ public class ModMenuIntegration implements ModMenuApi {
.name(Text.of("Int Slider that is cut off because the slider"))
.instant(true)
.binding(
- config.getDefaults().intSlider,
- () -> config.getConfig().intSlider,
- value -> config.getConfig().intSlider = value
+ defaults.intSlider,
+ () -> config.intSlider,
+ value -> config.intSlider = value
)
.controller(opt -> new IntegerSliderController(opt, 0, 3, 1))
@@ -114,27 +115,27 @@ public class ModMenuIntegration implements ModMenuApi {
.option(Option.createBuilder(double.class)
.name(Text.of("Double Slider"))
.binding(
- config.getDefaults().doubleSlider,
- () -> config.getConfig().doubleSlider,
- (value) -> config.getConfig().doubleSlider = value
+ defaults.doubleSlider,
+ () -> config.doubleSlider,
+ (value) -> config.doubleSlider = value
)
.controller(opt -> new DoubleSliderController(opt, 0, 3, 0.05))
.build())
.option(Option.createBuilder(float.class)
.name(Text.of("Float Slider"))
.binding(
- config.getDefaults().floatSlider,
- () -> config.getConfig().floatSlider,
- (value) -> config.getConfig().floatSlider = value
+ defaults.floatSlider,
+ () -> config.floatSlider,
+ (value) -> config.floatSlider = value
)
.controller(opt -> new FloatSliderController(opt, 0, 3, 0.1f))
.build())
.option(Option.createBuilder(long.class)
.name(Text.of("Long Slider"))
.binding(
- config.getDefaults().longSlider,
- () -> config.getConfig().longSlider,
- (value) -> config.getConfig().longSlider = value
+ defaults.longSlider,
+ () -> config.longSlider,
+ (value) -> config.longSlider = value
)
.controller(opt -> new LongSliderController(opt, 0, 1_000_000, 100))
.build())
@@ -144,30 +145,69 @@ public class ModMenuIntegration implements ModMenuApi {
.option(Option.createBuilder(String.class)
.name(Text.of("Text Option"))
.binding(
- config.getDefaults().textField,
- () -> config.getConfig().textField,
- value -> config.getConfig().textField = value
+ defaults.textField,
+ () -> config.textField,
+ value -> config.textField = value
)
.controller(StringController::new)
.build())
.option(Option.createBuilder(Color.class)
.name(Text.of("Color Option"))
.binding(
- config.getDefaults().colorOption,
- () -> config.getConfig().colorOption,
- value -> config.getConfig().colorOption = value
+ defaults.colorOption,
+ () -> config.colorOption,
+ value -> config.colorOption = value
)
.controller(ColorController::new)
.build())
.build())
.group(OptionGroup.createBuilder()
+ .name(Text.of("Number Fields"))
+ .option(Option.createBuilder(double.class)
+ .name(Text.of("Double Field"))
+ .binding(
+ defaults.doubleField,
+ () -> config.doubleField,
+ value -> config.doubleField = value
+ )
+ .controller(DoubleFieldController::new)
+ .build())
+ .option(Option.createBuilder(float.class)
+ .name(Text.of("Float Field"))
+ .binding(
+ defaults.floatField,
+ () -> config.floatField,
+ value -> config.floatField = value
+ )
+ .controller(FloatFieldController::new)
+ .build())
+ .option(Option.createBuilder(int.class)
+ .name(Text.of("Integer Field"))
+ .binding(
+ defaults.intField,
+ () -> config.intField,
+ value -> config.intField = value
+ )
+ .controller(IntegerFieldController::new)
+ .build())
+ .option(Option.createBuilder(long.class)
+ .name(Text.of("Long Field"))
+ .binding(
+ defaults.longField,
+ () -> config.longField,
+ value -> config.longField = value
+ )
+ .controller(LongFieldController::new)
+ .build())
+ .build())
+ .group(OptionGroup.createBuilder()
.name(Text.of("Enum Controllers"))
.option(Option.createBuilder(ConfigData.Alphabet.class)
.name(Text.of("Enum Cycler"))
.binding(
- config.getDefaults().enumOption,
- () -> config.getConfig().enumOption,
- (value) -> config.getConfig().enumOption = value
+ defaults.enumOption,
+ () -> config.enumOption,
+ (value) -> config.enumOption = value
)
.controller(EnumController::new)
.build())
@@ -215,9 +255,9 @@ public class ModMenuIntegration implements ModMenuApi {
.option(Option.createBuilder(boolean.class)
.name(Text.of("Root Test"))
.binding(
- config.getDefaults().groupTestRoot,
- () -> config.getConfig().groupTestRoot,
- value -> config.getConfig().groupTestRoot = value
+ defaults.groupTestRoot,
+ () -> config.groupTestRoot,
+ value -> config.groupTestRoot = value
)
.controller(TickBoxController::new)
.build())
@@ -226,18 +266,18 @@ public class ModMenuIntegration implements ModMenuApi {
.option(Option.createBuilder(boolean.class)
.name(Text.of("First Group Test 1"))
.binding(
- config.getDefaults().groupTestFirstGroup,
- () -> config.getConfig().groupTestFirstGroup,
- value -> config.getConfig().groupTestFirstGroup = value
+ defaults.groupTestFirstGroup,
+ () -> config.groupTestFirstGroup,
+ value -> config.groupTestFirstGroup = value
)
.controller(TickBoxController::new)
.build())
.option(Option.createBuilder(boolean.class)
.name(Text.of("First Group Test 2"))
.binding(
- config.getDefaults().groupTestFirstGroup2,
- () -> config.getConfig().groupTestFirstGroup2,
- value -> config.getConfig().groupTestFirstGroup2 = value
+ defaults.groupTestFirstGroup2,
+ () -> config.groupTestFirstGroup2,
+ value -> config.groupTestFirstGroup2 = value
)
.controller(TickBoxController::new)
.build())
@@ -247,9 +287,9 @@ public class ModMenuIntegration implements ModMenuApi {
.option(Option.createBuilder(boolean.class)
.name(Text.of("Second Group Test"))
.binding(
- config.getDefaults().groupTestSecondGroup,
- () -> config.getConfig().groupTestSecondGroup,
- value -> config.getConfig().groupTestSecondGroup = value
+ defaults.groupTestSecondGroup,
+ () -> config.groupTestSecondGroup,
+ value -> config.groupTestSecondGroup = value
)
.controller(TickBoxController::new)
.build())
@@ -260,9 +300,9 @@ public class ModMenuIntegration implements ModMenuApi {
.option(Option.createBuilder(int.class)
.name(Text.of("Int Slider that is cut off because the slider"))
.binding(
- config.getDefaults().scrollingSlider,
- () -> config.getConfig().scrollingSlider,
- (value) -> config.getConfig().scrollingSlider = value
+ defaults.scrollingSlider,
+ () -> config.scrollingSlider,
+ (value) -> config.scrollingSlider = value
)
.controller(opt -> new IntegerSliderController(opt, 0, 10, 1))
.build())
@@ -334,14 +374,14 @@ public class ModMenuIntegration implements ModMenuApi {
.build())
.save(() -> {
MinecraftClient.getInstance().options.write();
- config.save();
+ Entrypoint.getConfig().save();
})
)
.generateScreen(parent);
}
- private Screen getDisabledTest(Screen parent) {
- return Entrypoint.getConfig().buildConfig((config, builder) -> builder
+ private static Screen getDisabledTest(Screen parent) {
+ return YetAnotherConfigLib.create(Entrypoint.getConfig(), (defaults, config, builder) -> builder
.title(Text.empty())
.category(ConfigCategory.createBuilder()
.name(Text.of("Disabled Test"))
@@ -373,8 +413,8 @@ public class ModMenuIntegration implements ModMenuApi {
.generateScreen(parent);
}
- private Screen getWikiBasic(Screen parent) {
- return Entrypoint.getConfig().buildConfig((config, builder) -> builder
+ private static Screen getWikiBasic(Screen parent) {
+ return YetAnotherConfigLib.create(Entrypoint.getConfig(), (defaults, config, builder) -> builder
.title(Text.of("Mod Name"))
.category(ConfigCategory.createBuilder()
.name(Text.of("My Category"))
@@ -383,9 +423,9 @@ public class ModMenuIntegration implements ModMenuApi {
.name(Text.of("My Boolean Option"))
.tooltip(Text.of("This option displays the basic capabilities of YetAnotherConfigLib")) // optional
.binding(
- config.getDefaults().booleanToggle, // default
- () -> config.getConfig().booleanToggle, // getter
- newValue -> config.getConfig().booleanToggle = newValue // setter
+ defaults.booleanToggle, // default
+ () -> config.booleanToggle, // getter
+ newValue -> config.booleanToggle = newValue // setter
)
.controller(BooleanController::new)
.build())
@@ -394,8 +434,8 @@ public class ModMenuIntegration implements ModMenuApi {
.generateScreen(parent);
}
- private Screen getWikiGroups(Screen parent) {
- return Entrypoint.getConfig().buildConfig((config, builder) -> builder
+ private static Screen getWikiGroups(Screen parent) {
+ return YetAnotherConfigLib.create(Entrypoint.getConfig(), (defaults, config, builder) -> builder
.title(Text.of("Mod Name"))
.category(ConfigCategory.createBuilder()
.name(Text.of("My Category"))
@@ -406,9 +446,9 @@ public class ModMenuIntegration implements ModMenuApi {
.name(Text.of("My Boolean Option"))
.tooltip(Text.of("This option displays the basic capabilities of YetAnotherConfigLib")) // optional
.binding(
- config.getDefaults().booleanToggle, // default
- () -> config.getConfig().booleanToggle, // getter
- newValue -> config.getConfig().booleanToggle = newValue // setter
+ defaults.booleanToggle, // default
+ () -> config.booleanToggle, // getter
+ newValue -> config.booleanToggle = newValue // setter
)
.controller(BooleanController::new)
.build())
@@ -417,21 +457,4 @@ public class ModMenuIntegration implements ModMenuApi {
)
.generateScreen(parent);
}
-
- private ConfigScreenFactory<?> getWikiButton() {
- return (parent) -> Entrypoint.getConfig().buildConfig((config, builder) -> builder
- .title(Text.of("Mod Name"))
- .category(ConfigCategory.createBuilder()
- .name(Text.of("My Category"))
- .tooltip(Text.of("This displays when you hover over a category button")) // optional
- .option(ButtonOption.createBuilder()
- .name(Text.of("Pressable Button"))
- .tooltip(Text.of("This is so easy!")) // optional
- .action(screen -> {})
- .controller(ActionController::new)
- .build())
- .build())
- )
- .generateScreen(parent);
- }
}
diff --git a/src/testmod/java/dev/isxander/yacl/test/config/ConfigData.java b/src/testmod/java/dev/isxander/yacl/test/config/ConfigData.java
index 35e57dd..4eedd9f 100644
--- a/src/testmod/java/dev/isxander/yacl/test/config/ConfigData.java
+++ b/src/testmod/java/dev/isxander/yacl/test/config/ConfigData.java
@@ -14,6 +14,10 @@ public class ConfigData {
@ConfigEntry public long longSlider = 0;
@ConfigEntry public String textField = "Hello";
@ConfigEntry public Color colorOption = Color.red;
+ @ConfigEntry public double doubleField = 0.5;
+ @ConfigEntry public float floatField = 0.5f;
+ @ConfigEntry public int intField = 5;
+ @ConfigEntry public long longField = 5;
@ConfigEntry public Alphabet enumOption = Alphabet.A;
@ConfigEntry public boolean groupTestRoot = false;
diff --git a/src/testmod/java/dev/isxander/yacl/test/config/Entrypoint.java b/src/testmod/java/dev/isxander/yacl/test/config/Entrypoint.java
index 39baffa..c71f592 100644
--- a/src/testmod/java/dev/isxander/yacl/test/config/Entrypoint.java
+++ b/src/testmod/java/dev/isxander/yacl/test/config/Entrypoint.java
@@ -1,13 +1,12 @@
package dev.isxander.yacl.test.config;
-import com.google.gson.Gson;
import dev.isxander.yacl.config.ConfigInstance;
import dev.isxander.yacl.config.GsonConfigInstance;
import net.fabricmc.api.ClientModInitializer;
import net.fabricmc.loader.api.FabricLoader;
public class Entrypoint implements ClientModInitializer {
- private static GsonConfigInstance<ConfigData> config;
+ private static ConfigInstance<ConfigData> config;
@Override
public void onInitializeClient() {
diff --git a/src/testmod/java/dev/isxander/yacl/test/mixins/TitleScreenMixin.java b/src/testmod/java/dev/isxander/yacl/test/mixins/TitleScreenMixin.java
new file mode 100644
index 0000000..2635eaf
--- /dev/null
+++ b/src/testmod/java/dev/isxander/yacl/test/mixins/TitleScreenMixin.java
@@ -0,0 +1,26 @@
+package dev.isxander.yacl.test.mixins;
+
+import dev.isxander.yacl.test.GuiTest;
+import net.minecraft.client.gui.screen.Screen;
+import net.minecraft.client.gui.screen.TitleScreen;
+import net.minecraft.client.gui.widget.ButtonWidget;
+import net.minecraft.text.Text;
+import org.spongepowered.asm.mixin.Mixin;
+import org.spongepowered.asm.mixin.injection.At;
+import org.spongepowered.asm.mixin.injection.Inject;
+import org.spongepowered.asm.mixin.injection.callback.CallbackInfo;
+
+@Mixin(TitleScreen.class)
+public abstract class TitleScreenMixin extends Screen {
+ protected TitleScreenMixin(Text title) {
+ super(title);
+ }
+
+ @Inject(method = "init", at = @At("RETURN"))
+ private void injectTestButton(CallbackInfo ci) {
+ addDrawableChild(ButtonWidget.builder(Text.of("YACL"), button -> client.setScreen(GuiTest.getModConfigScreenFactory(client.currentScreen)))
+ .position(0, 0)
+ .width(50)
+ .build());
+ }
+}