Fixed NPE errors on permanent movement before resolve

This commit is contained in:
Oleg Agafonov 2020-12-16 04:31:30 +04:00
parent f8206df3ba
commit 2a83738f5b
5 changed files with 33 additions and 38 deletions

View file

@ -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<UUID> 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;
}
}

View file

@ -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);
}

View file

@ -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));
}

View file

@ -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;

View file

@ -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);