diff --git a/forge-game/src/main/java/forge/trackable/TrackableObject.java b/forge-game/src/main/java/forge/trackable/TrackableObject.java index 746b19d8d88..2a2540aa568 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableObject.java +++ b/forge-game/src/main/java/forge/trackable/TrackableObject.java @@ -4,6 +4,7 @@ import java.io.Serializable; import java.util.EnumMap; import java.util.EnumSet; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import forge.game.IIdentifiable; @@ -66,6 +67,12 @@ public abstract class TrackableObject implements IIdentifiable, Serializable { } } + public final void updateObjLookup() { + for (final Entry prop : props.entrySet()) { + prop.getKey().updateObjLookup(prop.getValue()); + } + } + /** * Copy all change properties of another Trackable object to this object. */ diff --git a/forge-game/src/main/java/forge/trackable/TrackableTypes.java b/forge-game/src/main/java/forge/trackable/TrackableTypes.java index 0cb6f0bb4c1..8e699b5a291 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableTypes.java +++ b/forge-game/src/main/java/forge/trackable/TrackableTypes.java @@ -48,6 +48,7 @@ public class TrackableTypes { protected void updateObjLookup(T newObj) { if (!objLookup.containsKey(newObj.getId())) { objLookup.put(newObj.getId(), newObj); + newObj.updateObjLookup(); } } diff --git a/forge-gui/src/main/java/forge/match/AbstractGuiGame.java b/forge-gui/src/main/java/forge/match/AbstractGuiGame.java index 85e08db22f1..5b55046eb6c 100644 --- a/forge-gui/src/main/java/forge/match/AbstractGuiGame.java +++ b/forge-gui/src/main/java/forge/match/AbstractGuiGame.java @@ -27,6 +27,7 @@ import forge.game.player.PlayerView; import forge.interfaces.IGameController; import forge.interfaces.IGuiGame; import forge.interfaces.IMayViewCards; +import forge.trackable.TrackableTypes; public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { private PlayerView currentPlayer = null; @@ -67,6 +68,13 @@ public abstract class AbstractGuiGame implements IGuiGame, IMayViewCards { @Override public void setGameView(final GameView gameView0) { if (gameView == null || gameView0 == null) { + if (gameView0 != null) { + //ensure lookup dictionaries are reset before each game + TrackableTypes.CardViewType.clearLookupDictionary(); + TrackableTypes.PlayerViewType.clearLookupDictionary(); + TrackableTypes.StackItemViewType.clearLookupDictionary(); + gameView0.updateObjLookup(); + } gameView = gameView0; return; } diff --git a/forge-gui/src/main/java/forge/match/HostedMatch.java b/forge-gui/src/main/java/forge/match/HostedMatch.java index 22956594123..c54ea1cf103 100644 --- a/forge-gui/src/main/java/forge/match/HostedMatch.java +++ b/forge-gui/src/main/java/forge/match/HostedMatch.java @@ -44,7 +44,6 @@ import forge.quest.QuestController; import forge.sound.MusicPlaylist; import forge.sound.SoundSystem; import forge.trackable.TrackableCollection; -import forge.trackable.TrackableTypes; import forge.util.CollectionSuppliers; import forge.util.collect.FCollectionView; import forge.util.maps.HashMapOfLists; @@ -128,11 +127,6 @@ public class HostedMatch { } public void startGame() { - //ensure lookup dictionaries are cleared before each game - TrackableTypes.CardViewType.clearLookupDictionary(); - TrackableTypes.PlayerViewType.clearLookupDictionary(); - TrackableTypes.StackItemViewType.clearLookupDictionary(); - nextGameDecisions.clear(); SoundSystem.instance.setBackgroundMusic(MusicPlaylist.MATCH);