From c0c05579ba03ee4574fe9bc686d3077216098d06 Mon Sep 17 00:00:00 2001 From: Susucre <34709007+Susucre@users.noreply.github.com> Date: Sun, 21 Apr 2024 18:52:46 +0200 Subject: [PATCH] fix client NPE if Radiation trigger in trigger order panel The frameStyle was unexpectedly null when displaying the trigger in the view to choose trigger panels. It was good on the stack so I missed that in initial implementation. Bug showed up once there was another trigger on Beginning of Main Phase, for instance Coalition Relic. The lack of frameStyle lead to a rendering NPE. --- Mage.Common/src/main/java/mage/view/CardsView.java | 10 ++++++++++ Mage/src/main/java/mage/game/command/Emblem.java | 2 +- .../mage/game/command/emblems/RadiationEmblem.java | 2 ++ 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/Mage.Common/src/main/java/mage/view/CardsView.java b/Mage.Common/src/main/java/mage/view/CardsView.java index 43d793d2f8e..c60e1a3c81e 100644 --- a/Mage.Common/src/main/java/mage/view/CardsView.java +++ b/Mage.Common/src/main/java/mage/view/CardsView.java @@ -96,11 +96,21 @@ public class CardsView extends LinkedHashMap { case STACK: case HAND: // Miracle case LIBRARY: + sourceObject = game.getObject(ability.getSourceId()); + if (sourceObject instanceof Card) { + isCard = true; + } + break; case OUTSIDE: sourceObject = game.getObject(ability.getSourceId()); if (sourceObject instanceof Card) { isCard = true; } + if (sourceObject instanceof Emblem) { + // Emblems are not normally OUTSIDE, except the special Radiation Emblem from rad counters. + abilityView = new AbilityView(ability, sourceObject.getName(), new CardView(new EmblemView((Emblem) sourceObject))); + abilityView.setName(sourceObject.getName()); + } break; case COMMAND: sourceObject = game.getObject(ability.getSourceId()); diff --git a/Mage/src/main/java/mage/game/command/Emblem.java b/Mage/src/main/java/mage/game/command/Emblem.java index 2461f6f8548..88560bf93fb 100644 --- a/Mage/src/main/java/mage/game/command/Emblem.java +++ b/Mage/src/main/java/mage/game/command/Emblem.java @@ -36,7 +36,7 @@ public abstract class Emblem extends CommandObjectImpl { protected MageObject sourceObject; // can be null private boolean copy; private MageObject copyFrom; // copied card INFO (used to call original adjusters) - private FrameStyle frameStyle; + protected FrameStyle frameStyle; private Abilities abilites = new AbilitiesImpl<>(); public Emblem(String name) { diff --git a/Mage/src/main/java/mage/game/command/emblems/RadiationEmblem.java b/Mage/src/main/java/mage/game/command/emblems/RadiationEmblem.java index 8d300950be9..85a28f9b6c7 100644 --- a/Mage/src/main/java/mage/game/command/emblems/RadiationEmblem.java +++ b/Mage/src/main/java/mage/game/command/emblems/RadiationEmblem.java @@ -6,6 +6,7 @@ import mage.abilities.condition.Condition; import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility; import mage.abilities.effects.OneShotEffect; import mage.cards.Cards; +import mage.cards.FrameStyle; import mage.cards.repository.TokenInfo; import mage.cards.repository.TokenRepository; import mage.constants.Outcome; @@ -27,6 +28,7 @@ public class RadiationEmblem extends Emblem { public RadiationEmblem() { super("Radiation"); + this.frameStyle = FrameStyle.M15_NORMAL; this.getAbilities().add(new ConditionalInterveningIfTriggeredAbility( new BeginningOfPreCombatMainTriggeredAbility(Zone.ALL, new RadiationEffect(), TargetController.YOU, false, false),