From 5c813a273f8b00998bcc1c9372670f76ca6f3bf2 Mon Sep 17 00:00:00 2001 From: North Date: Thu, 25 Aug 2011 11:53:37 +0300 Subject: [PATCH] Added CantBeBlockedByOneEffect and cards using it (also refactored cards) --- .../sets/championsofkamigawa/VineKami.java | 68 ++++++++++++++ .../sets/magic2012/StormbloodBerserker.java | 90 +++++-------------- .../riseoftheeldrazi/PathrazerOfUlamog.java | 53 +---------- .../mage/sets/shadowmoor/HordeOfBoggarts.java | 79 ++++++++++++++++ .../sets/shardsofalara/KederektCreeper.java | 70 +++++++++++++++ .../src/mage/sets/tenth/ViashinoRunner.java | 66 ++++++++++++++ .../continious/CantBeBlockedByOneEffect.java | 86 ++++++++++++++++++ 7 files changed, 394 insertions(+), 118 deletions(-) create mode 100644 Mage.Sets/src/mage/sets/championsofkamigawa/VineKami.java create mode 100644 Mage.Sets/src/mage/sets/shadowmoor/HordeOfBoggarts.java create mode 100644 Mage.Sets/src/mage/sets/shardsofalara/KederektCreeper.java create mode 100644 Mage.Sets/src/mage/sets/tenth/ViashinoRunner.java create mode 100644 Mage/src/mage/abilities/effects/common/continious/CantBeBlockedByOneEffect.java diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/VineKami.java b/Mage.Sets/src/mage/sets/championsofkamigawa/VineKami.java new file mode 100644 index 0000000000..adf9dca54b --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/VineKami.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.sets.championsofkamigawa; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect; +import mage.abilities.keyword.SoulshiftAbility; +import mage.cards.CardImpl; + +/** + * + * @author North + */ +public class VineKami extends CardImpl { + + public VineKami(UUID ownerId) { + super(ownerId, 249, "Vine Kami", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{6}{G}"); + this.expansionSetCode = "CHK"; + this.subtype.add("Spirit"); + + this.color.setGreen(true); + this.power = new MageInt(4); + this.toughness = new MageInt(4); + + // Vine Kami can't be blocked except by two or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(2))); + this.addAbility(new SoulshiftAbility(6)); + } + + public VineKami(final VineKami card) { + super(card); + } + + @Override + public VineKami copy() { + return new VineKami(this); + } +} diff --git a/Mage.Sets/src/mage/sets/magic2012/StormbloodBerserker.java b/Mage.Sets/src/mage/sets/magic2012/StormbloodBerserker.java index 3289b96bc1..52541235ba 100644 --- a/Mage.Sets/src/mage/sets/magic2012/StormbloodBerserker.java +++ b/Mage.Sets/src/mage/sets/magic2012/StormbloodBerserker.java @@ -27,88 +27,42 @@ */ package mage.sets.magic2012; -import mage.Constants; +import java.util.UUID; import mage.Constants.CardType; import mage.Constants.Rarity; +import mage.Constants.Zone; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect; import mage.abilities.keyword.BloodthirstAbility; import mage.cards.CardImpl; -import mage.game.Game; -import mage.game.permanent.Permanent; - -import java.util.UUID; /** * @author nantuko */ public class StormbloodBerserker extends CardImpl { - public StormbloodBerserker(UUID ownerId) { - super(ownerId, 156, "Stormblood Berserker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); - this.expansionSetCode = "M12"; - this.subtype.add("Human"); - this.subtype.add("Berserker"); + public StormbloodBerserker(UUID ownerId) { + super(ownerId, 156, "Stormblood Berserker", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{1}{R}"); + this.expansionSetCode = "M12"; + this.subtype.add("Human"); + this.subtype.add("Berserker"); - this.color.setRed(true); - this.power = new MageInt(1); - this.toughness = new MageInt(1); + this.color.setRed(true); + this.power = new MageInt(1); + this.toughness = new MageInt(1); - this.addAbility(new BloodthirstAbility(2)); - // Stormblood Berserker can't be blocked except by two or more creatures. - this.addAbility(new SimpleStaticAbility(Constants.Zone.BATTLEFIELD, new StormbloodBerserkerEffect())); - } + this.addAbility(new BloodthirstAbility(2)); + // Stormblood Berserker can't be blocked except by two or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(2))); + } - public StormbloodBerserker(final StormbloodBerserker card) { - super(card); - } - - @Override - public StormbloodBerserker copy() { - return new StormbloodBerserker(this); - } -} - -class StormbloodBerserkerEffect extends ContinuousEffectImpl { - - public StormbloodBerserkerEffect() { - super(Constants.Duration.WhileOnBattlefield, Constants.Outcome.Benefit); - staticText = "{this} can't be blocked except by two or more creatures"; - } - - public StormbloodBerserkerEffect(final StormbloodBerserkerEffect effect) { - super(effect); - } - - @Override - public StormbloodBerserkerEffect copy() { - return new StormbloodBerserkerEffect(this); - } - - @Override - public boolean apply(Constants.Layer layer, Constants.SubLayer sublayer, Ability source, Game game) { - Permanent perm = game.getPermanent(source.getSourceId()); - if (perm != null) { - switch (layer) { - case RulesEffects: - perm.setMinBlockedBy(2); - break; - } - return true; - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Constants.Layer layer) { - return layer == Constants.Layer.RulesEffects; - } + public StormbloodBerserker(final StormbloodBerserker card) { + super(card); + } + @Override + public StormbloodBerserker copy() { + return new StormbloodBerserker(this); + } } diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/PathrazerOfUlamog.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/PathrazerOfUlamog.java index b7809b9107..66da58aab4 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/PathrazerOfUlamog.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/PathrazerOfUlamog.java @@ -29,20 +29,13 @@ package mage.sets.riseoftheeldrazi; import java.util.UUID; import mage.Constants.CardType; -import mage.Constants.Duration; -import mage.Constants.Layer; -import mage.Constants.Outcome; import mage.Constants.Rarity; -import mage.Constants.SubLayer; import mage.Constants.Zone; import mage.MageInt; -import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; -import mage.abilities.effects.ContinuousEffectImpl; +import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect; import mage.abilities.keyword.AnnihilatorAbility; import mage.cards.CardImpl; -import mage.game.Game; -import mage.game.permanent.Permanent; /** * @@ -59,7 +52,8 @@ public class PathrazerOfUlamog extends CardImpl { this.toughness = new MageInt(9); this.addAbility(new AnnihilatorAbility(3)); - this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new PathrazerOfUlamogEffect())); + // Pathrazer of Ulamog can't be blocked except by three or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(3))); } public PathrazerOfUlamog(final PathrazerOfUlamog card) { @@ -71,44 +65,3 @@ public class PathrazerOfUlamog extends CardImpl { return new PathrazerOfUlamog(this); } } - -class PathrazerOfUlamogEffect extends ContinuousEffectImpl { - - public PathrazerOfUlamogEffect() { - super(Duration.WhileOnBattlefield, Outcome.Benefit); - staticText = "{this} can't be blocked except by three or more creatures"; - } - - public PathrazerOfUlamogEffect(final PathrazerOfUlamogEffect effect) { - super(effect); - } - - @Override - public PathrazerOfUlamogEffect copy() { - return new PathrazerOfUlamogEffect(this); - } - - @Override - public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { - Permanent perm = game.getPermanent(source.getSourceId()); - if (perm != null) { - switch (layer) { - case RulesEffects: - perm.setMinBlockedBy(3); - break; - } - return true; - } - return false; - } - - @Override - public boolean apply(Game game, Ability source) { - return false; - } - - @Override - public boolean hasLayer(Layer layer) { - return layer == Layer.RulesEffects; - } -} diff --git a/Mage.Sets/src/mage/sets/shadowmoor/HordeOfBoggarts.java b/Mage.Sets/src/mage/sets/shadowmoor/HordeOfBoggarts.java new file mode 100644 index 0000000000..a46be0365f --- /dev/null +++ b/Mage.Sets/src/mage/sets/shadowmoor/HordeOfBoggarts.java @@ -0,0 +1,79 @@ +/* + * 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.shadowmoor; + +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.common.SimpleStaticAbility; +import mage.abilities.dynamicvalue.common.PermanentsOnBattlefieldCount; +import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect; +import mage.abilities.effects.common.continious.SetPowerToughnessSourceEffect; +import mage.cards.CardImpl; +import mage.filter.common.FilterControlledPermanent; + +/** + * + * @author North + */ +public class HordeOfBoggarts extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("red permanents you control"); + + static { + filter.getColor().setRed(true); + filter.setUseColor(true); + } + + public HordeOfBoggarts(UUID ownerId) { + super(ownerId, 94, "Horde of Boggarts", Rarity.UNCOMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "SHM"; + this.subtype.add("Goblin"); + + this.color.setRed(true); + this.power = new MageInt(0); + this.toughness = new MageInt(0); + + // Horde of Boggarts's power and toughness are each equal to the number of red permanents you control. + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(new PermanentsOnBattlefieldCount(filter), Duration.EndOfGame))); + // Horde of Boggarts can't be blocked except by two or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(2))); + } + + public HordeOfBoggarts(final HordeOfBoggarts card) { + super(card); + } + + @Override + public HordeOfBoggarts copy() { + return new HordeOfBoggarts(this); + } +} diff --git a/Mage.Sets/src/mage/sets/shardsofalara/KederektCreeper.java b/Mage.Sets/src/mage/sets/shardsofalara/KederektCreeper.java new file mode 100644 index 0000000000..c86c3ad34d --- /dev/null +++ b/Mage.Sets/src/mage/sets/shardsofalara/KederektCreeper.java @@ -0,0 +1,70 @@ +/* + * 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.shardsofalara; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect; +import mage.abilities.keyword.DeathtouchAbility; +import mage.cards.CardImpl; + +/** + * + * @author North + */ +public class KederektCreeper extends CardImpl { + + public KederektCreeper(UUID ownerId) { + super(ownerId, 176, "Kederekt Creeper", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{U}{B}{R}"); + this.expansionSetCode = "ALA"; + this.subtype.add("Horror"); + + this.color.setRed(true); + this.color.setBlue(true); + this.color.setBlack(true); + this.power = new MageInt(2); + this.toughness = new MageInt(3); + + this.addAbility(DeathtouchAbility.getInstance()); + // Kederekt Creeper can't be blocked except by two or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(2))); + } + + public KederektCreeper(final KederektCreeper card) { + super(card); + } + + @Override + public KederektCreeper copy() { + return new KederektCreeper(this); + } +} diff --git a/Mage.Sets/src/mage/sets/tenth/ViashinoRunner.java b/Mage.Sets/src/mage/sets/tenth/ViashinoRunner.java new file mode 100644 index 0000000000..0e13edd8e2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/tenth/ViashinoRunner.java @@ -0,0 +1,66 @@ +/* + * 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.tenth; + +import java.util.UUID; +import mage.Constants.CardType; +import mage.Constants.Rarity; +import mage.Constants.Zone; +import mage.MageInt; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.effects.common.continious.CantBeBlockedByOneEffect; +import mage.cards.CardImpl; + +/** + * + * @author North + */ +public class ViashinoRunner extends CardImpl { + + public ViashinoRunner(UUID ownerId) { + super(ownerId, 245, "Viashino Runner", Rarity.COMMON, new CardType[]{CardType.CREATURE}, "{3}{R}"); + this.expansionSetCode = "10E"; + this.subtype.add("Viashino"); + + this.color.setRed(true); + this.power = new MageInt(3); + this.toughness = new MageInt(2); + + // Viashino Runner can't be blocked except by two or more creatures. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantBeBlockedByOneEffect(2))); + } + + public ViashinoRunner(final ViashinoRunner card) { + super(card); + } + + @Override + public ViashinoRunner copy() { + return new ViashinoRunner(this); + } +} diff --git a/Mage/src/mage/abilities/effects/common/continious/CantBeBlockedByOneEffect.java b/Mage/src/mage/abilities/effects/common/continious/CantBeBlockedByOneEffect.java new file mode 100644 index 0000000000..1654a3a75f --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/continious/CantBeBlockedByOneEffect.java @@ -0,0 +1,86 @@ +/* + * 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.effects.common.continious; + +import mage.Constants.Duration; +import mage.Constants.Layer; +import mage.Constants.Outcome; +import mage.Constants.SubLayer; +import mage.abilities.Ability; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.game.Game; +import mage.game.permanent.Permanent; + +/** + * + * @author North + */ +public class CantBeBlockedByOneEffect extends ContinuousEffectImpl { + + protected int amount; + + public CantBeBlockedByOneEffect(int amount) { + super(Duration.WhileOnBattlefield, Outcome.Benefit); + this.amount = amount; + staticText = "{this} can't be blocked except by " + amount + " or more creatures"; + } + + public CantBeBlockedByOneEffect(final CantBeBlockedByOneEffect effect) { + super(effect); + this.amount = effect.amount; + } + + @Override + public CantBeBlockedByOneEffect copy() { + return new CantBeBlockedByOneEffect(this); + } + + @Override + public boolean apply(Layer layer, SubLayer sublayer, Ability source, Game game) { + Permanent perm = game.getPermanent(source.getSourceId()); + if (perm != null) { + switch (layer) { + case RulesEffects: + perm.setMinBlockedBy(amount); + break; + } + return true; + } + return false; + } + + @Override + public boolean apply(Game game, Ability source) { + return false; + } + + @Override + public boolean hasLayer(Layer layer) { + return layer == Layer.RulesEffects; + } +} \ No newline at end of file