ソースを参照

Improve key exception handling

Lortseam 3 年 前
コミット
20c9f3df0e

+ 11 - 4
lib/src/main/java/me/lortseam/completeconfig/extension/clothconfig/ClothConfigClientExtension.java

@@ -12,8 +12,6 @@ import org.spongepowered.configurate.serialize.TypeSerializerCollection;
 import java.lang.reflect.Type;
 import java.util.Map;
 
-import static java.util.Objects.requireNonNull;
-
 public final class ClothConfigClientExtension implements ClientExtension {
 
     @Override
@@ -27,9 +25,18 @@ public final class ClothConfigClientExtension implements ClientExtension {
 
         @Override
         public ModifierKeyCode deserialize(Type type, ConfigurationNode node) throws SerializationException {
-            if(!node.isMap()) throw new SerializationException(node, type, "Node must be of type map");
+            if(!node.isMap()) throw new SerializationException("Node must be of type map");
             var map = node.childrenMap();
-            var key = InputUtil.fromTranslationKey(requireNonNull(map.get("keyCode"), "keyCode").getString());
+            String keyCode = map.get("keyCode").getString();
+            if(keyCode == null) {
+                throw new SerializationException("keyCode entry is missing or has invalid type");
+            }
+            InputUtil.Key key;
+            try {
+                key = InputUtil.fromTranslationKey(keyCode);
+            } catch(Exception e) {
+                throw new SerializationException(e);
+            }
             if (key == InputUtil.UNKNOWN_KEY) {
                 return ModifierKeyCode.unknown();
             }

+ 6 - 1
lib/src/main/java/me/lortseam/completeconfig/extension/minecraft/MinecraftClientExtension.java

@@ -8,6 +8,7 @@ import me.lortseam.completeconfig.extension.ClientExtension;
 import net.minecraft.client.util.InputUtil;
 import net.minecraft.text.TextColor;
 import org.spongepowered.configurate.serialize.CoercionFailedException;
+import org.spongepowered.configurate.serialize.SerializationException;
 import org.spongepowered.configurate.serialize.TypeSerializer;
 import org.spongepowered.configurate.serialize.TypeSerializerCollection;
 
@@ -25,7 +26,11 @@ public final class MinecraftClientExtension implements ClientExtension {
                 }))
                 .registerExact(TypeSerializer.of(InputUtil.Key.class, (v, pass) -> v.getTranslationKey(), v -> {
                     if(v instanceof String) {
-                        return InputUtil.fromTranslationKey((String) v);
+                        try {
+                            return InputUtil.fromTranslationKey((String) v);
+                        } catch(Exception e) {
+                            throw new SerializationException(e);
+                        }
                     }
                     throw new CoercionFailedException(v, InputUtil.Key.class.getSimpleName());
                 }))