From a6342ae6e0daea2cdad190dbe8952216a31c0365 Mon Sep 17 00:00:00 2001 From: North Date: Sun, 15 May 2011 15:25:58 +0300 Subject: [PATCH] Cards added: Ezuris Archers, Ichorclaw Myr Added Trigger interface and 2 implementations and the GenericTriggeredAbility class. --- .../mage/sets/magic2011/GoldenglowMoth.java | 5 +- .../sets/scarsofmirrodin/EzurisArchers.java | 99 ++++++++++++ .../sets/scarsofmirrodin/IchorclawMyr.java | 145 +++++++++--------- .../src/mage/sets/tenth/LoyalSentry.java | 9 +- .../common/GenericTriggeredAbility.java | 68 ++++++++ Mage/src/mage/abilities/triggers/Trigger.java | 58 +++++++ .../common/BecomesBlockedTrigger.java | 63 ++++++++ .../triggers/common/BlocksTrigger.java | 64 ++++++++ 8 files changed, 431 insertions(+), 80 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java rename Mage/src/mage/abilities/common/BlocksTriggeredAbility.java => Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java (54%) create mode 100644 Mage/src/mage/abilities/common/GenericTriggeredAbility.java create mode 100644 Mage/src/mage/abilities/triggers/Trigger.java create mode 100644 Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java create mode 100644 Mage/src/mage/abilities/triggers/common/BlocksTrigger.java diff --git a/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java b/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java index a2fb00df13..e5f6e06a3f 100644 --- a/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java +++ b/Mage.Sets/src/mage/sets/magic2011/GoldenglowMoth.java @@ -32,9 +32,10 @@ import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; import mage.MageInt; -import mage.abilities.common.BlocksTriggeredAbility; +import mage.abilities.common.GenericTriggeredAbility; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.keyword.FlyingAbility; +import mage.abilities.triggers.common.BlocksTrigger; import mage.cards.CardImpl; /** @@ -52,7 +53,7 @@ public class GoldenglowMoth extends CardImpl { this.toughness = new MageInt(1); this.addAbility(FlyingAbility.getInstance()); - this.addAbility(new BlocksTriggeredAbility(new GainLifeEffect(4), true)); + this.addAbility(new GenericTriggeredAbility(BlocksTrigger.getInstance(), new GainLifeEffect(4), true)); } diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java new file mode 100644 index 0000000000..13a1ac2ee5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/EzurisArchers.java @@ -0,0 +1,99 @@ +/* + * 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.sets.scarsofmirrodin; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Duration; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.TriggeredAbility; +import mage.abilities.common.GenericTriggeredAbility; +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; +import mage.game.events.GameEvent.EventType; + +/** + * + * @author North + */ +public class EzurisArchers extends CardImpl { + + public EzurisArchers(UUID ownerId) { + super(ownerId, 120, "Ezuri's Archers", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{G}"); + this.expansionSetCode = "SOM"; + this.subtype.add("Elf"); + this.subtype.add("Archer"); + + this.color.setGreen(true); + this.power = new MageInt(1); + this.toughness = new MageInt(2); + + 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)); + } + + public EzurisArchers(final EzurisArchers card) { + super(card); + } + + @Override + public EzurisArchers copy() { + return new EzurisArchers(this); + } +} + +class BlocksCreatureWithFlyingTrigger implements Trigger { + + private static Trigger instance = new BecomesBlockedTrigger(); + + public static Trigger getInstance() { + return instance; + } + + @Override + public boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game) { + if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(ability.getSourceId()) + && game.getPermanent(event.getTargetId()).getAbilities().containsKey(FlyingAbility.getInstance().getId())) { + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} blocks a creature with flying, "; + } +} \ No newline at end of file diff --git a/Mage/src/mage/abilities/common/BlocksTriggeredAbility.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java similarity index 54% rename from Mage/src/mage/abilities/common/BlocksTriggeredAbility.java rename to Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java index 5e6d6f8f85..691ee67df9 100644 --- a/Mage/src/mage/abilities/common/BlocksTriggeredAbility.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/IchorclawMyr.java @@ -1,74 +1,71 @@ -/* - * 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.game.Game; -import mage.game.events.GameEvent; -import mage.game.events.GameEvent.EventType; -import mage.target.common.TargetCreaturePermanent; - -/** - * - * @author BetaSteward_at_googlemail.com - */ -public class BlocksTriggeredAbility extends TriggeredAbilityImpl { - - public BlocksTriggeredAbility(Effect effect, boolean optional) { - super(Zone.BATTLEFIELD, effect, optional); - } - - public BlocksTriggeredAbility(final BlocksTriggeredAbility ability) { - super(ability); - } - - @Override - public boolean checkTrigger(GameEvent event, Game game) { - if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(this.getSourceId()) ) { - this.addTarget(new TargetCreaturePermanent()); - this.getTargets().get(0).add(event.getTargetId(), game); - return true; - } - return false; - } - - @Override - public String getRule() { - return "When {this} blocks, " + super.getRule(); - } - - @Override - public BlocksTriggeredAbility copy() { - return new BlocksTriggeredAbility(this); - } - - -} +/* + * 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.sets.scarsofmirrodin; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Duration; +import mage.Constants.Rarity; +import mage.MageInt; +import mage.abilities.common.GenericTriggeredAbility; +import mage.abilities.effects.common.continious.BoostSourceEffect; +import mage.abilities.keyword.InfectAbility; +import mage.abilities.triggers.common.BecomesBlockedTrigger; +import mage.cards.CardImpl; + +/** + * + * @author North + */ +public class IchorclawMyr extends CardImpl { + + public IchorclawMyr(UUID ownerId) { + super(ownerId, 166, "Ichorclaw Myr", Rarity.COMMON, new CardType[]{CardType.ARTIFACT, CardType.CREATURE}, "{2}"); + this.expansionSetCode = "SOM"; + this.subtype.add("Myr"); + + this.power = new MageInt(1); + this.toughness = new MageInt(1); + + 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)); + } + + public IchorclawMyr(final IchorclawMyr card) { + super(card); + } + + @Override + public IchorclawMyr copy() { + return new IchorclawMyr(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java b/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java index d8ce41e4d0..ca232447e1 100644 --- a/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java +++ b/Mage.Sets/src/mage/sets/tenth/LoyalSentry.java @@ -32,13 +32,12 @@ import java.util.UUID; import mage.Constants; import mage.Constants.CardType; -import mage.Constants.Duration; import mage.Constants.Rarity; -import mage.Constants.Zone; import mage.MageInt; import mage.abilities.Ability; -import mage.abilities.common.BlocksTriggeredAbility; +import mage.abilities.common.GenericTriggeredAbility; import mage.abilities.effects.OneShotEffect; +import mage.abilities.triggers.common.BlocksTrigger; import mage.cards.CardImpl; import mage.game.Game; import mage.game.permanent.Permanent; @@ -54,10 +53,12 @@ public class LoyalSentry extends CardImpl { this.expansionSetCode = "10E"; this.subtype.add("Human"); this.subtype.add("Soldier"); + this.color.setWhite(true); this.power = new MageInt(1); this.toughness = new MageInt(1); - this.addAbility(new BlocksTriggeredAbility(new LoyalSentryEffect(), false)); + + this.addAbility(new GenericTriggeredAbility(BlocksTrigger.getInstance(), new LoyalSentryEffect(), false)); } public LoyalSentry (final LoyalSentry card) { diff --git a/Mage/src/mage/abilities/common/GenericTriggeredAbility.java b/Mage/src/mage/abilities/common/GenericTriggeredAbility.java new file mode 100644 index 0000000000..bd8a97a99a --- /dev/null +++ b/Mage/src/mage/abilities/common/GenericTriggeredAbility.java @@ -0,0 +1,68 @@ +/* + * 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 new file mode 100644 index 0000000000..52a89d49f5 --- /dev/null +++ b/Mage/src/mage/abilities/triggers/Trigger.java @@ -0,0 +1,58 @@ +/* + * 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(); +} diff --git a/Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java b/Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java new file mode 100644 index 0000000000..95ab24dcee --- /dev/null +++ b/Mage/src/mage/abilities/triggers/common/BecomesBlockedTrigger.java @@ -0,0 +1,63 @@ +/* + * 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.common; + +import mage.abilities.TriggeredAbility; +import mage.abilities.triggers.Trigger; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author North + */ +public class BecomesBlockedTrigger implements Trigger { + private static Trigger instance = new BecomesBlockedTrigger(); + + public static Trigger getInstance(){ + return instance; + } + + @Override + public boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game) { + if (event.getType() == EventType.BLOCKER_DECLARED && event.getTargetId().equals(ability.getSourceId())) { + TargetCreaturePermanent target = new TargetCreaturePermanent(); + target.add(event.getSourceId(), game); + ability.addTarget(target); + return true; + } + return false; + } + + @Override + public String getRule() { + return "Whenever {this} becomes blocked, "; + } +} diff --git a/Mage/src/mage/abilities/triggers/common/BlocksTrigger.java b/Mage/src/mage/abilities/triggers/common/BlocksTrigger.java new file mode 100644 index 0000000000..79534931eb --- /dev/null +++ b/Mage/src/mage/abilities/triggers/common/BlocksTrigger.java @@ -0,0 +1,64 @@ +/* + * 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.common; + +import mage.abilities.TriggeredAbility; +import mage.abilities.triggers.Trigger; +import mage.game.Game; +import mage.game.events.GameEvent; +import mage.game.events.GameEvent.EventType; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author North + */ +public class BlocksTrigger implements Trigger { + + private static Trigger instance = new BecomesBlockedTrigger(); + + public static Trigger getInstance() { + return instance; + } + + @Override + public boolean checkTrigger(TriggeredAbility ability, GameEvent event, Game game) { + if (event.getType() == EventType.BLOCKER_DECLARED && event.getSourceId().equals(ability.getSourceId())) { + TargetCreaturePermanent target = new TargetCreaturePermanent(); + target.add(event.getTargetId(), game); + ability.addTarget(target); + return true; + } + return false; + } + + @Override + public String getRule() { + return "When {this} blocks, "; + } +}