From 7907e16e96de21e8ba536906ae71adcf02bfa535 Mon Sep 17 00:00:00 2001 From: Christian Date: Sun, 19 Jan 2014 10:49:28 -0500 Subject: [PATCH] Add a type adapter for artifact version. Should fix #354 --- .../mods/fml/common/MetadataCollection.java | 24 ++++++++++++++++++- .../java/cpw/mods/fml/common/ModMetadata.java | 9 ++++--- 2 files changed, 29 insertions(+), 4 deletions(-) diff --git a/src/main/java/cpw/mods/fml/common/MetadataCollection.java b/src/main/java/cpw/mods/fml/common/MetadataCollection.java index 271ccbcf34..832f2317dd 100644 --- a/src/main/java/cpw/mods/fml/common/MetadataCollection.java +++ b/src/main/java/cpw/mods/fml/common/MetadataCollection.java @@ -12,6 +12,7 @@ package cpw.mods.fml.common; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.util.Map; @@ -25,6 +26,11 @@ import com.google.gson.JsonArray; import com.google.gson.JsonElement; import com.google.gson.JsonParseException; import com.google.gson.JsonParser; +import com.google.gson.TypeAdapter; +import com.google.gson.stream.JsonReader; +import com.google.gson.stream.JsonWriter; +import cpw.mods.fml.common.versioning.ArtifactVersion; +import cpw.mods.fml.common.versioning.VersionParser; public class MetadataCollection { @@ -44,7 +50,7 @@ public class MetadataCollection try { MetadataCollection collection; - Gson gson = new GsonBuilder().create(); + Gson gson = new GsonBuilder().registerTypeAdapter(ArtifactVersion.class, new ArtifactVersionAdapter()).create(); JsonParser parser = new JsonParser(); JsonElement rootElement = parser.parse(reader); if (rootElement.isJsonArray()) @@ -99,4 +105,20 @@ public class MetadataCollection return metadatas.get(modId); } + public static class ArtifactVersionAdapter extends TypeAdapter + { + + @Override + public void write(JsonWriter out, ArtifactVersion value) throws IOException + { + // no op - we never write these out + } + + @Override + public ArtifactVersion read(JsonReader in) throws IOException + { + return VersionParser.parseVersionReference(in.nextString()); + } + + } } diff --git a/src/main/java/cpw/mods/fml/common/ModMetadata.java b/src/main/java/cpw/mods/fml/common/ModMetadata.java index 59da5d6a57..16ebb01469 100644 --- a/src/main/java/cpw/mods/fml/common/ModMetadata.java +++ b/src/main/java/cpw/mods/fml/common/ModMetadata.java @@ -43,14 +43,17 @@ public class ModMetadata public String parent = ""; public String[] screenshots; - public ModContainer parentMod; - public List childMods = Lists.newArrayList(); + // this field is not for use in the json + public transient ModContainer parentMod; + // this field is not for use in the json + public transient List childMods = Lists.newArrayList(); public boolean useDependencyInformation; public Set requiredMods; public List dependencies; public List dependants; - public boolean autogenerated; + // this field is not for use in the json + public transient boolean autogenerated; public ModMetadata() {