From 092e0a39e81a0efed13189d7f10bf2aba476a850 Mon Sep 17 00:00:00 2001 From: Frank Date: Fri, 20 Aug 2021 14:37:40 +0200 Subject: [PATCH] Auto generate a simple Config Screen --- .../java/ru/bclib/config/NamedPathConfig.java | 4 +-- .../java/ru/bclib/gui/modmenu/MainScreen.java | 31 ++++++++++++++++++- .../bclib/integration/ModMenuIntegration.java | 4 +-- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/src/main/java/ru/bclib/config/NamedPathConfig.java b/src/main/java/ru/bclib/config/NamedPathConfig.java index 71733d0b..b3d47b46 100644 --- a/src/main/java/ru/bclib/config/NamedPathConfig.java +++ b/src/main/java/ru/bclib/config/NamedPathConfig.java @@ -28,13 +28,11 @@ public class NamedPathConfig extends PathConfig{ public Bool(boolean def, String entry, ResourceLocation path) { super(entry, path); this.defaultValue=def;} } - public static class Str extends ConfigToken{ public final String defaultValue; public Str(String def, String entry, String... path) { super(entry, path); this.defaultValue=def;} public Str(String def, String entry, ResourceLocation path) { super(entry, path); this.defaultValue=def;} } - ConfigToken(String entry, String... path) { super(entry, path); } ConfigToken(String entry, ResourceLocation path) { super(entry, path); } } @@ -54,7 +52,7 @@ public class NamedPathConfig extends PathConfig{ onInit(); } - List getAllOptions(){ + public List getAllOptions(){ List res = new LinkedList<>(); for (Field fl : this.getClass().getDeclaredFields()){ int modifiers = fl.getModifiers(); diff --git a/src/main/java/ru/bclib/gui/modmenu/MainScreen.java b/src/main/java/ru/bclib/gui/modmenu/MainScreen.java index 086da6b2..b0770dff 100644 --- a/src/main/java/ru/bclib/gui/modmenu/MainScreen.java +++ b/src/main/java/ru/bclib/gui/modmenu/MainScreen.java @@ -4,6 +4,11 @@ import net.minecraft.client.gui.screens.Screen; import net.minecraft.network.chat.CommonComponents; import net.minecraft.network.chat.TranslatableComponent; import org.jetbrains.annotations.Nullable; +import ru.bclib.config.Configs; +import ru.bclib.config.NamedPathConfig; +import ru.bclib.config.NamedPathConfig.ConfigToken; +import ru.bclib.config.NamedPathConfig.ConfigToken.Bool; +import ru.bclib.gui.gridlayout.GridColumn; import ru.bclib.gui.gridlayout.GridRow; import ru.bclib.gui.gridlayout.GridScreen; @@ -13,12 +18,36 @@ public class MainScreen extends GridScreen{ super(parent, new TranslatableComponent("title.bclib.modmenu.main")); } + protected TranslatableComponent getComponent(NamedPathConfig config, ConfigToken.Bool token, String type){ + String path = ""; + for (String p : token.getPath()){ + path += "." + p; + + } + return new TranslatableComponent(type + ".config." + path ); + } + + protected void addRow(GridColumn grid, NamedPathConfig config, ConfigToken token){ + if (token instanceof Bool){ + addRow(grid, config, (ConfigToken.Bool)token); + } + + grid.addSpacerRow(2); + } + + protected void addRow(GridColumn grid, NamedPathConfig config, ConfigToken.Bool token){ + GridRow row = grid.addRow(); + row.addCheckbox(getComponent(config, token, "title"), config.get(token), 20); + + } @Override protected void initLayout() { final int BUTTON_HEIGHT = 20; grid.addSpacerRow(20); - GridRow row = grid.addRow(); + Configs.CLIENT_CONFIG.getAllOptions().forEach(o -> addRow(grid, Configs.CLIENT_CONFIG, o)); + + GridRow row = grid.addRow(); row.addFiller(); row.addButton(CommonComponents.GUI_BACK, BUTTON_HEIGHT, font, (button)->{ onClose(); diff --git a/src/main/java/ru/bclib/integration/ModMenuIntegration.java b/src/main/java/ru/bclib/integration/ModMenuIntegration.java index 0897b529..ac26946e 100644 --- a/src/main/java/ru/bclib/integration/ModMenuIntegration.java +++ b/src/main/java/ru/bclib/integration/ModMenuIntegration.java @@ -53,13 +53,13 @@ class ModMenuScreenFactoryImpl { * the {@link #createEntrypoint(ModMenuIntegration)}-Method. *

* Example: - *

{@code public class} ModMenu extends ModMenuIntegration {
+ * 
{@code public class ModMenu extends ModMenuIntegration {
  *     public static final ModMenuApiMarker entrypointObject = createEntrypoint(new EntryPoint());
  *
  * 	    public EntryPoint() {
  * 		    super(GridScreen::new);
  *      }
- * }
+ * }}
* You'd also need to add the ModMenu-Entrypoint to your fabric.mod.json: *
"entrypoints": {
  * 	    ...