From 2a83738f5b7c36124ee0bdb648ce489d7dba4443 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Wed, 16 Dec 2020 04:31:30 +0400 Subject: [PATCH] Fixed NPE errors on permanent movement before resolve --- Mage.Sets/src/mage/cards/g/GravePact.java | 22 ++++++++----------- .../src/mage/cards/g/GruulRagebeast.java | 18 +++++++-------- Mage.Sets/src/mage/cards/m/MartyrsBond.java | 7 +++--- Mage.Sets/src/mage/cards/p/ProperBurial.java | 12 +++++----- Mage.Sets/src/mage/cards/s/ScrapTrawler.java | 12 +++++----- 5 files changed, 33 insertions(+), 38 deletions(-) diff --git a/Mage.Sets/src/mage/cards/g/GravePact.java b/Mage.Sets/src/mage/cards/g/GravePact.java index 9c1498cd9fd..f2cff9c3337 100644 --- a/Mage.Sets/src/mage/cards/g/GravePact.java +++ b/Mage.Sets/src/mage/cards/g/GravePact.java @@ -1,9 +1,5 @@ - package mage.cards.g; -import java.util.ArrayList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.OneShotEffect; @@ -14,20 +10,22 @@ import mage.constants.Outcome; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.common.TargetControlledCreaturePermanent; +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; + /** - * * @author North */ public final class GravePact extends CardImpl { public GravePact(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{1}{B}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{1}{B}{B}{B}"); // Whenever a creature you control dies, each other player sacrifices a creature. @@ -69,9 +67,7 @@ class GravePactTriggeredAbility extends TriggeredAbilityImpl { if (((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent.isControlledBy(this.getControllerId()) && permanent.isCreature()) { - return true; - } + return permanent != null && permanent.isControlledBy(this.getControllerId()) && permanent.isCreature(); } return false; } @@ -102,7 +98,7 @@ class GravePactEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { List perms = new ArrayList<>(); Player controller = game.getPlayer(source.getControllerId()); - if (controller != null) { + if (controller != null) { for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { Player player = game.getPlayer(playerId); if (player != null && !playerId.equals(source.getControllerId())) { @@ -120,8 +116,8 @@ class GravePactEffect extends OneShotEffect { permanent.sacrifice(source, game); } } - return true; + return true; } - return false; + return false; } } diff --git a/Mage.Sets/src/mage/cards/g/GruulRagebeast.java b/Mage.Sets/src/mage/cards/g/GruulRagebeast.java index dc808090cf0..01834a41b9e 100644 --- a/Mage.Sets/src/mage/cards/g/GruulRagebeast.java +++ b/Mage.Sets/src/mage/cards/g/GruulRagebeast.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; @@ -10,18 +8,18 @@ import mage.abilities.effects.OneShotEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.Outcome; +import mage.constants.SubType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.permanent.Permanent; import mage.target.common.TargetOpponentsCreaturePermanent; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class GruulRagebeast extends CardImpl { @@ -50,10 +48,11 @@ public final class GruulRagebeast extends CardImpl { class GruulRagebeastTriggeredAbility extends TriggeredAbilityImpl { GruulRagebeastTriggeredAbility() { - super(Zone.BATTLEFIELD, new GruulRagebeastEffect(), false);this.addTarget(new TargetOpponentsCreaturePermanent()); + super(Zone.BATTLEFIELD, new GruulRagebeastEffect(), false); + this.addTarget(new TargetOpponentsCreaturePermanent()); } - private GruulRagebeastTriggeredAbility(final GruulRagebeastTriggeredAbility ability) { + private GruulRagebeastTriggeredAbility(final GruulRagebeastTriggeredAbility ability) { super(ability); } @@ -71,7 +70,8 @@ class GruulRagebeastTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { UUID targetId = event.getTargetId(); Permanent permanent = game.getPermanent(targetId); - if (permanent.isControlledBy(this.controllerId) + if (permanent != null + && permanent.isControlledBy(this.getControllerId()) && permanent.isCreature() && (targetId.equals(this.getSourceId()) || !targetId.equals(this.getSourceId()))) { @@ -95,7 +95,7 @@ class GruulRagebeastEffect extends OneShotEffect { super(Outcome.Damage); } - private GruulRagebeastEffect(final GruulRagebeastEffect effect) { + private GruulRagebeastEffect(final GruulRagebeastEffect effect) { super(effect); } diff --git a/Mage.Sets/src/mage/cards/m/MartyrsBond.java b/Mage.Sets/src/mage/cards/m/MartyrsBond.java index f09cc19d562..b4ee8849f08 100644 --- a/Mage.Sets/src/mage/cards/m/MartyrsBond.java +++ b/Mage.Sets/src/mage/cards/m/MartyrsBond.java @@ -1,4 +1,3 @@ - package mage.cards.m; import mage.abilities.Ability; @@ -14,7 +13,6 @@ import mage.filter.common.FilterControlledPermanent; import mage.filter.predicate.Predicates; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; import mage.players.Player; @@ -26,7 +24,6 @@ import java.util.List; import java.util.UUID; /** - * * @author spjspj */ public final class MartyrsBond extends CardImpl { @@ -73,7 +70,9 @@ class MartyrsBondTriggeredAbility extends TriggeredAbilityImpl { if (((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent.isControlledBy(this.getControllerId()) && !permanent.isLand()) { + if (permanent != null + && permanent.isControlledBy(this.getControllerId()) + && !permanent.isLand()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(permanent, game)); } diff --git a/Mage.Sets/src/mage/cards/p/ProperBurial.java b/Mage.Sets/src/mage/cards/p/ProperBurial.java index de7a09279c6..f66090ed44b 100644 --- a/Mage.Sets/src/mage/cards/p/ProperBurial.java +++ b/Mage.Sets/src/mage/cards/p/ProperBurial.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.common.GainLifeEffect; import mage.cards.CardImpl; @@ -10,18 +8,18 @@ import mage.constants.CardType; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; +import java.util.UUID; + /** - * * @author North */ public final class ProperBurial extends CardImpl { public ProperBurial(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{W}"); // Whenever a creature you control dies, you gain life equal to that creature's toughness. @@ -63,7 +61,9 @@ class ProperBurialTriggeredAbility extends TriggeredAbilityImpl { if (((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent.isControlledBy(this.getControllerId()) && permanent.isCreature()) { + if (permanent != null + && permanent.isControlledBy(this.getControllerId()) + && permanent.isCreature()) { this.getEffects().clear(); this.addEffect(new GainLifeEffect(permanent.getToughness().getValue())); return true; diff --git a/Mage.Sets/src/mage/cards/s/ScrapTrawler.java b/Mage.Sets/src/mage/cards/s/ScrapTrawler.java index aba9ca44cc6..e2b0ea7817f 100644 --- a/Mage.Sets/src/mage/cards/s/ScrapTrawler.java +++ b/Mage.Sets/src/mage/cards/s/ScrapTrawler.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; @@ -9,21 +7,21 @@ import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; -import mage.constants.SubType; import mage.constants.ComparisonType; +import mage.constants.SubType; import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.common.FilterArtifactCard; import mage.filter.predicate.mageobject.ConvertedManaCostPredicate; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; import mage.game.events.ZoneChangeEvent; import mage.game.permanent.Permanent; import mage.target.common.TargetCardInYourGraveyard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class ScrapTrawler extends CardImpl { @@ -78,7 +76,9 @@ class ScrapTrawlerTriggeredAbility extends TriggeredAbilityImpl { if (((ZoneChangeEvent) event).getToZone() == Zone.GRAVEYARD && ((ZoneChangeEvent) event).getFromZone() == Zone.BATTLEFIELD) { Permanent permanent = ((ZoneChangeEvent) event).getTarget(); - if (permanent.isControlledBy(this.getControllerId()) && permanent.isArtifact()) { + if (permanent != null + && permanent.isControlledBy(this.getControllerId()) + && permanent.isArtifact()) { FilterCard filter = new FilterArtifactCard("artifact card in your graveyard with converted mana cost less than " + permanent.getManaCost().convertedManaCost()); filter.add(new ConvertedManaCostPredicate(ComparisonType.FEWER_THAN, permanent.getManaCost().convertedManaCost())); TargetCardInYourGraveyard target = new TargetCardInYourGraveyard(filter);