Prechádzať zdrojové kódy

Move TextColor serializer

Lortseam 4 rokov pred
rodič
commit
a42f2b43ae

+ 0 - 14
src/main/java/me/lortseam/completeconfig/ModController.java

@@ -5,9 +5,6 @@ import me.lortseam.completeconfig.util.TypeUtils;
 import net.fabricmc.loader.api.FabricLoader;
 import net.fabricmc.loader.api.ModContainer;
 import net.fabricmc.loader.api.metadata.ModMetadata;
-import net.minecraft.text.TextColor;
-import org.spongepowered.configurate.serialize.CoercionFailedException;
-import org.spongepowered.configurate.serialize.TypeSerializer;
 import org.spongepowered.configurate.serialize.TypeSerializerCollection;
 
 import java.util.HashMap;
@@ -17,16 +14,6 @@ import java.util.Objects;
 public final class ModController {
 
     private static final Map<String, ModController> controllers = new HashMap<>();
-    private static final TypeSerializerCollection GLOBAL_TYPE_SERIALIZERS = TypeSerializerCollection.builder()
-            .registerExact(TypeSerializer.of(TextColor.class, (item, typeSupported) -> {
-                return item.getRgb();
-            }, value -> {
-                if (value instanceof Integer) {
-                    return TextColor.fromRgb((int) value);
-                }
-                throw new CoercionFailedException(value, "TextColor");
-            }))
-            .build();
 
     /**
      * Gets the mod controller of a loaded mod.
@@ -53,7 +40,6 @@ public final class ModController {
 
     private ModController(ModMetadata metadata) {
         this.metadata = metadata;
-        registerTypeSerializers(GLOBAL_TYPE_SERIALIZERS);
     }
 
     public String getID() {

+ 8 - 1
src/main/java/me/lortseam/completeconfig/io/ConfigSource.java

@@ -10,6 +10,7 @@ import org.apache.logging.log4j.Logger;
 import org.spongepowered.configurate.CommentedConfigurationNode;
 import org.spongepowered.configurate.ConfigurateException;
 import org.spongepowered.configurate.hocon.HoconConfigurationLoader;
+import org.spongepowered.configurate.serialize.TypeSerializerCollection;
 
 import java.nio.file.Path;
 import java.nio.file.Paths;
@@ -21,6 +22,9 @@ import java.util.Set;
 public final class ConfigSource {
 
     private static final Logger LOGGER = LogManager.getLogger();
+    private static final TypeSerializerCollection GLOBAL_TYPE_SERIALIZERS = TypeSerializerCollection.builder()
+            .registerExact(TextColorSerializer.INSTANCE)
+            .build();
     private static final Set<ConfigSource> sources = new HashSet<>();
 
     @Getter
@@ -39,7 +43,10 @@ public final class ConfigSource {
         Path filePath = Paths.get(FabricLoader.getInstance().getConfigDir().toString(), subPath);
         loader = HoconConfigurationLoader.builder()
                 .path(filePath)
-                .defaultOptions(options -> options.serializers(builder -> builder.registerAll(mod.getTypeSerializers())))
+                .defaultOptions(options -> options.serializers(builder -> {
+                    builder.registerAll(GLOBAL_TYPE_SERIALIZERS);
+                    builder.registerAll(mod.getTypeSerializers());
+                }))
                 .build();
     }
 

+ 32 - 0
src/main/java/me/lortseam/completeconfig/io/TextColorSerializer.java

@@ -0,0 +1,32 @@
+package me.lortseam.completeconfig.io;
+
+import net.minecraft.text.TextColor;
+import org.spongepowered.configurate.serialize.CoercionFailedException;
+import org.spongepowered.configurate.serialize.ScalarSerializer;
+import org.spongepowered.configurate.serialize.SerializationException;
+
+import java.lang.reflect.Type;
+import java.util.function.Predicate;
+
+final class TextColorSerializer extends ScalarSerializer<TextColor> {
+
+    static final TextColorSerializer INSTANCE = new TextColorSerializer();
+
+    private TextColorSerializer() {
+        super(TextColor.class);
+    }
+
+    @Override
+    public TextColor deserialize(Type type, Object obj) throws SerializationException {
+        if (obj instanceof Integer) {
+            return TextColor.fromRgb((Integer) obj);
+        }
+        throw new CoercionFailedException(type, obj, "TextColor");
+    }
+
+    @Override
+    protected Object serialize(TextColor item, Predicate<Class<?>> typeSupported) {
+        return item.getRgb();
+    }
+
+}