diff --git a/Mage/src/main/java/mage/abilities/AbilityImpl.java b/Mage/src/main/java/mage/abilities/AbilityImpl.java index cfd9f99555f..5ec8c1a88c9 100644 --- a/Mage/src/main/java/mage/abilities/AbilityImpl.java +++ b/Mage/src/main/java/mage/abilities/AbilityImpl.java @@ -637,10 +637,8 @@ public abstract class AbilityImpl implements Ability { public void setSourceId(UUID sourceId) { if (this.sourceId == null) { this.sourceId = sourceId; - } else { - if (!(this instanceof MageSingleton)) { - this.sourceId = sourceId; - } + } else if (!(this instanceof MageSingleton)) { + this.sourceId = sourceId; } if (subAbilities != null) { for (Ability subAbility : subAbilities) { @@ -970,10 +968,13 @@ public abstract class AbilityImpl implements Ability { object = game.getObject(getSourceId()); } } - if (object != null && !object.getAbilities().contains(this)) { + if (object != null) { if (object instanceof Permanent) { - return false; - } else { + if (!((Permanent) object).getAbilities(game).contains(this)) { + return false; + } + return ((Permanent) object).isPhasedIn(); + } else if (!object.getAbilities().contains(this)) { // check if it's an ability that is temporary gained to a card Abilities otherAbilities = game.getState().getAllOtherAbilities(this.getSourceId()); if (otherAbilities == null || !otherAbilities.contains(this)) { @@ -981,9 +982,6 @@ public abstract class AbilityImpl implements Ability { } } } - if (object instanceof Permanent) { - return ((Permanent) object).isPhasedIn(); - } return true; } @@ -1060,18 +1058,16 @@ public abstract class AbilityImpl implements Ability { } else { sb.append(GameLog.getColoredObjectIdName(object)); } - } else { - if (object instanceof Spell) { - Spell spell = (Spell) object; - String castText = spell.getSpellCastText(game); - sb.append((castText.startsWith("Cast ") ? castText.substring(5) : castText)); - if (spell.getFromZone() == Zone.GRAVEYARD) { - sb.append(" from graveyard"); - } - sb.append(getOptionalTextSuffix(game, spell)); - } else { - sb.append(GameLog.getColoredObjectIdName(object)); + } else if (object instanceof Spell) { + Spell spell = (Spell) object; + String castText = spell.getSpellCastText(game); + sb.append((castText.startsWith("Cast ") ? castText.substring(5) : castText)); + if (spell.getFromZone() == Zone.GRAVEYARD) { + sb.append(" from graveyard"); } + sb.append(getOptionalTextSuffix(game, spell)); + } else { + sb.append(GameLog.getColoredObjectIdName(object)); } } else { sb.append("unknown"); diff --git a/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromBattlefieldSourceTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromBattlefieldSourceTriggeredAbility.java index 8dc9ecc57d3..34f47441920 100644 --- a/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromBattlefieldSourceTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/PutIntoGraveFromBattlefieldSourceTriggeredAbility.java @@ -19,6 +19,7 @@ public class PutIntoGraveFromBattlefieldSourceTriggeredAbility extends Triggered public PutIntoGraveFromBattlefieldSourceTriggeredAbility(Effect effect, boolean optional) { super(Zone.ALL, effect, optional); + setLeavesTheBattlefieldTrigger(true); } PutIntoGraveFromBattlefieldSourceTriggeredAbility(PutIntoGraveFromBattlefieldSourceTriggeredAbility ability) { @@ -37,14 +38,14 @@ public class PutIntoGraveFromBattlefieldSourceTriggeredAbility extends Triggered @Override public boolean checkTrigger(GameEvent event, Game game) { - ZoneChangeEvent zEvent = (ZoneChangeEvent) event; - Permanent permanent = zEvent.getTarget(); - - if (permanent != null && - zEvent.getToZone() == Zone.GRAVEYARD && - zEvent.getFromZone() == Zone.BATTLEFIELD && - permanent.getId().equals(this.getSourceId())) { - return true; + if (event.getTargetId().equals(getSourceId())) { + ZoneChangeEvent zEvent = (ZoneChangeEvent) event; + Permanent permanent = zEvent.getTarget(); + if (permanent != null + && zEvent.getToZone() == Zone.GRAVEYARD + && zEvent.getFromZone() == Zone.BATTLEFIELD) { + return true; + } } return false; }