Although Mixson only supports .json, .png, and .nbt files by default, MixsonCodecs can be created so that the user
can handle custom resource types.
Mixson's default codecs can be found in the MixsonCodecs class. When registering an event or reference using the JSON
specific registration methods, Mixson internally associates the MixsonCodecs.JSON_ELEMENT with the event or reference.
The MixsonCodec interface is defined as follows:
public interface MixsonCodec<T> {String extensionAndDot();T deserialize(Resource resource) throws IOException;Resource serialize(Resource associatedResource, T elem) throws IOException;ByteArrayOutputStream export(T resource) throws IOException;}
The deserialize method will take in the resource Minecraft finds and will convert it into whatever value the codec is
designed for.
The serialize method converts the given custom resource and turns it back into a Minecraft resource. An
associatedResource is also provided as context for serialization.
The serializeOutputFile converts the custom resource into a string to be written to a file for debugging in the
EXPORT debug mode.
the extensionAndDot method returns the extension of the file the codec is targeting with a dot (.).
The codec can be passed to a registration method to apply it to the event or reference.
Example
This example codec will create a JsonObject for event handling by wrapping the MixsonCodecs.JSON_ELEMENT codec:
MixsonCodec<JsonObject> JSON_OBJECT = new MixsonCodec<>() {@Overridepublic String extensionAndDot() {return ".json";}@Overridepublic JsonObject deserialize(Resource r) throws IOException {return MixsonCodecs.JSON_ELEMENT.deserialize(r).getAsJsonObject();}@Overridepublic Resource serialize(Resource r, JsonObject x) {return MixsonCodecs.JSON_ELEMENT.serialize(r, x);}@Overridepublic ByteArrayOutputStream export(JsonObject resource) throws IOException {return MixsonCodecs.JSON_ELEMENT.export(resource);}};