diff --git a/docs/src/progress/renderertodo.md b/docs/src/progress/renderertodo.md index 24f5ee29..77539f08 100644 --- a/docs/src/progress/renderertodo.md +++ b/docs/src/progress/renderertodo.md @@ -1870,6 +1870,7 @@ Structure data saving Validate race data Shuffle entity data package Rename structure -> virtualstructure +Update hometown storage on characters diff --git a/src/main/java/electrosphere/server/macro/MacroData.java b/src/main/java/electrosphere/server/macro/MacroData.java index bb8e784b..cc2fe03d 100644 --- a/src/main/java/electrosphere/server/macro/MacroData.java +++ b/src/main/java/electrosphere/server/macro/MacroData.java @@ -196,6 +196,20 @@ public class MacroData { public void addTown(Town town){ towns.add(town); } + + /** + * Gets a town by its id + * @param id The id of the town + * @return The town + */ + public Town getTown(int id){ + for(Town town : towns){ + if(town.getId() == id){ + return town; + } + } + return null; + } /** * Gets the list of structures diff --git a/src/main/java/electrosphere/server/macro/character/CharacterUtils.java b/src/main/java/electrosphere/server/macro/character/CharacterUtils.java index 2c5b393a..e03e56c9 100644 --- a/src/main/java/electrosphere/server/macro/character/CharacterUtils.java +++ b/src/main/java/electrosphere/server/macro/character/CharacterUtils.java @@ -72,16 +72,21 @@ public class CharacterUtils { * @param town The town */ public static void addHometown(Character character, Town town){ - character.putData(CharacterDataStrings.HOMETOWN, town); + character.putData(CharacterDataStrings.HOMETOWN, new CharacterAssociatedId(CharacterDataStrings.HOMETOWN,town.getId())); } /** * Gets the hometown of a character + * @param macroData The macro data * @param character The character * @return The hometown if it exists, null otherwise */ - public static Town getHometown(Character character){ - return (Town)character.getData(CharacterDataStrings.HOMETOWN); + public static Town getHometown(MacroData macroData, Character character){ + if(!character.containsKey(CharacterDataStrings.HOMETOWN)){ + return null; + } + int townId = ((CharacterAssociatedId)character.getData(CharacterDataStrings.HOMETOWN)).getId(); + return macroData.getTown(townId); } /** diff --git a/src/main/java/electrosphere/server/macro/character/data/CharacterDataSerializer.java b/src/main/java/electrosphere/server/macro/character/data/CharacterDataSerializer.java index c6e98af7..959c2844 100644 --- a/src/main/java/electrosphere/server/macro/character/data/CharacterDataSerializer.java +++ b/src/main/java/electrosphere/server/macro/character/data/CharacterDataSerializer.java @@ -36,6 +36,7 @@ public class CharacterDataSerializer implements JsonDeserializer, //a structure case CharacterDataStrings.STRUCTURE_ID: + case CharacterDataStrings.HOMETOWN: case CharacterDataStrings.SHELTER: { return context.deserialize(json, CharacterAssociatedId.class); } @@ -72,15 +73,11 @@ public class CharacterDataSerializer implements JsonDeserializer, //a structure case CharacterDataStrings.STRUCTURE_ID: + case CharacterDataStrings.HOMETOWN: case CharacterDataStrings.SHELTER: { return context.serialize((CharacterAssociatedId)src); } - //a town - case CharacterDataStrings.TOWN: { - return context.serialize((Town)src); - } - //goal case CharacterDataStrings.ENTITY_GOAL: { return context.serialize((CharacterGoal)src); diff --git a/src/main/java/electrosphere/server/macro/town/Town.java b/src/main/java/electrosphere/server/macro/town/Town.java index a3f472b7..a9f98a4e 100644 --- a/src/main/java/electrosphere/server/macro/town/Town.java +++ b/src/main/java/electrosphere/server/macro/town/Town.java @@ -1,8 +1,6 @@ package electrosphere.server.macro.town; import electrosphere.server.macro.character.Character; -import electrosphere.server.macro.character.data.CharacterData; -import electrosphere.server.macro.character.data.CharacterDataStrings; import electrosphere.server.macro.spatial.MacroAreaObject; import electrosphere.server.macro.structure.VirtualStructure; @@ -15,7 +13,7 @@ import org.joml.Vector3d; /** * Server representation of a town */ -public class Town extends CharacterData implements MacroAreaObject { +public class Town implements MacroAreaObject { /** * The id of the town @@ -51,7 +49,6 @@ public class Town extends CharacterData implements MacroAreaObject { * Constructor */ private Town(){ - super(CharacterDataStrings.TOWN); this.id = idIncrementer; idIncrementer++; } @@ -101,11 +98,6 @@ public class Town extends CharacterData implements MacroAreaObject { return residents; } - @Override - public String getDataType() { - return CharacterDataStrings.HOMETOWN; - } - @Override public Vector3d getPos() { return this.position;