From e8dbd2a3c81a60eae1d2c06c417a3fc51b13d45a Mon Sep 17 00:00:00 2001 From: Oleg Agafonov Date: Sat, 27 Jun 2020 19:10:04 +0400 Subject: [PATCH] Refactor some cost modification effects --- .../mage/cards/a/AnimarSoulOfElements.java | 11 ++-- .../mage/cards/b/BrighthearthBanneret.java | 8 +-- Mage.Sets/src/mage/cards/b/BrineGiant.java | 4 +- Mage.Sets/src/mage/cards/d/DaruWarchief.java | 8 +-- .../src/mage/cards/e/EmbalmersTools.java | 11 ++-- Mage.Sets/src/mage/cards/e/EyeOfUgin.java | 6 +-- Mage.Sets/src/mage/cards/f/Fluctuator.java | 10 ++-- .../src/mage/cards/f/FrogtosserBanneret.java | 8 +-- Mage.Sets/src/mage/cards/g/GateColossus.java | 4 +- .../src/mage/cards/g/GearseekerSerpent.java | 4 +- .../src/mage/cards/g/GoblinWarchief.java | 6 +-- .../mage/cards/g/GrandArbiterAugustinIV.java | 10 ++-- Mage.Sets/src/mage/cards/h/Heartstone.java | 20 ++----- Mage.Sets/src/mage/cards/h/HeroOfIroas.java | 9 ++-- Mage.Sets/src/mage/cards/h/HumOfTheRadix.java | 15 ++---- Mage.Sets/src/mage/cards/m/MythUnbound.java | 6 +-- .../src/mage/cards/n/NightscapeFamiliar.java | 8 +-- .../src/mage/cards/r/RakdosLordOfRiots.java | 6 +-- .../src/mage/cards/s/StonybrookBanneret.java | 8 +-- .../src/mage/cards/s/StormscapeFamiliar.java | 8 +-- .../src/mage/cards/s/SunscapeFamiliar.java | 8 +-- .../src/mage/cards/t/TheImmortalSun.java | 17 +++--- .../mage/cards/t/ThunderscapeFamiliar.java | 8 +-- .../src/mage/cards/u/UndeadWarchief.java | 8 +-- .../src/mage/cards/w/WardenOfEvosIsle.java | 9 ++-- .../effects/common/AffinityEffect.java | 4 +- .../PlanarDieRollCostIncreasingEffect.java | 53 +++++++++++++++++++ ...CostReductionSourceForOpponentsEffect.java | 4 +- .../planes/AcademyAtTolariaWestPlane.java | 1 + .../mage/game/command/planes/AgyremPlane.java | 3 +- .../mage/game/command/planes/AkoumPlane.java | 1 + .../game/command/planes/AstralArenaPlane.java | 1 + .../mage/game/command/planes/BantPlane.java | 51 ++---------------- .../command/planes/EdgeOfMalacolPlane.java | 1 + .../command/planes/FeedingGroundsPlane.java | 1 + .../command/planes/FieldsOfSummerPlane.java | 1 + .../planes/HedronFieldsOfAgadeemPlane.java | 1 + .../game/command/planes/LetheLakePlane.java | 1 + .../mage/game/command/planes/NayaPlane.java | 1 + .../game/command/planes/PanopticonPlane.java | 1 + .../mage/game/command/planes/TazeemPlane.java | 1 + .../command/planes/TheDarkBaronyPlane.java | 1 + .../game/command/planes/TheEonFogPlane.java | 1 + .../command/planes/TheGreatForestPlane.java | 1 + .../command/planes/TheZephyrMazePlane.java | 1 + .../planes/TrailOfTheMageRingsPlane.java | 1 + .../game/command/planes/TrugaJunglePlane.java | 1 + .../game/command/planes/TurriIslandPlane.java | 1 + .../command/planes/UndercityReachesPlane.java | 1 + 49 files changed, 174 insertions(+), 180 deletions(-) create mode 100644 Mage/src/main/java/mage/abilities/effects/common/cost/PlanarDieRollCostIncreasingEffect.java diff --git a/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java b/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java index 94e44b7c8e9..e47b01a4681 100644 --- a/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java +++ b/Mage.Sets/src/mage/cards/a/AnimarSoulOfElements.java @@ -1,7 +1,5 @@ - package mage.cards.a; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; @@ -21,8 +19,9 @@ import mage.game.Game; import mage.game.permanent.Permanent; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class AnimarSoulOfElements extends CardImpl { @@ -73,10 +72,8 @@ class AnimarCostReductionEffect extends CostModificationEffectImpl { Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (sourcePermanent != null && spellAbility != null) { int amount = sourcePermanent.getCounters(game).getCount(CounterType.P1P1); - if (amount > 0) { - CardUtil.reduceCost(spellAbility, amount); - return true; - } + CardUtil.reduceCost(spellAbility, amount); + return true; } return false; } diff --git a/Mage.Sets/src/mage/cards/b/BrighthearthBanneret.java b/Mage.Sets/src/mage/cards/b/BrighthearthBanneret.java index 1d6c96aa687..24a06469828 100644 --- a/Mage.Sets/src/mage/cards/b/BrighthearthBanneret.java +++ b/Mage.Sets/src/mage/cards/b/BrighthearthBanneret.java @@ -1,7 +1,5 @@ - package mage.cards.b; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.costs.mana.ManaCostsImpl; @@ -15,8 +13,9 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; +import java.util.UUID; + /** - * * @author North */ public final class BrighthearthBanneret extends CardImpl { @@ -30,7 +29,7 @@ public final class BrighthearthBanneret extends CardImpl { } public BrighthearthBanneret(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add(SubType.ELEMENTAL, SubType.WARRIOR); this.power = new MageInt(1); @@ -38,6 +37,7 @@ public final class BrighthearthBanneret extends CardImpl { // Elemental spells and Warrior spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + // Reinforce 1-{1}{R} this.addAbility(new ReinforceAbility(1, new ManaCostsImpl("{1}{R}"))); } diff --git a/Mage.Sets/src/mage/cards/b/BrineGiant.java b/Mage.Sets/src/mage/cards/b/BrineGiant.java index 09942e2ab33..9b02061df94 100644 --- a/Mage.Sets/src/mage/cards/b/BrineGiant.java +++ b/Mage.Sets/src/mage/cards/b/BrineGiant.java @@ -67,9 +67,7 @@ class BrineGiantCostReductionEffect extends CostModificationEffectImpl { @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { int count = game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game).size(); - if (count > 0) { - CardUtil.reduceCost(abilityToModify, count); - } + CardUtil.reduceCost(abilityToModify, count); return true; } diff --git a/Mage.Sets/src/mage/cards/d/DaruWarchief.java b/Mage.Sets/src/mage/cards/d/DaruWarchief.java index 211b0173aa3..abee47c84f2 100644 --- a/Mage.Sets/src/mage/cards/d/DaruWarchief.java +++ b/Mage.Sets/src/mage/cards/d/DaruWarchief.java @@ -1,7 +1,5 @@ - package mage.cards.d; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostControlledEffect; @@ -15,8 +13,9 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author North */ public final class DaruWarchief extends CardImpl { @@ -30,7 +29,7 @@ public final class DaruWarchief extends CardImpl { } public DaruWarchief(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); @@ -39,6 +38,7 @@ public final class DaruWarchief extends CardImpl { // Soldier spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + // Soldier creatures you control get +1/+2. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 2, Duration.WhileOnBattlefield, filterCreatures, false))); } diff --git a/Mage.Sets/src/mage/cards/e/EmbalmersTools.java b/Mage.Sets/src/mage/cards/e/EmbalmersTools.java index bb7c1284c11..59fa7e2e9a5 100644 --- a/Mage.Sets/src/mage/cards/e/EmbalmersTools.java +++ b/Mage.Sets/src/mage/cards/e/EmbalmersTools.java @@ -1,8 +1,5 @@ - package mage.cards.e; -import java.util.UUID; -import mage.Mana; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; import mage.abilities.common.SimpleActivatedAbility; @@ -24,8 +21,9 @@ import mage.target.TargetPlayer; import mage.target.common.TargetControlledPermanent; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author fireshoes */ public final class EmbalmersTools extends CardImpl { @@ -81,10 +79,7 @@ class EmbalmersToolsEffect extends CostModificationEffectImpl { public boolean apply(Game game, Ability source, Ability abilityToModify) { Player controller = game.getPlayer(abilityToModify.getControllerId()); if (controller != null) { - Mana mana = abilityToModify.getManaCostsToPay().getMana(); - if (mana.count() > 1 && mana.getGeneric() > 0) { - CardUtil.reduceCost(abilityToModify, 1); - } + CardUtil.reduceCost(abilityToModify, 1); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/e/EyeOfUgin.java b/Mage.Sets/src/mage/cards/e/EyeOfUgin.java index 5aa63ff887e..d2aec862fd1 100644 --- a/Mage.Sets/src/mage/cards/e/EyeOfUgin.java +++ b/Mage.Sets/src/mage/cards/e/EyeOfUgin.java @@ -1,8 +1,5 @@ - - package mage.cards.e; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleStaticAbility; @@ -21,6 +18,8 @@ import mage.filter.common.FilterCreatureCard; import mage.filter.predicate.mageobject.ColorlessPredicate; import mage.target.common.TargetCardInLibrary; +import java.util.UUID; + /** * @author maurer.it_at_gmail.com */ @@ -41,6 +40,7 @@ public final class EyeOfUgin extends CardImpl { // Colorless Eldrazi spells you cast cost {2} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterSpells, 2))); + // {7}, {tap}: Search your library for a colorless creature card, reveal it, and put it into your hand. Then shuffle your library. Ability searchAbility = new SimpleActivatedAbility(Zone.BATTLEFIELD, new SearchLibraryPutInHandEffect(new TargetCardInLibrary(filter), true), diff --git a/Mage.Sets/src/mage/cards/f/Fluctuator.java b/Mage.Sets/src/mage/cards/f/Fluctuator.java index c0a1e52d08d..29433b881df 100644 --- a/Mage.Sets/src/mage/cards/f/Fluctuator.java +++ b/Mage.Sets/src/mage/cards/f/Fluctuator.java @@ -1,8 +1,5 @@ package mage.cards.f; -import java.util.LinkedHashSet; -import java.util.Set; -import java.util.UUID; import mage.Mana; import mage.abilities.Ability; import mage.abilities.common.SimpleStaticAbility; @@ -16,8 +13,11 @@ import mage.game.Game; import mage.players.Player; import mage.util.CardUtil; +import java.util.LinkedHashSet; +import java.util.Set; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class Fluctuator extends CardImpl { @@ -69,7 +69,7 @@ class FluctuatorEffect extends CostModificationEffectImpl { } if (reduceMax > 0) { int reduce; - if (game.inCheckPlayableState()) { + if (game.inCheckPlayableState() || !controller.isHuman()) { reduce = reduceMax; } else { ChoiceImpl choice = new ChoiceImpl(true); diff --git a/Mage.Sets/src/mage/cards/f/FrogtosserBanneret.java b/Mage.Sets/src/mage/cards/f/FrogtosserBanneret.java index 886577ba819..dd107b833f1 100644 --- a/Mage.Sets/src/mage/cards/f/FrogtosserBanneret.java +++ b/Mage.Sets/src/mage/cards/f/FrogtosserBanneret.java @@ -1,7 +1,5 @@ - package mage.cards.f; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; @@ -14,8 +12,9 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; +import java.util.UUID; + /** - * * @author North */ public final class FrogtosserBanneret extends CardImpl { @@ -29,7 +28,7 @@ public final class FrogtosserBanneret extends CardImpl { } public FrogtosserBanneret(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); this.subtype.add(SubType.GOBLIN); this.subtype.add(SubType.ROGUE); @@ -38,6 +37,7 @@ public final class FrogtosserBanneret extends CardImpl { // Haste this.addAbility(HasteAbility.getInstance()); + // Goblin spells and Rogue spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); } diff --git a/Mage.Sets/src/mage/cards/g/GateColossus.java b/Mage.Sets/src/mage/cards/g/GateColossus.java index b1c013f4954..e2387b7ccd2 100644 --- a/Mage.Sets/src/mage/cards/g/GateColossus.java +++ b/Mage.Sets/src/mage/cards/g/GateColossus.java @@ -84,9 +84,7 @@ class GateColossusCostReductionEffect extends CostModificationEffectImpl { @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { int count = game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game).size(); - if (count > 0) { - CardUtil.reduceCost(abilityToModify, count); - } + CardUtil.reduceCost(abilityToModify, count); return true; } diff --git a/Mage.Sets/src/mage/cards/g/GearseekerSerpent.java b/Mage.Sets/src/mage/cards/g/GearseekerSerpent.java index 30468d663c5..6d0991c9621 100644 --- a/Mage.Sets/src/mage/cards/g/GearseekerSerpent.java +++ b/Mage.Sets/src/mage/cards/g/GearseekerSerpent.java @@ -66,9 +66,7 @@ class GearseekerSerpentCostReductionEffect extends CostModificationEffectImpl { @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { int count = game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game).size(); - if (count > 0) { - CardUtil.reduceCost(abilityToModify, count); - } + CardUtil.reduceCost(abilityToModify, count); return true; } diff --git a/Mage.Sets/src/mage/cards/g/GoblinWarchief.java b/Mage.Sets/src/mage/cards/g/GoblinWarchief.java index 13106e9ba21..9ae91949618 100644 --- a/Mage.Sets/src/mage/cards/g/GoblinWarchief.java +++ b/Mage.Sets/src/mage/cards/g/GoblinWarchief.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; @@ -16,8 +14,9 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author jonubuu */ public final class GoblinWarchief extends CardImpl { @@ -38,6 +37,7 @@ public final class GoblinWarchief extends CardImpl { // Goblin spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterSpells, 1))); + // Goblins you control have haste. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GainAbilityControlledEffect(HasteAbility.getInstance(), Duration.WhileOnBattlefield, new FilterCreaturePermanent(SubType.GOBLIN, "Goblins"), false))); diff --git a/Mage.Sets/src/mage/cards/g/GrandArbiterAugustinIV.java b/Mage.Sets/src/mage/cards/g/GrandArbiterAugustinIV.java index 93c96922779..9c247eb3a73 100644 --- a/Mage.Sets/src/mage/cards/g/GrandArbiterAugustinIV.java +++ b/Mage.Sets/src/mage/cards/g/GrandArbiterAugustinIV.java @@ -1,7 +1,5 @@ - package mage.cards.g; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.Ability; @@ -17,21 +15,23 @@ import mage.filter.predicate.mageobject.ColorPredicate; import mage.game.Game; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class GrandArbiterAugustinIV extends CardImpl { private static final FilterCard filterWhite = new FilterCard("White spells"); private static final FilterCard filterBlue = new FilterCard("Blue spells"); + static { filterWhite.add(new ColorPredicate(ObjectColor.WHITE)); filterBlue.add(new ColorPredicate(ObjectColor.BLUE)); } public GrandArbiterAugustinIV(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{W}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{W}{U}"); addSuperType(SuperType.LEGENDARY); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.ADVISOR); @@ -41,8 +41,10 @@ public final class GrandArbiterAugustinIV extends CardImpl { // White spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterWhite, 1))); + // Blue spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filterBlue, 1))); + // Spells your opponents cast cost {1} more to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new GrandArbiterAugustinIVCostIncreaseEffect())); } diff --git a/Mage.Sets/src/mage/cards/h/Heartstone.java b/Mage.Sets/src/mage/cards/h/Heartstone.java index f2dabae26cd..9b65d308f3e 100644 --- a/Mage.Sets/src/mage/cards/h/Heartstone.java +++ b/Mage.Sets/src/mage/cards/h/Heartstone.java @@ -1,34 +1,27 @@ - package mage.cards.h; -import java.util.UUID; -import mage.Mana; import mage.abilities.Ability; import mage.abilities.ActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.AbilityType; -import mage.constants.CardType; -import mage.constants.CostModificationType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author pcasaretto_at_gmail.com */ public final class Heartstone extends CardImpl { public Heartstone(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ARTIFACT},"{3}"); + super(ownerId, setInfo, new CardType[]{CardType.ARTIFACT}, "{3}"); // Activated abilities of creatures cost {1} less to activate. This effect can't reduce the amount of mana an ability costs to activate to less than one mana. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new HeartstoneEffect())); @@ -62,10 +55,7 @@ class HeartstoneEffect extends CostModificationEffectImpl { public boolean apply(Game game, Ability source, Ability abilityToModify) { Player controller = game.getPlayer(abilityToModify.getControllerId()); if (controller != null) { - Mana mana = abilityToModify.getManaCostsToPay().getMana(); - if (mana.count() > 1 && mana.getGeneric() > 0) { - CardUtil.reduceCost(abilityToModify, 1); - } + CardUtil.reduceCost(abilityToModify, 1); return true; } return false; diff --git a/Mage.Sets/src/mage/cards/h/HeroOfIroas.java b/Mage.Sets/src/mage/cards/h/HeroOfIroas.java index 21855980f9d..f00ae978c61 100644 --- a/Mage.Sets/src/mage/cards/h/HeroOfIroas.java +++ b/Mage.Sets/src/mage/cards/h/HeroOfIroas.java @@ -1,7 +1,5 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; @@ -15,19 +13,21 @@ import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.FilterCard; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class HeroOfIroas extends CardImpl { private static final FilterCard filter = new FilterCard("Aura spells"); + static { filter.add(SubType.AURA.getPredicate()); } public HeroOfIroas(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.HUMAN); this.subtype.add(SubType.SOLDIER); @@ -36,6 +36,7 @@ public final class HeroOfIroas extends CardImpl { // Aura spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + // Heroic — Whenever you cast a spell that targets Hero of Iroas, put a +1/+1 counter on Hero of Iroas. this.addAbility(new HeroicAbility(new AddCountersSourceEffect(CounterType.P1P1.createInstance()))); } diff --git a/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java b/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java index 3eafa3ed173..7e806c12c61 100644 --- a/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java +++ b/Mage.Sets/src/mage/cards/h/HumOfTheRadix.java @@ -1,7 +1,5 @@ - package mage.cards.h; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.SpellAbility; @@ -9,17 +7,14 @@ import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.cost.CostModificationEffectImpl; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.CostModificationType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.common.FilterArtifactPermanent; import mage.game.Game; import mage.util.CardUtil; +import java.util.UUID; + /** - * * @author Pete Rossi */ public final class HumOfTheRadix extends CardImpl { @@ -56,9 +51,7 @@ class HumOfTheRadixCostIncreaseEffect extends CostModificationEffectImpl { @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { int additionalCost = game.getBattlefield().getAllActivePermanents(new FilterArtifactPermanent(), abilityToModify.getControllerId(), game).size(); - if (additionalCost > 0) { - CardUtil.increaseCost(abilityToModify, additionalCost); - } + CardUtil.increaseCost(abilityToModify, additionalCost); return true; } diff --git a/Mage.Sets/src/mage/cards/m/MythUnbound.java b/Mage.Sets/src/mage/cards/m/MythUnbound.java index 08e62af7f6c..0b2e0ea26d8 100644 --- a/Mage.Sets/src/mage/cards/m/MythUnbound.java +++ b/Mage.Sets/src/mage/cards/m/MythUnbound.java @@ -77,10 +77,8 @@ class MythUnboundCostReductionEffect extends CostModificationEffectImpl { if (spellAbility != null) { CommanderPlaysCountWatcher watcher = game.getState().getWatcher(CommanderPlaysCountWatcher.class); int castCount = watcher.getPlaysCount(abilityToModify.getSourceId()); - if (castCount > 0) { - CardUtil.reduceCost(spellAbility, castCount); - return true; - } + CardUtil.reduceCost(spellAbility, castCount); + return true; } return false; } diff --git a/Mage.Sets/src/mage/cards/n/NightscapeFamiliar.java b/Mage.Sets/src/mage/cards/n/NightscapeFamiliar.java index ad4ec58da7e..2a7ae10e1dc 100644 --- a/Mage.Sets/src/mage/cards/n/NightscapeFamiliar.java +++ b/Mage.Sets/src/mage/cards/n/NightscapeFamiliar.java @@ -1,7 +1,5 @@ - package mage.cards.n; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.SimpleActivatedAbility; @@ -18,8 +16,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author North */ public final class NightscapeFamiliar extends CardImpl { @@ -33,7 +32,7 @@ public final class NightscapeFamiliar extends CardImpl { } public NightscapeFamiliar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{B}"); this.subtype.add(SubType.ZOMBIE); this.power = new MageInt(1); @@ -41,6 +40,7 @@ public final class NightscapeFamiliar extends CardImpl { // Blue spells and red spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + // {1}{B}: Regenerate Nightscape Familiar. this.addAbility(new SimpleActivatedAbility(Zone.BATTLEFIELD, new RegenerateSourceEffect(), new ManaCostsImpl("{1}{B}"))); } diff --git a/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java b/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java index 37f54529210..00a84e1aeeb 100644 --- a/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java +++ b/Mage.Sets/src/mage/cards/r/RakdosLordOfRiots.java @@ -105,10 +105,8 @@ class RakdosLordOfRiotsCostReductionEffect extends CostModificationEffectImpl { Ability spellAbility = abilityToModify; if (spellAbility != null) { int amount = OpponentsLostLifeCount.instance.calculate(game, source, this); - if (amount > 0) { - CardUtil.reduceCost(spellAbility, amount); - return true; - } + CardUtil.reduceCost(spellAbility, amount); + return true; } return false; } diff --git a/Mage.Sets/src/mage/cards/s/StonybrookBanneret.java b/Mage.Sets/src/mage/cards/s/StonybrookBanneret.java index 70b28e219cf..3c6a09327f5 100644 --- a/Mage.Sets/src/mage/cards/s/StonybrookBanneret.java +++ b/Mage.Sets/src/mage/cards/s/StonybrookBanneret.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; @@ -14,8 +12,9 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.Predicates; +import java.util.UUID; + /** - * * @author North */ public final class StonybrookBanneret extends CardImpl { @@ -29,7 +28,7 @@ public final class StonybrookBanneret extends CardImpl { } public StonybrookBanneret(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); this.subtype.add(SubType.MERFOLK); this.subtype.add(SubType.WIZARD); @@ -38,6 +37,7 @@ public final class StonybrookBanneret extends CardImpl { // Islandwalk this.addAbility(new IslandwalkAbility()); + // Merfolk spells and Wizard spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); } diff --git a/Mage.Sets/src/mage/cards/s/StormscapeFamiliar.java b/Mage.Sets/src/mage/cards/s/StormscapeFamiliar.java index 31f5d317783..d09f512d5f4 100644 --- a/Mage.Sets/src/mage/cards/s/StormscapeFamiliar.java +++ b/Mage.Sets/src/mage/cards/s/StormscapeFamiliar.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.SimpleStaticAbility; @@ -16,8 +14,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author North */ public final class StormscapeFamiliar extends CardImpl { @@ -31,7 +30,7 @@ public final class StormscapeFamiliar extends CardImpl { } public StormscapeFamiliar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{U}"); this.subtype.add(SubType.BIRD); this.power = new MageInt(1); @@ -39,6 +38,7 @@ public final class StormscapeFamiliar extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // White spells and black spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); } diff --git a/Mage.Sets/src/mage/cards/s/SunscapeFamiliar.java b/Mage.Sets/src/mage/cards/s/SunscapeFamiliar.java index 420701d6d9c..dfacbc06269 100644 --- a/Mage.Sets/src/mage/cards/s/SunscapeFamiliar.java +++ b/Mage.Sets/src/mage/cards/s/SunscapeFamiliar.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.SimpleStaticAbility; @@ -16,8 +14,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author North */ public final class SunscapeFamiliar extends CardImpl { @@ -31,7 +30,7 @@ public final class SunscapeFamiliar extends CardImpl { } public SunscapeFamiliar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{W}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{W}"); this.subtype.add(SubType.WALL); this.power = new MageInt(0); @@ -39,6 +38,7 @@ public final class SunscapeFamiliar extends CardImpl { // Defender this.addAbility(DefenderAbility.getInstance()); + // Green spells and blue spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); } diff --git a/Mage.Sets/src/mage/cards/t/TheImmortalSun.java b/Mage.Sets/src/mage/cards/t/TheImmortalSun.java index f2795b87c97..dd3c5078cf2 100644 --- a/Mage.Sets/src/mage/cards/t/TheImmortalSun.java +++ b/Mage.Sets/src/mage/cards/t/TheImmortalSun.java @@ -1,8 +1,5 @@ - package mage.cards.t; -import java.util.Optional; -import java.util.UUID; import mage.MageObject; import mage.abilities.Ability; import mage.abilities.LoyaltyAbility; @@ -14,19 +11,16 @@ import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; import mage.cards.CardImpl; import mage.cards.CardSetInfo; -import mage.constants.CardType; -import mage.constants.Duration; -import mage.constants.Outcome; -import mage.constants.SuperType; -import mage.constants.TargetController; -import mage.constants.Zone; +import mage.constants.*; import mage.filter.FilterCard; import mage.game.Game; import mage.game.events.GameEvent; import mage.game.permanent.Permanent; +import java.util.Optional; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class TheImmortalSun extends CardImpl { @@ -38,11 +32,14 @@ public final class TheImmortalSun extends CardImpl { // Players can't activate planeswalkers' loyalty abilities. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new TheImmortalSunCantActivateEffect())); + // At the beginning of your draw step, draw an additional card. this.addAbility(new BeginningOfDrawTriggeredAbility(new DrawCardSourceControllerEffect(1) .setText("draw an additional card"), TargetController.YOU, false)); + // Spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(new FilterCard("Spells"), 1))); + // Creatures you control get +1/+1. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(1, 1, Duration.WhileOnBattlefield))); } diff --git a/Mage.Sets/src/mage/cards/t/ThunderscapeFamiliar.java b/Mage.Sets/src/mage/cards/t/ThunderscapeFamiliar.java index d66b96c6d4d..3bea2e13576 100644 --- a/Mage.Sets/src/mage/cards/t/ThunderscapeFamiliar.java +++ b/Mage.Sets/src/mage/cards/t/ThunderscapeFamiliar.java @@ -1,7 +1,5 @@ - package mage.cards.t; -import java.util.UUID; import mage.MageInt; import mage.ObjectColor; import mage.abilities.common.SimpleStaticAbility; @@ -16,8 +14,9 @@ import mage.filter.FilterCard; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; +import java.util.UUID; + /** - * * @author North */ public final class ThunderscapeFamiliar extends CardImpl { @@ -31,7 +30,7 @@ public final class ThunderscapeFamiliar extends CardImpl { } public ThunderscapeFamiliar(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{1}{R}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{1}{R}"); this.subtype.add(SubType.KAVU); this.power = new MageInt(1); @@ -39,6 +38,7 @@ public final class ThunderscapeFamiliar extends CardImpl { // First strike this.addAbility(FirstStrikeAbility.getInstance()); + // Black spells and green spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); } diff --git a/Mage.Sets/src/mage/cards/u/UndeadWarchief.java b/Mage.Sets/src/mage/cards/u/UndeadWarchief.java index c8a10d9f5c4..6725f512d46 100644 --- a/Mage.Sets/src/mage/cards/u/UndeadWarchief.java +++ b/Mage.Sets/src/mage/cards/u/UndeadWarchief.java @@ -1,7 +1,5 @@ - package mage.cards.u; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.continuous.BoostControlledEffect; @@ -15,8 +13,9 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; +import java.util.UUID; + /** - * * @author North */ public final class UndeadWarchief extends CardImpl { @@ -30,7 +29,7 @@ public final class UndeadWarchief extends CardImpl { } public UndeadWarchief(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{B}{B}"); this.subtype.add(SubType.ZOMBIE); this.power = new MageInt(1); @@ -38,6 +37,7 @@ public final class UndeadWarchief extends CardImpl { // Zombie spells you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); + // Zombie creatures you control get +2/+1. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new BoostControlledEffect(2, 1, Duration.WhileOnBattlefield, filterCreatures, false))); } diff --git a/Mage.Sets/src/mage/cards/w/WardenOfEvosIsle.java b/Mage.Sets/src/mage/cards/w/WardenOfEvosIsle.java index d8f55560479..a3834c1c39b 100644 --- a/Mage.Sets/src/mage/cards/w/WardenOfEvosIsle.java +++ b/Mage.Sets/src/mage/cards/w/WardenOfEvosIsle.java @@ -1,7 +1,5 @@ - package mage.cards.w; -import java.util.UUID; import mage.MageInt; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.effects.common.cost.SpellsCostReductionControllerEffect; @@ -14,20 +12,22 @@ import mage.constants.Zone; import mage.filter.FilterCard; import mage.filter.predicate.mageobject.AbilityPredicate; +import java.util.UUID; + /** - * * @author LevelX2 */ public final class WardenOfEvosIsle extends CardImpl { private static final FilterCard filter = new FilterCard("Creature spells with flying"); + static { filter.add(CardType.CREATURE.getPredicate()); filter.add(new AbilityPredicate(FlyingAbility.class)); } public WardenOfEvosIsle(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.CREATURE},"{2}{U}"); + super(ownerId, setInfo, new CardType[]{CardType.CREATURE}, "{2}{U}"); this.subtype.add(SubType.BIRD); this.subtype.add(SubType.WIZARD); @@ -36,6 +36,7 @@ public final class WardenOfEvosIsle extends CardImpl { // Flying this.addAbility(FlyingAbility.getInstance()); + // Creature spells with flying you cast cost {1} less to cast. this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new SpellsCostReductionControllerEffect(filter, 1))); diff --git a/Mage/src/main/java/mage/abilities/effects/common/AffinityEffect.java b/Mage/src/main/java/mage/abilities/effects/common/AffinityEffect.java index 617a18934e5..f44dfcf5450 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/AffinityEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/AffinityEffect.java @@ -29,9 +29,7 @@ public class AffinityEffect extends CostModificationEffectImpl { public boolean apply(Game game, Ability source, Ability abilityToModify) { // abilityToModify.getControllerId() works with Sen Triplets and in multiplayer games, see https://github.com/magefree/mage/issues/5931 int count = game.getBattlefield().getActivePermanents(filter, abilityToModify.getControllerId(), source.getId(), game).size(); - if (count > 0) { - CardUtil.reduceCost(abilityToModify, count); - } + CardUtil.reduceCost(abilityToModify, count); return true; } diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/PlanarDieRollCostIncreasingEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/PlanarDieRollCostIncreasingEffect.java new file mode 100644 index 00000000000..0adb9dd2830 --- /dev/null +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/PlanarDieRollCostIncreasingEffect.java @@ -0,0 +1,53 @@ +package mage.abilities.effects.common.cost; + +import mage.abilities.Ability; +import mage.constants.CostModificationType; +import mage.constants.Duration; +import mage.constants.Outcome; +import mage.game.Game; +import mage.players.Player; +import mage.util.CardUtil; +import mage.watchers.common.PlanarRollWatcher; + +import java.util.UUID; + +/** + * @author JayDi85 + */ +public class PlanarDieRollCostIncreasingEffect extends CostModificationEffectImpl { + + private final UUID originalId; + + public PlanarDieRollCostIncreasingEffect(UUID originalId) { + super(Duration.EndOfGame, Outcome.Benefit, CostModificationType.INCREASE_COST); + this.originalId = originalId; + } + + private PlanarDieRollCostIncreasingEffect(final PlanarDieRollCostIncreasingEffect effect) { + super(effect); + this.originalId = effect.originalId; + } + + @Override + public boolean apply(Game game, Ability source, Ability abilityToModify) { + Player activePlayer = game.getPlayer(game.getActivePlayerId()); + PlanarRollWatcher watcher = game.getState().getWatcher(PlanarRollWatcher.class); + if (activePlayer == null && watcher == null) { + return false; + } + + int rolledCounter = watcher.getNumberTimesPlanarDieRolled(activePlayer.getId()); + CardUtil.increaseCost(abilityToModify, rolledCounter); + return true; + } + + @Override + public boolean applies(Ability abilityToModify, Ability source, Game game) { + return abilityToModify.getOriginalId().equals(originalId); + } + + @Override + public PlanarDieRollCostIncreasingEffect copy() { + return new PlanarDieRollCostIncreasingEffect(this); + } +} diff --git a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceForOpponentsEffect.java b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceForOpponentsEffect.java index 25b3ce931f2..6b6509870a3 100644 --- a/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceForOpponentsEffect.java +++ b/Mage/src/main/java/mage/abilities/effects/common/cost/SpellCostReductionSourceForOpponentsEffect.java @@ -26,9 +26,7 @@ public class SpellCostReductionSourceForOpponentsEffect extends CostModification @Override public boolean apply(Game game, Ability source, Ability abilityToModify) { int count = game.getOpponents(source.getControllerId()).size(); - if (count > 0) { - CardUtil.reduceCost(abilityToModify, count); - } + CardUtil.reduceCost(abilityToModify, count); return true; } diff --git a/Mage/src/main/java/mage/game/command/planes/AcademyAtTolariaWestPlane.java b/Mage/src/main/java/mage/game/command/planes/AcademyAtTolariaWestPlane.java index 0f254591506..c5fce051a74 100644 --- a/Mage/src/main/java/mage/game/command/planes/AcademyAtTolariaWestPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/AcademyAtTolariaWestPlane.java @@ -12,6 +12,7 @@ import mage.abilities.dynamicvalue.common.StaticValue; import mage.abilities.effects.Effect; import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.effects.common.discard.DiscardHandControllerEffect; import mage.constants.Outcome; import mage.constants.Planes; diff --git a/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java b/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java index 319842dae70..ee88f5d6f44 100644 --- a/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/AgyremPlane.java @@ -14,8 +14,10 @@ import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.common.ReturnFromGraveyardToHandTargetEffect; import mage.abilities.effects.common.ReturnToBattlefieldUnderOwnerControlTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.cards.Card; import mage.constants.*; +import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; import mage.game.Game; @@ -28,7 +30,6 @@ import mage.watchers.common.PlanarRollWatcher; import java.util.ArrayList; import java.util.List; import java.util.UUID; -import mage.filter.common.FilterCreaturePermanent; /** * @author spjspj diff --git a/Mage/src/main/java/mage/game/command/planes/AkoumPlane.java b/Mage/src/main/java/mage/game/command/planes/AkoumPlane.java index 145b36af7bb..57607eb484b 100644 --- a/Mage/src/main/java/mage/game/command/planes/AkoumPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/AkoumPlane.java @@ -8,6 +8,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.DestroyTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.CastAsThoughItHadFlashAllEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.*; import mage.filter.FilterCard; import mage.filter.common.FilterCreaturePermanent; diff --git a/Mage/src/main/java/mage/game/command/planes/AstralArenaPlane.java b/Mage/src/main/java/mage/game/command/planes/AstralArenaPlane.java index 8fa0a543698..2a600581950 100644 --- a/Mage/src/main/java/mage/game/command/planes/AstralArenaPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/AstralArenaPlane.java @@ -9,6 +9,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.common.DamageAllEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.Duration; import mage.constants.Planes; import mage.constants.TargetController; diff --git a/Mage/src/main/java/mage/game/command/planes/BantPlane.java b/Mage/src/main/java/mage/game/command/planes/BantPlane.java index 80ab2ff6627..a7173050337 100644 --- a/Mage/src/main/java/mage/game/command/planes/BantPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/BantPlane.java @@ -1,7 +1,6 @@ package mage.game.command.planes; import mage.ObjectColor; -import mage.abilities.Ability; import mage.abilities.common.ActivateIfConditionActivatedAbility; import mage.abilities.common.SimpleStaticAbility; import mage.abilities.condition.common.IsStillOnPlaneCondition; @@ -13,27 +12,26 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; -import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.abilities.keyword.ExaltedAbility; import mage.abilities.keyword.IndestructibleAbility; -import mage.constants.*; +import mage.constants.Duration; +import mage.constants.Planes; +import mage.constants.TargetController; +import mage.constants.Zone; import mage.counters.CounterType; import mage.filter.StaticFilters; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.Predicates; import mage.filter.predicate.mageobject.ColorPredicate; -import mage.game.Game; import mage.game.command.Plane; -import mage.players.Player; import mage.target.Target; import mage.target.common.TargetCreaturePermanent; -import mage.util.CardUtil; import mage.watchers.common.PlanarRollWatcher; import java.util.ArrayList; import java.util.List; -import java.util.UUID; /** * @author spjspj @@ -83,42 +81,3 @@ public class BantPlane extends Plane { this.getAbilities().add(new SimpleStaticAbility(Zone.ALL, new PlanarDieRollCostIncreasingEffect(chaosAbility.getOriginalId()))); } } - -class PlanarDieRollCostIncreasingEffect extends CostModificationEffectImpl { - - private final UUID originalId; - - PlanarDieRollCostIncreasingEffect(UUID originalId) { - super(Duration.EndOfGame, Outcome.Benefit, CostModificationType.INCREASE_COST); - this.originalId = originalId; - } - - PlanarDieRollCostIncreasingEffect(final PlanarDieRollCostIncreasingEffect effect) { - super(effect); - this.originalId = effect.originalId; - } - - @Override - public boolean apply(Game game, Ability source, Ability abilityToModify) { - Player activePlayer = game.getPlayer(game.getActivePlayerId()); - if (activePlayer != null) { - PlanarRollWatcher watcher = game.getState().getWatcher(PlanarRollWatcher.class); - int rolledCounter = 0; - if (watcher != null) { - rolledCounter = watcher.getNumberTimesPlanarDieRolled(activePlayer.getId()); - } - CardUtil.increaseCost(abilityToModify, rolledCounter); - } - return true; - } - - @Override - public boolean applies(Ability abilityToModify, Ability source, Game game) { - return abilityToModify.getOriginalId().equals(originalId); - } - - @Override - public PlanarDieRollCostIncreasingEffect copy() { - return new PlanarDieRollCostIncreasingEffect(this); - } -} diff --git a/Mage/src/main/java/mage/game/command/planes/EdgeOfMalacolPlane.java b/Mage/src/main/java/mage/game/command/planes/EdgeOfMalacolPlane.java index 8897d4c0e08..60ce3e1e882 100644 --- a/Mage/src/main/java/mage/game/command/planes/EdgeOfMalacolPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/EdgeOfMalacolPlane.java @@ -9,6 +9,7 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.UntapAllControllerEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.constants.*; import mage.counters.CounterType; diff --git a/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java b/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java index c81020ed7b1..f60f1517200 100644 --- a/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/FeedingGroundsPlane.java @@ -12,6 +12,7 @@ import mage.abilities.dynamicvalue.common.TargetConvertedManaCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.effects.common.counter.AddCountersTargetEffect; import mage.cards.Card; import mage.constants.*; diff --git a/Mage/src/main/java/mage/game/command/planes/FieldsOfSummerPlane.java b/Mage/src/main/java/mage/game/command/planes/FieldsOfSummerPlane.java index d95c76cb87d..ae561f6dcab 100644 --- a/Mage/src/main/java/mage/game/command/planes/FieldsOfSummerPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/FieldsOfSummerPlane.java @@ -11,6 +11,7 @@ import mage.abilities.effects.OneShotEffect; import mage.abilities.effects.common.GainLifeEffect; import mage.abilities.effects.common.GainLifeTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.*; import mage.filter.FilterSpell; import mage.game.Game; diff --git a/Mage/src/main/java/mage/game/command/planes/HedronFieldsOfAgadeemPlane.java b/Mage/src/main/java/mage/game/command/planes/HedronFieldsOfAgadeemPlane.java index 5f8c0cf4049..4e498c5bfe3 100644 --- a/Mage/src/main/java/mage/game/command/planes/HedronFieldsOfAgadeemPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/HedronFieldsOfAgadeemPlane.java @@ -9,6 +9,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.common.CreateTokenEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.*; import mage.filter.common.FilterCreaturePermanent; import mage.filter.predicate.mageobject.PowerPredicate; diff --git a/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java b/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java index 2806a2af636..9bd2c8e0b9b 100644 --- a/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java +++ b/Mage/src/main/java/mage/game/command/planes/LetheLakePlane.java @@ -10,6 +10,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.PutLibraryIntoGraveTargetEffect; import mage.abilities.effects.common.PutTopCardOfLibraryIntoGraveTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.Planes; import mage.constants.TargetController; import mage.constants.Zone; diff --git a/Mage/src/main/java/mage/game/command/planes/NayaPlane.java b/Mage/src/main/java/mage/game/command/planes/NayaPlane.java index 62908adaa41..764a479d4c2 100644 --- a/Mage/src/main/java/mage/game/command/planes/NayaPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/NayaPlane.java @@ -12,6 +12,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.BoostTargetEffect; import mage.abilities.effects.common.continuous.PlayAdditionalLandsAllEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.Duration; import mage.constants.Planes; import mage.constants.TargetController; diff --git a/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java b/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java index 7adc83c3f63..54691deffa6 100644 --- a/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/PanopticonPlane.java @@ -11,6 +11,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.Planes; import mage.constants.TargetController; import mage.constants.Zone; diff --git a/Mage/src/main/java/mage/game/command/planes/TazeemPlane.java b/Mage/src/main/java/mage/game/command/planes/TazeemPlane.java index 7ca6ca6bc97..1671cd06640 100644 --- a/Mage/src/main/java/mage/game/command/planes/TazeemPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TazeemPlane.java @@ -11,6 +11,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.RestrictionEffect; import mage.abilities.effects.common.DrawCardSourceControllerEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.Duration; import mage.constants.Planes; import mage.constants.TargetController; diff --git a/Mage/src/main/java/mage/game/command/planes/TheDarkBaronyPlane.java b/Mage/src/main/java/mage/game/command/planes/TheDarkBaronyPlane.java index e9b6866ce1f..ab5682e9aa4 100644 --- a/Mage/src/main/java/mage/game/command/planes/TheDarkBaronyPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TheDarkBaronyPlane.java @@ -10,6 +10,7 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.Effect; import mage.abilities.effects.common.LoseLifeTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.effects.common.discard.DiscardEachPlayerEffect; import mage.constants.Planes; import mage.constants.SetTargetPointer; diff --git a/Mage/src/main/java/mage/game/command/planes/TheEonFogPlane.java b/Mage/src/main/java/mage/game/command/planes/TheEonFogPlane.java index ca69b487cda..d153355cbf1 100644 --- a/Mage/src/main/java/mage/game/command/planes/TheEonFogPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TheEonFogPlane.java @@ -9,6 +9,7 @@ import mage.abilities.effects.ContinuousRuleModifyingEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.UntapAllControllerEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.*; import mage.filter.common.FilterControlledPermanent; import mage.game.Game; diff --git a/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java b/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java index a15dada75a1..3d363d87079 100644 --- a/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TheGreatForestPlane.java @@ -10,6 +10,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.BoostControlledEffect; import mage.abilities.effects.common.continuous.GainAbilityControlledEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.keyword.TrampleAbility; import mage.constants.*; import mage.filter.StaticFilters; diff --git a/Mage/src/main/java/mage/game/command/planes/TheZephyrMazePlane.java b/Mage/src/main/java/mage/game/command/planes/TheZephyrMazePlane.java index 105c399d268..b46cc06d129 100644 --- a/Mage/src/main/java/mage/game/command/planes/TheZephyrMazePlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TheZephyrMazePlane.java @@ -11,6 +11,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.BoostAllEffect; import mage.abilities.effects.common.continuous.GainAbilityTargetEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.keyword.FlyingAbility; import mage.constants.Duration; import mage.constants.Planes; diff --git a/Mage/src/main/java/mage/game/command/planes/TrailOfTheMageRingsPlane.java b/Mage/src/main/java/mage/game/command/planes/TrailOfTheMageRingsPlane.java index 28e32d45198..be02a597c81 100644 --- a/Mage/src/main/java/mage/game/command/planes/TrailOfTheMageRingsPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TrailOfTheMageRingsPlane.java @@ -8,6 +8,7 @@ import mage.abilities.costs.mana.GenericManaCost; import mage.abilities.effects.ContinuousEffectImpl; import mage.abilities.effects.Effect; import mage.abilities.effects.common.RollPlanarDieEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.effects.common.search.SearchLibraryPutInHandEffect; import mage.abilities.keyword.ReboundAbility; import mage.cards.Card; diff --git a/Mage/src/main/java/mage/game/command/planes/TrugaJunglePlane.java b/Mage/src/main/java/mage/game/command/planes/TrugaJunglePlane.java index 74024299e2c..f04613c19c5 100644 --- a/Mage/src/main/java/mage/game/command/planes/TrugaJunglePlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TrugaJunglePlane.java @@ -10,6 +10,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.RevealLibraryPutIntoHandEffect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.GainAbilityAllEffect; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.abilities.mana.AnyColorManaAbility; import mage.constants.Duration; import mage.constants.Planes; diff --git a/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java b/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java index 80f76fe91be..5291caf194d 100644 --- a/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/TurriIslandPlane.java @@ -10,6 +10,7 @@ import mage.abilities.effects.Effect; import mage.abilities.effects.common.RevealLibraryPutIntoHandEffect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.cost.CostModificationEffectImpl; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.cards.Card; import mage.constants.*; import mage.filter.FilterCard; diff --git a/Mage/src/main/java/mage/game/command/planes/UndercityReachesPlane.java b/Mage/src/main/java/mage/game/command/planes/UndercityReachesPlane.java index b9b1168cc7e..8c0eb0de096 100644 --- a/Mage/src/main/java/mage/game/command/planes/UndercityReachesPlane.java +++ b/Mage/src/main/java/mage/game/command/planes/UndercityReachesPlane.java @@ -12,6 +12,7 @@ import mage.abilities.effects.common.DrawCardTargetEffect; import mage.abilities.effects.common.RollPlanarDieEffect; import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect; import mage.abilities.effects.common.continuous.MaximumHandSizeControllerEffect.HandSizeModification; +import mage.abilities.effects.common.cost.PlanarDieRollCostIncreasingEffect; import mage.constants.*; import mage.filter.FilterCard; import mage.game.Game;