diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/triggers/EntersBattlefieldOneOrMoreTriggerTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/EntersBattlefieldOneOrMoreTriggerTest.java new file mode 100644 index 00000000000..67b28c5e1c7 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/triggers/EntersBattlefieldOneOrMoreTriggerTest.java @@ -0,0 +1,30 @@ +package org.mage.test.cards.triggers; + +import mage.constants.PhaseStep; +import mage.constants.Zone; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * @author jimga150 + */ +public class EntersBattlefieldOneOrMoreTriggerTest extends CardTestPlayerBase { + + @Test + public void testZoneChangeMulti() { + addCard(Zone.BATTLEFIELD, playerA, "Marneus Calgar", 1); + addCard(Zone.BATTLEFIELD, playerA, "Gor Muldrak, Amphinologist", 1); + addCard(Zone.BATTLEFIELD, playerB, "Marneus Calgar", 1); + addCard(Zone.BATTLEFIELD, playerB, "Memnite", 1); + + setStrictChooseMode(true); + setStopAt(2, PhaseStep.UPKEEP); + execute(); + + assertPermanentCount(playerA, "Salamander Warrior Token", 1); + assertPermanentCount(playerB, "Salamander Warrior Token", 1); + + assertHandCount(playerA, 1); + assertHandCount(playerB, 1); + } +} diff --git a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOneOrMoreTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOneOrMoreTriggeredAbility.java index 4a432b888c3..ff689e33093 100644 --- a/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOneOrMoreTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/EntersBattlefieldOneOrMoreTriggeredAbility.java @@ -1,6 +1,5 @@ package mage.abilities.common; -import mage.MageItem; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.constants.TargetController; @@ -8,12 +7,10 @@ import mage.constants.Zone; import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.events.GameEvent; -import mage.game.events.ZoneChangeGroupEvent; -import mage.game.permanent.Permanent; +import mage.game.events.ZoneChangeBatchEvent; import mage.players.Player; -import java.util.Objects; -import java.util.stream.Stream; +import java.util.UUID; /** * "Whenever one or more {filter} enter the battlefield under {target controller} control, @@ -40,37 +37,32 @@ public class EntersBattlefieldOneOrMoreTriggeredAbility extends TriggeredAbility @Override public boolean checkEventType(GameEvent event, Game game) { - return event.getType() == GameEvent.EventType.ZONE_CHANGE_GROUP; + return event.getType() == GameEvent.EventType.ZONE_CHANGE_BATCH; } @Override public boolean checkTrigger(GameEvent event, Game game) { - ZoneChangeGroupEvent zEvent = (ZoneChangeGroupEvent) event; + Player controller = game.getPlayer(this.controllerId); - if (zEvent.getToZone() != Zone.BATTLEFIELD || controller == null) { + if (controller == null) { return false; } - switch (this.targetController) { - case YOU: - if (!controller.getId().equals(zEvent.getPlayerId())) { - return false; - } - break; - case OPPONENT: - if (!controller.hasOpponent(zEvent.getPlayerId(), game)) { - return false; - } - break; - } - - return Stream.concat( - zEvent.getTokens().stream(), - zEvent.getCards().stream() - .map(MageItem::getId) - .map(game::getPermanent) - .filter(Objects::nonNull) - ).anyMatch(permanent -> filterPermanent.match(permanent, this.controllerId, this, game)); + ZoneChangeBatchEvent zEvent = (ZoneChangeBatchEvent) event; + return zEvent.getEvents().stream() + .filter(z -> z.getToZone() == Zone.BATTLEFIELD) + .filter(z -> filterPermanent.match(z.getTarget(), this.controllerId, this, game)) + .anyMatch(z -> { + UUID enteringPermanentControllerID = z.getTarget().getControllerId(); + switch (this.targetController) { + case YOU: + return enteringPermanentControllerID.equals(this.controllerId); + case OPPONENT: + return controller.hasOpponent(enteringPermanentControllerID, game); + default: + throw new IllegalArgumentException("Unsupported target: " + this.targetController); + } + }); } @Override