From e72edb95b550c7953022f8d94b07352e34afcc57 Mon Sep 17 00:00:00 2001 From: Hanmac Date: Fri, 16 Feb 2018 14:02:34 +0100 Subject: [PATCH] Manifest: fixed check with worms of the earth --- .../src/main/java/forge/game/GameAction.java | 4 +++ .../ability/effects/ChangeZoneAllEffect.java | 4 +-- .../game/ability/effects/ManifestEffect.java | 26 ++++++++++++++++--- 3 files changed, 28 insertions(+), 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 56d6f863d8e..0cd254fe430 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -268,6 +268,10 @@ public class GameAction { // if something would only be a land when entering the battlefield and not before // put it into the graveyard instead zoneTo = c.getOwner().getZone(ZoneType.Graveyard); + // reset facedown + copied.setState(CardStateName.Original, false); + copied.setManifested(false); + copied.updateStateForView(); } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java index dafb4854a5c..57c6a945fdf 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ChangeZoneAllEffect.java @@ -167,9 +167,9 @@ public class ChangeZoneAllEffect extends SpellAbilityEffect { Card movedCard = null; if (sa.hasParam("GainControl")) { c.setController(sa.getActivatingPlayer(), game.getNextTimestamp()); - movedCard = game.getAction().moveToPlay(c, sa.getActivatingPlayer(), null); + movedCard = game.getAction().moveToPlay(c, sa.getActivatingPlayer(), sa); } else { - movedCard = game.getAction().moveTo(destination, c, libraryPos, null); + movedCard = game.getAction().moveTo(destination, c, libraryPos, sa); if (destination == ZoneType.Exile && !c.isToken()) { Card host = sa.getOriginalHost(); if (host == null) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ManifestEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ManifestEffect.java index cebcc5dffaa..2e587b0c173 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ManifestEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ManifestEffect.java @@ -1,27 +1,33 @@ package forge.game.ability.effects; +import com.google.common.collect.Sets; + +import forge.card.CardStateName; +import forge.game.Game; +import forge.game.GlobalRuleChange; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardLists; +import forge.game.card.CardUtil; import forge.game.player.Player; import forge.game.spellability.SpellAbility; -import forge.game.spellability.TargetRestrictions; +import forge.game.zone.ZoneType; public class ManifestEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { final Card source = sa.getHostCard(); + final Game game = source.getGame(); // Usually a number leaving possibility for X, Sacrifice X land: Manifest X creatures. - final int amount = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(sa.getHostCard(), + final int amount = sa.hasParam("Amount") ? AbilityUtils.calculateAmount(source, sa.getParam("Amount"), sa) : 1; // Most commonly "defined" is Top of Library final String defined = sa.hasParam("Defined") ? sa.getParam("Defined") : "TopOfLibrary"; - final TargetRestrictions tgt = sa.getTargetRestrictions(); for (final Player p : getTargetPlayers(sa, "DefinedPlayer")) { - if ((tgt == null) || p.canBeTargetedBy(sa)) { + if (sa.usesTargeting() || p.canBeTargetedBy(sa)) { CardCollection tgtCards; if ("TopOfLibrary".equals(defined)) { tgtCards = p.getTopXCardsFromLibrary(amount); @@ -34,6 +40,18 @@ public class ManifestEffect extends SpellAbilityEffect { } for(Card c : tgtCards) { + //check if lki would be a land entering the battlefield + if (game.getStaticEffects().getGlobalRuleChange(GlobalRuleChange.noLandBattlefield)) { + Card lki = CardUtil.getLKICopy(c); + lki.setState(CardStateName.FaceDown, false); + lki.setManifested(true); + lki.setLastKnownZone(p.getZone(ZoneType.Battlefield)); + CardCollection preList = new CardCollection(lki); + game.getAction().checkStaticAbilities(false, Sets.newHashSet(lki), preList); + if (lki.isLand()) { + continue; + } + } Card rem = c.manifest(p, sa); if (sa.hasParam("RememberManifested") && rem != null) { source.addRemembered(rem);