From 2394c711ce05181d959337598accc8f4c30db9b8 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:12:38 -0300 Subject: [PATCH 01/42] Base changes for the new lands --- .../RemoveVariableCountersSourceCost.java | 11 + .../common/AddManaInAnyCombinationEffect.java | 251 ++++++++++-------- .../BecomesCreatureSourceEffect.java | 1 - ...seAbilityOrAnotherAbilityTargetEffect.java | 130 +++++++++ .../continuous/LoseAbilityTargetEffect.java | 178 +++++++------ .../common/TargetControlledPermanent.java | 1 - 6 files changed, 385 insertions(+), 187 deletions(-) create mode 100644 Mage/src/mage/abilities/effects/common/continuous/LoseAbilityOrAnotherAbilityTargetEffect.java diff --git a/Mage/src/mage/abilities/costs/common/RemoveVariableCountersSourceCost.java b/Mage/src/mage/abilities/costs/common/RemoveVariableCountersSourceCost.java index 29cc844711..49020791d4 100644 --- a/Mage/src/mage/abilities/costs/common/RemoveVariableCountersSourceCost.java +++ b/Mage/src/mage/abilities/costs/common/RemoveVariableCountersSourceCost.java @@ -54,11 +54,22 @@ public class RemoveVariableCountersSourceCost extends VariableCostImpl { public RemoveVariableCountersSourceCost(Counter counter) { this(counter, 0); } + + public RemoveVariableCountersSourceCost(Counter counter, int minimalCountersToPay, String text) { + this(counter, minimalCountersToPay); + this.text = text; + } + + public RemoveVariableCountersSourceCost(Counter counter, String text) { + this(counter); + this.text = text; + } public RemoveVariableCountersSourceCost(final RemoveVariableCountersSourceCost cost) { super(cost); this.minimalCountersToPay = cost.minimalCountersToPay; this.counterName = cost.counterName; + this.text = cost.text; } @Override diff --git a/Mage/src/mage/abilities/effects/common/AddManaInAnyCombinationEffect.java b/Mage/src/mage/abilities/effects/common/AddManaInAnyCombinationEffect.java index 2e6ce2a8e4..19f56cfeb8 100644 --- a/Mage/src/mage/abilities/effects/common/AddManaInAnyCombinationEffect.java +++ b/Mage/src/mage/abilities/effects/common/AddManaInAnyCombinationEffect.java @@ -1,107 +1,144 @@ -/* - * To change this license header, choose License Headers in Project Properties. - * To change this template file, choose Tools | Templates - * and open the template in the editor. - */ - -package mage.abilities.effects.common; - -import java.util.ArrayList; -import java.util.Arrays; -import mage.Mana; -import mage.abilities.Ability; -import mage.abilities.dynamicvalue.DynamicValue; -import mage.abilities.dynamicvalue.common.StaticValue; -import mage.constants.ColoredManaSymbol; -import mage.game.Game; -import mage.players.Player; -import mage.util.CardUtil; - -/** - * - * @author LevelX2 - */ -public class AddManaInAnyCombinationEffect extends ManaEffect { - - private ArrayList manaSymbols = new ArrayList<>(); - private final DynamicValue amount; - - public AddManaInAnyCombinationEffect(int amount) { - this(new StaticValue(amount), ColoredManaSymbol.B, ColoredManaSymbol.U, ColoredManaSymbol.R, ColoredManaSymbol.W, ColoredManaSymbol.G); - } - - public AddManaInAnyCombinationEffect(int amount, ColoredManaSymbol... coloredManaSymbols) { - this(new StaticValue(amount), coloredManaSymbols); - } - - public AddManaInAnyCombinationEffect(DynamicValue amount, ColoredManaSymbol... coloredManaSymbols) { - super(); - this.manaSymbols.addAll(Arrays.asList(coloredManaSymbols)); - this.amount = amount; - this.staticText = setText(); - } - - public AddManaInAnyCombinationEffect(final AddManaInAnyCombinationEffect effect) { - super(effect); - this.manaSymbols = effect.manaSymbols; - this.amount = effect.amount; - } - - @Override - public AddManaInAnyCombinationEffect copy() { - return new AddManaInAnyCombinationEffect(this); - } - - @Override - public boolean apply(Game game, Ability source) { - Player player = game.getPlayer(source.getControllerId()); - if (player != null){ - Mana mana = new Mana(); - int amountOfManaLeft = amount.calculate(game, source, this); - - while (amountOfManaLeft > 0 && player.isInGame()) { - for (ColoredManaSymbol coloredManaSymbol: manaSymbols) { - int number = player.getAmount(0, amountOfManaLeft, new StringBuilder("How many ").append(coloredManaSymbol.name()).append(" mana?").toString(), game); - if (number > 0) { - for (int i = 0; i < number; i++) { - mana.add(new Mana(coloredManaSymbol)); - } - amountOfManaLeft -= number; - } - if (amountOfManaLeft == 0) { - break; - } - } - } - checkToFirePossibleEvents(mana, game, source); - player.getManaPool().addMana(mana, game, source); - return true; - } - return false; - } - - @Override - public Mana getMana(Game game, Ability source) { - return null; - } - - private String setText() { - StringBuilder sb = new StringBuilder("Add "); - sb.append(CardUtil.numberToText(amount.toString())); - sb.append(" mana in any combination of "); - if (manaSymbols.size() == 5) { - sb.append("colors"); - } else { - int i = 0; - for (ColoredManaSymbol coloredManaSymbol: manaSymbols) { - i++; - if (i > 1) { - sb.append(" and/or "); - } - sb.append("{").append(coloredManaSymbol.toString()).append("}"); - } - } - sb.append(" to your mana pool"); - return sb.toString(); - } -} +/* + * 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; + +import java.util.ArrayList; +import java.util.Arrays; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.dynamicvalue.DynamicValue; +import mage.abilities.dynamicvalue.common.StaticValue; +import mage.constants.ColoredManaSymbol; +import mage.game.Game; +import mage.players.Player; +import mage.util.CardUtil; + +/** + * + * @author LevelX2 + */ +public class AddManaInAnyCombinationEffect extends ManaEffect { + + private ArrayList manaSymbols = new ArrayList<>(); + private final DynamicValue amount; + + public AddManaInAnyCombinationEffect(int amount) { + this(new StaticValue(amount), ColoredManaSymbol.B, ColoredManaSymbol.U, ColoredManaSymbol.R, ColoredManaSymbol.W, ColoredManaSymbol.G); + } + + public AddManaInAnyCombinationEffect(int amount, ColoredManaSymbol... coloredManaSymbols) { + this(new StaticValue(amount), coloredManaSymbols); + } + + public AddManaInAnyCombinationEffect(DynamicValue amount, ColoredManaSymbol... coloredManaSymbols) { + super(); + this.manaSymbols.addAll(Arrays.asList(coloredManaSymbols)); + this.amount = amount; + this.staticText = setText(); + } + + public AddManaInAnyCombinationEffect(int amount, String text) { + this(amount); + this.staticText = text; + } + + public AddManaInAnyCombinationEffect(int amount, String text, ColoredManaSymbol... coloredManaSymbols) { + this(amount, coloredManaSymbols); + this.staticText = text; + } + + public AddManaInAnyCombinationEffect(DynamicValue amount, String text, ColoredManaSymbol... coloredManaSymbols) { + this(amount, coloredManaSymbols); + this.staticText = text; + } + + public AddManaInAnyCombinationEffect(final AddManaInAnyCombinationEffect effect) { + super(effect); + this.manaSymbols = effect.manaSymbols; + this.amount = effect.amount; + } + + @Override + public AddManaInAnyCombinationEffect copy() { + return new AddManaInAnyCombinationEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null){ + Mana mana = new Mana(); + int amountOfManaLeft = amount.calculate(game, source, this); + + while (amountOfManaLeft > 0 && player.isInGame()) { + for (ColoredManaSymbol coloredManaSymbol: manaSymbols) { + int number = player.getAmount(0, amountOfManaLeft, new StringBuilder("How many ").append(coloredManaSymbol.name()).append(" mana?").toString(), game); + if (number > 0) { + for (int i = 0; i < number; i++) { + mana.add(new Mana(coloredManaSymbol)); + } + amountOfManaLeft -= number; + } + if (amountOfManaLeft == 0) { + break; + } + } + } + checkToFirePossibleEvents(mana, game, source); + player.getManaPool().addMana(mana, game, source); + return true; + } + return false; + } + + @Override + public Mana getMana(Game game, Ability source) { + return null; + } + + private String setText() { + StringBuilder sb = new StringBuilder("Add "); + sb.append(CardUtil.numberToText(amount.toString())); + sb.append(" mana in any combination of "); + if (manaSymbols.size() == 5) { + sb.append("colors"); + } else { + int i = 0; + for (ColoredManaSymbol coloredManaSymbol: manaSymbols) { + i++; + if (i > 1) { + sb.append(" and/or "); + } + sb.append("{").append(coloredManaSymbol.toString()).append("}"); + } + } + sb.append(" to your mana pool"); + return sb.toString(); + } +} diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java index 74eff7f8a2..ee60cdf57e 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java @@ -32,7 +32,6 @@ import mage.MageInt; import mage.MageObjectReference; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffectImpl; -import mage.cards.Card; import mage.constants.CardType; import mage.constants.Duration; import mage.constants.Layer; diff --git a/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityOrAnotherAbilityTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityOrAnotherAbilityTargetEffect.java new file mode 100644 index 0000000000..beec0ac0a2 --- /dev/null +++ b/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityOrAnotherAbilityTargetEffect.java @@ -0,0 +1,130 @@ +/* + * 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.continuous; + +import java.util.HashSet; +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.choices.ChoiceImpl; +import mage.constants.Duration; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; +import mage.target.Target; + +/** + * + * @author a + */ +public class LoseAbilityOrAnotherAbilityTargetEffect extends LoseAbilityTargetEffect { + + protected Ability ability2; + + public LoseAbilityOrAnotherAbilityTargetEffect(Ability ability, Ability ability2) { + this(ability, ability2, Duration.WhileOnBattlefield); + } + + public LoseAbilityOrAnotherAbilityTargetEffect(Ability ability, Ability ability2, Duration duration) { + super(ability, duration); + this.ability2 = ability2; + } + + public LoseAbilityOrAnotherAbilityTargetEffect(final LoseAbilityOrAnotherAbilityTargetEffect effect) { + super(effect); + this.ability2 = effect.ability2.copy(); + } + + @Override + public LoseAbilityOrAnotherAbilityTargetEffect copy() { + return new LoseAbilityOrAnotherAbilityTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent != null) { + ChoiceImpl chooseAbility = new ChoiceImpl(); + chooseAbility.setMessage("What ability do you wish to remove?"); + + HashSet choice = new HashSet<>(); + + if (permanent.getAbilities().contains(ability)) { + choice.add(ability.getRule()); + } + + if (permanent.getAbilities().contains(ability2)) { + choice.add(ability2.getRule()); + } + + chooseAbility.setChoices(choice); + + Player player = game.getPlayer(source.getControllerId()); + + if (player.choose(outcome, chooseAbility, game)) { + + String chosenAbility = chooseAbility.getChoice(); + + if (chosenAbility.equals(ability.getRule())) { + while (permanent.getAbilities().contains(ability)) { + permanent.getAbilities().remove(ability); + } + } + else if (chosenAbility.equals(ability2.getRule())) { + while (permanent.getAbilities().contains(ability2)) { + permanent.getAbilities().remove(ability2); + } + } + } + } + return true; + } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + StringBuilder sb = new StringBuilder(); + Target target = mode.getTargets().get(0); + if (target.getNumberOfTargets() > 1) { + if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) { + sb.append("Up to"); + } + sb.append(target.getMaxNumberOfTargets()).append(" target ").append(target.getTargetName()).append(" loses "); + } else { + sb.append("Target ").append(target.getTargetName()).append(" loses "); + } + sb.append(ability.getRule()); + sb.append(" or "); + sb.append(ability2.getRule()); + if (!duration.toString().isEmpty()) { + sb.append(" ").append(duration.toString()); + } + return sb.toString(); + } +} diff --git a/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java index e59f10afbd..d706b7d6b8 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/LoseAbilityTargetEffect.java @@ -1,78 +1,100 @@ -/* - * To change this template, choose Tools | Templates - * and open the template in the editor. - */ -package mage.abilities.effects.common.continuous; - -import mage.abilities.Ability; -import mage.abilities.Mode; -import mage.abilities.effects.ContinuousEffectImpl; -import mage.constants.Duration; -import mage.constants.Layer; -import mage.constants.Outcome; -import mage.constants.SubLayer; -import mage.game.Game; -import mage.game.permanent.Permanent; -import mage.target.Target; - -/** - * - * @author jeffwadsworth - */ -public class LoseAbilityTargetEffect extends ContinuousEffectImpl{ - - protected Ability ability; - - public LoseAbilityTargetEffect(Ability ability){ - this(ability, Duration.WhileOnBattlefield); - } - - public LoseAbilityTargetEffect(Ability ability, Duration duration){ - super(duration, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.LoseAbility); - this.ability = ability; - } - - public LoseAbilityTargetEffect(final LoseAbilityTargetEffect effect){ - super(effect); - this.ability = effect.ability.copy(); - } - - @Override - public LoseAbilityTargetEffect copy(){ - return new LoseAbilityTargetEffect(this); - } - - @Override - public boolean apply(Game game, Ability source){ - Permanent permanent = game.getPermanent(source.getFirstTarget()); - if(permanent != null){ - while(permanent.getAbilities().contains(ability)){ - permanent.getAbilities().remove(ability); - } - } - return true; - } - - @Override - public String getText(Mode mode) { - if (staticText != null && !staticText.isEmpty()) { - return staticText; - } - StringBuilder sb = new StringBuilder(); - Target target = mode.getTargets().get(0); - if(target.getNumberOfTargets() > 1){ - if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) { - sb.append("Up to"); - } - sb.append(target.getMaxNumberOfTargets()).append(" target ").append(target.getTargetName()).append(" loses "); - } else { - sb.append("Target ").append(target.getTargetName()).append(" loses "); - } - sb.append(ability.getRule()); - if (!duration.toString().isEmpty()) { - sb.append(" ").append(duration.toString()); - } - return sb.toString(); - } -} - +/* + * 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.continuous; + +import mage.abilities.Ability; +import mage.abilities.Mode; +import mage.abilities.effects.ContinuousEffectImpl; +import mage.constants.Duration; +import mage.constants.Layer; +import mage.constants.Outcome; +import mage.constants.SubLayer; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.Target; + +/** + * + * @author jeffwadsworth + */ +public class LoseAbilityTargetEffect extends ContinuousEffectImpl { + + protected Ability ability; + + public LoseAbilityTargetEffect(Ability ability) { + this(ability, Duration.WhileOnBattlefield); + } + + public LoseAbilityTargetEffect(Ability ability, Duration duration) { + super(duration, Layer.AbilityAddingRemovingEffects_6, SubLayer.NA, Outcome.LoseAbility); + this.ability = ability; + } + + public LoseAbilityTargetEffect(final LoseAbilityTargetEffect effect) { + super(effect); + this.ability = effect.ability.copy(); + } + + @Override + public LoseAbilityTargetEffect copy() { + return new LoseAbilityTargetEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent permanent = game.getPermanent(source.getFirstTarget()); + if (permanent != null) { + while (permanent.getAbilities().contains(ability)) { + permanent.getAbilities().remove(ability); + } + } + return true; + } + + @Override + public String getText(Mode mode) { + if (staticText != null && !staticText.isEmpty()) { + return staticText; + } + StringBuilder sb = new StringBuilder(); + Target target = mode.getTargets().get(0); + if (target.getNumberOfTargets() > 1) { + if (target.getNumberOfTargets() < target.getMaxNumberOfTargets()) { + sb.append("Up to"); + } + sb.append(target.getMaxNumberOfTargets()).append(" target ").append(target.getTargetName()).append(" loses "); + } else { + sb.append("Target ").append(target.getTargetName()).append(" loses "); + } + sb.append(ability.getRule()); + if (!duration.toString().isEmpty()) { + sb.append(" ").append(duration.toString()); + } + return sb.toString(); + } +} diff --git a/Mage/src/mage/target/common/TargetControlledPermanent.java b/Mage/src/mage/target/common/TargetControlledPermanent.java index 24f0ddd725..a7973379eb 100644 --- a/Mage/src/mage/target/common/TargetControlledPermanent.java +++ b/Mage/src/mage/target/common/TargetControlledPermanent.java @@ -28,7 +28,6 @@ package mage.target.common; -import mage.filter.FilterPermanent; import mage.filter.common.FilterControlledPermanent; import mage.target.TargetPermanent; From 1c62ed9955d9915e3d78dbb8d3d4527c331edc8a Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:13:17 -0300 Subject: [PATCH 02/42] [5ED, FEM] Add Bottomless Vault --- .../sets/fallenempires/BottomlessVault.java | 85 +++++++++++++++++++ .../sets/fifthedition/BottomlessVault.java | 52 ++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/fallenempires/BottomlessVault.java create mode 100644 Mage.Sets/src/mage/sets/fifthedition/BottomlessVault.java diff --git a/Mage.Sets/src/mage/sets/fallenempires/BottomlessVault.java b/Mage.Sets/src/mage/sets/fallenempires/BottomlessVault.java new file mode 100644 index 0000000000..8570545245 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/BottomlessVault.java @@ -0,0 +1,85 @@ +/* + * 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.fallenempires; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SkipUntapOptionalAbility; +import mage.abilities.condition.common.SourceTappedCondition; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class BottomlessVault extends CardImpl { + + public BottomlessVault(UUID ownerId) { + super(ownerId, 177, "Bottomless Vault", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "FEM"; + + // Bottomless Vault enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // You may choose not to untap Bottomless Vault during your untap step. + this.addAbility(new SkipUntapOptionalAbility()); + // At the beginning of your upkeep, if Bottomless Vault is tapped, put a storage counter on it. + OneShotEffect addStorageCounter = new AddCountersSourceEffect(CounterType.STORAGE.createInstance()); + Effect effect = new ConditionalOneShotEffect(addStorageCounter, SourceTappedCondition.getInstance(), "if {this} is tapped, put a storage counter on it"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false)); + // {tap}, Remove any number of storage counters from Bottomless Vault: Add {B} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.BlackMana, new RemovedCountersForCostValue(), + "Add {B} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public BottomlessVault(final BottomlessVault card) { + super(card); + } + + @Override + public BottomlessVault copy() { + return new BottomlessVault(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/BottomlessVault.java b/Mage.Sets/src/mage/sets/fifthedition/BottomlessVault.java new file mode 100644 index 0000000000..764ce6ab9c --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/BottomlessVault.java @@ -0,0 +1,52 @@ +/* + * 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.fifthedition; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class BottomlessVault extends mage.sets.fallenempires.BottomlessVault { + + public BottomlessVault(UUID ownerId) { + super(ownerId); + this.cardNumber = 411; + this.expansionSetCode = "5ED"; + } + + public BottomlessVault(final BottomlessVault card) { + super(card); + } + + @Override + public BottomlessVault copy() { + return new BottomlessVault(this); + } +} From 15a7ec767dd2802e094570b9cc46f6674842d905 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:14:05 -0300 Subject: [PATCH 03/42] [ME3, DRK] Add City of Shadows --- .../sets/masterseditioniii/CityOfShadows.java | 52 +++++++++++++ .../src/mage/sets/thedark/CityOfShadows.java | 73 +++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/masterseditioniii/CityOfShadows.java create mode 100644 Mage.Sets/src/mage/sets/thedark/CityOfShadows.java diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/CityOfShadows.java b/Mage.Sets/src/mage/sets/masterseditioniii/CityOfShadows.java new file mode 100644 index 0000000000..e22c114e82 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/CityOfShadows.java @@ -0,0 +1,52 @@ +/* + * 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.masterseditioniii; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class CityOfShadows extends mage.sets.thedark.CityOfShadows { + + public CityOfShadows(UUID ownerId) { + super(ownerId); + this.cardNumber = 206; + this.expansionSetCode = "ME3"; + } + + public CityOfShadows(final CityOfShadows card) { + super(card); + } + + @Override + public CityOfShadows copy() { + return new CityOfShadows(this); + } +} diff --git a/Mage.Sets/src/mage/sets/thedark/CityOfShadows.java b/Mage.Sets/src/mage/sets/thedark/CityOfShadows.java new file mode 100644 index 0000000000..6e4381050e --- /dev/null +++ b/Mage.Sets/src/mage/sets/thedark/CityOfShadows.java @@ -0,0 +1,73 @@ +/* + * 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.thedark; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.ExileTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.CountersCount; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author anonymous + */ +public class CityOfShadows extends CardImpl { + + public CityOfShadows(UUID ownerId) { + super(ownerId, 113, "City of Shadows", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "DRK"; + + // {tap}, Exile a creature you control: Put a storage counter on City of Shadows. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.STORAGE.createInstance()), new TapSourceCost()); + ability.addCost(new ExileTargetCost(new TargetControlledCreaturePermanent())); + // {tap}: Add {X} to your mana pool, where X is the number of storage counters on City of Shadows. + ability = new DynamicManaAbility(Mana.ColorlessMana, new CountersCount(CounterType.STORAGE), + "{tap}: Add {X} to your mana pool, where X is the number of storage counters on City of Shadows"); + this.addAbility(ability); + } + + public CityOfShadows(final CityOfShadows card) { + super(card); + } + + @Override + public CityOfShadows copy() { + return new CityOfShadows(this); + } +} From b7339c161c4e6bbd2155156026e75f37cc5d908c Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:14:30 -0300 Subject: [PATCH 04/42] [5ED, FEM] Add Dwarven Hold --- .../mage/sets/fallenempires/DwarvenHold.java | 52 ++++++++++++ .../mage/sets/fifthedition/DwarvenHold.java | 85 +++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/fallenempires/DwarvenHold.java create mode 100644 Mage.Sets/src/mage/sets/fifthedition/DwarvenHold.java diff --git a/Mage.Sets/src/mage/sets/fallenempires/DwarvenHold.java b/Mage.Sets/src/mage/sets/fallenempires/DwarvenHold.java new file mode 100644 index 0000000000..2eec20e78d --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/DwarvenHold.java @@ -0,0 +1,52 @@ +/* + * 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.fallenempires; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class DwarvenHold extends mage.sets.fifthedition.DwarvenHold { + + public DwarvenHold(UUID ownerId) { + super(ownerId); + this.cardNumber = 178; + this.expansionSetCode = "FEM"; + } + + public DwarvenHold(final DwarvenHold card) { + super(card); + } + + @Override + public DwarvenHold copy() { + return new DwarvenHold(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/DwarvenHold.java b/Mage.Sets/src/mage/sets/fifthedition/DwarvenHold.java new file mode 100644 index 0000000000..f7e8c8afd0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/DwarvenHold.java @@ -0,0 +1,85 @@ +/* + * 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.fifthedition; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SkipUntapOptionalAbility; +import mage.abilities.condition.common.SourceTappedCondition; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class DwarvenHold extends CardImpl { + + public DwarvenHold(UUID ownerId) { + super(ownerId, 414, "Dwarven Hold", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "5ED"; + + // Dwarven Hold enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // You may choose not to untap Dwarven Hold during your untap step. + this.addAbility(new SkipUntapOptionalAbility()); + // At the beginning of your upkeep, if Dwarven Hold is tapped, put a storage counter on it. + OneShotEffect addStorageCounter = new AddCountersSourceEffect(CounterType.STORAGE.createInstance()); + Effect effect = new ConditionalOneShotEffect(addStorageCounter, SourceTappedCondition.getInstance(), "if {this} is tapped, put a storage counter on it"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false)); + // {tap}, Remove any number of storage counters from Dwarven Hold: Add {R} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.RedMana, new RemovedCountersForCostValue(), + "Add {R} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public DwarvenHold(final DwarvenHold card) { + super(card); + } + + @Override + public DwarvenHold copy() { + return new DwarvenHold(this); + } +} From 452b626a4b2ca86af3bff316bd9a11fe2e17c2f3 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:15:03 -0300 Subject: [PATCH 05/42] [LEG, ME3] Add Urborg --- Mage.Sets/src/mage/sets/legends/Urborg.java | 73 +++++++++++++++++++ .../mage/sets/masterseditioniii/Urborg.java | 52 +++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/legends/Urborg.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniii/Urborg.java diff --git a/Mage.Sets/src/mage/sets/legends/Urborg.java b/Mage.Sets/src/mage/sets/legends/Urborg.java new file mode 100644 index 0000000000..6e26883912 --- /dev/null +++ b/Mage.Sets/src/mage/sets/legends/Urborg.java @@ -0,0 +1,73 @@ +/* + * 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.legends; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.continuous.LoseAbilityOrAnotherAbilityTargetEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.keyword.SwampwalkAbility; +import mage.abilities.mana.GreenManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author anonymous + */ +public class Urborg extends CardImpl { + + public Urborg(UUID ownerId) { + super(ownerId, 107, "Urborg", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "LEG"; + this.supertype.add("Legendary"); + + // {tap}: Add {B} to your mana pool. + this.addAbility(new GreenManaAbility()); + // {tap}: Target creature loses first strike or swampwalk until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new LoseAbilityOrAnotherAbilityTargetEffect(FirstStrikeAbility.getInstance(), new SwampwalkAbility()), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent()); + this.addAbility(ability); + } + + public Urborg(final Urborg card) { + super(card); + } + + @Override + public Urborg copy() { + return new Urborg(this); + } +} + + diff --git a/Mage.Sets/src/mage/sets/masterseditioniii/Urborg.java b/Mage.Sets/src/mage/sets/masterseditioniii/Urborg.java new file mode 100644 index 0000000000..115558fcf7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniii/Urborg.java @@ -0,0 +1,52 @@ +/* + * 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.masterseditioniii; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class Urborg extends mage.sets.legends.Urborg { + + public Urborg(UUID ownerId) { + super(ownerId); + this.cardNumber = 214; + this.expansionSetCode = "ME3"; + } + + public Urborg(final Urborg card) { + super(card); + } + + @Override + public Urborg copy() { + return new Urborg(this); + } +} From 7a4b323262390a0e0c6d8dd8ed141fcca373be50 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:15:59 -0300 Subject: [PATCH 06/42] [ARN, ME4] Add Elephant Graveyard --- .../sets/arabiannights/ElephantGraveyard.java | 54 ++++++++++++++ .../masterseditioniv/ElephantGraveyard.java | 71 +++++++++++++++++++ 2 files changed, 125 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/arabiannights/ElephantGraveyard.java create mode 100644 Mage.Sets/src/mage/sets/masterseditioniv/ElephantGraveyard.java diff --git a/Mage.Sets/src/mage/sets/arabiannights/ElephantGraveyard.java b/Mage.Sets/src/mage/sets/arabiannights/ElephantGraveyard.java new file mode 100644 index 0000000000..f5b46ed2f5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/arabiannights/ElephantGraveyard.java @@ -0,0 +1,54 @@ +/* + * 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.arabiannights; + +import java.util.UUID; +import mage.constants.Rarity; + +/** + * + * @author anonymous + */ +public class ElephantGraveyard extends mage.sets.masterseditioniv.ElephantGraveyard { + + public ElephantGraveyard(UUID ownerId) { + super(ownerId); + this.cardNumber = 88; + this.expansionSetCode = "ARN"; + this.rarity = Rarity.RARE; + } + + public ElephantGraveyard(final ElephantGraveyard card) { + super(card); + } + + @Override + public ElephantGraveyard copy() { + return new ElephantGraveyard(this); + } +} diff --git a/Mage.Sets/src/mage/sets/masterseditioniv/ElephantGraveyard.java b/Mage.Sets/src/mage/sets/masterseditioniv/ElephantGraveyard.java new file mode 100644 index 0000000000..7406435964 --- /dev/null +++ b/Mage.Sets/src/mage/sets/masterseditioniv/ElephantGraveyard.java @@ -0,0 +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.sets.masterseditioniv; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.RegenerateTargetEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.target.TargetPermanent; + +/** + * + * @author anonymous + */ +public class ElephantGraveyard extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("Elephant", "Elephant"); + + public ElephantGraveyard(UUID ownerId) { + super(ownerId, 244, "Elephant Graveyard", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ME4"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {tap}: Regenerate target Elephant. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateTargetEffect(), new TapSourceCost()); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + } + + public ElephantGraveyard(final ElephantGraveyard card) { + super(card); + } + + @Override + public ElephantGraveyard copy() { + return new ElephantGraveyard(this); + } +} From 9611864b42c9f5d835704d6c56b09868a3b98df5 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:16:51 -0300 Subject: [PATCH 07/42] [CMD, RAV, DDJ] Add Svogthos, the Restless Tomb --- .../commander/SvogthosTheRestlessTomb.java | 89 +++++++++++++++++++ .../SvogthosTheRestlessTomb.java | 52 +++++++++++ .../sets/ravnica/SvogthosTheRestlessTomb.java | 52 +++++++++++ 3 files changed, 193 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/commander/SvogthosTheRestlessTomb.java create mode 100644 Mage.Sets/src/mage/sets/izzetvsgolgari/SvogthosTheRestlessTomb.java create mode 100644 Mage.Sets/src/mage/sets/ravnica/SvogthosTheRestlessTomb.java diff --git a/Mage.Sets/src/mage/sets/commander/SvogthosTheRestlessTomb.java b/Mage.Sets/src/mage/sets/commander/SvogthosTheRestlessTomb.java new file mode 100644 index 0000000000..806aa410f9 --- /dev/null +++ b/Mage.Sets/src/mage/sets/commander/SvogthosTheRestlessTomb.java @@ -0,0 +1,89 @@ +/* + * 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.commander; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.dynamicvalue.common.CardsInControllerGraveyardCount; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.effects.common.continuous.SetPowerToughnessSourceEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreatureCard; +import mage.game.permanent.token.Token; + +/** + * + * @author anonymous + */ +public class SvogthosTheRestlessTomb extends CardImpl { + + public SvogthosTheRestlessTomb(UUID ownerId) { + super(ownerId, 289, "Svogthos, the Restless Tomb", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "CMD"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {3}{B}{G}: Until end of turn, Svogthos, the Restless Tomb becomes a black and green Plant Zombie creature with "This creature's power and toughness are each equal to the number of creature cards in your graveyard." It's still a land. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesCreatureSourceEffect(new SvogthosToken(), "land", Duration.EndOfTurn), new ManaCostsImpl<>("{3}{B}{G}")); + this.addAbility(ability); + } + + public SvogthosTheRestlessTomb(final SvogthosTheRestlessTomb card) { + super(card); + } + + @Override + public SvogthosTheRestlessTomb copy() { + return new SvogthosTheRestlessTomb(this); + } +} + +class SvogthosToken extends Token { + + public SvogthosToken() { + super("", "black and green Plant Zombie creature with \"This creature's power and toughness are each equal to the number of creature cards in your graveyard.\""); + cardType.add(CardType.CREATURE); + subtype.add("Plant"); + subtype.add("Zombie"); + color.setGreen(true); + color.setBlack(true); + power = new MageInt(0); + toughness = new MageInt(0); + CardsInControllerGraveyardCount count = new CardsInControllerGraveyardCount(new FilterCreatureCard("creature cards")); + this.addAbility(new SimpleStaticAbility(Zone.ALL, new SetPowerToughnessSourceEffect(count, Duration.EndOfGame))); + } +} diff --git a/Mage.Sets/src/mage/sets/izzetvsgolgari/SvogthosTheRestlessTomb.java b/Mage.Sets/src/mage/sets/izzetvsgolgari/SvogthosTheRestlessTomb.java new file mode 100644 index 0000000000..77bc7c0abd --- /dev/null +++ b/Mage.Sets/src/mage/sets/izzetvsgolgari/SvogthosTheRestlessTomb.java @@ -0,0 +1,52 @@ +/* + * 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.izzetvsgolgari; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class SvogthosTheRestlessTomb extends mage.sets.commander.SvogthosTheRestlessTomb { + + public SvogthosTheRestlessTomb(UUID ownerId) { + super(ownerId); + this.cardNumber = 81; + this.expansionSetCode = "DDJ"; + } + + public SvogthosTheRestlessTomb(final SvogthosTheRestlessTomb card) { + super(card); + } + + @Override + public SvogthosTheRestlessTomb copy() { + return new SvogthosTheRestlessTomb(this); + } +} diff --git a/Mage.Sets/src/mage/sets/ravnica/SvogthosTheRestlessTomb.java b/Mage.Sets/src/mage/sets/ravnica/SvogthosTheRestlessTomb.java new file mode 100644 index 0000000000..5afa92f2e3 --- /dev/null +++ b/Mage.Sets/src/mage/sets/ravnica/SvogthosTheRestlessTomb.java @@ -0,0 +1,52 @@ +/* + * 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.ravnica; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class SvogthosTheRestlessTomb extends mage.sets.commander.SvogthosTheRestlessTomb { + + public SvogthosTheRestlessTomb(UUID ownerId) { + super(ownerId); + this.cardNumber = 283; + this.expansionSetCode = "RAV"; + } + + public SvogthosTheRestlessTomb(final SvogthosTheRestlessTomb card) { + super(card); + } + + @Override + public SvogthosTheRestlessTomb copy() { + return new SvogthosTheRestlessTomb(this); + } +} From 4f210343df6241177095dd7ad7a8e36a4e158ea6 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:17:12 -0300 Subject: [PATCH 08/42] [5ED, FEM] Add Sand Silos --- .../mage/sets/fallenempires/SandSilos.java | 52 ++++++++++++ .../src/mage/sets/fifthedition/SandSilos.java | 85 +++++++++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/fallenempires/SandSilos.java create mode 100644 Mage.Sets/src/mage/sets/fifthedition/SandSilos.java diff --git a/Mage.Sets/src/mage/sets/fallenempires/SandSilos.java b/Mage.Sets/src/mage/sets/fallenempires/SandSilos.java new file mode 100644 index 0000000000..f16a6a2ebf --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/SandSilos.java @@ -0,0 +1,52 @@ +/* + * 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.fallenempires; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class SandSilos extends mage.sets.fifthedition.SandSilos { + + public SandSilos(UUID ownerId) { + super(ownerId); + this.cardNumber = 186; + this.expansionSetCode = "FEM"; + } + + public SandSilos(final SandSilos card) { + super(card); + } + + @Override + public SandSilos copy() { + return new SandSilos(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/SandSilos.java b/Mage.Sets/src/mage/sets/fifthedition/SandSilos.java new file mode 100644 index 0000000000..7e8a942094 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/SandSilos.java @@ -0,0 +1,85 @@ +/* + * 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.fifthedition; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SkipUntapOptionalAbility; +import mage.abilities.condition.common.SourceTappedCondition; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class SandSilos extends CardImpl { + + public SandSilos(UUID ownerId) { + super(ownerId, 439, "Sand Silos", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "5ED"; + + // Sand Silos enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // You may choose not to untap Sand Silos during your untap step. + this.addAbility(new SkipUntapOptionalAbility()); + // At the beginning of your upkeep, if Sand Silos is tapped, put a storage counter on it. + OneShotEffect addStorageCounter = new AddCountersSourceEffect(CounterType.STORAGE.createInstance()); + Effect effect = new ConditionalOneShotEffect(addStorageCounter, SourceTappedCondition.getInstance(), "if {this} is tapped, put a storage counter on it"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false)); + // {tap}, Remove any number of storage counters from Sand Silos: Add {U} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.BlueMana, new RemovedCountersForCostValue(), + "Add {U} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public SandSilos(final SandSilos card) { + super(card); + } + + @Override + public SandSilos copy() { + return new SandSilos(this); + } +} From 33692d157bdc04e583ce31d08ea67a657c49d089 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:18:01 -0300 Subject: [PATCH 09/42] [DD3, FUT, DD2] Add Keldon Megaliths --- .../KeldonMegaliths.java | 52 +++++++++++++ .../sets/futuresight/KeldonMegaliths.java | 52 +++++++++++++ .../sets/jacevschandra/KeldonMegaliths.java | 73 +++++++++++++++++++ 3 files changed, 177 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/anthologyjacevschandra/KeldonMegaliths.java create mode 100644 Mage.Sets/src/mage/sets/futuresight/KeldonMegaliths.java create mode 100644 Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java diff --git a/Mage.Sets/src/mage/sets/anthologyjacevschandra/KeldonMegaliths.java b/Mage.Sets/src/mage/sets/anthologyjacevschandra/KeldonMegaliths.java new file mode 100644 index 0000000000..db2ed008b2 --- /dev/null +++ b/Mage.Sets/src/mage/sets/anthologyjacevschandra/KeldonMegaliths.java @@ -0,0 +1,52 @@ +/* + * 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.anthologyjacevschandra; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class KeldonMegaliths extends mage.sets.jacevschandra.KeldonMegaliths { + + public KeldonMegaliths(UUID ownerId) { + super(ownerId); + this.cardNumber = 58; + this.expansionSetCode = "DD3"; + } + + public KeldonMegaliths(final KeldonMegaliths card) { + super(card); + } + + @Override + public KeldonMegaliths copy() { + return new KeldonMegaliths(this); + } +} diff --git a/Mage.Sets/src/mage/sets/futuresight/KeldonMegaliths.java b/Mage.Sets/src/mage/sets/futuresight/KeldonMegaliths.java new file mode 100644 index 0000000000..86a276194f --- /dev/null +++ b/Mage.Sets/src/mage/sets/futuresight/KeldonMegaliths.java @@ -0,0 +1,52 @@ +/* + * 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.futuresight; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class KeldonMegaliths extends mage.sets.jacevschandra.KeldonMegaliths { + + public KeldonMegaliths(UUID ownerId) { + super(ownerId); + this.cardNumber = 170; + this.expansionSetCode = "FUT"; + } + + public KeldonMegaliths(final KeldonMegaliths card) { + super(card); + } + + @Override + public KeldonMegaliths copy() { + return new KeldonMegaliths(this); + } +} diff --git a/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java b/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java new file mode 100644 index 0000000000..d7414665be --- /dev/null +++ b/Mage.Sets/src/mage/sets/jacevschandra/KeldonMegaliths.java @@ -0,0 +1,73 @@ +/* + * 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.jacevschandra; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.condition.common.HellbentCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.mana.RedManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author anonymous + */ +public class KeldonMegaliths extends CardImpl { + + public KeldonMegaliths(UUID ownerId) { + super(ownerId, 58, "Keldon Megaliths", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "DD2"; + + // Keldon Megaliths enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Add {R} to your mana pool. + this.addAbility(new RedManaAbility()); + // Hellbent - {1}{R}, {tap}: Keldon Megaliths deals 1 damage to target creature or player. Activate this ability only if you have no cards in hand. + Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{1}{R}"), HellbentCondition.getInstance(), + "Hellbent - {1}{R}, {tap}: Keldon Megaliths deals 1 damage to target creature or player. Activate this ability only if you have no cards in hand."); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public KeldonMegaliths(final KeldonMegaliths card) { + super(card); + } + + @Override + public KeldonMegaliths copy() { + return new KeldonMegaliths(this); + } +} From 66b89b9fecf26bea670f84af5efa1cfa8987ff0d Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:18:24 -0300 Subject: [PATCH 10/42] [5ED, FEM] Add Icatian Store --- .../mage/sets/fallenempires/IcatianStore.java | 85 +++++++++++++++++++ .../mage/sets/fifthedition/IcatianStore.java | 52 ++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/fallenempires/IcatianStore.java create mode 100644 Mage.Sets/src/mage/sets/fifthedition/IcatianStore.java diff --git a/Mage.Sets/src/mage/sets/fallenempires/IcatianStore.java b/Mage.Sets/src/mage/sets/fallenempires/IcatianStore.java new file mode 100644 index 0000000000..ad30635e7e --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/IcatianStore.java @@ -0,0 +1,85 @@ +/* + * 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.fallenempires; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SkipUntapOptionalAbility; +import mage.abilities.condition.common.SourceTappedCondition; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class IcatianStore extends CardImpl { + + public IcatianStore(UUID ownerId) { + super(ownerId, 183, "Icatian Store", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "FEM"; + + // Icatian Store enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // You may choose not to untap Icatian Store during your untap step. + this.addAbility(new SkipUntapOptionalAbility()); + // At the beginning of your upkeep, if Icatian Store is tapped, put a storage counter on it. + OneShotEffect addStorageCounter = new AddCountersSourceEffect(CounterType.STORAGE.createInstance()); + Effect effect = new ConditionalOneShotEffect(addStorageCounter, SourceTappedCondition.getInstance(), "if {this} is tapped, put a storage counter on it"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false)); + // {tap}, Remove any number of storage counters from Icatian Store: Add {W} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.WhiteMana, new RemovedCountersForCostValue(), + "Add {W} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public IcatianStore(final IcatianStore card) { + super(card); + } + + @Override + public IcatianStore copy() { + return new IcatianStore(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/IcatianStore.java b/Mage.Sets/src/mage/sets/fifthedition/IcatianStore.java new file mode 100644 index 0000000000..a7a9455453 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/IcatianStore.java @@ -0,0 +1,52 @@ +/* + * 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.fifthedition; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class IcatianStore extends mage.sets.fallenempires.IcatianStore { + + public IcatianStore(UUID ownerId) { + super(ownerId); + this.cardNumber = 423; + this.expansionSetCode = "5ED"; + } + + public IcatianStore(final IcatianStore card) { + super(card); + } + + @Override + public IcatianStore copy() { + return new IcatianStore(this); + } +} From ad6f00be0b715140dc15ad5c1b638caee3dee8fb Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:18:35 -0300 Subject: [PATCH 11/42] [5ED, FEM] Add Hollow Trees --- .../mage/sets/fallenempires/HollowTrees.java | 85 +++++++++++++++++++ .../mage/sets/fifthedition/HollowTrees.java | 52 ++++++++++++ 2 files changed, 137 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/fallenempires/HollowTrees.java create mode 100644 Mage.Sets/src/mage/sets/fifthedition/HollowTrees.java diff --git a/Mage.Sets/src/mage/sets/fallenempires/HollowTrees.java b/Mage.Sets/src/mage/sets/fallenempires/HollowTrees.java new file mode 100644 index 0000000000..f14cdd1f50 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fallenempires/HollowTrees.java @@ -0,0 +1,85 @@ +/* + * 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.fallenempires; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SkipUntapOptionalAbility; +import mage.abilities.condition.common.SourceTappedCondition; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class HollowTrees extends CardImpl { + + public HollowTrees(UUID ownerId) { + super(ownerId, 182, "Hollow Trees", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "FEM"; + + // Hollow Trees enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // You may choose not to untap Hollow Trees during your untap step. + this.addAbility(new SkipUntapOptionalAbility()); + // At the beginning of your upkeep, if Hollow Trees is tapped, put a storage counter on it. + OneShotEffect addStorageCounter = new AddCountersSourceEffect(CounterType.STORAGE.createInstance()); + Effect effect = new ConditionalOneShotEffect(addStorageCounter, SourceTappedCondition.getInstance(), "if {this} is tapped, put a storage counter on it"); + this.addAbility(new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false)); + // {tap}, Remove any number of storage counters from Hollow Trees: Add {G} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.BlackMana, new RemovedCountersForCostValue(), + "Add {B} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public HollowTrees(final HollowTrees card) { + super(card); + } + + @Override + public HollowTrees copy() { + return new HollowTrees(this); + } +} diff --git a/Mage.Sets/src/mage/sets/fifthedition/HollowTrees.java b/Mage.Sets/src/mage/sets/fifthedition/HollowTrees.java new file mode 100644 index 0000000000..fb7c8abc47 --- /dev/null +++ b/Mage.Sets/src/mage/sets/fifthedition/HollowTrees.java @@ -0,0 +1,52 @@ +/* + * 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.fifthedition; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class HollowTrees extends mage.sets.fallenempires.HollowTrees { + + public HollowTrees(UUID ownerId) { + super(ownerId); + this.cardNumber = 422; + this.expansionSetCode = "5ED"; + } + + public HollowTrees(final HollowTrees card) { + super(card); + } + + @Override + public HollowTrees copy() { + return new HollowTrees(this); + } +} From e1b16902b627afa7b69f559569b84e3ac1a3b5a0 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:19:13 -0300 Subject: [PATCH 12/42] [HML] Add Wizards' School --- .../mage/sets/homelands/WizardsSchool.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/homelands/WizardsSchool.java diff --git a/Mage.Sets/src/mage/sets/homelands/WizardsSchool.java b/Mage.Sets/src/mage/sets/homelands/WizardsSchool.java new file mode 100644 index 0000000000..e6907b2655 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/WizardsSchool.java @@ -0,0 +1,75 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author anonymous + */ +public class WizardsSchool extends CardImpl { + + public WizardsSchool(UUID ownerId) { + super(ownerId, 140, "Wizards' School", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "HML"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {1}, {tap}: Add {U} to your mana pool. + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlueMana, new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + // {2}, {tap}: Add {W} or {B} to your mana pool. + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.WhiteMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public WizardsSchool(final WizardsSchool card) { + super(card); + } + + @Override + public WizardsSchool copy() { + return new WizardsSchool(this); + } +} From cbb3fe1c1b1d8da972e739640b142c3ccb464df0 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:19:35 -0300 Subject: [PATCH 13/42] [PCY] Add Wintermoon Mesa --- .../mage/sets/prophecy/WintermoonMesa.java | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/prophecy/WintermoonMesa.java diff --git a/Mage.Sets/src/mage/sets/prophecy/WintermoonMesa.java b/Mage.Sets/src/mage/sets/prophecy/WintermoonMesa.java new file mode 100644 index 0000000000..959aa4e37c --- /dev/null +++ b/Mage.Sets/src/mage/sets/prophecy/WintermoonMesa.java @@ -0,0 +1,73 @@ +/* + * 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.prophecy; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.TapTargetEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.target.common.TargetLandPermanent; + +/** + * + * @author anonymous + */ +public class WintermoonMesa extends CardImpl { + + public WintermoonMesa(UUID ownerId) { + super(ownerId, 143, "Wintermoon Mesa", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "PCY"; + + // Wintermoon Mesa enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {2}, {tap}, Sacrifice Wintermoon Mesa: Tap two target lands. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new TapTargetEffect(), new ManaCostsImpl<>("{2}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetLandPermanent(2)); + this.addAbility(ability); + } + + public WintermoonMesa(final WintermoonMesa card) { + super(card); + } + + @Override + public WintermoonMesa copy() { + return new WintermoonMesa(this); + } +} From 4b7a52cda85b9d5b1e9b4fbab090860e3d7f9d81 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:19:55 -0300 Subject: [PATCH 14/42] [ICE] Add Veldt --- Mage.Sets/src/mage/sets/iceage/Veldt.java | 86 +++++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/iceage/Veldt.java diff --git a/Mage.Sets/src/mage/sets/iceage/Veldt.java b/Mage.Sets/src/mage/sets/iceage/Veldt.java new file mode 100644 index 0000000000..437370080e --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/Veldt.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.sets.iceage; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class Veldt extends CardImpl { + + public Veldt(UUID ownerId) { + super(ownerId, 358, "Veldt", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ICE"; + + // Veldt doesn't untap during your untap step if it has a depletion counter on it. + Effect effect = new ConditionalContinuousRuleModifyingEffect(new DontUntapInControllersUntapStepSourceEffect(), + new SourceHasCounterCondition(CounterType.DEPLETION, 0)); + effect.setText("{this} doesn't untap during your untap step if it has a depletion counter on it"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + this.addAbility(ability); + // At the beginning of your upkeep, remove a depletion counter from Veldt. + Ability ability2 = new BeginningOfUpkeepTriggeredAbility(new RemoveCounterSourceEffect(CounterType.DEPLETION.createInstance()), TargetController.YOU, false); + this.addAbility(ability2); + // {tap}: Add {G} or {W} to your mana pool. Put a depletion counter on Veldt. + Ability ability3 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana, new TapSourceCost()); + ability3.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability3); + Ability ability4 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.WhiteMana, new TapSourceCost()); + ability4.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability4); + } + + public Veldt(final Veldt card) { + super(card); + } + + @Override + public Veldt copy() { + return new Veldt(this); + } +} From 7977a8c96808b6011fdedb5f8ef56f6a12bfd54d Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:21:01 -0300 Subject: [PATCH 15/42] [HML] Add An-Havva Township --- .../mage/sets/homelands/AnHavvaTownship.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/homelands/AnHavvaTownship.java diff --git a/Mage.Sets/src/mage/sets/homelands/AnHavvaTownship.java b/Mage.Sets/src/mage/sets/homelands/AnHavvaTownship.java new file mode 100644 index 0000000000..5a1919ced6 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AnHavvaTownship.java @@ -0,0 +1,75 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author anonymous + */ +public class AnHavvaTownship extends CardImpl { + + public AnHavvaTownship(UUID ownerId) { + super(ownerId, 136, "An-Havva Township", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "HML"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {1}, {tap}: Add {G} to your mana pool. + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana, new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + // {2}, {tap}: Add {R} or {W} to your mana pool. + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.WhiteMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public AnHavvaTownship(final AnHavvaTownship card) { + super(card); + } + + @Override + public AnHavvaTownship copy() { + return new AnHavvaTownship(this); + } +} From 8668a8fa31e7ff03f05b7c7ededceb651e65d6e4 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:21:13 -0300 Subject: [PATCH 16/42] [HML] Add Aysen Abbey --- .../src/mage/sets/homelands/AysenAbbey.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/homelands/AysenAbbey.java diff --git a/Mage.Sets/src/mage/sets/homelands/AysenAbbey.java b/Mage.Sets/src/mage/sets/homelands/AysenAbbey.java new file mode 100644 index 0000000000..b8974e2908 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/AysenAbbey.java @@ -0,0 +1,75 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author anonymous + */ +public class AysenAbbey extends CardImpl { + + public AysenAbbey(UUID ownerId) { + super(ownerId, 137, "Aysen Abbey", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "HML"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {1}, {tap}: Add {W} to your mana pool. + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.WhiteMana, new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + // {2}, {tap}: Add {G} or {U} to your mana pool. + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlueMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public AysenAbbey(final AysenAbbey card) { + super(card); + } + + @Override + public AysenAbbey copy() { + return new AysenAbbey(this); + } +} From c26ba1d3a57bcbecd3bef7faf19a847c5f22ff17 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:21:23 -0300 Subject: [PATCH 17/42] [HML] Add Castle Sengir --- .../src/mage/sets/homelands/CastleSengir.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/homelands/CastleSengir.java diff --git a/Mage.Sets/src/mage/sets/homelands/CastleSengir.java b/Mage.Sets/src/mage/sets/homelands/CastleSengir.java new file mode 100644 index 0000000000..091f4368d5 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/CastleSengir.java @@ -0,0 +1,75 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author anonymous + */ +public class CastleSengir extends CardImpl { + + public CastleSengir(UUID ownerId) { + super(ownerId, 138, "Castle Sengir", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "HML"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {1}, {tap}: Add {B} to your mana pool. + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana, new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + // {2}, {tap}: Add {U} or {R} to your mana pool. + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlueMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public CastleSengir(final CastleSengir card) { + super(card); + } + + @Override + public CastleSengir copy() { + return new CastleSengir(this); + } +} From 0c43184d0a1c4cb40db2603864c2c96f988f1baf Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:22:05 -0300 Subject: [PATCH 18/42] [ARN, MED] Add Island of Wak-Wak --- .../sets/arabiannights/IslandOfWakWak.java | 110 ++++++++++++++++++ .../sets/mastersedition/IslandOfWakWak.java | 52 +++++++++ 2 files changed, 162 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/arabiannights/IslandOfWakWak.java create mode 100644 Mage.Sets/src/mage/sets/mastersedition/IslandOfWakWak.java diff --git a/Mage.Sets/src/mage/sets/arabiannights/IslandOfWakWak.java b/Mage.Sets/src/mage/sets/arabiannights/IslandOfWakWak.java new file mode 100644 index 0000000000..3a1fecf7c8 --- /dev/null +++ b/Mage.Sets/src/mage/sets/arabiannights/IslandOfWakWak.java @@ -0,0 +1,110 @@ +/* + * 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.arabiannights; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.Effect; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.SetPowerToughnessTargetEffect; +import mage.abilities.keyword.FlyingAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterCreaturePermanent; +import mage.filter.predicate.mageobject.AbilityPredicate; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.common.TargetCreaturePermanent; + +/** + * + * @author anonymous + */ +public class IslandOfWakWak extends CardImpl { + + private static final FilterCreaturePermanent filterWithFlying = new FilterCreaturePermanent("creature with flying"); + + static { + filterWithFlying.add(new AbilityPredicate(FlyingAbility.class)); + } + + public IslandOfWakWak(UUID ownerId) { + super(ownerId, 89, "Island of Wak-Wak", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ARN"; + + // {tap}: The power of target creature with flying becomes 0 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new IslandOfWakWakEffect(), new TapSourceCost()); + ability.addTarget(new TargetCreaturePermanent(filterWithFlying)); + this.addAbility(ability); + } + + public IslandOfWakWak(final IslandOfWakWak card) { + super(card); + } + + @Override + public IslandOfWakWak copy() { + return new IslandOfWakWak(this); + } +} + + +class IslandOfWakWakEffect extends OneShotEffect { + + public IslandOfWakWakEffect() { + super(Outcome.Detriment); + staticText = "The power of target creature with flying becomes 0 until end of turn"; + } + + public IslandOfWakWakEffect(final IslandOfWakWakEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent targetCreature = game.getPermanent(source.getFirstTarget()); + if (targetCreature != null) { + MageInt toughness = targetCreature.getToughness(); + game.addEffect(new SetPowerToughnessTargetEffect(0, toughness.getValue(), Duration.EndOfTurn), source); + return true; + } + return false; + } + + @Override + public Effect copy() { + return new IslandOfWakWakEffect(this); + } +} \ No newline at end of file diff --git a/Mage.Sets/src/mage/sets/mastersedition/IslandOfWakWak.java b/Mage.Sets/src/mage/sets/mastersedition/IslandOfWakWak.java new file mode 100644 index 0000000000..68b4898e3f --- /dev/null +++ b/Mage.Sets/src/mage/sets/mastersedition/IslandOfWakWak.java @@ -0,0 +1,52 @@ +/* + * 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.mastersedition; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class IslandOfWakWak extends mage.sets.arabiannights.IslandOfWakWak { + + public IslandOfWakWak(UUID ownerId) { + super(ownerId); + this.cardNumber = 176; + this.expansionSetCode = "MED"; + } + + public IslandOfWakWak(final IslandOfWakWak card) { + super(card); + } + + @Override + public IslandOfWakWak copy() { + return new IslandOfWakWak(this); + } +} From f57884c1c2b9afdb6912e671d11aeeaa85c02ff6 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:22:37 -0300 Subject: [PATCH 19/42] [ARC, JUD] Add Nantuko Monastery --- .../mage/sets/archenemy/NantukoMonastery.java | 92 +++++++++++++++++++ .../mage/sets/judgment/NantukoMonastery.java | 52 +++++++++++ 2 files changed, 144 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/archenemy/NantukoMonastery.java create mode 100644 Mage.Sets/src/mage/sets/judgment/NantukoMonastery.java diff --git a/Mage.Sets/src/mage/sets/archenemy/NantukoMonastery.java b/Mage.Sets/src/mage/sets/archenemy/NantukoMonastery.java new file mode 100644 index 0000000000..485c90500a --- /dev/null +++ b/Mage.Sets/src/mage/sets/archenemy/NantukoMonastery.java @@ -0,0 +1,92 @@ +/* + * 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.archenemy; + +import java.util.UUID; +import mage.MageInt; +import mage.abilities.Ability; +import mage.abilities.condition.common.CardsInControllerGraveCondition; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.decorator.ConditionalActivatedAbility; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.continuous.BecomesCreatureSourceEffect; +import mage.abilities.effects.common.continuous.GainAbilitySourceEffect; +import mage.abilities.keyword.FirstStrikeAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.game.permanent.token.Token; + +/** + * + * @author anonymous + */ +public class NantukoMonastery extends CardImpl { + + public NantukoMonastery(UUID ownerId) { + super(ownerId, 131, "Nantuko Monastery", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ARC"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // Threshold - {G}{W}: Nantuko Monastery becomes a 4/4 green and white Insect Monk creature with first strike until end of turn. It's still a land. Activate this ability only if seven or more cards are in your graveyard. + Effect effect = new BecomesCreatureSourceEffect(new NantukoMonasteryToken(), "land", Duration.Custom); + effect.setText("{this} becomes a 4/4 green and white Insect Monk creature"); + Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, effect, new ManaCostsImpl<>("{G}{W}"), + new CardsInControllerGraveCondition(7), + "Threshold - {G}{W}: Nantuko Monastery becomes a 4/4 green and white Insect Monk creature with first strike until end of turn. It's still a land. Activate this ability only if seven or more cards are in your graveyard."); + ability.addEffect(new GainAbilitySourceEffect(FirstStrikeAbility.getInstance(), Duration.EndOfTurn)); + this.addAbility(ability); + } + + public NantukoMonastery(final NantukoMonastery card) { + super(card); + } + + @Override + public NantukoMonastery copy() { + return new NantukoMonastery(this); + } +} + +class NantukoMonasteryToken extends Token { + + public NantukoMonasteryToken() { + super("", "4/4 green and white Insect Monk creature"); + cardType.add(CardType.CREATURE); + subtype.add("Insect"); + subtype.add("Monk"); + color.setGreen(true); + color.setWhite(true); + power = new MageInt(4); + toughness = new MageInt(4); + } +} diff --git a/Mage.Sets/src/mage/sets/judgment/NantukoMonastery.java b/Mage.Sets/src/mage/sets/judgment/NantukoMonastery.java new file mode 100644 index 0000000000..fd2d3d3507 --- /dev/null +++ b/Mage.Sets/src/mage/sets/judgment/NantukoMonastery.java @@ -0,0 +1,52 @@ +/* + * 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.judgment; + +import java.util.UUID; + +/** + * + * @author anonymous + */ +public class NantukoMonastery extends mage.sets.archenemy.NantukoMonastery { + + public NantukoMonastery(UUID ownerId) { + super(ownerId); + this.cardNumber = 142; + this.expansionSetCode = "JUD"; + } + + public NantukoMonastery(final NantukoMonastery card) { + super(card); + } + + @Override + public NantukoMonastery copy() { + return new NantukoMonastery(this); + } +} From c81b2fd184582b1311b43978c79b823ec3f3792c Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:24:47 -0300 Subject: [PATCH 20/42] [CHK] Add Untaidake, the Cloud Keeper --- .../UntaidakeTheCloudKeeper.java | 115 ++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/championsofkamigawa/UntaidakeTheCloudKeeper.java diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/UntaidakeTheCloudKeeper.java b/Mage.Sets/src/mage/sets/championsofkamigawa/UntaidakeTheCloudKeeper.java new file mode 100644 index 0000000000..1319d9af8c --- /dev/null +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/UntaidakeTheCloudKeeper.java @@ -0,0 +1,115 @@ +/* + * 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.ConditionalMana; +import mage.MageObject; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.SpellAbility; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.condition.Condition; +import mage.abilities.costs.common.PayLifeCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.mana.ConditionalColorlessManaAbility; +import mage.abilities.mana.builder.ConditionalManaBuilder; +import mage.abilities.mana.conditional.ManaCondition; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.game.Game; + +/** + * + * @author anonymous + */ +public class UntaidakeTheCloudKeeper extends CardImpl { + + public UntaidakeTheCloudKeeper(UUID ownerId) { + super(ownerId, 285, "Untaidake, the Cloud Keeper", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "CHK"; + this.supertype.add("Legendary"); + + // Untaidake, the Cloud Keeper enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}, Pay 2 life: Add {2} to your mana pool. Spend this mana only to cast legendary spells. + Ability ability = new ConditionalColorlessManaAbility(new TapSourceCost(), 2, new LegendarySpellManaBuilder()); + ability.addCost(new PayLifeCost(2)); + this.addAbility(ability); + + } + + public UntaidakeTheCloudKeeper(final UntaidakeTheCloudKeeper card) { + super(card); + } + + @Override + public UntaidakeTheCloudKeeper copy() { + return new UntaidakeTheCloudKeeper(this); + } +} + +class LegendarySpellManaBuilder extends ConditionalManaBuilder { + @Override + public ConditionalMana build(Object... options) { + return new LegendaryCastConditionalMana(this.mana); + } + + @Override + public String getRule() { + return "Spend this mana only to cast legendary spells"; + } +} + +class LegendaryCastConditionalMana extends ConditionalMana { + + public LegendaryCastConditionalMana(Mana mana) { + super(mana); + staticText = "Spend this mana only to cast legendary spells"; + addCondition(new LegendaryCastManaCondition()); + } +} + +class LegendaryCastManaCondition extends ManaCondition implements Condition { + @Override + public boolean apply(Game game, Ability source) { + if (source instanceof SpellAbility) { + MageObject object = game.getObject(source.getSourceId()); + if (object != null && object.getSupertype().contains("Legendary")) { + return true; + } + } + return false; + } + + @Override + public boolean apply(Game game, Ability source, UUID originalId) { + return apply(game, source); + } +} \ No newline at end of file From 6403e78384a74ccbde3b409019f7aaa6e186ccc3 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:25:05 -0300 Subject: [PATCH 21/42] [PLS] Add Forsaken City --- .../mage/sets/planeshift/ForsakenCity.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/planeshift/ForsakenCity.java diff --git a/Mage.Sets/src/mage/sets/planeshift/ForsakenCity.java b/Mage.Sets/src/mage/sets/planeshift/ForsakenCity.java new file mode 100644 index 0000000000..6c81160958 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/ForsakenCity.java @@ -0,0 +1,74 @@ +/* + * 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.planeshift; + +import java.util.UUID; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.ExileFromHandCost; +import mage.abilities.effects.common.DoIfCostPaid; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.UntapSourceEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.target.common.TargetCardInHand; + +/** + * + * @author anonymous + */ +public class ForsakenCity extends CardImpl { + + private static final FilterCard filter = new FilterCard("a card from your hand"); + + public ForsakenCity(UUID ownerId) { + super(ownerId, 139, "Forsaken City", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "PLS"; + + // Forsaken City doesn't untap during your untap step. + this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new DontUntapInControllersUntapStepSourceEffect())); + // At the beginning of your upkeep, you may exile a card from your hand. If you do, untap Forsaken City. + this.addAbility(new BeginningOfUpkeepTriggeredAbility(new DoIfCostPaid(new UntapSourceEffect(), new ExileFromHandCost(new TargetCardInHand(filter))), TargetController.YOU, true)); + // {tap}: Add one mana of any color to your mana pool. + this.addAbility(new ColorlessManaAbility()); + } + + public ForsakenCity(final ForsakenCity card) { + super(card); + } + + @Override + public ForsakenCity copy() { + return new ForsakenCity(this); + } +} From cf811c91f21ec2c3117917fda091977b0fd64d05 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:27:45 -0300 Subject: [PATCH 22/42] [MMQ] Add Fountain of Cho --- .../sets/mercadianmasques/FountainOfCho.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/FountainOfCho.java diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/FountainOfCho.java b/Mage.Sets/src/mage/sets/mercadianmasques/FountainOfCho.java new file mode 100644 index 0000000000..5074f07c58 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/FountainOfCho.java @@ -0,0 +1,76 @@ +/* + * 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.mercadianmasques; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class FountainOfCho extends CardImpl { + + public FountainOfCho(UUID ownerId) { + super(ownerId, 317, "Fountain of Cho", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // Fountain of Cho enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Put a storage counter on Fountain of Cho. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.STORAGE.createInstance()), new TapSourceCost())); + // {tap}, Remove any number of storage counters from Fountain of Cho: Add {W} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.WhiteMana, new RemovedCountersForCostValue(), + "Add {W} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public FountainOfCho(final FountainOfCho card) { + super(card); + } + + @Override + public FountainOfCho copy() { + return new FountainOfCho(this); + } +} From 1322994d8146cccfc7ad6c21ff813ad4337cb8c2 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:28:03 -0300 Subject: [PATCH 23/42] [VIS] Add Griffin Canyon --- .../src/mage/sets/visions/GriffinCanyon.java | 109 ++++++++++++++++++ 1 file changed, 109 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/visions/GriffinCanyon.java diff --git a/Mage.Sets/src/mage/sets/visions/GriffinCanyon.java b/Mage.Sets/src/mage/sets/visions/GriffinCanyon.java new file mode 100644 index 0000000000..1e1879095d --- /dev/null +++ b/Mage.Sets/src/mage/sets/visions/GriffinCanyon.java @@ -0,0 +1,109 @@ +/* + * 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.visions; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.effects.common.continuous.BoostTargetEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterCreaturePermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.target.TargetPermanent; + +/** + * + * @author anonymous + */ +public class GriffinCanyon extends CardImpl { + + private static final FilterPermanent filter = new FilterPermanent("Griffin", "target Griffin"); + + public GriffinCanyon(UUID ownerId) { + super(ownerId, 163, "Griffin Canyon", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "VIS"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {tap}: Untap target Griffin. If it's a creature, it gets +1/+1 until end of turn. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new GriffinCanyonEffect(), new TapSourceCost()); + ability.addTarget(new TargetPermanent(filter)); + this.addAbility(ability); + } + + public GriffinCanyon(final GriffinCanyon card) { + super(card); + } + + @Override + public GriffinCanyon copy() { + return new GriffinCanyon(this); + } +} + +class GriffinCanyonEffect extends OneShotEffect { + + private static final FilterCreaturePermanent filter = new FilterCreaturePermanent("a creature"); + + public GriffinCanyonEffect() { + super(Outcome.Benefit); + this.staticText = "Untap target Griffin. If it's a creature, it gets +1/+1 until end of turn"; + } + + public GriffinCanyonEffect(final GriffinCanyonEffect effect) { + super(effect); + } + + @Override + public GriffinCanyonEffect copy() { + return new GriffinCanyonEffect(this); + } + + @Override + public boolean apply(Game game, Ability source) { + Permanent targetCreature = game.getPermanent(source.getFirstTarget()); + if (targetCreature != null) { + targetCreature.untap(game); + if (filter.match(targetCreature, game)) { + game.addEffect(new BoostTargetEffect(1, 1, Duration.EndOfTurn), source); + } + return true; + } + return false; + } +} \ No newline at end of file From bd02e4439d20051570ddbbb2ff530bd2b53768dc Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:28:54 -0300 Subject: [PATCH 24/42] [MMQ] Add Henge of Ramos --- .../sets/mercadianmasques/HengeOfRamos.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/HengeOfRamos.java diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/HengeOfRamos.java b/Mage.Sets/src/mage/sets/mercadianmasques/HengeOfRamos.java new file mode 100644 index 0000000000..fa3fe67ba7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/HengeOfRamos.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.mercadianmasques; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author anonymous + */ +public class HengeOfRamos extends CardImpl { + + public HengeOfRamos(UUID ownerId) { + super(ownerId, 318, "Henge of Ramos", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {2}, {tap}: Add one mana of any color to your mana pool. + Ability ability = new AnyColorManaAbility(new ManaCostsImpl<>("{2}")); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public HengeOfRamos(final HengeOfRamos card) { + super(card); + } + + @Override + public HengeOfRamos copy() { + return new HengeOfRamos(this); + } +} From db62a9deb094610a96d72ca4a464322973802a1a Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:29:10 -0300 Subject: [PATCH 25/42] [HML] Add Koskun Keep --- .../src/mage/sets/homelands/KoskunKeep.java | 75 +++++++++++++++++++ 1 file changed, 75 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/homelands/KoskunKeep.java diff --git a/Mage.Sets/src/mage/sets/homelands/KoskunKeep.java b/Mage.Sets/src/mage/sets/homelands/KoskunKeep.java new file mode 100644 index 0000000000..8764ad81b0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/homelands/KoskunKeep.java @@ -0,0 +1,75 @@ +/* + * 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.homelands; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.mana.ColorlessManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; + +/** + * + * @author anonymous + */ +public class KoskunKeep extends CardImpl { + + public KoskunKeep(UUID ownerId) { + super(ownerId, 139, "Koskun Keep", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "HML"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {1}, {tap}: Add {R} to your mana pool. + Ability ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana, new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + // {2}, {tap}: Add {B} or {G} to your mana pool. + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + ability = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana, new GenericManaCost(2)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public KoskunKeep(final KoskunKeep card) { + super(card); + } + + @Override + public KoskunKeep copy() { + return new KoskunKeep(this); + } +} From 1524e22ed4b23b5767439d8afd817d5f784485b4 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:29:54 -0300 Subject: [PATCH 26/42] [ALL] Add Sheltered Valley --- .../mage/sets/alliances/ShelteredValley.java | 94 +++++++++++++++++++ 1 file changed, 94 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/alliances/ShelteredValley.java diff --git a/Mage.Sets/src/mage/sets/alliances/ShelteredValley.java b/Mage.Sets/src/mage/sets/alliances/ShelteredValley.java new file mode 100644 index 0000000000..b8d81deb48 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/ShelteredValley.java @@ -0,0 +1,94 @@ +/* + * 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.alliances; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.Condition; +import mage.abilities.condition.common.PermanentsOnTheBattlefieldCondition; +import mage.abilities.costs.Cost; +import mage.abilities.costs.CostImpl; +import mage.abilities.costs.common.SacrificeAllCost; +import mage.abilities.decorator.ConditionalOneShotEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.EnterBattlefieldPayCostOrPutGraveyardEffect; +import mage.abilities.effects.common.GainLifeEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.filter.FilterPermanent; +import mage.filter.common.FilterLandPermanent; +import mage.filter.predicate.mageobject.NamePredicate; + +/** + * + * @author anonymous + */ +public class ShelteredValley extends CardImpl { + + private static final FilterLandPermanent filter = new FilterLandPermanent(); + private static final FilterPermanent filterShelteredValley = new FilterPermanent("permanent named Sheltered Valley"); + + static { + filterShelteredValley.add(new NamePredicate("Sheltered Valley")); + } + + public ShelteredValley(UUID ownerId) { + super(ownerId, 187, "Sheltered Valley", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ALL"; + + // If Sheltered Valley would enter the battlefield, instead sacrifice each other permanent named Sheltered Valley you control, then put Sheltered Valley onto the battlefield. + Effect effect = new EnterBattlefieldPayCostOrPutGraveyardEffect(new SacrificeAllCost(filterShelteredValley)); + effect.setText("If {this} would enter the battlefield, instead sacrifice each other permanent named {this} you control, then put {this} onto the battlefield."); + Ability ability = new SimpleStaticAbility(Zone.ALL, effect); + this.addAbility(ability); + + // At the beginning of your upkeep, if you control three or fewer lands, you gain 1 life. + Condition controls = new PermanentsOnTheBattlefieldCondition(filter, PermanentsOnTheBattlefieldCondition.CountType.FEWER_THAN, 4); + effect = new ConditionalOneShotEffect(new GainLifeEffect(1), controls); + effect.setText("if you control three or fewer lands, you gain 1 life"); + ability = new BeginningOfUpkeepTriggeredAbility(Zone.BATTLEFIELD, effect, TargetController.YOU, false); + this.addAbility(ability); + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + } + + public ShelteredValley(final ShelteredValley card) { + super(card); + } + + @Override + public ShelteredValley copy() { + return new ShelteredValley(this); + } +} From cd0cb8051b11efea33fab91cd154820b5e65a06f Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:30:17 -0300 Subject: [PATCH 27/42] [WTH] Add Lotus Vale --- .../src/mage/sets/weatherlight/LotusVale.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/weatherlight/LotusVale.java diff --git a/Mage.Sets/src/mage/sets/weatherlight/LotusVale.java b/Mage.Sets/src/mage/sets/weatherlight/LotusVale.java new file mode 100644 index 0000000000..9183f46d57 --- /dev/null +++ b/Mage.Sets/src/mage/sets/weatherlight/LotusVale.java @@ -0,0 +1,74 @@ +/* + * 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.weatherlight; + +import java.util.UUID; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.effects.common.EnterBattlefieldPayCostOrPutGraveyardEffect; +import mage.abilities.mana.AnyColorManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.filter.predicate.Predicates; +import mage.filter.predicate.permanent.TappedPredicate; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author anonymous + */ +public class LotusVale extends CardImpl { + + private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("two untapped lands"); + static { + filter.add(Predicates.not(new TappedPredicate())); + } + + public LotusVale(UUID ownerId) { + super(ownerId, 165, "Lotus Vale", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "WTH"; + + // If Lotus Vale would enter the battlefield, sacrifice two untapped lands instead. If you do, put Lotus Vale onto the battlefield. If you don't, put it into its owner's graveyard. + this.addAbility(new SimpleStaticAbility(Zone.ALL, new EnterBattlefieldPayCostOrPutGraveyardEffect(new SacrificeTargetCost(new TargetControlledPermanent(2, 2, filter, false))))); + + // {tap}: Add three mana of any one color to your mana pool. + this.addAbility(new AnyColorManaAbility()); + } + + public LotusVale(final LotusVale card) { + super(card); + } + + @Override + public LotusVale copy() { + return new LotusVale(this); + } +} From 3ef499cbd2cdb3e71823f7faba138777e3df7f90 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:30:32 -0300 Subject: [PATCH 28/42] [PLS] Add Terminal Moraine --- .../mage/sets/planeshift/TerminalMoraine.java | 74 +++++++++++++++++++ 1 file changed, 74 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/planeshift/TerminalMoraine.java diff --git a/Mage.Sets/src/mage/sets/planeshift/TerminalMoraine.java b/Mage.Sets/src/mage/sets/planeshift/TerminalMoraine.java new file mode 100644 index 0000000000..2db3a01cc0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/TerminalMoraine.java @@ -0,0 +1,74 @@ +/* + * 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.planeshift; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterBasicLandCard; +import mage.target.common.TargetCardInLibrary; + +/** + * + * @author anonymous + */ +public class TerminalMoraine extends CardImpl { + + private static final FilterBasicLandCard filter = new FilterBasicLandCard(); + + public TerminalMoraine(UUID ownerId) { + super(ownerId, 142, "Terminal Moraine", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "PLS"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {2}, {tap}, Sacrifice Terminal Moraine: Search your library for a basic land card and put that card onto the battlefield tapped. Then shuffle your library. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(filter), true, true), new ManaCostsImpl<>("{2}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeSourceCost()); + this.addAbility(ability); + } + + public TerminalMoraine(final TerminalMoraine card) { + super(card); + } + + @Override + public TerminalMoraine copy() { + return new TerminalMoraine(this); + } +} From 2ada724418145bd9d882ffa11efcbcbb3327aea3 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:30:49 -0300 Subject: [PATCH 29/42] [PLS] Add Meteor Crater --- .../mage/sets/planeshift/MeteorCrater.java | 210 ++++++++++++++++++ 1 file changed, 210 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java diff --git a/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java b/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java new file mode 100644 index 0000000000..813ac55968 --- /dev/null +++ b/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java @@ -0,0 +1,210 @@ +/* + * 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.planeshift; + +import java.util.ArrayList; +import java.util.List; +import java.util.UUID; +import mage.Mana; +import mage.ObjectColor; +import mage.abilities.Abilities; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.effects.common.ManaEffect; +import mage.abilities.mana.ManaAbility; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.choices.Choice; +import mage.choices.ChoiceImpl; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.game.Game; +import mage.game.permanent.Permanent; +import mage.players.Player; + +/** + * + * @author anonymous + */ +public class MeteorCrater extends CardImpl { + + public MeteorCrater(UUID ownerId) { + super(ownerId, 140, "Meteor Crater", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "PLS"; + + // {tap}: Choose a color of a permanent you control. Add one mana of that color to your mana pool. + this.addAbility(new SimpleManaAbility(Zone.BATTLEFIELD, new MeteorCraterEffect(), new TapSourceCost())); + } + + public MeteorCrater(final MeteorCrater card) { + super(card); + } + + @Override + public MeteorCrater copy() { + return new MeteorCrater(this); + } +} + +class MeteorCraterEffect extends ManaEffect { + + /*** + * 04/10/2004 You can't choose "colorless". You have to choose one of the five colors. + */ + + private static final FilterControlledPermanent filter = new FilterControlledPermanent(); + + public MeteorCraterEffect() { + super(); + staticText = "Choose a color of a permanent you control. Add one mana of that color to your mana pool"; + } + + public MeteorCraterEffect(final MeteorCraterEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + Mana types = getManaTypes(game, source); + Choice choice = new ChoiceImpl(false); + choice.setMessage("Pick a mana color"); + if (types.getBlack() > 0) { + choice.getChoices().add("Black"); + } + if (types.getRed() > 0) { + choice.getChoices().add("Red"); + } + if (types.getBlue() > 0) { + choice.getChoices().add("Blue"); + } + if (types.getGreen() > 0) { + choice.getChoices().add("Green"); + } + if (types.getWhite() > 0) { + choice.getChoices().add("White"); + } + if (types.getAny() > 0) { + choice.getChoices().add("Black"); + choice.getChoices().add("Red"); + choice.getChoices().add("Blue"); + choice.getChoices().add("Green"); + choice.getChoices().add("White"); + } + if (choice.getChoices().size() > 0) { + Player player = game.getPlayer(source.getControllerId()); + if (choice.getChoices().size() == 1) { + choice.setChoice(choice.getChoices().iterator().next()); + } else { + player.choose(outcome, choice, game); + } + if (choice.getChoice() != null) { + Mana mana = new Mana(); + switch (choice.getChoice()) { + case "Black": + mana.setBlack(1); + break; + case "Blue": + mana.setBlue(1); + break; + case "Red": + mana.setRed(1); + break; + case "Green": + mana.setGreen(1); + break; + case "White": + mana.setWhite(1); + break; + } + checkToFirePossibleEvents(mana, game, source); + player.getManaPool().addMana(mana, game, source); + return true; + } + return false; + } + return true; + } + + public List getNetMana(Game game, Ability source) { + List netManas = new ArrayList<>(); + Mana types = getManaTypes(game, source); + if (types.getBlack() > 0) { + netManas.add(new Mana(ColoredManaSymbol.B)); + } + if (types.getRed() > 0) { + netManas.add(new Mana(ColoredManaSymbol.R)); + } + if (types.getBlue() > 0) { + netManas.add(new Mana(ColoredManaSymbol.U)); + } + if (types.getGreen() > 0) { + netManas.add(new Mana(ColoredManaSymbol.G)); + } + if (types.getWhite() > 0) { + netManas.add(new Mana(ColoredManaSymbol.W)); + } + return netManas; + } + + private Mana getManaTypes(Game game, Ability source) { + List controlledPermanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); + Mana types = new Mana(); + for (Permanent permanent : controlledPermanents) { + ObjectColor color = permanent.getColor(); + if (color.isBlack()) { + types.add(Mana.BlackMana); + } + if (color.isBlue()) { + types.add(Mana.BlueMana); + } + if (color.isGreen()) { + types.add(Mana.GreenMana); + } + if(color.isRed()) { + types.add(Mana.RedMana); + } + if(color.isWhite()) { + types.add(Mana.WhiteMana); + } + } + return types; + } + + @Override + public Mana getMana(Game game, Ability source) { + return null; + } + + @Override + public MeteorCraterEffect copy() { + return new MeteorCraterEffect(this); + } +} \ No newline at end of file From fe53898194ad8ce4483349c02f825558d0453ab1 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:31:07 -0300 Subject: [PATCH 30/42] [ONS] Add Unholy Grotto --- .../src/mage/sets/onslaught/UnholyGrotto.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/onslaught/UnholyGrotto.java diff --git a/Mage.Sets/src/mage/sets/onslaught/UnholyGrotto.java b/Mage.Sets/src/mage/sets/onslaught/UnholyGrotto.java new file mode 100644 index 0000000000..f2cb660c7b --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/UnholyGrotto.java @@ -0,0 +1,78 @@ +/* + * 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.onslaught; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.PutOnLibraryTargetEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.FilterCard; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetCardInYourGraveyard; + +/** + * + * @author anonymous + */ +public class UnholyGrotto extends CardImpl { + + private static final FilterCard filter = new FilterCard("Zombie card from your graveyard"); + + static { + filter.add(new SubtypePredicate("Zombie")); + } + + public UnholyGrotto(UUID ownerId) { + super(ownerId, 327, "Unholy Grotto", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ONS"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {B}, {tap}: Put target Zombie card from your graveyard on top of your library. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new PutOnLibraryTargetEffect(true), new ManaCostsImpl<>("{B}")); + ability.addCost(new TapSourceCost()); + ability.addTarget(new TargetCardInYourGraveyard(filter)); + this.addAbility(ability); + } + + public UnholyGrotto(final UnholyGrotto card) { + super(card); + } + + @Override + public UnholyGrotto copy() { + return new UnholyGrotto(this); + } +} From ec0950c41c9559bef11cffa45ded015203bd51c6 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:31:20 -0300 Subject: [PATCH 31/42] [ONS] Add Starlit Sanctum --- .../mage/sets/onslaught/StarlitSanctum.java | 155 ++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/onslaught/StarlitSanctum.java diff --git a/Mage.Sets/src/mage/sets/onslaught/StarlitSanctum.java b/Mage.Sets/src/mage/sets/onslaught/StarlitSanctum.java new file mode 100644 index 0000000000..6c46627377 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/StarlitSanctum.java @@ -0,0 +1,155 @@ +/* + * 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.onslaught; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.Cost; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.OneShotEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Outcome; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledCreaturePermanent; +import mage.game.Game; +import mage.players.Player; +import mage.target.common.TargetControlledCreaturePermanent; + +/** + * + * @author anonymous + */ +public class StarlitSanctum extends CardImpl { + + private static final FilterControlledCreaturePermanent filter = new FilterControlledCreaturePermanent("Cleric", "a Cleric creature"); + + public StarlitSanctum(UUID ownerId) { + super(ownerId, 325, "Starlit Sanctum", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ONS"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {W}, {tap}, Sacrifice a Cleric creature: You gain life equal to the sacrificed creature's toughness. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new StarlitSanctumWhiteEffect(), new ManaCostsImpl<>("{W}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); + this.addAbility(ability); + // {B}, {tap}, Sacrifice a Cleric creature: Target player loses life equal to the sacrificed creature's power. + ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new StarlitSanctumBlackEffect(), new ManaCostsImpl<>("{B}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledCreaturePermanent(filter))); + this.addAbility(ability); + } + + public StarlitSanctum(final StarlitSanctum card) { + super(card); + } + + @Override + public StarlitSanctum copy() { + return new StarlitSanctum(this); + } +} + +class StarlitSanctumWhiteEffect extends OneShotEffect { + + public StarlitSanctumWhiteEffect() { + super(Outcome.GainLife); + staticText = "You gain life equal to the sacrificed creature's toughness"; + } + + public StarlitSanctumWhiteEffect(final StarlitSanctumWhiteEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + int amount = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof SacrificeTargetCost && ((SacrificeTargetCost) cost).getPermanents().size() > 0) { + amount = ((SacrificeTargetCost) cost).getPermanents().get(0).getToughness().getValue(); + break; + } + } + if (amount > 0) { + Player player = game.getPlayer(source.getControllerId()); + if (player != null) { + player.gainLife(amount, game); + return true; + } + } + return false; + } + + @Override + public StarlitSanctumWhiteEffect copy() { + return new StarlitSanctumWhiteEffect(this); + } +} + +class StarlitSanctumBlackEffect extends OneShotEffect { + + public StarlitSanctumBlackEffect() { + super(Outcome.Damage); + staticText = "Target player loses life equal to the sacrificed creature's power"; + } + + public StarlitSanctumBlackEffect(final StarlitSanctumBlackEffect effect) { + super(effect); + } + + @Override + public boolean apply(Game game, Ability source) { + int amount = 0; + for (Cost cost : source.getCosts()) { + if (cost instanceof SacrificeTargetCost && ((SacrificeTargetCost) cost).getPermanents().size() > 0) { + amount = ((SacrificeTargetCost) cost).getPermanents().get(0).getPower().getValue(); + break; + } + } + if (amount > 0) { + Player player = game.getPlayer(source.getFirstTarget()); + if (player != null) { + player.damage(amount, source.getSourceId(), game, false, true); + return true; + } + } + return false; + } + + @Override + public StarlitSanctumBlackEffect copy() { + return new StarlitSanctumBlackEffect(this); + } +} \ No newline at end of file From b63269f6a57172002b3d8319b295de95ffc3ccf9 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:31:32 -0300 Subject: [PATCH 32/42] [ONS] Add Seaside Haven --- .../src/mage/sets/onslaught/SeasideHaven.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/onslaught/SeasideHaven.java diff --git a/Mage.Sets/src/mage/sets/onslaught/SeasideHaven.java b/Mage.Sets/src/mage/sets/onslaught/SeasideHaven.java new file mode 100644 index 0000000000..193ab18919 --- /dev/null +++ b/Mage.Sets/src/mage/sets/onslaught/SeasideHaven.java @@ -0,0 +1,78 @@ +/* + * 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.onslaught; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledPermanent; +import mage.filter.predicate.mageobject.SubtypePredicate; +import mage.target.common.TargetControlledPermanent; + +/** + * + * @author anonymous + */ +public class SeasideHaven extends CardImpl { + + private static final FilterControlledPermanent filter = new FilterControlledPermanent("Bird"); + + static{ + filter.add(new SubtypePredicate("Bird")); + } + + public SeasideHaven(UUID ownerId) { + super(ownerId, 323, "Seaside Haven", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ONS"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {W}{U}, {tap}, Sacrifice a Bird: Draw a card. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, null, new ManaCostsImpl<>("{W}{U}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + this.addAbility(ability); + } + + public SeasideHaven(final SeasideHaven card) { + super(card); + } + + @Override + public SeasideHaven copy() { + return new SeasideHaven(this); + } +} From 6530a32f97b65170c6572ae4d6cd77ee9a1433ba Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:31:50 -0300 Subject: [PATCH 33/42] [NMS] Add Rath's Edge --- .../src/mage/sets/nemesis/RathsEdge.java | 77 +++++++++++++++++++ 1 file changed, 77 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/nemesis/RathsEdge.java diff --git a/Mage.Sets/src/mage/sets/nemesis/RathsEdge.java b/Mage.Sets/src/mage/sets/nemesis/RathsEdge.java new file mode 100644 index 0000000000..b4b8f28c35 --- /dev/null +++ b/Mage.Sets/src/mage/sets/nemesis/RathsEdge.java @@ -0,0 +1,77 @@ +/* + * 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.nemesis; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.SacrificeTargetCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.ManaCostsImpl; +import mage.abilities.effects.common.DamageTargetEffect; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.filter.common.FilterControlledLandPermanent; +import mage.target.common.TargetControlledPermanent; +import mage.target.common.TargetCreatureOrPlayer; + +/** + * + * @author anonymous + */ +public class RathsEdge extends CardImpl { + + private static final FilterControlledLandPermanent filter = new FilterControlledLandPermanent("a land"); + + public RathsEdge(UUID ownerId) { + super(ownerId, 142, "Rath's Edge", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "NMS"; + this.supertype.add("Legendary"); + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {4}, {tap}, Sacrifice a land: Rath's Edge deals 1 damage to target creature or player. + Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new DamageTargetEffect(1), new ManaCostsImpl<>("{4}")); + ability.addCost(new TapSourceCost()); + ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(filter))); + ability.addTarget(new TargetCreatureOrPlayer()); + this.addAbility(ability); + } + + public RathsEdge(final RathsEdge card) { + super(card); + } + + @Override + public RathsEdge copy() { + return new RathsEdge(this); + } +} From cacc88e030ab42339bf6358c7baa3b4bdd803810 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:32:12 -0300 Subject: [PATCH 34/42] [MMQ] Add Mercadian Bazaar --- .../mercadianmasques/MercadianBazaar.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/MercadianBazaar.java diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/MercadianBazaar.java b/Mage.Sets/src/mage/sets/mercadianmasques/MercadianBazaar.java new file mode 100644 index 0000000000..b89398ad4a --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/MercadianBazaar.java @@ -0,0 +1,76 @@ +/* + * 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.mercadianmasques; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class MercadianBazaar extends CardImpl { + + public MercadianBazaar(UUID ownerId) { + super(ownerId, 321, "Mercadian Bazaar", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // Mercadian Bazaar enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Put a storage counter on Mercadian Bazaar. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.STORAGE.createInstance()), new TapSourceCost())); + // {tap}, Remove any number of storage counters from Mercadian Bazaar: Add {R} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.RedMana, new RemovedCountersForCostValue(), + "Add {R} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public MercadianBazaar(final MercadianBazaar card) { + super(card); + } + + @Override + public MercadianBazaar copy() { + return new MercadianBazaar(this); + } +} From c79e95c0cd064dfc865fbe132d0b33c9ec202d9d Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:32:23 -0300 Subject: [PATCH 35/42] [MMQ] Add Rushwood Grove --- .../sets/mercadianmasques/RushwoodGrove.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/RushwoodGrove.java diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/RushwoodGrove.java b/Mage.Sets/src/mage/sets/mercadianmasques/RushwoodGrove.java new file mode 100644 index 0000000000..df971fa382 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/RushwoodGrove.java @@ -0,0 +1,76 @@ +/* + * 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.mercadianmasques; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class RushwoodGrove extends CardImpl { + + public RushwoodGrove(UUID ownerId) { + super(ownerId, 325, "Rushwood Grove", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // Rushwood Grove enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Put a storage counter on Rushwood Grove. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.STORAGE.createInstance()), new TapSourceCost())); + // {tap}, Remove any number of storage counters from Rushwood Grove: Add {G} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.GreenMana, new RemovedCountersForCostValue(), + "Add {G} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public RushwoodGrove(final RushwoodGrove card) { + super(card); + } + + @Override + public RushwoodGrove copy() { + return new RushwoodGrove(this); + } +} From 24fc12cccdcc3fbff2ae7df27c6552c671738dad Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:32:35 -0300 Subject: [PATCH 36/42] [MMQ] Add Saprazzan Cove --- .../sets/mercadianmasques/SaprazzanCove.java | 78 +++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/SaprazzanCove.java diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/SaprazzanCove.java b/Mage.Sets/src/mage/sets/mercadianmasques/SaprazzanCove.java new file mode 100644 index 0000000000..7d841973f7 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/SaprazzanCove.java @@ -0,0 +1,78 @@ +/* + * 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.mercadianmasques; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.common.AddManaInAnyCombinationEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.ColoredManaSymbol; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class SaprazzanCove extends CardImpl { + + public SaprazzanCove(UUID ownerId) { + super(ownerId, 327, "Saprazzan Cove", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // Saprazzan Cove enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Put a storage counter on Saprazzan Cove. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.STORAGE.createInstance()), new TapSourceCost())); + // {tap}, Remove any number of storage counters from Saprazzan Cove: Add {U} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.BlueMana, new RemovedCountersForCostValue(), + "Add {U} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public SaprazzanCove(final SaprazzanCove card) { + super(card); + } + + @Override + public SaprazzanCove copy() { + return new SaprazzanCove(this); + } +} From f432ca8e523d7e7c9c312f9a21cf9f7493542bc3 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:32:48 -0300 Subject: [PATCH 37/42] [MMQ] Add Subterranean Hangar --- .../mercadianmasques/SubterraneanHangar.java | 76 +++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/mercadianmasques/SubterraneanHangar.java diff --git a/Mage.Sets/src/mage/sets/mercadianmasques/SubterraneanHangar.java b/Mage.Sets/src/mage/sets/mercadianmasques/SubterraneanHangar.java new file mode 100644 index 0000000000..245b09cbd4 --- /dev/null +++ b/Mage.Sets/src/mage/sets/mercadianmasques/SubterraneanHangar.java @@ -0,0 +1,76 @@ +/* + * 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.mercadianmasques; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.EntersBattlefieldTappedAbility; +import mage.abilities.common.SimpleActivatedAbility; +import mage.abilities.costs.common.RemoveVariableCountersSourceCost; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.dynamicvalue.common.RemovedCountersForCostValue; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.mana.DynamicManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class SubterraneanHangar extends CardImpl { + + public SubterraneanHangar(UUID ownerId) { + super(ownerId, 329, "Subterranean Hangar", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "MMQ"; + + // Subterranean Hangar enters the battlefield tapped. + this.addAbility(new EntersBattlefieldTappedAbility()); + // {tap}: Put a storage counter on Subterranean Hangar. + this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new AddCountersSourceEffect(CounterType.STORAGE.createInstance()), new TapSourceCost())); + // {tap}, Remove any number of storage counters from Subterranean Hangar: Add {B} to your mana pool for each storage counter removed this way. + Ability ability = new DynamicManaAbility(Mana.BlackMana, new RemovedCountersForCostValue(), + "Add {B} to your mana pool for each storage counter removed this way"); + ability.addCost(new RemoveVariableCountersSourceCost( + CounterType.STORAGE.createInstance(), "Remove any number of storage counters from {this}")); + this.addAbility(ability); + } + + public SubterraneanHangar(final SubterraneanHangar card) { + super(card); + } + + @Override + public SubterraneanHangar copy() { + return new SubterraneanHangar(this); + } +} From e9916cc1db415dc53c9ab78cf0ae3635a8e26bdd Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:33:09 -0300 Subject: [PATCH 38/42] [ALL] Add School of the Unseen --- .../sets/alliances/SchoolOfTheUnseen.java | 66 +++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/alliances/SchoolOfTheUnseen.java diff --git a/Mage.Sets/src/mage/sets/alliances/SchoolOfTheUnseen.java b/Mage.Sets/src/mage/sets/alliances/SchoolOfTheUnseen.java new file mode 100644 index 0000000000..4ad85cc657 --- /dev/null +++ b/Mage.Sets/src/mage/sets/alliances/SchoolOfTheUnseen.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.alliances; + +import java.util.UUID; +import mage.abilities.Ability; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.costs.mana.GenericManaCost; +import mage.abilities.mana.AnyColorManaAbility; +import mage.abilities.mana.ColorlessManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; + +/** + * + * @author anonymous + */ +public class SchoolOfTheUnseen extends CardImpl { + + public SchoolOfTheUnseen(UUID ownerId) { + super(ownerId, 186, "School of the Unseen", Rarity.UNCOMMON, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ALL"; + + // {tap}: Add {1} to your mana pool. + this.addAbility(new ColorlessManaAbility()); + // {2}, {tap}: Add one mana of any color to your mana pool. + Ability ability = new AnyColorManaAbility(new GenericManaCost(1)); + ability.addCost(new TapSourceCost()); + this.addAbility(ability); + } + + public SchoolOfTheUnseen(final SchoolOfTheUnseen card) { + super(card); + } + + @Override + public SchoolOfTheUnseen copy() { + return new SchoolOfTheUnseen(this); + } +} From 96f1822231326d88208e52148b4adbafab372328 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:33:19 -0300 Subject: [PATCH 39/42] [ICE] Add Land Cap --- Mage.Sets/src/mage/sets/iceage/LandCap.java | 87 +++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/iceage/LandCap.java diff --git a/Mage.Sets/src/mage/sets/iceage/LandCap.java b/Mage.Sets/src/mage/sets/iceage/LandCap.java new file mode 100644 index 0000000000..ebb3dcb35f --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/LandCap.java @@ -0,0 +1,87 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class LandCap extends CardImpl { + + public LandCap(UUID ownerId) { + super(ownerId, 319, "Land Cap", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ICE"; + + // Land Cap doesn't untap during your untap step if it has a depletion counter on it. + Effect effect = new ConditionalContinuousRuleModifyingEffect(new DontUntapInControllersUntapStepSourceEffect(), + new SourceHasCounterCondition(CounterType.DEPLETION, 0)); + effect.setText("{this} doesn't untap during your untap step if it has a depletion counter on it"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + this.addAbility(ability); + // At the beginning of your upkeep, remove a depletion counter from Land Cap. + Ability ability2 = new BeginningOfUpkeepTriggeredAbility(new RemoveCounterSourceEffect(CounterType.DEPLETION.createInstance()), TargetController.YOU, false); + this.addAbility(ability2); + // {tap}: Add {W} or {U} to your mana pool. Put a depletion counter on Land Cap. + Ability ability3 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.WhiteMana, new TapSourceCost()); + ability3.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability3); + Ability ability4 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlueMana, new TapSourceCost()); + ability4.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability4); + } + + public LandCap(final LandCap card) { + super(card); + } + + @Override + public LandCap copy() { + return new LandCap(this); + } +} From 42e9d2d8d606c6108a683b3feda13619e02fa16f Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:33:29 -0300 Subject: [PATCH 40/42] [ICE] Add Timberline Ridge --- .../src/mage/sets/iceage/TimberlineRidge.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/iceage/TimberlineRidge.java diff --git a/Mage.Sets/src/mage/sets/iceage/TimberlineRidge.java b/Mage.Sets/src/mage/sets/iceage/TimberlineRidge.java new file mode 100644 index 0000000000..56a826a8e0 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/TimberlineRidge.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.sets.iceage; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class TimberlineRidge extends CardImpl { + + public TimberlineRidge(UUID ownerId) { + super(ownerId, 356, "Timberline Ridge", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ICE"; + + // Timberline Ridge doesn't untap during your untap step if it has a depletion counter on it. + Effect effect = new ConditionalContinuousRuleModifyingEffect(new DontUntapInControllersUntapStepSourceEffect(), + new SourceHasCounterCondition(CounterType.DEPLETION, 0)); + effect.setText("{this} doesn't untap during your untap step if it has a depletion counter on it"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + this.addAbility(ability); + // At the beginning of your upkeep, remove a depletion counter from Timberline Ridge. + Ability ability2 = new BeginningOfUpkeepTriggeredAbility(new RemoveCounterSourceEffect(CounterType.DEPLETION.createInstance()), TargetController.YOU, false); + this.addAbility(ability2); + // {tap}: Add {R} or {G} to your mana pool. Put a depletion counter on Timberline Ridge. + Ability ability3 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana, new TapSourceCost()); + ability3.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability3); + Ability ability4 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.GreenMana, new TapSourceCost()); + ability4.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability4); + } + + public TimberlineRidge(final TimberlineRidge card) { + super(card); + } + + @Override + public TimberlineRidge copy() { + return new TimberlineRidge(this); + } +} From 5002c4133c91cfc78e82f2d86475ced4e2082f58 Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:33:39 -0300 Subject: [PATCH 41/42] [ICE] Add Lava Tubes --- Mage.Sets/src/mage/sets/iceage/LavaTubes.java | 86 +++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/iceage/LavaTubes.java diff --git a/Mage.Sets/src/mage/sets/iceage/LavaTubes.java b/Mage.Sets/src/mage/sets/iceage/LavaTubes.java new file mode 100644 index 0000000000..26cd59dc92 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/LavaTubes.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.sets.iceage; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class LavaTubes extends CardImpl { + + public LavaTubes(UUID ownerId) { + super(ownerId, 339, "Lava Tubes", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ICE"; + + // Lava Tubes doesn't untap during your untap step if it has a depletion counter on it. + Effect effect = new ConditionalContinuousRuleModifyingEffect(new DontUntapInControllersUntapStepSourceEffect(), + new SourceHasCounterCondition(CounterType.DEPLETION, 0)); + effect.setText("{this} doesn't untap during your untap step if it has a depletion counter on it"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + this.addAbility(ability); + // At the beginning of your upkeep, remove a depletion counter from Lava Tubes. + Ability ability2 = new BeginningOfUpkeepTriggeredAbility(new RemoveCounterSourceEffect(CounterType.DEPLETION.createInstance()), TargetController.YOU, false); + this.addAbility(ability2); + // {tap}: Add {B} or {R} to your mana pool. Put a depletion counter on Lava Tubes. + Ability ability3 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana, new TapSourceCost()); + ability3.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability3); + Ability ability4 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.RedMana, new TapSourceCost()); + ability4.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability4); + } + + public LavaTubes(final LavaTubes card) { + super(card); + } + + @Override + public LavaTubes copy() { + return new LavaTubes(this); + } +} From 2e23f5ae9ee2e214b32909695ebd79e1fc3975fd Mon Sep 17 00:00:00 2001 From: Luna Skyrise Date: Mon, 25 May 2015 13:34:01 -0300 Subject: [PATCH 42/42] [ICE] Add River Delta fixes #990 --- .../src/mage/sets/iceage/RiverDelta.java | 87 +++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100644 Mage.Sets/src/mage/sets/iceage/RiverDelta.java diff --git a/Mage.Sets/src/mage/sets/iceage/RiverDelta.java b/Mage.Sets/src/mage/sets/iceage/RiverDelta.java new file mode 100644 index 0000000000..b5f91fff06 --- /dev/null +++ b/Mage.Sets/src/mage/sets/iceage/RiverDelta.java @@ -0,0 +1,87 @@ +/* + * 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.iceage; + +import java.util.UUID; +import mage.Mana; +import mage.abilities.Ability; +import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; +import mage.abilities.common.SimpleStaticAbility; +import mage.abilities.condition.common.SourceHasCounterCondition; +import mage.abilities.costs.common.TapSourceCost; +import mage.abilities.decorator.ConditionalContinuousEffect; +import mage.abilities.decorator.ConditionalContinuousRuleModifyingEffect; +import mage.abilities.effects.Effect; +import mage.abilities.effects.common.DontUntapInControllersUntapStepSourceEffect; +import mage.abilities.effects.common.counter.AddCountersSourceEffect; +import mage.abilities.effects.common.counter.RemoveCounterSourceEffect; +import mage.abilities.mana.SimpleManaAbility; +import mage.cards.CardImpl; +import mage.constants.CardType; +import mage.constants.Rarity; +import mage.constants.TargetController; +import mage.constants.Zone; +import mage.counters.CounterType; + +/** + * + * @author anonymous + */ +public class RiverDelta extends CardImpl { + + public RiverDelta(UUID ownerId) { + super(ownerId, 346, "River Delta", Rarity.RARE, new CardType[]{CardType.LAND}, ""); + this.expansionSetCode = "ICE"; + + // River Delta doesn't untap during your untap step if it has a depletion counter on it. + Effect effect = new ConditionalContinuousRuleModifyingEffect(new DontUntapInControllersUntapStepSourceEffect(), + new SourceHasCounterCondition(CounterType.DEPLETION, 0)); + effect.setText("{this} doesn't untap during your untap step if it has a depletion counter on it"); + Ability ability = new SimpleStaticAbility(Zone.BATTLEFIELD, effect); + this.addAbility(ability); + // At the beginning of your upkeep, remove a depletion counter from River Delta. + Ability ability2 = new BeginningOfUpkeepTriggeredAbility(new RemoveCounterSourceEffect(CounterType.DEPLETION.createInstance()), TargetController.YOU, false); + this.addAbility(ability2); + // {tap}: Add {U} or {B} to your mana pool. Put a depletion counter on River Delta. + Ability ability3 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlueMana, new TapSourceCost()); + ability3.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability3); + Ability ability4 = new SimpleManaAbility(Zone.BATTLEFIELD, Mana.BlackMana, new TapSourceCost()); + ability4.addEffect(new AddCountersSourceEffect(CounterType.DEPLETION.createInstance())); + this.addAbility(ability4); + } + + public RiverDelta(final RiverDelta card) { + super(card); + } + + @Override + public RiverDelta copy() { + return new RiverDelta(this); + } +}