Эх сурвалжийг харах

Improve the config builder

Lortseam 4 жил өмнө
parent
commit
3346e2c8af

+ 21 - 5
src/main/java/me/lortseam/completeconfig/ConfigBuilder.java

@@ -2,10 +2,12 @@ package me.lortseam.completeconfig;
 
 import me.lortseam.completeconfig.api.ConfigCategory;
 import me.lortseam.completeconfig.api.ConfigOwner;
+import me.lortseam.completeconfig.gui.GuiBuilder;
 
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
+import java.util.Objects;
 
 public final class ConfigBuilder {
 
@@ -13,12 +15,15 @@ public final class ConfigBuilder {
         return new ConfigBuilder(modID, branch, owner);
     }
 
-    private final ConfigHandler handler;
+    private final String modID;
+    private final String[] branch;
     private final Class<? extends ConfigOwner> owner;
     private final List<ConfigCategory> topLevelCategories = new ArrayList<>();
+    private GuiBuilder guiBuilder;
 
     private ConfigBuilder(String modID, String[] branch, Class<? extends ConfigOwner> owner) {
-        handler = new ConfigHandler(modID, branch);
+        this.modID = modID;
+        this.branch = branch;
         this.owner = owner;
     }
 
@@ -34,13 +39,24 @@ public final class ConfigBuilder {
     }
 
     /**
-     * Completes the config creation and registers the config.
+     * Sets a custom client GUI builder for the config.
+     *
+     * @param guiBuilder The GUI builder
+     * @return this config builder
+     */
+    public ConfigBuilder setGuiBuilder(GuiBuilder guiBuilder) {
+        Objects.requireNonNull(guiBuilder);
+        this.guiBuilder = guiBuilder;
+        return this;
+    }
+
+    /**
+     * Completes the config creation.
      *
      * @return the handler associated with the created config
      */
     public ConfigHandler finish() {
-        handler.register(owner, topLevelCategories);
-        return handler;
+        return new ConfigHandler(modID, branch, owner, topLevelCategories, guiBuilder);
     }
 
 }

+ 2 - 19
src/main/java/me/lortseam/completeconfig/ConfigHandler.java

@@ -42,9 +42,8 @@ public final class ConfigHandler {
         }));
     }
 
-    private final String modID;
     private final Path jsonPath;
-    protected Config config;
+    private final Config config;
     @Environment(EnvType.CLIENT)
     private GuiBuilder guiBuilder;
 
@@ -58,14 +57,10 @@ public final class ConfigHandler {
         return Optional.ofNullable(HANDLERS.get(owner));
     }
 
-    ConfigHandler(String modID, String[] branch) {
-        this.modID = modID;
+    ConfigHandler(String modID, String[] branch, Class<? extends ConfigOwner> owner, List<ConfigCategory> topLevelCategories, GuiBuilder guiBuilder) {
         branch = ArrayUtils.add(branch, 0, modID);
         branch[branch.length - 1] = branch[branch.length - 1] + ".json";
         jsonPath = Paths.get(FabricLoader.getInstance().getConfigDir().toString(), branch);
-    }
-
-    void register(Class<? extends ConfigOwner> owner, List<ConfigCategory> topLevelCategories) {
         if (HANDLERS.containsKey(owner)) {
             throw new IllegalArgumentException("The specified owner already created a config!");
         }
@@ -86,18 +81,6 @@ public final class ConfigHandler {
         return JsonNull.INSTANCE;
     }
 
-    /**
-     * Sets a custom client GUI builder.
-     *
-     * @param guiBuilder The GUI builder for the mod's config
-     */
-    @Environment(EnvType.CLIENT)
-    //TODO: Move to ConfigBuilder
-    public void setGuiBuilder(GuiBuilder guiBuilder) {
-        Objects.requireNonNull(guiBuilder);
-        this.guiBuilder = guiBuilder;
-    }
-
     /**
      * Generates the configuration GUI.
      *