aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java73
1 files changed, 65 insertions, 8 deletions
diff --git a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java
index be0388daea..e7e4353c7a 100644
--- a/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java
+++ b/src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java
@@ -76,6 +76,7 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
.registerTypeHierarchyAdapter(ISP_Upgrade.class, new SP_UpgradeAdapter())
.create();
private static final Gson GSON_TEAMS = new GsonBuilder().serializeNulls()
+ .registerTypeAdapter(spaceTeams.getClass(), new SpaceTeamAdapter())
.create();
private static final String DATA_NAME = "GT_SpaceProjectData";
@@ -84,6 +85,10 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
private static final String SPACE_TEAMS_JSON = "spaceTeams.json";
+ private static final String SPACE_TEAM_PROJECTS_NBT = "spaceTeamProjects";
+
+ private static final String SPACE_TEAMS_NBT = "spaceTeams";
+
private static File spaceTeamsFile;
private static File teamProjectsFile;
@@ -97,7 +102,7 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
@Override
public void readFromNBT(NBTTagCompound aNBT) {
- if (!aNBT.hasKey("spaceTeamProjects")) {
+ if (!aNBT.hasKey(SPACE_TEAM_PROJECTS_NBT)) {
// We don't have a key? Try to read from file
try (JsonReader reader = new JsonReader(new FileReader(teamProjectsFile))) {
spaceTeamProjects = GSON_SPACE_PROJECT.fromJson(reader, spaceTeamProjects.getClass());
@@ -105,15 +110,17 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
spaceTeamProjects = null;
}
}
+
if (spaceTeamProjects == null) {
spaceTeamProjects = new HashMap<>();
}
- if (aNBT.hasKey("spaceTeamProjects")) {
+
+ if (aNBT.hasKey(SPACE_TEAM_PROJECTS_NBT)) {
spaceTeamProjects = GSON_SPACE_PROJECT
- .fromJson(aNBT.getString("spaceTeamProjects"), spaceTeamProjects.getClass());
+ .fromJson(aNBT.getString(SPACE_TEAM_PROJECTS_NBT), spaceTeamProjects.getClass());
}
- if (!aNBT.hasKey("spaceTeams")) {
+ if (!aNBT.hasKey(SPACE_TEAMS_NBT)) {
// We don't have a key? Try to read from file
try (JsonReader reader = new JsonReader(new FileReader(spaceTeamsFile))) {
HashMap<UUID, UUID> jsonMap = GSON_TEAMS.fromJson(reader, spaceTeams.getClass());
@@ -124,11 +131,13 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
spaceTeams = null;
}
}
+
if (spaceTeams == null) {
spaceTeams = new HashMap<>();
}
- if (aNBT.hasKey("spaceTeams")) {
- spaceTeams = GSON_TEAMS.fromJson(aNBT.getString("spaceTeam"), spaceTeams.getClass());
+
+ if (aNBT.hasKey(SPACE_TEAMS_NBT)) {
+ spaceTeams = GSON_TEAMS.fromJson(aNBT.getString(SPACE_TEAMS_NBT), spaceTeams.getClass());
}
if (spaceTeamProjects == null) {
@@ -143,11 +152,11 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
@Override
public void writeToNBT(NBTTagCompound aNBT) {
if (spaceTeamProjects != null) {
- aNBT.setString("spaceTeamProjects", GSON_SPACE_PROJECT.toJson(spaceTeamProjects));
+ aNBT.setString(SPACE_TEAM_PROJECTS_NBT, GSON_SPACE_PROJECT.toJson(spaceTeamProjects));
}
if (spaceTeams != null) {
- aNBT.setString("spaceTeams", GSON_TEAMS.toJson(spaceTeams));
+ aNBT.setString(SPACE_TEAMS_NBT, GSON_TEAMS.toJson(spaceTeams));
}
}
@@ -186,6 +195,54 @@ public class SpaceProjectWorldSavedData extends WorldSavedData {
}
}
+ /**
+ * gson doesn't want to cast Strings to UUIDs by default, thus we need a deserializer.
+ *
+ * @author Tctcl
+ */
+ private static class SpaceTeamAdapter
+ implements JsonSerializer<HashMap<UUID, UUID>>, JsonDeserializer<HashMap<UUID, UUID>> {
+
+ @Override
+ public JsonElement serialize(HashMap<UUID, UUID> src, Type typeOfSrc, JsonSerializationContext context) {
+ JsonArray map = new JsonArray();
+ for (Entry<UUID, UUID> entry : src.entrySet()) {
+ JsonObject teamMap = new JsonObject();
+
+ teamMap.addProperty(
+ "MEMBER_UUID",
+ entry.getKey()
+ .toString());
+ teamMap.addProperty(
+ "LEADER_UUID",
+ entry.getValue()
+ .toString());
+
+ map.add(teamMap);
+ }
+
+ return map;
+ }
+
+ @Override
+ public HashMap<UUID, UUID> deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
+ throws JsonParseException {
+ HashMap<UUID, UUID> map = new HashMap<>();
+ JsonArray jsonArray = json.getAsJsonArray();
+ for (JsonElement element : jsonArray) {
+ JsonObject jsonObject = element.getAsJsonObject();
+ UUID memberUuid = UUID.fromString(
+ jsonObject.get("MEMBER_UUID")
+ .getAsString());
+ UUID leaderUuid = UUID.fromString(
+ jsonObject.get("LEADER_UUID")
+ .getAsString());
+ map.put(memberUuid, leaderUuid);
+ }
+ return map;
+ }
+ }
+
private static class PairAdapter
implements JsonSerializer<Pair<ISpaceBody, String>>, JsonDeserializer<Pair<ISpaceBody, String>> {