Indeed, you are correct regarding save expectations, I totally forgot about writeReplace() method.
Orphaning it is the intention, as I want to be able to disable the mod at any time. What I will need it to transfer back and forth PlayerTradeDataForSubmarket between vanilla market and my custom market, and for that additional methods will be needed.
In PlayerActivityTracker there is:
public PlayerTradeDataForSubmarket getPlayerTradeData(SubmarketAPI submarket) {
PlayerTradeDataForSubmarket data = submarketTradeData.get(submarket);
if (data == null) {
data = new PlayerTradeDataForSubmarket(submarket);
submarketTradeData.put(submarket, data);
}
return data;
}
So I could use PlayerTradeDataForSubmarket returned and modify in-place. Which is a pain, and also incomplete (setter wise).
Just adding PlayerTradeDataForSubmarket.setSubmarket() will still cause the orphan to be discarded since it is stored as a map Map<SubmarketAPI, PlayerTradeDataForSubmarket> in PlayerActivityTracker and the check compares map submarket with player trade data's submarket.
So the only thing that would help me would be addition of said `setSubmarket` as well as addition to PlayerActivityTracker:
public void transferPlayerTradeData(SubmarketAPI oldSubmarket, SubmarketAPI newSubmarket) {
PlayerTradeDataForSubmarket data = submarketTradeData.get(oldSubmarket);
if (data == null) {
data = new PlayerTradeDataForSubmarket(oldSubmarket);
}
data.setSubmarket(newSubmarket);
submarketTradeData.put(newSubmarket, data);
}
What is PlayerActivityTracker used for exactly? As in, what am I loosing by not persisting it between saves?