diff options
author | Luke Hohlin <luke@tctcl.de> | 2024-08-30 21:06:56 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-08-30 21:06:56 +0200 |
commit | 23fd19da49fa910a93b3120b4d1362b3dd585004 (patch) | |
tree | f5e9126bed4791cc38ae326db9d44905c992372a /src/main/java/gregtech/common/misc | |
parent | 9fee35c065e197199f57ef1df31ac303e94d1d50 (diff) | |
download | GT5-Unofficial-23fd19da49fa910a93b3120b4d1362b3dd585004.tar.gz GT5-Unofficial-23fd19da49fa910a93b3120b4d1362b3dd585004.tar.bz2 GT5-Unofficial-23fd19da49fa910a93b3120b4d1362b3dd585004.zip |
Fix global_energy networks resetting on server reboot (#3000)
* Fix global_energy networks resetting on server reboot
* Update SpaceProjectWorldSavedData.java
Replace _NAME in string constants with _NBT
* Replace JsonObject with JsonArray in SpaceTeamAdapter
---------
Co-authored-by: boubou19 <miisterunknown@gmail.com>
Diffstat (limited to 'src/main/java/gregtech/common/misc')
-rw-r--r-- | src/main/java/gregtech/common/misc/spaceprojects/SpaceProjectWorldSavedData.java | 73 |
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>> { |