From 0241a788a01cf240fddb3fdfba4cfd632e9e267e Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Thu, 16 Nov 2023 11:08:11 +0100 Subject: [PATCH] add a couple null check to Modes' value Key creation normal game usage should have no issue, but the Pillar Custom mode initializing a Delayed Trigger at game init can not have a real source set up. Might revisit 'game init' trigger in a better way in the future. For now this fix is enough to avoid a NPE using the Pillar game mode. --- Mage/src/main/java/mage/abilities/Modes.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/Mage/src/main/java/mage/abilities/Modes.java b/Mage/src/main/java/mage/abilities/Modes.java index 9bd8390f76c..4b0b117cefc 100644 --- a/Mage/src/main/java/mage/abilities/Modes.java +++ b/Mage/src/main/java/mage/abilities/Modes.java @@ -483,12 +483,16 @@ public class Modes extends LinkedHashMap implements Copyable return res; } + private String getKeyPrefix(Game game, Ability source) { + return source == null || source.getSourceId() == null ? "" : source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()); + } + private String getSelectedModesKey(Ability source, Game game, UUID modeId) { - return source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()) + modeId.toString(); + return getKeyPrefix(game, source) + modeId.toString(); } private String getOnceTurnNumKey(Ability source, Game game) { - return source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()) + "turnNum"; + return getKeyPrefix(game, source) + "turnNum"; } private int getOnceTurnNum(Game game, Ability source) { @@ -500,8 +504,7 @@ public class Modes extends LinkedHashMap implements Copyable } private void setOnceTurnNum(Game game, Ability source) { - String key = source.getSourceId().toString() + game.getState().getZoneChangeCounter(source.getSourceId()) + "turnNum"; - game.getState().setValue(key, game.getTurnNum()); + game.getState().setValue(getOnceTurnNumKey(source, game), game.getTurnNum()); } /**