From 1b2636d0cd7b93b36d3c3b8419086a5254dfdaab Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sun, 12 Mar 2017 10:36:51 +0100 Subject: [PATCH] * Arachnuns Web - Fixed condition handling. Some renaming. --- Mage.Sets/src/mage/cards/a/ArachnusWeb.java | 57 ++++++------------- Mage.Sets/src/mage/cards/a/ArmamentOfNyx.java | 4 +- Mage.Sets/src/mage/cards/b/Blight.java | 4 +- .../src/mage/cards/b/BrinkOfDisaster.java | 4 +- Mage.Sets/src/mage/cards/f/FatalMutation.java | 4 +- Mage.Sets/src/mage/cards/f/FrozenSolid.java | 4 +- Mage.Sets/src/mage/cards/m/MireBlight.java | 4 +- Mage.Sets/src/mage/cards/m/MortalWound.java | 4 +- Mage.Sets/src/mage/cards/n/NyxInfusion.java | 4 +- .../src/mage/cards/p/ParallaxDementia.java | 4 +- Mage.Sets/src/mage/cards/p/PoolingVenom.java | 4 +- .../src/mage/cards/q/QuietDisrepair.java | 4 +- .../src/mage/cards/r/RingOfEvosIsle.java | 4 +- Mage.Sets/src/mage/cards/r/RingOfKalonia.java | 4 +- Mage.Sets/src/mage/cards/r/RingOfThune.java | 4 +- Mage.Sets/src/mage/cards/r/RingOfValkas.java | 4 +- Mage.Sets/src/mage/cards/r/RingOfXathrid.java | 4 +- Mage.Sets/src/mage/cards/s/SerrasBoon.java | 4 +- .../src/mage/cards/s/SpreadingAlgae.java | 4 +- .../src/mage/cards/t/TenzaGodosMaul.java | 6 +- .../mage/cards/u/UncontrolledInfestation.java | 4 +- .../src/mage/cards/y/YokeOfTheDamned.java | 4 +- ... => AttachedToMatchesFilterCondition.java} | 13 +++-- .../EnchantedCreatureSubtypeCondition.java | 13 +++-- ...fect.java => DestroyAttachedToEffect.java} | 24 ++++---- .../effects/common/DestroySourceEffect.java | 15 +++-- 26 files changed, 95 insertions(+), 113 deletions(-) rename Mage/src/main/java/mage/abilities/condition/common/{EquippedMatchesFilterCondition.java => AttachedToMatchesFilterCondition.java} (91%) rename Mage/src/main/java/mage/abilities/effects/common/{DestroyAttachedEffect.java => DestroyAttachedToEffect.java} (76%) diff --git a/Mage.Sets/src/mage/cards/a/ArachnusWeb.java b/Mage.Sets/src/mage/cards/a/ArachnusWeb.java index 40aecb21dce..e99fa9b7c34 100644 --- a/Mage.Sets/src/mage/cards/a/ArachnusWeb.java +++ b/Mage.Sets/src/mage/cards/a/ArachnusWeb.java @@ -28,21 +28,23 @@ package mage.cards.a; import java.util.UUID; -import mage.constants.CardType; -import mage.constants.Outcome; -import mage.constants.Zone; import mage.abilities.Ability; -import mage.abilities.common.OnEventTriggeredAbility; +import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.OneShotEffect; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.effects.common.AttachEffect; +import mage.abilities.effects.common.DestroySourceEffect; import mage.abilities.effects.common.combat.CantBlockAttackActivateAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.game.Game; -import mage.game.events.GameEvent.EventType; -import mage.game.permanent.Permanent; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.Filter; +import mage.filter.FilterPermanent; +import mage.filter.predicate.mageobject.PowerPredicate; import mage.target.TargetPermanent; import mage.target.common.TargetCreaturePermanent; @@ -53,10 +55,9 @@ import mage.target.common.TargetCreaturePermanent; public class ArachnusWeb extends CardImpl { public ArachnusWeb(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{2}{G}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{2}{G}"); this.subtype.add("Aura"); - // Enchant creature TargetPermanent auraTarget = new TargetCreaturePermanent(); this.getSpellAbility().addTarget(auraTarget); @@ -67,7 +68,11 @@ public class ArachnusWeb extends CardImpl { // Enchanted creature can't attack or block, and its activated abilities can't be activated. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBlockAttackActivateAttachedEffect())); // At the beginning of the end step, if enchanted creature's power is 4 or greater, destroy Arachnus Web. - this.addAbility(new OnEventTriggeredAbility(EventType.END_TURN_STEP_PRE, "beginning of the end step", true, new ArachnusWebEffect2())); + FilterPermanent filter = new FilterPermanent("if enchanted creature's power is 4 or greater"); + filter.add(new PowerPredicate(Filter.ComparisonType.GreaterThan, 3)); + this.addAbility(new BeginningOfEndStepTriggeredAbility(Zone.BATTLEFIELD, + new DestroySourceEffect(), TargetController.ANY, + new AttachedToMatchesFilterCondition(filter), false)); } public ArachnusWeb(final ArachnusWeb card) { @@ -79,33 +84,3 @@ public class ArachnusWeb extends CardImpl { return new ArachnusWeb(this); } } - -class ArachnusWebEffect2 extends OneShotEffect { - - public ArachnusWebEffect2() { - super(Outcome.Benefit); - staticText = "if enchanted creature's power is 4 or greater, destroy {this}"; - } - - public ArachnusWebEffect2(final ArachnusWebEffect2 effect) { - super(effect); - } - - @Override - public ArachnusWebEffect2 copy() { - return new ArachnusWebEffect2(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Permanent enchantment = game.getPermanent(source.getSourceId()); - if (enchantment != null && enchantment.getAttachedTo() != null) { - Permanent permanent = game.getPermanent(enchantment.getAttachedTo()); - if (permanent != null && permanent.getPower().getValue() >= 4) { - enchantment.destroy(source.getSourceId(), game, false); - return true; - } - } - return false; - } -} diff --git a/Mage.Sets/src/mage/cards/a/ArmamentOfNyx.java b/Mage.Sets/src/mage/cards/a/ArmamentOfNyx.java index fa2c025d40b..5e25e09273f 100644 --- a/Mage.Sets/src/mage/cards/a/ArmamentOfNyx.java +++ b/Mage.Sets/src/mage/cards/a/ArmamentOfNyx.java @@ -32,7 +32,7 @@ import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.Condition; import mage.abilities.condition.InvertCondition; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.decorator.ConditionalReplacementEffect; import mage.abilities.effects.ReplacementEffect; @@ -76,7 +76,7 @@ public class ArmamentOfNyx extends CardImpl { this.getSpellAbility().addEffect(new AttachEffect(Outcome.Detriment)); Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); - Condition condition = new EquippedMatchesFilterCondition(filter); + Condition condition = new AttachedToMatchesFilterCondition(filter); // Enchanted creature has double strike as long as it's an enchantment. Otherwise, prevent all damage that would be dealt by enchanted creature ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( new GainAbilityAttachedEffect(DoubleStrikeAbility.getInstance(), AttachmentType.AURA, Duration.WhileOnBattlefield), diff --git a/Mage.Sets/src/mage/cards/b/Blight.java b/Mage.Sets/src/mage/cards/b/Blight.java index d26519bde24..02539205c52 100644 --- a/Mage.Sets/src/mage/cards/b/Blight.java +++ b/Mage.Sets/src/mage/cards/b/Blight.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BecomesTappedAttachedTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -59,7 +59,7 @@ public class Blight extends CardImpl { this.addAbility(ability); // When enchanted land becomes tapped, destroy it. - this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedEffect("it"), "enchanted land")); + this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), "enchanted land")); } public Blight(final Blight card) { diff --git a/Mage.Sets/src/mage/cards/b/BrinkOfDisaster.java b/Mage.Sets/src/mage/cards/b/BrinkOfDisaster.java index 8f377d73753..48afe240586 100644 --- a/Mage.Sets/src/mage/cards/b/BrinkOfDisaster.java +++ b/Mage.Sets/src/mage/cards/b/BrinkOfDisaster.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BecomesTappedAttachedTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -69,7 +69,7 @@ public class BrinkOfDisaster extends CardImpl { this.addAbility(ability); // When enchanted permanent becomes tapped, destroy it. - this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedEffect("it"), "enchanted permanent")); + this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), "enchanted permanent")); } public BrinkOfDisaster(final BrinkOfDisaster card) { diff --git a/Mage.Sets/src/mage/cards/f/FatalMutation.java b/Mage.Sets/src/mage/cards/f/FatalMutation.java index 7c5e29c6e08..b49813e1bdd 100644 --- a/Mage.Sets/src/mage/cards/f/FatalMutation.java +++ b/Mage.Sets/src/mage/cards/f/FatalMutation.java @@ -32,7 +32,7 @@ import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -62,7 +62,7 @@ public class FatalMutation extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // When enchanted creature is turned face up, destroy it. It can't be regenerated. - this.addAbility(new FatalMutationAbility(new DestroyAttachedEffect("it", true))); + this.addAbility(new FatalMutationAbility(new DestroyAttachedToEffect("it", true))); } public FatalMutation(final FatalMutation card) { diff --git a/Mage.Sets/src/mage/cards/f/FrozenSolid.java b/Mage.Sets/src/mage/cards/f/FrozenSolid.java index d500ccab3f4..0b488e17ac9 100644 --- a/Mage.Sets/src/mage/cards/f/FrozenSolid.java +++ b/Mage.Sets/src/mage/cards/f/FrozenSolid.java @@ -32,7 +32,7 @@ import mage.abilities.Ability; import mage.abilities.common.DealtDamageAttachedTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.effects.common.DontUntapInControllersUntapStepEnchantedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -62,7 +62,7 @@ public class FrozenSolid extends CardImpl { // Enchanted creature doesn't untap during its controller's untap step. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepEnchantedEffect())); // When enchanted creature is dealt damage, destroy it. - this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedEffect("it"), false)); + this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false)); } public FrozenSolid(final FrozenSolid card) { diff --git a/Mage.Sets/src/mage/cards/m/MireBlight.java b/Mage.Sets/src/mage/cards/m/MireBlight.java index c0105ad6e22..113e3774ec9 100644 --- a/Mage.Sets/src/mage/cards/m/MireBlight.java +++ b/Mage.Sets/src/mage/cards/m/MireBlight.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DealtDamageAttachedTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -58,7 +58,7 @@ public class MireBlight extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // When enchanted creature is dealt damage, destroy it. - this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedEffect("it"), false)); + this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false)); } public MireBlight(final MireBlight card) { diff --git a/Mage.Sets/src/mage/cards/m/MortalWound.java b/Mage.Sets/src/mage/cards/m/MortalWound.java index 664138ab8ae..dd13ddd00b8 100644 --- a/Mage.Sets/src/mage/cards/m/MortalWound.java +++ b/Mage.Sets/src/mage/cards/m/MortalWound.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DealtDamageAttachedTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -57,7 +57,7 @@ public class MortalWound extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // When enchanted creature is dealt damage, destroy it. - this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedEffect("it"), false)); + this.addAbility(new DealtDamageAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), false)); } public MortalWound(final MortalWound card) { diff --git a/Mage.Sets/src/mage/cards/n/NyxInfusion.java b/Mage.Sets/src/mage/cards/n/NyxInfusion.java index aa638276344..02f26b975e1 100644 --- a/Mage.Sets/src/mage/cards/n/NyxInfusion.java +++ b/Mage.Sets/src/mage/cards/n/NyxInfusion.java @@ -30,7 +30,7 @@ package mage.cards.n; import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -75,7 +75,7 @@ public class NyxInfusion extends CardImpl { ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( new BoostEnchantedEffect(2,2,Duration.WhileOnBattlefield), new BoostEnchantedEffect(-2,-2,Duration.WhileOnBattlefield), - new EquippedMatchesFilterCondition(filter), + new AttachedToMatchesFilterCondition(filter), "Enchanted creature gets +2/+2 as long as it's an enchantment. Otherwise, it gets -2/-2")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/p/ParallaxDementia.java b/Mage.Sets/src/mage/cards/p/ParallaxDementia.java index eea03415c2b..5ae33c43189 100644 --- a/Mage.Sets/src/mage/cards/p/ParallaxDementia.java +++ b/Mage.Sets/src/mage/cards/p/ParallaxDementia.java @@ -32,7 +32,7 @@ import mage.abilities.Ability; import mage.abilities.common.LeavesBattlefieldTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; import mage.abilities.keyword.EnchantAbility; import mage.abilities.keyword.FadingAbility; @@ -66,7 +66,7 @@ public class ParallaxDementia extends CardImpl { // Enchanted creature gets +3/+2. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostEnchantedEffect(3, 2, Duration.WhileOnBattlefield))); // When Parallax Dementia leaves the battlefield, destroy enchanted creature. That creature can't be regenerated. - this.addAbility(new LeavesBattlefieldTriggeredAbility(new DestroyAttachedEffect("enchanted creature", true), false)); + this.addAbility(new LeavesBattlefieldTriggeredAbility(new DestroyAttachedToEffect("enchanted creature", true), false)); } public ParallaxDementia(final ParallaxDementia card) { diff --git a/Mage.Sets/src/mage/cards/p/PoolingVenom.java b/Mage.Sets/src/mage/cards/p/PoolingVenom.java index c270215dee2..51e613a8bdf 100644 --- a/Mage.Sets/src/mage/cards/p/PoolingVenom.java +++ b/Mage.Sets/src/mage/cards/p/PoolingVenom.java @@ -33,7 +33,7 @@ import mage.abilities.common.BecomesTappedAttachedTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.mana.ManaCostsImpl; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.effects.common.LoseLifeControllerAttachedEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -63,7 +63,7 @@ public class PoolingVenom extends CardImpl { // Whenever enchanted land becomes tapped, its controller loses 2 life. this.addAbility(new BecomesTappedAttachedTriggeredAbility(new LoseLifeControllerAttachedEffect(2), "enchanted land")); // {3}{B}: Destroy enchanted land. - this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyAttachedEffect("enchanted land"), new ManaCostsImpl("{3}{B}"))); + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new DestroyAttachedToEffect("enchanted land"), new ManaCostsImpl("{3}{B}"))); } public PoolingVenom(final PoolingVenom card) { diff --git a/Mage.Sets/src/mage/cards/q/QuietDisrepair.java b/Mage.Sets/src/mage/cards/q/QuietDisrepair.java index 2616a152ea3..f73dbab12a6 100644 --- a/Mage.Sets/src/mage/cards/q/QuietDisrepair.java +++ b/Mage.Sets/src/mage/cards/q/QuietDisrepair.java @@ -33,7 +33,7 @@ import mage.abilities.Ability; import mage.abilities.Mode; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -63,7 +63,7 @@ public class QuietDisrepair extends CardImpl { this.addAbility(ability); // At the beginning of your upkeep, choose one - Destroy enchanted permanent; or you gain 2 life. - ability = new BeginningOfUpkeepTriggeredAbility(new DestroyAttachedEffect("enchanted permanent"), TargetController.YOU, false); + ability = new BeginningOfUpkeepTriggeredAbility(new DestroyAttachedToEffect("enchanted permanent"), TargetController.YOU, false); Mode mode = new Mode(); mode.getEffects().add(new GainLifeEffect(2)); ability.addMode(mode); diff --git a/Mage.Sets/src/mage/cards/r/RingOfEvosIsle.java b/Mage.Sets/src/mage/cards/r/RingOfEvosIsle.java index 6692b996ce1..32c2d30d60a 100644 --- a/Mage.Sets/src/mage/cards/r/RingOfEvosIsle.java +++ b/Mage.Sets/src/mage/cards/r/RingOfEvosIsle.java @@ -38,7 +38,7 @@ import mage.ObjectColor; import mage.abilities.TriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -71,7 +71,7 @@ public class RingOfEvosIsle extends CardImpl { // At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's blue. TriggeredAbility triggeredAbility = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new AddPlusOneCountersAttachedEffect(1), TargetController.YOU, false); - ConditionalTriggeredAbility ability2 = new ConditionalTriggeredAbility(triggeredAbility, new EquippedMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's blue."); + ConditionalTriggeredAbility ability2 = new ConditionalTriggeredAbility(triggeredAbility, new AttachedToMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's blue."); this.addAbility(ability2); // Equip {1} diff --git a/Mage.Sets/src/mage/cards/r/RingOfKalonia.java b/Mage.Sets/src/mage/cards/r/RingOfKalonia.java index da901fa4f0d..440371323f3 100644 --- a/Mage.Sets/src/mage/cards/r/RingOfKalonia.java +++ b/Mage.Sets/src/mage/cards/r/RingOfKalonia.java @@ -34,7 +34,7 @@ import mage.ObjectColor; import mage.abilities.TriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -67,7 +67,7 @@ public class RingOfKalonia extends CardImpl { // At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's green. TriggeredAbility triggeredAbility = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new AddPlusOneCountersAttachedEffect(1), TargetController.YOU, false); - ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new EquippedMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's green"); + ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new AttachedToMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's green"); this.addAbility(ability); // Equip {1} diff --git a/Mage.Sets/src/mage/cards/r/RingOfThune.java b/Mage.Sets/src/mage/cards/r/RingOfThune.java index 7342cdab9e9..928988db668 100644 --- a/Mage.Sets/src/mage/cards/r/RingOfThune.java +++ b/Mage.Sets/src/mage/cards/r/RingOfThune.java @@ -34,7 +34,7 @@ import mage.ObjectColor; import mage.abilities.TriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -67,7 +67,7 @@ public class RingOfThune extends CardImpl { // At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's white. TriggeredAbility triggeredAbility = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new AddPlusOneCountersAttachedEffect(1), TargetController.YOU, false); - ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new EquippedMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's white."); + ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new AttachedToMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's white."); this.addAbility(ability); // Equip {1} diff --git a/Mage.Sets/src/mage/cards/r/RingOfValkas.java b/Mage.Sets/src/mage/cards/r/RingOfValkas.java index 0d438f51d30..1451cddd73b 100644 --- a/Mage.Sets/src/mage/cards/r/RingOfValkas.java +++ b/Mage.Sets/src/mage/cards/r/RingOfValkas.java @@ -34,7 +34,7 @@ import mage.ObjectColor; import mage.abilities.TriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.continuous.GainAbilityAttachedEffect; @@ -67,7 +67,7 @@ public class RingOfValkas extends CardImpl { // At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's red. TriggeredAbility triggeredAbility = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new AddPlusOneCountersAttachedEffect(1), TargetController.YOU, false); - ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new EquippedMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's red"); + ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new AttachedToMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's red"); this.addAbility(ability); // Equip {1} diff --git a/Mage.Sets/src/mage/cards/r/RingOfXathrid.java b/Mage.Sets/src/mage/cards/r/RingOfXathrid.java index fd29c044ec0..bd1f27e33f8 100644 --- a/Mage.Sets/src/mage/cards/r/RingOfXathrid.java +++ b/Mage.Sets/src/mage/cards/r/RingOfXathrid.java @@ -34,7 +34,7 @@ import mage.ObjectColor; import mage.abilities.TriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.SimpleActivatedAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalTriggeredAbility; import mage.abilities.effects.common.RegenerateAttachedEffect; @@ -66,7 +66,7 @@ public class RingOfXathrid extends CardImpl { // At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's black. TriggeredAbility triggeredAbility = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, new AddPlusOneCountersAttachedEffect(1), TargetController.YOU, false); - ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new EquippedMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's black"); + ConditionalTriggeredAbility ability = new ConditionalTriggeredAbility(triggeredAbility, new AttachedToMatchesFilterCondition(filter), "At the beginning of your upkeep, put a +1/+1 counter on equipped creature if it's black"); this.addAbility(ability); // Equip {1} diff --git a/Mage.Sets/src/mage/cards/s/SerrasBoon.java b/Mage.Sets/src/mage/cards/s/SerrasBoon.java index 66bb1dad07d..e3db5a18e0b 100644 --- a/Mage.Sets/src/mage/cards/s/SerrasBoon.java +++ b/Mage.Sets/src/mage/cards/s/SerrasBoon.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.AttachEffect; import mage.abilities.effects.common.continuous.BoostEnchantedEffect; @@ -74,7 +74,7 @@ public class SerrasBoon extends CardImpl { ability = new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( new BoostEnchantedEffect(1, 2, Duration.WhileOnBattlefield), new BoostEnchantedEffect(-2, -1, Duration.WhileOnBattlefield), - new EquippedMatchesFilterCondition(filter), + new AttachedToMatchesFilterCondition(filter), "Enchanted creature gets +1/+2 as long as it's white. Otherwise, it gets -2/-1")); this.addAbility(ability); } diff --git a/Mage.Sets/src/mage/cards/s/SpreadingAlgae.java b/Mage.Sets/src/mage/cards/s/SpreadingAlgae.java index 4a36cdea4ba..c1cce017b31 100644 --- a/Mage.Sets/src/mage/cards/s/SpreadingAlgae.java +++ b/Mage.Sets/src/mage/cards/s/SpreadingAlgae.java @@ -32,7 +32,7 @@ import mage.abilities.Ability; import mage.abilities.common.BecomesTappedAttachedTriggeredAbility; import mage.abilities.common.PutIntoGraveFromBattlefieldSourceTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.effects.common.ReturnToHandSourceEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; @@ -66,7 +66,7 @@ public class SpreadingAlgae extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // When enchanted land becomes tapped, destroy it. - this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedEffect("it"), "enchanted land")); + this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), "enchanted land")); // When Spreading Algae is put into a graveyard from the battlefield, return Spreading Algae to its owner's hand. this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new ReturnToHandSourceEffect())); diff --git a/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java b/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java index 54ef6d09e83..7017f7aacd7 100644 --- a/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java +++ b/Mage.Sets/src/mage/cards/t/TenzaGodosMaul.java @@ -36,7 +36,7 @@ import mage.constants.CardType; import mage.constants.Zone; import mage.ObjectColor; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.condition.common.EquippedMatchesFilterCondition; +import mage.abilities.condition.common.AttachedToMatchesFilterCondition; import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.decorator.ConditionalContinuousEffect; import mage.abilities.effects.common.continuous.BoostEquippedEffect; @@ -79,11 +79,11 @@ public class TenzaGodosMaul extends CardImpl { // As long as it's legendary, it gets an additional +2/+2. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( new BoostEquippedEffect(2, 2), - new EquippedMatchesFilterCondition(legendaryFilter), rule1))); + new AttachedToMatchesFilterCondition(legendaryFilter), rule1))); // As long as it's red, it has trample. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new ConditionalContinuousEffect( new GainAbilityAttachedEffect(TrampleAbility.getInstance(), AttachmentType.EQUIPMENT), - new EquippedMatchesFilterCondition(redFilter), rule2))); + new AttachedToMatchesFilterCondition(redFilter), rule2))); // Equip {1} ({1}: Attach to target creature you control. Equip only as a sorcery.) this.addAbility(new EquipAbility(Outcome.AddAbility, new GenericManaCost(1), new TargetControlledCreaturePermanent())); diff --git a/Mage.Sets/src/mage/cards/u/UncontrolledInfestation.java b/Mage.Sets/src/mage/cards/u/UncontrolledInfestation.java index b8dd2393dea..0bf14b43c9f 100644 --- a/Mage.Sets/src/mage/cards/u/UncontrolledInfestation.java +++ b/Mage.Sets/src/mage/cards/u/UncontrolledInfestation.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BecomesTappedAttachedTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -56,7 +56,7 @@ public class UncontrolledInfestation extends CardImpl { Ability ability = new EnchantAbility(auraTarget.getTargetName()); this.addAbility(ability); // When enchanted land becomes tapped, destroy it. - this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedEffect("it"), "enchanted land")); + this.addAbility(new BecomesTappedAttachedTriggeredAbility(new DestroyAttachedToEffect("it"), "enchanted land")); } public UncontrolledInfestation(final UncontrolledInfestation card) { diff --git a/Mage.Sets/src/mage/cards/y/YokeOfTheDamned.java b/Mage.Sets/src/mage/cards/y/YokeOfTheDamned.java index d4384c557eb..a3feb2092b9 100644 --- a/Mage.Sets/src/mage/cards/y/YokeOfTheDamned.java +++ b/Mage.Sets/src/mage/cards/y/YokeOfTheDamned.java @@ -31,7 +31,7 @@ import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.DiesCreatureTriggeredAbility; import mage.abilities.effects.common.AttachEffect; -import mage.abilities.effects.common.DestroyAttachedEffect; +import mage.abilities.effects.common.DestroyAttachedToEffect; import mage.abilities.keyword.EnchantAbility; import mage.cards.CardImpl; import mage.cards.CardSetInfo; @@ -62,7 +62,7 @@ public class YokeOfTheDamned extends CardImpl { this.addAbility(ability); // When a creature dies, destroy enchanted creature. - this.addAbility(new DiesCreatureTriggeredAbility(new DestroyAttachedEffect("enchanted creature"), false, filter)); + this.addAbility(new DiesCreatureTriggeredAbility(new DestroyAttachedToEffect("enchanted creature"), false, filter)); } diff --git a/Mage/src/main/java/mage/abilities/condition/common/EquippedMatchesFilterCondition.java b/Mage/src/main/java/mage/abilities/condition/common/AttachedToMatchesFilterCondition.java similarity index 91% rename from Mage/src/main/java/mage/abilities/condition/common/EquippedMatchesFilterCondition.java rename to Mage/src/main/java/mage/abilities/condition/common/AttachedToMatchesFilterCondition.java index dfcb7ad0f5f..6bd3d3bcb11 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/EquippedMatchesFilterCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/AttachedToMatchesFilterCondition.java @@ -34,17 +34,16 @@ import mage.filter.FilterPermanent; import mage.game.Game; import mage.game.permanent.Permanent; - /** * Describes condition when equipped permanent has superType * * @author LevelX */ -public class EquippedMatchesFilterCondition implements Condition { +public class AttachedToMatchesFilterCondition implements Condition { private final FilterPermanent filter; - public EquippedMatchesFilterCondition(FilterPermanent filter) { + public AttachedToMatchesFilterCondition(FilterPermanent filter) { this.filter = filter; } @@ -57,7 +56,7 @@ public class EquippedMatchesFilterCondition implements Condition { attachedTo = (Permanent) game.getLastKnownInformation(permanent.getAttachedTo(), Zone.BATTLEFIELD); } if (attachedTo != null) { - if (filter.match(attachedTo, attachedTo.getId(),attachedTo.getControllerId(), game)) { + if (filter.match(attachedTo, attachedTo.getId(), attachedTo.getControllerId(), game)) { return true; } @@ -65,4 +64,10 @@ public class EquippedMatchesFilterCondition implements Condition { } return false; } + + @Override + public String toString() { + return filter.getMessage(); + } + } diff --git a/Mage/src/main/java/mage/abilities/condition/common/EnchantedCreatureSubtypeCondition.java b/Mage/src/main/java/mage/abilities/condition/common/EnchantedCreatureSubtypeCondition.java index b5a8ec08d69..40e1909907b 100644 --- a/Mage/src/main/java/mage/abilities/condition/common/EnchantedCreatureSubtypeCondition.java +++ b/Mage/src/main/java/mage/abilities/condition/common/EnchantedCreatureSubtypeCondition.java @@ -25,7 +25,6 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.condition.common; import mage.abilities.Ability; @@ -40,13 +39,11 @@ import mage.game.permanent.Permanent; * * @author fireshoes */ - - public class EnchantedCreatureSubtypeCondition implements Condition { private final FilterPermanent filter = new FilterCreaturePermanent(); - public EnchantedCreatureSubtypeCondition(String string){ + public EnchantedCreatureSubtypeCondition(String string) { filter.add(new SubtypePredicate(string)); } @@ -56,11 +53,17 @@ public class EnchantedCreatureSubtypeCondition implements Condition { if (enchantment != null) { Permanent creature = game.getPermanent(enchantment.getAttachedTo()); if (creature != null) { - if(filter.match(creature, source.getSourceId(), enchantment.getControllerId(), game)){ + if (filter.match(creature, source.getSourceId(), enchantment.getControllerId(), game)) { return true; } } } return false; } + + @Override + public String toString() { + return filter.getMessage(); + } + } diff --git a/Mage/src/main/java/mage/abilities/effects/common/DestroyAttachedEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DestroyAttachedToEffect.java similarity index 76% rename from Mage/src/main/java/mage/abilities/effects/common/DestroyAttachedEffect.java rename to Mage/src/main/java/mage/abilities/effects/common/DestroyAttachedToEffect.java index 68d51f9ad2f..017d0973e00 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DestroyAttachedEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DestroyAttachedToEffect.java @@ -37,40 +37,40 @@ import mage.game.permanent.Permanent; * * @author LoneFox */ -public class DestroyAttachedEffect extends OneShotEffect { +public class DestroyAttachedToEffect extends OneShotEffect { private final boolean noRegen; - public DestroyAttachedEffect(String description) { + public DestroyAttachedToEffect(String description) { this(description, false); } - public DestroyAttachedEffect(String description, boolean noRegen) { + public DestroyAttachedToEffect(String description, boolean noRegen) { super(Outcome.DestroyPermanent); this.noRegen = noRegen; this.staticText = "destroy " + description; - if(noRegen) { + if (noRegen) { this.staticText += ". It can't be regenerated"; } } - public DestroyAttachedEffect(final DestroyAttachedEffect effect) { + public DestroyAttachedToEffect(final DestroyAttachedToEffect effect) { super(effect); this.noRegen = effect.noRegen; } @Override - public DestroyAttachedEffect copy() { - return new DestroyAttachedEffect(this); + public DestroyAttachedToEffect copy() { + return new DestroyAttachedToEffect(this); } @Override public boolean apply(Game game, Ability source) { - Permanent enchantment = game.getPermanentOrLKIBattlefield(source.getSourceId()); - if(enchantment != null) { - Permanent enchanted = game.getPermanent(enchantment.getAttachedTo()); - if(enchanted != null) { - return enchanted.destroy(source.getSourceId(), game, noRegen); + Permanent attachment = game.getPermanentOrLKIBattlefield(source.getSourceId()); + if (attachment != null && attachment.getAttachedTo() != null) { + Permanent attachedTo = game.getPermanent(attachment.getAttachedTo()); + if (attachedTo != null) { + return attachedTo.destroy(source.getSourceId(), game, noRegen); } } return false; diff --git a/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java b/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java index d7b661302a6..d3bae2ecd35 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/DestroySourceEffect.java @@ -1,16 +1,16 @@ /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. - * + * * Redistribution and use in source and binary forms, with or without modification, are * permitted provided that the following conditions are met: - * + * * 1. Redistributions of source code must retain the above copyright notice, this list of * conditions and the following disclaimer. - * + * * 2. Redistributions in binary form must reproduce the above copyright notice, this list * of conditions and the following disclaimer in the documentation and/or other materials * provided with the distribution. - * + * * THIS SOFTWARE IS PROVIDED BY BetaSteward_at_googlemail.com ``AS IS'' AND ANY EXPRESS OR IMPLIED * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND * FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BetaSteward_at_googlemail.com OR @@ -20,17 +20,16 @@ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - * + * * The views and conclusions contained in the software and documentation are those of the * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ - package mage.abilities.effects.common; -import mage.constants.Outcome; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; +import mage.constants.Outcome; import mage.game.Game; import mage.game.permanent.Permanent; @@ -49,7 +48,7 @@ public class DestroySourceEffect extends OneShotEffect { public DestroySourceEffect(boolean noRegen) { super(Outcome.DestroyPermanent); this.noRegen = noRegen; - staticText = "Destroy {this}"; + staticText = "destroy {this}"; } public DestroySourceEffect(final DestroySourceEffect effect) {