diff --git a/Mage.Sets/src/mage/cards/t/Tanglewalker.java b/Mage.Sets/src/mage/cards/t/Tanglewalker.java index 7bf18e717e5..b06c6977439 100644 --- a/Mage.Sets/src/mage/cards/t/Tanglewalker.java +++ b/Mage.Sets/src/mage/cards/t/Tanglewalker.java @@ -3,19 +3,19 @@ package mage.cards.t; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.DefendingPlayerControlsSourceAttackingCondition; -import mage.abilities.decorator.ConditionalRestrictionEffect; -import mage.abilities.effects.Effect; import mage.abilities.effects.common.combat.CantBeBlockedAllEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.SubType; -import mage.constants.Zone; import mage.filter.FilterPermanent; -import mage.filter.StaticFilters; +import mage.filter.common.FilterControlledCreaturePermanent; import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.ObjectSourcePlayer; +import mage.filter.predicate.ObjectSourcePlayerPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; import java.util.UUID; @@ -24,10 +24,10 @@ import java.util.UUID; */ public final class Tanglewalker extends CardImpl { - private static final FilterPermanent filter = new FilterLandPermanent(); + private static final FilterPermanent filter = new FilterControlledCreaturePermanent(); static { - filter.add(CardType.ARTIFACT.getPredicate()); + filter.add(TanglewalkerPredicate.instance); } public Tanglewalker(UUID ownerId, CardSetInfo setInfo) { @@ -38,11 +38,8 @@ public final class Tanglewalker extends CardImpl { this.toughness = new MageInt(2); // Each creature you control can't be blocked as long as defending player controls an artifact land. - Effect effect = new ConditionalRestrictionEffect( - new CantBeBlockedAllEffect(StaticFilters.FILTER_CONTROLLED_CREATURES, Duration.WhileOnBattlefield), - new DefendingPlayerControlsSourceAttackingCondition(filter)); - effect.setText("Each creature you control can't be blocked as long as defending player controls an artifact land"); - this.addAbility(new SimpleStaticAbility(effect)); + this.addAbility(new SimpleStaticAbility(new CantBeBlockedAllEffect(filter, Duration.WhileOnBattlefield) + .setText("Each creature you control can't be blocked as long as defending player controls an artifact land"))); } private Tanglewalker(final Tanglewalker card) { @@ -54,3 +51,24 @@ public final class Tanglewalker extends CardImpl { return new Tanglewalker(this); } } + +enum TanglewalkerPredicate implements ObjectSourcePlayerPredicate { + instance; // Each creature must independently evaluate if the player it's attacking has an artifact land + + private static final FilterPermanent filter = new FilterLandPermanent(); + + static { + filter.add(CardType.ARTIFACT.getPredicate()); + } + + @Override + public boolean apply(ObjectSourcePlayer input, Game game) { + UUID defendingPlayer = game.getCombat().getDefendingPlayerId(input.getObject().getId(), game); + return defendingPlayer != null && game.getBattlefield().countAll(filter, defendingPlayer, game) > 0; + } + + @Override + public String toString() { + return ""; + } +}