Browse Source

Split manager to client and server environment

Lortseam 4 years ago
parent
commit
46add6b9a8

+ 45 - 0
src/main/java/me/lortseam/completeconfig/ClientConfigManager.java

@@ -0,0 +1,45 @@
+package me.lortseam.completeconfig;
+
+import me.lortseam.completeconfig.gui.GuiBuilder;
+import me.lortseam.completeconfig.gui.cloth.ClothGuiBuilder;
+import net.fabricmc.api.EnvType;
+import net.fabricmc.api.Environment;
+import net.fabricmc.loader.api.FabricLoader;
+import net.minecraft.client.gui.screen.Screen;
+
+import java.util.Objects;
+
+public final class ClientConfigManager extends ConfigManager {
+
+    private GuiBuilder guiBuilder;
+
+    ClientConfigManager(String modID) {
+        super(modID);
+    }
+
+    /**
+     * Sets a custom GUI builder.
+     * @param guiBuilder The GUI builder for the mod's config
+     */
+    public void setGuiBuilder(GuiBuilder guiBuilder) {
+        Objects.requireNonNull(guiBuilder);
+        this.guiBuilder = guiBuilder;
+    }
+
+    /**
+     * Generates the configuration GUI.
+     * @param parentScreen The parent screen
+     * @return The generated configuration screen
+     */
+    public Screen buildScreen(Screen parentScreen) {
+        if (guiBuilder == null) {
+            if (FabricLoader.getInstance().isModLoaded("cloth-config2")) {
+                guiBuilder = new ClothGuiBuilder();
+            } else {
+                throw new UnsupportedOperationException("No GUI builder provided");
+            }
+        }
+        return guiBuilder.buildScreen(parentScreen, config, this::save);
+    }
+
+}

+ 15 - 18
src/main/java/me/lortseam/completeconfig/CompleteConfig.java

@@ -2,9 +2,6 @@ package me.lortseam.completeconfig;
 
 import lombok.AccessLevel;
 import lombok.NoArgsConstructor;
-import me.lortseam.completeconfig.gui.GuiBuilder;
-import me.lortseam.completeconfig.gui.cloth.ClothGuiBuilder;
-import net.fabricmc.api.EnvType;
 import net.fabricmc.loader.api.FabricLoader;
 
 import java.util.HashMap;
@@ -17,33 +14,33 @@ public final class CompleteConfig {
     private static final HashMap<String, ConfigManager> MANAGERS = new HashMap<>();
 
     /**
-     * Registers a mod with a custom GUI builder.
+     * Registers a mod.
      *
      * @param modID      The ID of the mod
-     * @param guiBuilder The {@link GuiBuilder} for the mod's config GUI
      * @return The {@link ConfigManager} for the newly registered mod
      */
-    public static ConfigManager register(String modID, GuiBuilder guiBuilder) {
+    public static ConfigManager register(String modID) {
         Objects.requireNonNull(modID);
         if (MANAGERS.containsKey(modID)) {
             throw new IllegalArgumentException("A manager with this mod ID is already registered");
         }
-        ConfigManager manager = new ConfigManager(modID, guiBuilder);
+        ConfigManager manager;
+        switch (FabricLoader.getInstance().getEnvironmentType()) {
+            case CLIENT:
+                manager = new ClientConfigManager(modID);
+                break;
+
+            case SERVER:
+                manager = new ServerConfigManager(modID);
+                break;
+
+            default:
+                throw new IllegalStateException("Illegal environment");
+        }
         MANAGERS.put(modID, manager);
         return manager;
     }
 
-    /**
-     * Registers a mod. Uses the default Cloth Config GUI builder in a client environment if Cloth Config is installed.
-     *
-     * @param modID The ID of the mod
-     * @return The {@link ConfigManager} for the newly registered mod
-     */
-    public static ConfigManager register(String modID) {
-        return register(modID, FabricLoader.getInstance().getEnvironmentType() == EnvType.CLIENT
-                && FabricLoader.getInstance().isModLoaded("cloth-config2") ? new ClothGuiBuilder() : null);
-    }
-
     static Optional<ConfigManager> getManager(String modID) {
         return Optional.ofNullable(MANAGERS.get(modID));
     }

+ 3 - 30
src/main/java/me/lortseam/completeconfig/ConfigManager.java

@@ -2,13 +2,9 @@ package me.lortseam.completeconfig;
 
 import com.google.gson.*;
 import me.lortseam.completeconfig.api.ConfigCategory;
-import me.lortseam.completeconfig.gui.GuiBuilder;
 import me.lortseam.completeconfig.serialization.CollectionSerializer;
 import me.lortseam.completeconfig.serialization.EntrySerializer;
-import net.fabricmc.api.EnvType;
-import net.fabricmc.api.Environment;
 import net.fabricmc.loader.api.FabricLoader;
-import net.minecraft.client.gui.screen.Screen;
 import org.apache.logging.log4j.LogManager;
 import org.apache.logging.log4j.Logger;
 
@@ -24,7 +20,7 @@ import java.util.Optional;
 /**
  * Main interaction class for using the CompleteConfig API. References a single mod.
  */
-public final class ConfigManager {
+public abstract class ConfigManager {
 
     private static final Gson GSON = new GsonBuilder()
             .registerTypeAdapter(CollectionSerializer.TYPE, new CollectionSerializer())
@@ -35,8 +31,7 @@ public final class ConfigManager {
 
     private final String modID;
     private final Path jsonPath;
-    private final Config config;
-    private final GuiBuilder guiBuilder;
+    protected final Config config;
 
     /**
      * Gets the {@link ConfigManager} for the specified mod if that mod was registered before.
@@ -48,11 +43,10 @@ public final class ConfigManager {
         return CompleteConfig.getManager(modID);
     }
 
-    ConfigManager(String modID, GuiBuilder guiBuilder) {
+    ConfigManager(String modID) {
         this.modID = modID;
         jsonPath = Paths.get(FabricLoader.getInstance().getConfigDir().toString(), modID + ".json");
         config = new Config(modID, load());
-        this.guiBuilder = guiBuilder;
     }
 
     private JsonElement load() {
@@ -78,27 +72,6 @@ public final class ConfigManager {
         }
     }
 
-    /**
-     * Generates the configuration GUI.
-     * @param parentScreen The parent screen
-     * @return The generated configuration screen
-     */
-    @Environment(EnvType.CLIENT)
-    public Screen buildScreen(Screen parentScreen) {
-        if(guiBuilder == null) {
-            throw new UnsupportedOperationException("No GUI builder provided");
-        }
-        return guiBuilder.buildScreen(parentScreen, config, this::save);
-    }
-
-    /**
-     * @deprecated Use {@link #buildScreen(Screen)}.
-     */
-    @Deprecated
-    public Screen getConfigScreen(Screen parentScreen) {
-        return buildScreen(parentScreen);
-    }
-
     /**
      * Saves the config to a save file.
      */

+ 9 - 0
src/main/java/me/lortseam/completeconfig/ServerConfigManager.java

@@ -0,0 +1,9 @@
+package me.lortseam.completeconfig;
+
+public final class ServerConfigManager extends ConfigManager {
+
+    ServerConfigManager(String modID) {
+        super(modID);
+    }
+
+}