From 60b233ccea4eabe7d94c5a000be7e5d59e0ad9ae Mon Sep 17 00:00:00 2001 From: KnightMiner Date: Sun, 14 Apr 2024 21:30:21 -0400 Subject: [PATCH] Add a "field" for error factories Allows throwing the proper exception type in the constructor for throwing constructors since fields know whether they are in JSON or buffers (constructors don't) --- .../mantle/data/loadable/ErrorFactory.java | 4 +++ .../data/loadable/field/ConstantField.java | 27 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 src/main/java/slimeknights/mantle/data/loadable/field/ConstantField.java diff --git a/src/main/java/slimeknights/mantle/data/loadable/ErrorFactory.java b/src/main/java/slimeknights/mantle/data/loadable/ErrorFactory.java index 93bdb3d4..b93d2968 100644 --- a/src/main/java/slimeknights/mantle/data/loadable/ErrorFactory.java +++ b/src/main/java/slimeknights/mantle/data/loadable/ErrorFactory.java @@ -3,6 +3,8 @@ import com.google.gson.JsonSyntaxException; import io.netty.handler.codec.DecoderException; import io.netty.handler.codec.EncoderException; +import slimeknights.mantle.data.loadable.field.ConstantField; +import slimeknights.mantle.data.loadable.field.LoadableField; import java.util.function.Consumer; @@ -26,6 +28,8 @@ public RuntimeException create(RuntimeException base) { return base; } }; + /** Field for constructors wishing to possibly throw */ + LoadableField FIELD = new ConstantField<>(JSON_SYNTAX_ERROR, DECODER_EXCEPTION); /** Throws an exception from the given error */ @Override diff --git a/src/main/java/slimeknights/mantle/data/loadable/field/ConstantField.java b/src/main/java/slimeknights/mantle/data/loadable/field/ConstantField.java new file mode 100644 index 00000000..5928ecf6 --- /dev/null +++ b/src/main/java/slimeknights/mantle/data/loadable/field/ConstantField.java @@ -0,0 +1,27 @@ +package slimeknights.mantle.data.loadable.field; + +import com.google.gson.JsonObject; +import net.minecraft.network.FriendlyByteBuf; + +/** Record field that always returns the same value, used mainly to pass a different object in JSON vs buffer parsing */ +public record ConstantField(T fromJson, T fromBuffer) implements LoadableField { + public ConstantField(T value) { + this(value, value); + } + + @Override + public T get(JsonObject json) { + return fromJson; + } + + @Override + public T decode(FriendlyByteBuf buffer) { + return fromBuffer; + } + + @Override + public void serialize(Object parent, JsonObject json) {} + + @Override + public void encode(FriendlyByteBuf buffer, Object parent) {} +}