forked from External/mage
Fixed NPE errors on permanent movement before resolve
This commit is contained in:
parent
f8206df3ba
commit
2a83738f5b
5 changed files with 33 additions and 38 deletions
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -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));
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue