diff --git a/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java b/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java index e5f6e06a3f..fb8179d592 100644 --- a/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java +++ b/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java @@ -32,10 +32,9 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.common.GenericTriggeredAbility; +import mage.abilities.common.BlocksTriggeredAbility; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.keyword.FlyingAbility; -import mage.abilities.triggers.common.BlocksTrigger; import mage.cards.CardImpl; /** @@ -48,12 +47,13 @@ public class GoldenglowMoth extends CardImpl { super(ownerId, 15, "Goldenglow Moth", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{W}"); this.expansionSetCode = "M11"; this.subtype.add("Insect"); + this.color.setWhite(true); this.power = new MageInt(0); this.toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); - this.addAbility(new GenericTriggeredAbility(BlocksTrigger.getInstance(), new GainLifeEffect(4), true)); + this.addAbility(new BlocksTriggeredAbility(new GainLifeEffect(4), true)); } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java index 13a1ac2ee5..a0f150d9f5 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java @@ -31,14 +31,13 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Duration; import mage.Constants.Rarity; +import mage.Constants.Zone; import mage.MageInt; -import mage.abilities.TriggeredAbility; -import mage.abilities.common.GenericTriggeredAbility; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; import mage.abilities.effects.common.continious.BoostSourceEffect; import mage.abilities.keyword.FlyingAbility; import mage.abilities.keyword.ReachAbility; -import mage.abilities.triggers.Trigger; -import mage.abilities.triggers.common.BecomesBlockedTrigger; import mage.cards.CardImpl; import mage.game.Game; import mage.game.events.GameEvent; @@ -62,7 +61,7 @@ public class EzurisArchers extends CardImpl { this.addAbility(ReachAbility.getInstance()); // Whenever Ezuri's Archers blocks a creature with flying, Ezuri's Archers gets +3/+0 until end of turn. - this.addAbility(new GenericTriggeredAbility(BlocksCreatureWithFlyingTrigger.getInstance(), new BoostSourceEffect(3, 0, Duration.EndOfTurn), false)); + this.addAbility(new BlocksCreatureWithFlyingTriggeredAbility(new BoostSourceEffect(3, 0, Duration.EndOfTurn), false)); } public EzurisArchers(final EzurisArchers card) { @@ -75,17 +74,19 @@ public class EzurisArchers extends CardImpl { } } -class BlocksCreatureWithFlyingTrigger implements Trigger { +class BlocksCreatureWithFlyingTriggeredAbility extends TriggeredAbilityImpl { - private static Trigger instance = new BecomesBlockedTrigger(); + public BlocksCreatureWithFlyingTriggeredAbility(Effect effect, boolean optional) { + super(Zone.BATTLEFIELD, effect, optional); + } - public static Trigger getInstance() { - return instance; + public BlocksCreatureWithFlyingTriggeredAbility(final BlocksCreatureWithFlyingTriggeredAbility ability) { + super(ability); } @Override - public boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game) { - if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(ability.getSourceId()) + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(this.getSourceId()) && game.getPermanent(event.getTargetId()).getAbilities().containsKey(FlyingAbility.getInstance().getId())) { return true; } @@ -94,6 +95,11 @@ class BlocksCreatureWithFlyingTrigger implements Trigger { @Override public String getRule() { - return "Whenever {this} blocks a creature with flying, "; + return "Whenever {this} blocks a creature with flying, " + super.getRule(); + } + + @Override + public BlocksCreatureWithFlyingTriggeredAbility copy() { + return new BlocksCreatureWithFlyingTriggeredAbility(this); } } \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java index 691ee67df9..621afb36e6 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java @@ -32,10 +32,9 @@ import mage.Constants.CardType; import mage.Constants.Duration; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.common.GenericTriggeredAbility; +import mage.abilities.common.BecomesBlockedTriggeredAbility; import mage.abilities.effects.common.continious.BoostSourceEffect; import mage.abilities.keyword.InfectAbility; -import mage.abilities.triggers.common.BecomesBlockedTrigger; import mage.cards.CardImpl; /** @@ -54,10 +53,7 @@ public class IchorclawMyr extends CardImpl { this.addAbility(InfectAbility.getInstance()); // Whenever Ichorclaw Myr becomes blocked, it gets +2/+2 until end of turn. - this.addAbility(new GenericTriggeredAbility( - BecomesBlockedTrigger.getInstance(), - new BoostSourceEffect(2, 2, Duration.EndOfTurn), - false)); + this.addAbility(new BecomesBlockedTriggeredAbility(new BoostSourceEffect(2, 2, Duration.EndOfTurn), false)); } public IchorclawMyr(final IchorclawMyr card) { diff --git a/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java b/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java index ca232447e1..0dfdd8d614 100644 --- a/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java +++ b/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java @@ -35,9 +35,8 @@ import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.GenericTriggeredAbility; +import mage.abilities.common.BlocksTriggeredAbility; import mage.abilities.effects.OneShotEffect; -import mage.abilities.triggers.common.BlocksTrigger; import mage.cards.CardImpl; import mage.game.Game; import mage.game.permanent.Permanent; @@ -58,7 +57,7 @@ public class LoyalSentry extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - this.addAbility(new GenericTriggeredAbility(BlocksTrigger.getInstance(), new LoyalSentryEffect(), false)); + this.addAbility(new BlocksTriggeredAbility(new LoyalSentryEffect(), false)); } public LoyalSentry (final LoyalSentry card) { @@ -100,6 +99,6 @@ class LoyalSentryEffect extends OneShotEffect { @Override public String getText(Ability source) { - return "destroy that creature and Loyal Sentry"; + return "destroy that creature and {this}"; } } \ No newline at end of file diff --git a/Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java b/Mage/src/mage/abilities/common/BecomesBlockedTriggeredAbility.java similarity index 71% rename from Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java rename to Mage/src/mage/abilities/common/BecomesBlockedTriggeredAbility.java index 95ab24dcee..9c95d7a057 100644 --- a/Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java +++ b/Mage/src/mage/abilities/common/BecomesBlockedTriggeredAbility.java @@ -25,10 +25,11 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ -package mage.abilities.triggers.common; +package mage.abilities.common; -import mage.abilities.TriggeredAbility; -import mage.abilities.triggers.Trigger; +import mage.Constants.Zone; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -38,19 +39,22 @@ import mage.target.common.TargetCreaturePermanent; * * @author North */ -public class BecomesBlockedTrigger implements Trigger { - private static Trigger instance = new BecomesBlockedTrigger(); - - public static Trigger getInstance(){ - return instance; +public class BecomesBlockedTriggeredAbility extends TriggeredAbilityImpl { + + public BecomesBlockedTriggeredAbility(Effect effect, boolean optional) { + super(Zone.BATTLEFIELD, effect, optional); + } + + public BecomesBlockedTriggeredAbility(final BecomesBlockedTriggeredAbility ability) { + super(ability); } @Override - public boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game) { - if (event.getType() == EventType.BLOCKER_DECLARED && event.getTargetId().equals(ability.getSourceId())) { + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.BLOCKER_DECLARED && event.getTargetId().equals(this.getSourceId())) { TargetCreaturePermanent target = new TargetCreaturePermanent(); target.add(event.getSourceId(), game); - ability.addTarget(target); + this.addTarget(target); return true; } return false; @@ -58,6 +62,11 @@ public class BecomesBlockedTrigger implements Trigger { @Override public String getRule() { - return "Whenever {this} becomes blocked, "; + return "Whenever {this} becomes blocked, " + super.getRule(); } -} + + @Override + public BecomesBlockedTriggeredAbility copy() { + return new BecomesBlockedTriggeredAbility(this); + } +} \ No newline at end of file diff --git a/Mage/src/mage/abilities/triggers/common/BlocksTrigger.java b/Mage/src/mage/abilities/common/BlocksTriggeredAbility.java similarity index 73% rename from Mage/src/mage/abilities/triggers/common/BlocksTrigger.java rename to Mage/src/mage/abilities/common/BlocksTriggeredAbility.java index 79534931eb..76f734e3ac 100644 --- a/Mage/src/mage/abilities/triggers/common/BlocksTrigger.java +++ b/Mage/src/mage/abilities/common/BlocksTriggeredAbility.java @@ -25,10 +25,11 @@ * authors and should not be interpreted as representing official policies, either expressed * or implied, of BetaSteward_at_googlemail.com. */ -package mage.abilities.triggers.common; +package mage.abilities.common; -import mage.abilities.TriggeredAbility; -import mage.abilities.triggers.Trigger; +import mage.Constants.Zone; +import mage.abilities.TriggeredAbilityImpl; +import mage.abilities.effects.Effect; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.events.GameEvent.EventType; @@ -38,20 +39,22 @@ import mage.target.common.TargetCreaturePermanent; * * @author North */ -public class BlocksTrigger implements Trigger { +public class BlocksTriggeredAbility extends TriggeredAbilityImpl { - private static Trigger instance = new BecomesBlockedTrigger(); + public BlocksTriggeredAbility(Effect effect, boolean optional) { + super(Zone.BATTLEFIELD, effect, optional); + } - public static Trigger getInstance() { - return instance; + public BlocksTriggeredAbility(final BlocksTriggeredAbility ability) { + super(ability); } @Override - public boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game) { - if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(ability.getSourceId())) { + public boolean checkTrigger(GameEvent event, Game game) { + if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(this.getSourceId())) { TargetCreaturePermanent target = new TargetCreaturePermanent(); target.add(event.getTargetId(), game); - ability.addTarget(target); + this.addTarget(target); return true; } return false; @@ -59,6 +62,11 @@ public class BlocksTrigger implements Trigger { @Override public String getRule() { - return "When {this} blocks, "; + return "Whenever {this} blocks, " + super.getRule(); } -} + + @Override + public BlocksTriggeredAbility copy() { + return new BlocksTriggeredAbility(this); + } +} \ No newline at end of file diff --git a/Mage/src/mage/abilities/common/GenericTriggeredAbility.java b/Mage/src/mage/abilities/common/GenericTriggeredAbility.java deleted file mode 100644 index bd8a97a99a..0000000000 --- a/Mage/src/mage/abilities/common/GenericTriggeredAbility.java +++ /dev/null @@ -1,68 +0,0 @@ -/* - * 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 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * 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.common; - -import mage.Constants.Zone; -import mage.abilities.TriggeredAbilityImpl; -import mage.abilities.effects.Effect; -import mage.abilities.triggers.Trigger; -import mage.game.Game; -import mage.game.events.GameEvent; - -/** - * - * @author North - */ -public class GenericTriggeredAbility extends TriggeredAbilityImpl { - - private Trigger trigger; - - public GenericTriggeredAbility(Trigger trigger, Effect effect, boolean optional) { - super(Zone.BATTLEFIELD, effect, optional); - this.trigger = trigger; - } - - public GenericTriggeredAbility(final GenericTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - return trigger.checkTrigger(this, event, game); - } - - @Override - public String getRule() { - return trigger.getRule() + super.getRule(); - } - - @Override - public GenericTriggeredAbility copy() { - return new GenericTriggeredAbility(this); - } -} diff --git a/Mage/src/mage/abilities/triggers/Trigger.java b/Mage/src/mage/abilities/triggers/Trigger.java deleted file mode 100644 index 52a89d49f5..0000000000 --- a/Mage/src/mage/abilities/triggers/Trigger.java +++ /dev/null @@ -1,58 +0,0 @@ -/* - * 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 - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR - * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON - * 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.triggers; - -import mage.abilities.TriggeredAbility; -import mage.game.Game; -import mage.game.events.GameEvent; - -import java.io.Serializable; - -/** - * Interface describing an Event Trigger - * - * @author North - */ -public interface Trigger extends Serializable { - - /** - * Checks if the event triggered the ability - * - * @param ability - * @param event - * @param game - * @return - */ - boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game); - - /** - * - * @return rule text for trigger - */ - String getRule(); -}