From c27ef5ee97761701c90bc730a7fac6f104a436e6 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Wed, 10 Jun 2015 01:24:38 +0200 Subject: [PATCH] * Started to fix color setting for cards (e.g. Painter's Serverant) #408 (not completely finished yet). --- Mage.Common/src/mage/view/CardView.java | 6 +- .../src/mage/view/StackAbilityView.java | 4 +- .../sets/alarareborn/GloryscaleViashino.java | 2 +- .../sets/alarareborn/KnightOfNewAlara.java | 2 +- .../src/mage/sets/apocalypse/FireIce.java | 5 - .../mage/sets/apocalypse/IllusionReality.java | 5 - .../src/mage/sets/apocalypse/LifeDeath.java | 5 - .../src/mage/sets/apocalypse/NightDay.java | 5 - .../src/mage/sets/apocalypse/OrderChaos.java | 5 - .../mage/sets/avacynrestored/DreadSlaver.java | 2 +- .../EmptyShrineKannushi.java | 2 +- .../championsofkamigawa/AkkiLavarunner.java | 2 +- .../championsofkamigawa/KondasBanner.java | 2 +- .../mage/sets/commander2013/RoughTumble.java | 4 - .../commander2014/NecromanticSelection.java | 2 +- .../mage/sets/conflux/FiligreeFracture.java | 2 +- .../mage/sets/conflux/KederektParasite.java | 2 +- .../mage/sets/darksteel/MycosynthLattice.java | 14 +- .../src/mage/sets/dissension/HideSeek.java | 8 - .../src/mage/sets/dissension/OddsEnds.java | 8 - .../sets/dissension/PillarOfTheParuns.java | 2 +- .../sets/dissension/ResearchDevelopment.java | 8 - .../mage/sets/dissension/SupplyDemand.java | 8 - .../src/mage/sets/dragonsmaze/AliveWell.java | 5 - .../mage/sets/dragonsmaze/ArmedDangerous.java | 5 - .../src/mage/sets/dragonsmaze/BeckCall.java | 8 - .../src/mage/sets/dragonsmaze/DownDirty.java | 5 - .../src/mage/sets/dragonsmaze/FarAway.java | 5 - .../src/mage/sets/dragonsmaze/FleshBlood.java | 8 - .../src/mage/sets/dragonsmaze/GiveTake.java | 5 - .../src/mage/sets/dragonsmaze/ProfitLoss.java | 5 - .../mage/sets/dragonsmaze/ProtectServe.java | 5 - .../mage/sets/dragonsmaze/ReadyWilling.java | 8 - .../mage/sets/dragonsmaze/ToilTrouble.java | 5 - .../src/mage/sets/dragonsmaze/TurnBurn.java | 7 - .../src/mage/sets/dragonsmaze/WearTear.java | 5 - .../dragonsoftarkir/DisplayOfDominance.java | 2 +- .../src/mage/sets/eventide/BloomTender.java | 10 +- .../src/mage/sets/eventide/IndigoFaerie.java | 2 +- .../mage/sets/fifthedition/Hydroblast.java | 4 +- .../src/mage/sets/fifthedition/Justice.java | 2 +- .../src/mage/sets/futuresight/DryadArbor.java | 2 +- .../mage/sets/futuresight/GlitteringWish.java | 2 +- .../sets/gatecrash/LazavDimirMastermind.java | 2 +- Mage.Sets/src/mage/sets/iceage/Pyroblast.java | 4 +- .../mage/sets/innistrad/EssenceOfTheWild.java | 2 +- .../sets/innistrad/GrimoireOfTheDead.java | 2 +- .../mage/sets/invasion/AssaultBattery.java | 5 - .../sets/journeyintonyx/HallOfTriumph.java | 2 +- .../sets/khansoftarkir/GhostfireBlade.java | 2 +- .../SarkhanTheDragonspeaker.java | 2 +- .../src/mage/sets/legends/Abomination.java | 8 +- .../mage/sets/limitedalpha/CrystalRod.java | 2 +- .../src/mage/sets/limitedalpha/IronStar.java | 2 +- .../src/mage/sets/limitedalpha/IvoryCup.java | 2 +- .../mage/sets/limitedalpha/ThroneOfBone.java | 2 +- .../mage/sets/limitedalpha/WoodenSphere.java | 2 +- Mage.Sets/src/mage/sets/limitedbeta/Fork.java | 2 +- .../src/mage/sets/magic2010/DreadWarlock.java | 2 +- .../mage/sets/magic2010/RiseFromTheGrave.java | 2 +- .../mage/sets/magic2010/VampireNocturnus.java | 2 +- .../src/mage/sets/magic2011/FireServant.java | 2 +- .../mage/sets/magic2012/ChandrasPhoenix.java | 2 +- .../sets/magic2014/FiendslayerPaladin.java | 4 +- .../sets/magic2015/AvacynGuardianAngel.java | 4 +- .../sets/magic2015/PolymorphistsJest.java | 12 +- .../mage/sets/magic2015/SoulOfRavnica.java | 10 +- .../src/mage/sets/mirrodin/ChromeMox.java | 2 +- .../modernmasters2015/KarplusanStrider.java | 2 +- .../src/mage/sets/newphyrexia/CagedSun.java | 2 +- .../mage/sets/ninthedition/Deathgazer.java | 4 +- .../mage/sets/odyssey/EarnestFellowship.java | 4 +- .../mage/sets/odyssey/TestamentOfFaith.java | 4 +- .../src/mage/sets/planarchaos/BoomBust.java | 4 - .../src/mage/sets/planarchaos/DeadGone.java | 4 - .../mage/sets/planarchaos/LifeAndLimb.java | 2 +- .../mage/sets/planeshift/MeteorCrater.java | 2 +- .../src/mage/sets/planeshift/ShiftingSky.java | 15 +- .../mage/sets/ravnica/CrownOfConvergence.java | 2 +- .../mage/sets/ravnica/DimirDoppelganger.java | 2 +- .../src/mage/sets/ravnica/LeaveNoTrace.java | 4 +- .../mage/sets/ravnica/RallyTheRighteous.java | 8 +- .../mage/sets/returntoravnica/CivicSaber.java | 2 +- .../sets/returntoravnica/GraveBetrayal.java | 2 +- .../mage/sets/returntoravnica/LobberCrew.java | 2 +- .../sets/returntoravnica/Pyroconvergence.java | 2 +- .../returntoravnica/TabletOfTheGuilds.java | 4 +- .../mage/sets/riseoftheeldrazi/AllIsDust.java | 2 +- .../riseoftheeldrazi/CurseOfWizardry.java | 2 +- .../sets/riseoftheeldrazi/EldraziTemple.java | 2 +- .../riseoftheeldrazi/ZulaportEnforcer.java | 2 +- .../sets/scarsofmirrodin/GrandArchitect.java | 10 +- .../scarsofmirrodin/LiegeOfTheTangle.java | 2 +- .../QuicksilverGargantuan.java | 2 +- .../mage/sets/seventhedition/DarkestHour.java | 2 +- .../mage/sets/shadowmoor/ConsignToDream.java | 4 +- .../src/mage/sets/shadowmoor/Gloomlance.java | 4 +- .../sets/shadowmoor/GloomwidowsFeast.java | 4 +- .../sets/shadowmoor/IlluminatedFolio.java | 10 +- .../sets/shadowmoor/InquisitorsSnare.java | 4 +- .../sets/shadowmoor/LureboundScarecrow.java | 2 +- .../sets/shadowmoor/OonaQueenOfTheFae.java | 2 +- .../mage/sets/shadowmoor/PaintersServant.java | 51 ++++-- .../src/mage/sets/shadowmoor/Scrapbasket.java | 10 +- .../src/mage/sets/tempest/Grindstone.java | 4 +- .../src/mage/sets/tempest/LightOfDay.java | 2 +- .../mage/sets/tenthedition/AngelsFeather.java | 2 +- .../mage/sets/tenthedition/DragonsClaw.java | 2 +- .../mage/sets/tenthedition/KrakensEye.java | 2 +- .../mage/sets/tenthedition/WurmsTooth.java | 2 +- .../timeshifted/SolkanarTheSwampKing.java | 2 +- .../mage/sets/timespiral/AncestralVision.java | 2 +- .../mage/sets/timespiral/GauntletOfPower.java | 2 +- .../sets/timespiral/GhostflameSliver.java | 2 +- .../src/mage/sets/urzaslegacy/ThranLens.java | 2 +- .../src/mage/sets/urzassaga/Bereavement.java | 2 +- .../src/mage/sets/urzassaga/Persecute.java | 2 +- .../mage/sets/urzassaga/TitaniasChosen.java | 2 +- .../vintagemasters/VolrathsShapeshifter.java | 2 +- .../src/mage/sets/visions/ElephantGrass.java | 4 +- .../mage/sets/worldwake/KorFirewalker.java | 2 +- .../mage/sets/worldwake/PermafrostTrap.java | 2 +- .../mage/sets/worldwake/RefractionTrap.java | 2 +- .../src/mage/sets/worldwake/RicochetTrap.java | 2 +- .../src/mage/sets/worldwake/SlingbowTrap.java | 2 +- .../src/mage/sets/zendikar/ChandraAblaze.java | 2 +- .../sets/zendikar/IonaShieldOfEmeria.java | 2 +- .../mage/test/AI/basic/CastCreaturesTest.java | 30 ++++ .../cards/continuous/PaintersServantTest.java | 157 ++++++++++++++++++ Mage/src/mage/MageObject.java | 2 +- Mage/src/mage/MageObjectImpl.java | 2 +- .../abilities/effects/common/CopyEffect.java | 2 +- .../effects/common/CopyTokenEffect.java | 2 +- .../AddCardColorAttachedEffect.java | 10 +- .../BecomesBasicLandEnchantedEffect.java | 10 +- .../continuous/BecomesColorTargetEffect.java | 2 +- .../continuous/BecomesCreatureAllEffect.java | 4 +- .../BecomesCreatureAttachedEffect.java | 14 +- .../BecomesCreatureSourceEffect.java | 4 +- .../BecomesCreatureTargetEffect.java | 14 +- .../BecomesFaceDownCreatureAllEffect.java | 2 +- .../BecomesFaceDownCreatureEffect.java | 2 +- .../SetCardColorAttachedEffect.java | 2 +- .../continuous/SetCardColorSourceEffect.java | 2 +- .../abilities/keyword/ConvokeAbility.java | 2 +- .../mage/abilities/keyword/FearAbility.java | 2 +- .../abilities/keyword/IntimidateAbility.java | 2 +- .../mage/abilities/keyword/MorphAbility.java | 4 +- .../abilities/keyword/TransformAbility.java | 2 +- Mage/src/mage/cards/Card.java | 3 +- Mage/src/mage/cards/CardImpl.java | 14 +- Mage/src/mage/cards/repository/CardInfo.java | 10 +- .../predicate/mageobject/ColorPredicate.java | 2 +- .../mageobject/ColorlessPredicate.java | 2 +- .../mageobject/MonocoloredPredicate.java | 2 +- .../mageobject/MulticoloredPredicate.java | 2 +- .../SharesColorWithSourcePredicate.java | 2 +- Mage/src/mage/game/CardAttribute.java | 29 ++++ Mage/src/mage/game/GameState.java | 16 +- Mage/src/mage/game/command/Commander.java | 4 +- Mage/src/mage/game/command/Emblem.java | 2 +- .../mage/game/permanent/PermanentCard.java | 2 +- .../mage/game/permanent/PermanentImpl.java | 9 +- .../mage/game/permanent/PermanentToken.java | 2 +- Mage/src/mage/game/stack/Spell.java | 4 +- Mage/src/mage/game/stack/StackAbility.java | 2 +- Mage/src/mage/util/GameLog.java | 2 +- .../util/functions/CopyTokenFunction.java | 2 +- Mage/src/mage/util/trace/TraceUtil.java | 2 +- 169 files changed, 515 insertions(+), 395 deletions(-) create mode 100644 Mage.Tests/src/test/java/org/mage/test/cards/continuous/PaintersServantTest.java create mode 100644 Mage/src/mage/game/CardAttribute.java diff --git a/Mage.Common/src/mage/view/CardView.java b/Mage.Common/src/mage/view/CardView.java index 5829fa3a3bf..d0845cd7ae6 100644 --- a/Mage.Common/src/mage/view/CardView.java +++ b/Mage.Common/src/mage/view/CardView.java @@ -237,7 +237,7 @@ public class CardView extends SimpleCardView { this.cardTypes = card.getCardType(); this.subTypes = card.getSubtype(); this.superTypes = card.getSupertype(); - this.color = card.getColor(); + this.color = card.getColor(game); this.canTransform = card.canTransform(); this.flipCard = card.isFlipCard(); this.faceDown = game != null ? card.isFaceDown(game) : false; @@ -313,7 +313,7 @@ public class CardView extends SimpleCardView { this.cardTypes = object.getCardType(); this.subTypes = object.getSubtype(); this.superTypes = object.getSupertype(); - this.color = object.getColor(); + this.color = object.getColor(null); this.manaCost = object.getManaCost().getSymbols(); this.convertedManaCost = object.getManaCost().convertedManaCost(); if (object instanceof PermanentToken) { @@ -421,7 +421,7 @@ public class CardView extends SimpleCardView { this.cardTypes = token.getCardType(); this.subTypes = token.getSubtype(); this.superTypes = token.getSupertype(); - this.color = token.getColor(); + this.color = token.getColor(null); this.manaCost = token.getManaCost().getSymbols(); this.rarity = Rarity.NA; this.type = token.getTokenType(); diff --git a/Mage.Common/src/mage/view/StackAbilityView.java b/Mage.Common/src/mage/view/StackAbilityView.java index b8a08b07692..8cb82fa2ffe 100644 --- a/Mage.Common/src/mage/view/StackAbilityView.java +++ b/Mage.Common/src/mage/view/StackAbilityView.java @@ -64,12 +64,12 @@ public class StackAbilityView extends CardView { this.cardTypes = ability.getCardType(); this.subTypes = ability.getSubtype(); this.superTypes = ability.getSupertype(); - this.color = ability.getColor(); + this.color = ability.getColor(game); this.manaCost = ability.getManaCost().getSymbols(); this.cardTypes = ability.getCardType(); this.subTypes = ability.getSubtype(); this.superTypes = ability.getSupertype(); - this.color = ability.getColor(); + this.color = ability.getColor(game); this.manaCost = ability.getManaCost().getSymbols(); this.power = ability.getPower().toString(); this.toughness = ability.getToughness().toString(); diff --git a/Mage.Sets/src/mage/sets/alarareborn/GloryscaleViashino.java b/Mage.Sets/src/mage/sets/alarareborn/GloryscaleViashino.java index 87a8081830f..46d20e93bba 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/GloryscaleViashino.java +++ b/Mage.Sets/src/mage/sets/alarareborn/GloryscaleViashino.java @@ -89,7 +89,7 @@ class GloryscaleViashinoAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isMulticolored() && event.getPlayerId().equals(getControllerId())) { + if (spell != null && spell.getColor(game).isMulticolored() && event.getPlayerId().equals(getControllerId())) { return true; } } diff --git a/Mage.Sets/src/mage/sets/alarareborn/KnightOfNewAlara.java b/Mage.Sets/src/mage/sets/alarareborn/KnightOfNewAlara.java index 8505d0f946e..51ba166beb6 100644 --- a/Mage.Sets/src/mage/sets/alarareborn/KnightOfNewAlara.java +++ b/Mage.Sets/src/mage/sets/alarareborn/KnightOfNewAlara.java @@ -102,7 +102,7 @@ class KnightOfNewAlaraEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { for (Permanent creature : game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { if (creature != null && !creature.getId().equals(source.getSourceId())) { - int colors = creature.getColor().getColorCount(); + int colors = creature.getColor(game).getColorCount(); creature.addPower(colors); creature.addToughness(colors); } diff --git a/Mage.Sets/src/mage/sets/apocalypse/FireIce.java b/Mage.Sets/src/mage/sets/apocalypse/FireIce.java index 7f0394cdcd8..18f2d907653 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/FireIce.java +++ b/Mage.Sets/src/mage/sets/apocalypse/FireIce.java @@ -51,12 +51,8 @@ public class FireIce extends SplitCard { super(ownerId, 128, "Fire", "Ice", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{R}", "{1}{U}", false); this.expansionSetCode = "APC"; - this.color.setBlue(true); - this.color.setRed(true); - // Fire // Fire deals 2 damage divided as you choose among one or two target creatures and/or players. - getLeftHalfCard().getColor().setRed(true); Effect effect = new DamageMultiEffect(2); effect.setText("Fire deals 2 damage divided as you choose among one or two target creatures and/or players"); getLeftHalfCard().getSpellAbility().addEffect(effect); @@ -65,7 +61,6 @@ public class FireIce extends SplitCard { // Ice // Tap target permanent. // Draw a card. - getRightHalfCard().getColor().setBlue(true); getRightHalfCard().getSpellAbility().addEffect(new TapTargetEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetPermanent()); getRightHalfCard().getSpellAbility().addEffect(new DrawCardSourceControllerEffect(1)); diff --git a/Mage.Sets/src/mage/sets/apocalypse/IllusionReality.java b/Mage.Sets/src/mage/sets/apocalypse/IllusionReality.java index 6a875b15cb1..af059572f70 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/IllusionReality.java +++ b/Mage.Sets/src/mage/sets/apocalypse/IllusionReality.java @@ -49,19 +49,14 @@ public class IllusionReality extends SplitCard { super(ownerId, 129, "Illusion", "Reality", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{U}", "{2}{G}", false); this.expansionSetCode = "APC"; - this.color.setBlue(true); - this.color.setGreen(true); - // Illusion // Target spell or permanent becomes the color of your choice until end of turn. - getLeftHalfCard().getColor().setBlue(true); getLeftHalfCard().getSpellAbility().addEffect(new BecomesColorTargetEffect(Duration.EndOfTurn)); Target target = new TargetSpellOrPermanent(); getLeftHalfCard().getSpellAbility().addTarget(target); // Reality // Destroy target artifact. - getRightHalfCard().getColor().setGreen(true); getRightHalfCard().getSpellAbility().addTarget(new TargetArtifactPermanent()); getRightHalfCard().getSpellAbility().addEffect(new DestroyTargetEffect()); } diff --git a/Mage.Sets/src/mage/sets/apocalypse/LifeDeath.java b/Mage.Sets/src/mage/sets/apocalypse/LifeDeath.java index 74b76951c09..1db52a16d06 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/LifeDeath.java +++ b/Mage.Sets/src/mage/sets/apocalypse/LifeDeath.java @@ -59,18 +59,13 @@ public class LifeDeath extends SplitCard { super(ownerId, 130, "Life", "Death", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{G}", "{1}{B}", false); this.expansionSetCode = "APC"; - this.color.setGreen(true); - this.color.setBlack(true); - // Life // All lands you control become 1/1 creatures until end of turn. They're still lands. - getLeftHalfCard().getColor().setGreen(true); getLeftHalfCard().getSpellAbility().addEffect(new BecomesCreatureAllEffect(new LifeLandToken(), "lands", new FilterControlledLandPermanent("lands you control"), Duration.EndOfTurn)); // Death // Return target creature card from your graveyard to the battlefield. You lose life equal to its converted mana cost. - getRightHalfCard().getColor().setBlack(true); Target target = new TargetCardInYourGraveyard(1, new FilterCreatureCard("creature card from your graveyard")); getRightHalfCard().getSpellAbility().addTarget(target); getRightHalfCard().getSpellAbility().addEffect(new DeathEffect()); diff --git a/Mage.Sets/src/mage/sets/apocalypse/NightDay.java b/Mage.Sets/src/mage/sets/apocalypse/NightDay.java index 1a29b3bfe59..51889bf52be 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/NightDay.java +++ b/Mage.Sets/src/mage/sets/apocalypse/NightDay.java @@ -59,18 +59,13 @@ public class NightDay extends SplitCard { super(ownerId, 131, "Night", "Day", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{B}", "{2}{W}", false); this.expansionSetCode = "APC"; - this.color.setBlack(true); - this.color.setWhite(true); - // Night // Target creature gets -1/-1 until end of turn. - getLeftHalfCard().getColor().setBlack(true); getLeftHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(-1,-1,Duration.EndOfTurn)); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); // Day // Creatures target player controls get +1/+1 until end of turn. - getRightHalfCard().getColor().setWhite(true); getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer()); getRightHalfCard().getSpellAbility().addEffect(new DayEffect()); diff --git a/Mage.Sets/src/mage/sets/apocalypse/OrderChaos.java b/Mage.Sets/src/mage/sets/apocalypse/OrderChaos.java index af280d76ead..d4e7afbe97e 100644 --- a/Mage.Sets/src/mage/sets/apocalypse/OrderChaos.java +++ b/Mage.Sets/src/mage/sets/apocalypse/OrderChaos.java @@ -51,19 +51,14 @@ public class OrderChaos extends SplitCard { super(ownerId, 132, "Order", "Chaos", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{3}{W}", "{2}{R}", false); this.expansionSetCode = "APC"; - this.color.setWhite(true); - this.color.setRed(true); - // Order // Exile target attacking creature. - getLeftHalfCard().getColor().setWhite(true); getLeftHalfCard().getSpellAbility().addEffect(new ExileTargetEffect()); Target target = new TargetAttackingCreature(); getLeftHalfCard().getSpellAbility().addTarget(target); // Chaos // Creatures can't block this turn. - getRightHalfCard().getColor().setRed(true); getRightHalfCard().getSpellAbility().addEffect(new CantBlockAllEffect(new FilterCreaturePermanent("Creatures"), Duration.EndOfTurn)); } diff --git a/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java b/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java index 8dd0ecbfcd2..ff086a81a0f 100644 --- a/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java +++ b/Mage.Sets/src/mage/sets/avacynrestored/DreadSlaver.java @@ -138,7 +138,7 @@ class DreadSlaverContiniousEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - creature.getColor().setBlack(true); + creature.getColor(game).setBlack(true); } break; } diff --git a/Mage.Sets/src/mage/sets/betrayersofkamigawa/EmptyShrineKannushi.java b/Mage.Sets/src/mage/sets/betrayersofkamigawa/EmptyShrineKannushi.java index 13b8dc0930b..56805bbc971 100644 --- a/Mage.Sets/src/mage/sets/betrayersofkamigawa/EmptyShrineKannushi.java +++ b/Mage.Sets/src/mage/sets/betrayersofkamigawa/EmptyShrineKannushi.java @@ -93,7 +93,7 @@ class EmptyShrineKannushiProtectionAbility extends ProtectionAbility { public boolean canTarget(MageObject source, Game game) { ObjectColor color = new ObjectColor(); for (Permanent permanent: game.getBattlefield().getAllActivePermanents(controllerId)) { - ObjectColor permanentColor = permanent.getColor(); + ObjectColor permanentColor = permanent.getColor(game); if (permanentColor.isColorless()) { continue; } diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/AkkiLavarunner.java b/Mage.Sets/src/mage/sets/championsofkamigawa/AkkiLavarunner.java index c30235ab5f1..f0edd96bc58 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/AkkiLavarunner.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/AkkiLavarunner.java @@ -126,7 +126,7 @@ class TokTokVolcanoBornEffect extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { Card card = game.getCard(event.getSourceId()); - if (card != null && card.getColor().isRed()) { + if (card != null && card.getColor(game).isRed()) { return true; } return false; diff --git a/Mage.Sets/src/mage/sets/championsofkamigawa/KondasBanner.java b/Mage.Sets/src/mage/sets/championsofkamigawa/KondasBanner.java index 251f4c4d820..14109095917 100644 --- a/Mage.Sets/src/mage/sets/championsofkamigawa/KondasBanner.java +++ b/Mage.Sets/src/mage/sets/championsofkamigawa/KondasBanner.java @@ -155,7 +155,7 @@ class KondasBannerColorBoostEffect extends BoostAllEffect { if (equipment != null && equipment.getAttachedTo() != null) { Permanent equipedCreature = game.getPermanent(equipment.getAttachedTo()); for (Permanent perm : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { - if (equipedCreature.getColor().shares(perm.getColor())) { + if (equipedCreature.getColor(game).shares(perm.getColor(game))) { perm.addPower(power.calculate(game, source, this)); perm.addToughness(toughness.calculate(game, source, this)); diff --git a/Mage.Sets/src/mage/sets/commander2013/RoughTumble.java b/Mage.Sets/src/mage/sets/commander2013/RoughTumble.java index e281caac892..14ec4d4e8be 100644 --- a/Mage.Sets/src/mage/sets/commander2013/RoughTumble.java +++ b/Mage.Sets/src/mage/sets/commander2013/RoughTumble.java @@ -55,20 +55,16 @@ public class RoughTumble extends SplitCard { super(ownerId, 118, "Rough", "Tumble", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{R}", "{5}{R}", false); this.expansionSetCode = "C13"; - this.color.setRed(true); - // Rough // Rough deals 2 damage to each creature without flying. Effect effect = new DamageAllEffect(2, filterWithoutFlying); effect.setText("Rough deals 2 damage to each creature without flying"); - getLeftHalfCard().getColor().setRed(true); getLeftHalfCard().getSpellAbility().addEffect(effect); // Tumble // Tumble deals 6 damage to each creature with flying. effect = new DamageAllEffect(6, filterFlying); effect.setText("Tumble deals 6 damage to each creature with flying"); - getRightHalfCard().getColor().setRed(true); getRightHalfCard().getSpellAbility().addEffect(effect); } diff --git a/Mage.Sets/src/mage/sets/commander2014/NecromanticSelection.java b/Mage.Sets/src/mage/sets/commander2014/NecromanticSelection.java index 4877ed2151b..b595331cf91 100644 --- a/Mage.Sets/src/mage/sets/commander2014/NecromanticSelection.java +++ b/Mage.Sets/src/mage/sets/commander2014/NecromanticSelection.java @@ -168,7 +168,7 @@ class NecromanticSelectionContinuousEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - creature.getColor().setBlack(true); + creature.getColor(game).setBlack(true); } break; } diff --git a/Mage.Sets/src/mage/sets/conflux/FiligreeFracture.java b/Mage.Sets/src/mage/sets/conflux/FiligreeFracture.java index d232cccae20..1e6b0bb23a1 100644 --- a/Mage.Sets/src/mage/sets/conflux/FiligreeFracture.java +++ b/Mage.Sets/src/mage/sets/conflux/FiligreeFracture.java @@ -89,7 +89,7 @@ class FiligreeFractureEffect extends OneShotEffect { Player player = game.getPlayer(source.getControllerId()); Permanent permanent = (Permanent) game.getLastKnownInformation(source.getFirstTarget(), Zone.BATTLEFIELD); if (player != null && permanent != null - && (permanent.getColor().isBlack() || permanent.getColor().isBlue())) { + && (permanent.getColor(game).isBlack() || permanent.getColor(game).isBlue())) { player.drawCards(1, game); return true; } diff --git a/Mage.Sets/src/mage/sets/conflux/KederektParasite.java b/Mage.Sets/src/mage/sets/conflux/KederektParasite.java index bbe0731e8be..cf42f9ab4af 100644 --- a/Mage.Sets/src/mage/sets/conflux/KederektParasite.java +++ b/Mage.Sets/src/mage/sets/conflux/KederektParasite.java @@ -89,7 +89,7 @@ class KederektParasiteTriggeredAbility extends TriggeredAbilityImpl { if (event.getType() == GameEvent.EventType.DREW_CARD && game.getOpponents(this.getControllerId()).contains(event.getPlayerId())) { boolean youControlRedPermanent = false; for (Permanent permanent : game.getBattlefield().getAllActivePermanents(this.getControllerId())) { - if (permanent.getColor().isRed()) { + if (permanent.getColor(game).isRed()) { youControlRedPermanent = true; break; } diff --git a/Mage.Sets/src/mage/sets/darksteel/MycosynthLattice.java b/Mage.Sets/src/mage/sets/darksteel/MycosynthLattice.java index f45b2cc3f64..1cd753fd6d0 100644 --- a/Mage.Sets/src/mage/sets/darksteel/MycosynthLattice.java +++ b/Mage.Sets/src/mage/sets/darksteel/MycosynthLattice.java @@ -121,36 +121,36 @@ class EverythingIsColorlessEffect extends ContinuousEffectImpl { ObjectColor colorless = new ObjectColor(); // permaments for (Permanent perm : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) { - perm.getColor().setColor(colorless); + perm.getColor(game).setColor(colorless); } // spells for (MageObject object : game.getStack()) { if (object instanceof Spell) { - object.getColor().setColor(colorless); + object.getColor(game).setColor(colorless); } } // exile for (Card card : game.getExile().getAllCards(game)) { - card.getColor().setColor(colorless); + game.getState().getCreateCardAttribute(card).getColor().setColor(colorless); } // command for (CommandObject commandObject : game.getState().getCommand()) { - commandObject.getColor().setColor(colorless); + commandObject.getColor(game).setColor(colorless); } for (UUID playerId : controller.getInRange()) { Player player = game.getPlayer(playerId); if (player != null) { // hand for (Card card: player.getHand().getCards(game)) { - card.getColor().setColor(colorless); + game.getState().getCreateCardAttribute(card).getColor().setColor(colorless); } // library for (Card card : player.getLibrary().getCards(game)) { - card.getColor().setColor(colorless); + game.getState().getCreateCardAttribute(card).getColor().setColor(colorless); } // graveyard for (Card card : player.getGraveyard().getCards(game)) { - card.getColor().setColor(colorless); + game.getState().getCreateCardAttribute(card).getColor().setColor(colorless); } } } diff --git a/Mage.Sets/src/mage/sets/dissension/HideSeek.java b/Mage.Sets/src/mage/sets/dissension/HideSeek.java index 6d407fea200..ec7a7158069 100644 --- a/Mage.Sets/src/mage/sets/dissension/HideSeek.java +++ b/Mage.Sets/src/mage/sets/dissension/HideSeek.java @@ -65,21 +65,13 @@ public class HideSeek extends SplitCard { super(ownerId, 151, "Hide", "Seek", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{R}{W}", "{W}{B}", false); this.expansionSetCode = "DIS"; - this.color.setRed(true); - this.color.setWhite(true); - this.color.setBlack(true); - // Hide // Put target artifact or enchantment on the bottom of its owner's library. - getLeftHalfCard().getColor().setRed(true); - getLeftHalfCard().getColor().setWhite(true); getLeftHalfCard().getSpellAbility().addEffect(new PutOnLibraryTargetEffect(false)); getLeftHalfCard().getSpellAbility().addTarget(new TargetPermanent(filter)); // Seek // Search target opponent's library for a card and exile it. You gain life equal to its converted mana cost. Then that player shuffles his or her library.. - getRightHalfCard().getColor().setWhite(true); - getRightHalfCard().getColor().setBlack(true); getRightHalfCard().getSpellAbility().addEffect(new SeekEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetOpponent()); diff --git a/Mage.Sets/src/mage/sets/dissension/OddsEnds.java b/Mage.Sets/src/mage/sets/dissension/OddsEnds.java index 761f8a793df..c30478d4cc9 100644 --- a/Mage.Sets/src/mage/sets/dissension/OddsEnds.java +++ b/Mage.Sets/src/mage/sets/dissension/OddsEnds.java @@ -65,21 +65,13 @@ public class OddsEnds extends SplitCard { super(ownerId, 153, "Odds", "Ends", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{U}{R}", "{3}{R}{W}", false); this.expansionSetCode = "DIS"; - this.color.setBlue(true); - this.color.setRed(true); - this.color.setWhite(true); - // Odds // Flip a coin. If it comes up heads, counter target instant or sorcery spell. If it comes up tails, copy that spell and you may choose new targets for the copy. - getLeftHalfCard().getColor().setBlue(true); - getLeftHalfCard().getColor().setRed(true); getLeftHalfCard().getSpellAbility().addEffect(new OddsEffect()); getLeftHalfCard().getSpellAbility().addTarget(new TargetSpell(filter)); // Ends // Target player sacrifices two attacking creatures. - getRightHalfCard().getColor().setRed(true); - getRightHalfCard().getColor().setWhite(true); getRightHalfCard().getSpellAbility().addEffect(new SacrificeEffect(new FilterAttackingCreature(), 2, "Target player")); getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/sets/dissension/PillarOfTheParuns.java b/Mage.Sets/src/mage/sets/dissension/PillarOfTheParuns.java index c1be32d897e..8278800e994 100644 --- a/Mage.Sets/src/mage/sets/dissension/PillarOfTheParuns.java +++ b/Mage.Sets/src/mage/sets/dissension/PillarOfTheParuns.java @@ -96,7 +96,7 @@ class MultiColoredSpellCastManaCondition extends ManaCondition implements Condit public boolean apply(Game game, Ability source) { if (source instanceof SpellAbility) { MageObject object = game.getObject(source.getSourceId()); - if (object != null && object.getColor().getColorCount() > 1) { + if (object != null && object.getColor(game).getColorCount() > 1) { return true; } } diff --git a/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java b/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java index 6862047730f..353b431a555 100644 --- a/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java +++ b/Mage.Sets/src/mage/sets/dissension/ResearchDevelopment.java @@ -57,18 +57,10 @@ public class ResearchDevelopment extends SplitCard { super(ownerId, 155, "Research", "Development", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{G}{U}", "{3}{U}{R}", false); this.expansionSetCode = "DIS"; - this.color.setGreen(true); - this.color.setBlue(true); - this.color.setRed(true); - // Choose up to four cards you own from outside the game and shuffle them into your library. - getLeftHalfCard().getColor().setGreen(true); - getLeftHalfCard().getColor().setBlue(true); getLeftHalfCard().getSpellAbility().addEffect(new ResearchEffect()); // Put a 3/1 red Elemental creature token onto the battlefield unless any opponent has you draw a card. Repeat this process two more times. - getRightHalfCard().getColor().setBlue(true); - getRightHalfCard().getColor().setRed(true); getRightHalfCard().getSpellAbility().addEffect(new DevelopmentEffect()); } diff --git a/Mage.Sets/src/mage/sets/dissension/SupplyDemand.java b/Mage.Sets/src/mage/sets/dissension/SupplyDemand.java index db0edc63172..8eae6bf7da0 100644 --- a/Mage.Sets/src/mage/sets/dissension/SupplyDemand.java +++ b/Mage.Sets/src/mage/sets/dissension/SupplyDemand.java @@ -56,20 +56,12 @@ public class SupplyDemand extends SplitCard { super(ownerId, 157, "Supply", "Demand", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{W}{U}", "{X}{G}{W}", false); this.expansionSetCode = "DIS"; - this.color.setGreen(true); - this.color.setWhite(true); - this.color.setBlue(true); - // Demand // Search your library for a multicolored card, reveal it, and put it into your hand. Then shuffle your library. - getLeftHalfCard().getColor().setBlue(true); - getLeftHalfCard().getColor().setWhite(true); getLeftHalfCard().getSpellAbility().addEffect(new SearchLibraryPutInHandEffect(new TargetCardInLibrary(1, filter), true)); // Supply // Put X 1/1 green Saproling creature tokens onto the battlefield. - getRightHalfCard().getColor().setWhite(true); - getRightHalfCard().getColor().setGreen(true); getRightHalfCard().getSpellAbility().addEffect(new CreateTokenEffect(new SaprolingToken(), new ManacostVariableValue())); } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/AliveWell.java b/Mage.Sets/src/mage/sets/dragonsmaze/AliveWell.java index e7c5a1be8a6..7c327b0b424 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/AliveWell.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/AliveWell.java @@ -50,18 +50,13 @@ public class AliveWell extends SplitCard { super(ownerId, 121, "Alive", "Well", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{G}","{W}", true); this.expansionSetCode = "DGM"; - this.color.setGreen(true); - this.color.setWhite(true); - // Alive // Put a 3/3 green Centaur creature token onto the battlefield. - getLeftHalfCard().getColor().setGreen(true); getLeftHalfCard().getSpellAbility().addEffect(new CreateTokenEffect(new CentaurToken())); // Well // You gain 2 life for each creature you control. - getRightHalfCard().getColor().setWhite(true); getRightHalfCard().getSpellAbility().addEffect(new WellEffect()); } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ArmedDangerous.java b/Mage.Sets/src/mage/sets/dragonsmaze/ArmedDangerous.java index b72294c0f8b..9e254100237 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ArmedDangerous.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ArmedDangerous.java @@ -51,19 +51,14 @@ public class ArmedDangerous extends SplitCard { super(ownerId, 122, "Armed", "Dangerous", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{1}{R}", "{3}{G}", true); this.expansionSetCode = "DGM"; - this.color.setRed(true); - this.color.setGreen(true); - // Armed // Target creature gets +1/+1 and gains double strike until end of turn. - getLeftHalfCard().getColor().setRed(true); getLeftHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(1,1, Duration.EndOfTurn)); getLeftHalfCard().getSpellAbility().addEffect(new GainAbilityTargetEffect(DoubleStrikeAbility.getInstance(), Duration.EndOfTurn)); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); // Dangerous // All creatures able to block target creature this turn do so. - getRightHalfCard().getColor().setGreen(true); getRightHalfCard().getSpellAbility().addEffect(new MustBeBlockedByAllTargetEffect(Duration.EndOfTurn)); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/BeckCall.java b/Mage.Sets/src/mage/sets/dragonsmaze/BeckCall.java index 5aa0750d09b..ad25ec436b2 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/BeckCall.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/BeckCall.java @@ -55,20 +55,12 @@ public class BeckCall extends SplitCard { super(ownerId, 123, "Beck", "Call", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{G}{U}", "{4}{W}{U}", true); this.expansionSetCode = "DGM"; - this.color.setWhite(true); - this.color.setBlue(true); - this.color.setGreen(true); - // Beck // Whenever a creature enters the battlefield this turn, you may draw a card. - getLeftHalfCard().getColor().setGreen(true); - getLeftHalfCard().getColor().setBlue(true); getLeftHalfCard().getSpellAbility().addEffect(new CreateDelayedTriggeredAbilityEffect(new BeckTriggeredAbility())); // Call // Put four 1/1 white Bird creature tokens with flying onto the battlefield. - getRightHalfCard().getColor().setWhite(true); - getRightHalfCard().getColor().setBlue(true); getRightHalfCard().getSpellAbility().addEffect(new CreateTokenEffect(new BirdToken(),4)); } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/DownDirty.java b/Mage.Sets/src/mage/sets/dragonsmaze/DownDirty.java index 8f6e6827ec5..9619feceec8 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/DownDirty.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/DownDirty.java @@ -49,18 +49,13 @@ public class DownDirty extends SplitCard { super(ownerId, 126, "Down", "Dirty", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{3}{B}", "{2}{G}", true); this.expansionSetCode = "DGM"; - this.color.setBlack(true); - this.color.setGreen(true); - // Down // Target player discards two cards. - getLeftHalfCard().getColor().setBlack(true); getLeftHalfCard().getSpellAbility().addEffect(new DiscardTargetEffect(2)); getLeftHalfCard().getSpellAbility().addTarget(new TargetPlayer()); // Dirty // Return target card from your graveyard to your hand. - getRightHalfCard().getColor().setGreen(true); getRightHalfCard().getSpellAbility().addEffect(new ReturnFromGraveyardToHandTargetEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetCardInYourGraveyard()); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/FarAway.java b/Mage.Sets/src/mage/sets/dragonsmaze/FarAway.java index a35e569b005..1deba123e03 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/FarAway.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/FarAway.java @@ -50,18 +50,13 @@ public class FarAway extends SplitCard { super(ownerId, 127, "Far", "Away", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{U}", "{2}{B}", true); this.expansionSetCode = "DGM"; - this.color.setBlue(true); - this.color.setBlack(true); - // Far // Return target creature to its owner's hand. - getLeftHalfCard().getColor().setBlue(true); getLeftHalfCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); // Away // Target player sacrifices a creature. - getRightHalfCard().getColor().setBlack(true); getRightHalfCard().getSpellAbility().addEffect(new SacrificeEffect(new FilterCreaturePermanent(), 1, "Target player")); getRightHalfCard().getSpellAbility().addTarget(new TargetPlayer()); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/FleshBlood.java b/Mage.Sets/src/mage/sets/dragonsmaze/FleshBlood.java index daf7132e91e..547266d6b68 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/FleshBlood.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/FleshBlood.java @@ -60,14 +60,8 @@ public class FleshBlood extends SplitCard { super(ownerId, 128, "Flesh", "Blood", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{3}{B}{G}", "{R}{G}",true); this.expansionSetCode = "DGM"; - this.color.setBlack(true); - this.color.setGreen(true); - this.color.setRed(true); - // Flesh // Exile target creature card from a graveyard. Put X +1/+1 counters on target creature, where X is the power of the card you exiled. - getLeftHalfCard().getColor().setBlack(true); - getLeftHalfCard().getColor().setGreen(true); Target target = new TargetCardInGraveyard(new FilterCreatureCard()); getLeftHalfCard().getSpellAbility().addTarget(target); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); @@ -75,8 +69,6 @@ public class FleshBlood extends SplitCard { // Blood // Target creature you control deals damage equal to its power to target creature or player. - getRightHalfCard().getColor().setRed(true); - getRightHalfCard().getColor().setGreen(true); getRightHalfCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); getRightHalfCard().getSpellAbility().addTarget(new TargetCreatureOrPlayer()); getRightHalfCard().getSpellAbility().addEffect(new BloodEffect()); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/GiveTake.java b/Mage.Sets/src/mage/sets/dragonsmaze/GiveTake.java index ab375aaf048..9a9ac0ba54b 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/GiveTake.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/GiveTake.java @@ -52,20 +52,15 @@ public class GiveTake extends SplitCard { super(ownerId, 129, "Give", "Take", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{G}","{2}{U}", true); this.expansionSetCode = "DGM"; - this.color.setGreen(true); - this.color.setBlue(true); - // Give // Put three +1/+1 counters on target creature. getLeftHalfCard().getSpellAbility().addEffect(new AddCountersTargetEffect(CounterType.P1P1.createInstance(3))); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); - getLeftHalfCard().getColor().setGreen(true); // Take // Remove all +1/+1 counters from target creature you control. Draw that many cards. getRightHalfCard().getSpellAbility().addEffect(new TakeEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetControlledCreaturePermanent()); - getLeftHalfCard().getColor().setBlue(true); } public GiveTake(final GiveTake card) { diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ProfitLoss.java b/Mage.Sets/src/mage/sets/dragonsmaze/ProfitLoss.java index afb564d344c..c5b6d8b250a 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ProfitLoss.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ProfitLoss.java @@ -57,17 +57,12 @@ public class ProfitLoss extends SplitCard { super(ownerId, 130, "Profit", "Loss", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{W}", "{2}{B}", true); this.expansionSetCode = "DGM"; - this.color.setWhite(true); - this.color.setBlack(true); - // Profit // Creatures you control get +1/+1 until end of turn. - getLeftHalfCard().getColor().setBlue(true); getLeftHalfCard().getSpellAbility().addEffect(new BoostControlledEffect(1,1, Duration.EndOfTurn, new FilterCreaturePermanent())); // Loss // Creatures your opponents control get -1/-1 until end of turn. - getRightHalfCard().getColor().setBlack(true); getRightHalfCard().getSpellAbility().addEffect(new BoostAllEffect(-1, -1, Duration.EndOfTurn, filter, false)); } diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ProtectServe.java b/Mage.Sets/src/mage/sets/dragonsmaze/ProtectServe.java index 78264e782c5..56db78c159b 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ProtectServe.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ProtectServe.java @@ -48,18 +48,13 @@ public class ProtectServe extends SplitCard { super(ownerId, 131, "Protect", "Serve", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{W}", "{1}{U}", true); this.expansionSetCode = "DGM"; - this.color.setWhite(true); - this.color.setBlue(true); - // Protect // Target creature gets +2/+4 until end of turn. - getLeftHalfCard().getColor().setWhite(true); getLeftHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(2,4, Duration.EndOfTurn)); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); // Serve // Target creature gets -6/-0 until end of turn. - getRightHalfCard().getColor().setBlue(true); getRightHalfCard().getSpellAbility().addEffect(new BoostTargetEffect(-6,0, Duration.EndOfTurn)); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ReadyWilling.java b/Mage.Sets/src/mage/sets/dragonsmaze/ReadyWilling.java index 727fdcdb378..d67e095eb89 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ReadyWilling.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ReadyWilling.java @@ -53,14 +53,8 @@ public class ReadyWilling extends SplitCard { super(ownerId, 132, "Ready", "Willing", Rarity.RARE, new CardType[]{CardType.INSTANT}, "{1}{G}{W}", "{1}{W}{B}", true); this.expansionSetCode = "DGM"; - this.color.setGreen(true); - this.color.setWhite(true); - this.color.setBlack(true); - // Ready // Creatures you control are indestructible this turn. Untap each creature you control. - getLeftHalfCard().getColor().setGreen(true); - getLeftHalfCard().getColor().setWhite(true); Effect effect = new GainAbilityAllEffect(IndestructibleAbility.getInstance(), Duration.EndOfTurn, new FilterControlledCreaturePermanent("Creatures you controll"), false); effect.setText("Creatures you control are indestructible this turn"); getLeftHalfCard().getSpellAbility().addEffect(effect); @@ -68,8 +62,6 @@ public class ReadyWilling extends SplitCard { // Willing // Creatures you control gain deathtouch and lifelink until end of turn. - getRightHalfCard().getColor().setWhite(true); - getRightHalfCard().getColor().setBlack(true); getRightHalfCard().getSpellAbility().addEffect(new GainAbilityControlledEffect(DeathtouchAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent("Creatures")) ); effect = new GainAbilityControlledEffect(LifelinkAbility.getInstance(), Duration.EndOfTurn, new FilterCreaturePermanent("Creatures")); effect.setText("Creatures you control gain lifelink until end of turn"); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/ToilTrouble.java b/Mage.Sets/src/mage/sets/dragonsmaze/ToilTrouble.java index e9ada699a40..b6b39e004bb 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/ToilTrouble.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/ToilTrouble.java @@ -54,19 +54,14 @@ public class ToilTrouble extends SplitCard { super(ownerId, 133, "Toil", "Trouble", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{2}{B}", "{2}{R}",true); this.expansionSetCode = "DGM"; - this.color.setBlack(true); - this.color.setRed(true); - // Toil // Target player draws two cards and loses 2 life. - getLeftHalfCard().getColor().setBlack(true); getLeftHalfCard().getSpellAbility().addTarget(new TargetPlayer()); getLeftHalfCard().getSpellAbility().addEffect(new DrawCardTargetEffect(2)); getLeftHalfCard().getSpellAbility().addEffect(new LoseLifeTargetEffect(2)); // Trouble // Trouble deals damage to target player equal to the number of cards in that player's hand. - getRightHalfCard().getColor().setRed(true); Effect effect = new DamageTargetEffect(new TargetPlayerCardsInHandCount()); effect.setText("Trouble deals damage to target player equal to the number of cards in that player's hand"); getRightHalfCard().getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/TurnBurn.java b/Mage.Sets/src/mage/sets/dragonsmaze/TurnBurn.java index 01ea29ed0ab..db568c91fc8 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/TurnBurn.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/TurnBurn.java @@ -29,11 +29,9 @@ package mage.sets.dragonsmaze; import java.util.UUID; import mage.MageInt; -import mage.ObjectColor; import mage.abilities.effects.Effect; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.continuous.BecomesCreatureTargetEffect; -import mage.abilities.effects.common.continuous.LoseAllAbilitiesTargetEffect; import mage.cards.SplitCard; import mage.constants.CardType; import mage.constants.Duration; @@ -52,12 +50,8 @@ public class TurnBurn extends SplitCard { super(ownerId, 134, "Turn", "Burn", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{2}{U}", "{1}{R}", true); this.expansionSetCode = "DGM"; - this.color.setBlue(true); - this.color.setRed(true); - // Turn // Until end of turn, target creature loses all abilities and becomes a red Weird with base power and toughness 0/1. - getLeftHalfCard().getColor().setBlue(true); Effect effect = new BecomesCreatureTargetEffect(new WeirdToken(), true, false, Duration.EndOfTurn); effect.setText("Until end of turn, target creature loses all abilities and becomes a red Weird with base power and toughness 0/1"); getLeftHalfCard().getSpellAbility().addEffect(effect); @@ -65,7 +59,6 @@ public class TurnBurn extends SplitCard { // Burn // Burn deals 2 damage to target creature or player. - getRightHalfCard().getColor().setRed(true); effect = new DamageTargetEffect(2); effect.setText("Burn deals 2 damage to target creature or player"); getRightHalfCard().getSpellAbility().addEffect(effect); diff --git a/Mage.Sets/src/mage/sets/dragonsmaze/WearTear.java b/Mage.Sets/src/mage/sets/dragonsmaze/WearTear.java index b9f6babda76..7b68dd26a31 100644 --- a/Mage.Sets/src/mage/sets/dragonsmaze/WearTear.java +++ b/Mage.Sets/src/mage/sets/dragonsmaze/WearTear.java @@ -47,19 +47,14 @@ public class WearTear extends SplitCard { super(ownerId, 135, "Wear", "Tear", Rarity.UNCOMMON, new CardType[]{CardType.INSTANT}, "{1}{R}", "{W}", true); this.expansionSetCode = "DGM"; - this.color.setRed(true); - this.color.setWhite(true); - // Wear // Destroy target artifact. - getLeftHalfCard().getColor().setRed(true); getLeftHalfCard().getSpellAbility().addEffect(new DestroyTargetEffect()); Target target = new TargetArtifactPermanent(); getLeftHalfCard().getSpellAbility().addTarget(target); // Tear // Destroy target enchantment. - getRightHalfCard().getColor().setWhite(true); getRightHalfCard().getSpellAbility().addEffect(new DestroyTargetEffect()); target = new TargetPermanent(new FilterEnchantment()); getRightHalfCard().getSpellAbility().addTarget(target); diff --git a/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java b/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java index 04b2d05bc3b..43d9ebeb73a 100644 --- a/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java +++ b/Mage.Sets/src/mage/sets/dragonsoftarkir/DisplayOfDominance.java @@ -124,7 +124,7 @@ class DisplayOfDominanceEffect extends ContinuousRuleModifyingEffectImpl { MageObject mageObject = game.getObject(event.getSourceId()); if (game.getPlayer(ability.getControllerId()).hasOpponent(event.getPlayerId(), game) && mageObject instanceof Spell && - (mageObject.getColor().isBlack() || mageObject.getColor().isBlue())) { + (mageObject.getColor(game).isBlack() || mageObject.getColor(game).isBlue())) { Permanent permanent = game.getPermanent(event.getTargetId()); return permanent != null && permanent.getControllerId().equals(ability.getControllerId()); } diff --git a/Mage.Sets/src/mage/sets/eventide/BloomTender.java b/Mage.Sets/src/mage/sets/eventide/BloomTender.java index da2614e5d88..f4544ddc232 100644 --- a/Mage.Sets/src/mage/sets/eventide/BloomTender.java +++ b/Mage.Sets/src/mage/sets/eventide/BloomTender.java @@ -106,19 +106,19 @@ class BloomTenderEffect extends ManaEffect { if (controller != null) { Mana mana = new Mana(); for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) { - if (mana.getBlack() == 0 && permanent.getColor().isBlack()) { + if (mana.getBlack() == 0 && permanent.getColor(game).isBlack()) { mana.addBlack(); } - if (mana.getBlue() == 0 && permanent.getColor().isBlue()) { + if (mana.getBlue() == 0 && permanent.getColor(game).isBlue()) { mana.addBlue(); } - if (mana.getRed() == 0 && permanent.getColor().isRed()) { + if (mana.getRed() == 0 && permanent.getColor(game).isRed()) { mana.addRed(); } - if (mana.getGreen() == 0 && permanent.getColor().isGreen()) { + if (mana.getGreen() == 0 && permanent.getColor(game).isGreen()) { mana.addGreen(); } - if (mana.getWhite() == 0 && permanent.getColor().isWhite()) { + if (mana.getWhite() == 0 && permanent.getColor(game).isWhite()) { mana.addWhite(); } } diff --git a/Mage.Sets/src/mage/sets/eventide/IndigoFaerie.java b/Mage.Sets/src/mage/sets/eventide/IndigoFaerie.java index e7b6df7e5c6..ba3a0ef16ad 100644 --- a/Mage.Sets/src/mage/sets/eventide/IndigoFaerie.java +++ b/Mage.Sets/src/mage/sets/eventide/IndigoFaerie.java @@ -101,7 +101,7 @@ class BecomesBlueTargetEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getFirstTarget()); if (permanent != null) { - permanent.getColor().setBlue(true); + permanent.getColor(game).setBlue(true); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/fifthedition/Hydroblast.java b/Mage.Sets/src/mage/sets/fifthedition/Hydroblast.java index fbc117f5c72..00e1a79ae3d 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/Hydroblast.java +++ b/Mage.Sets/src/mage/sets/fifthedition/Hydroblast.java @@ -89,7 +89,7 @@ class HydroblastCounterEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - if (game.getStack().getSpell(source.getFirstTarget()).getColor().isRed()) { + if (game.getStack().getSpell(source.getFirstTarget()).getColor(game).isRed()) { game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game); } return true; @@ -119,7 +119,7 @@ class HydroblastDestroyEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getTargets().getFirstTarget()); - if (permanent != null && permanent.getColor().isRed()) { + if (permanent != null && permanent.getColor(game).isRed()) { permanent.destroy(source.getSourceId(), game, false); } return true; diff --git a/Mage.Sets/src/mage/sets/fifthedition/Justice.java b/Mage.Sets/src/mage/sets/fifthedition/Justice.java index ff880f4384c..ffa932141df 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/Justice.java +++ b/Mage.Sets/src/mage/sets/fifthedition/Justice.java @@ -95,7 +95,7 @@ class JusticeTriggeredAbility extends TriggeredAbilityImpl { || event.getType() == GameEvent.EventType.DAMAGED_PLAYER || event.getType() == GameEvent.EventType.DAMAGED_PLANESWALKER) { MageObject sourceObject = game.getObject(event.getSourceId()); - if (sourceObject.getColor().isRed()) { + if (sourceObject.getColor(game).isRed()) { if (sourceObject instanceof Permanent && sourceObject.getCardType().contains(CardType.CREATURE) || sourceObject instanceof Spell) { this.getEffects().get(0).setValue("damageAmount", event.getAmount()); diff --git a/Mage.Sets/src/mage/sets/futuresight/DryadArbor.java b/Mage.Sets/src/mage/sets/futuresight/DryadArbor.java index 19da16a3ccf..9de739559ab 100644 --- a/Mage.Sets/src/mage/sets/futuresight/DryadArbor.java +++ b/Mage.Sets/src/mage/sets/futuresight/DryadArbor.java @@ -49,7 +49,7 @@ public class DryadArbor extends CardImpl { this.power = new MageInt(1); this.toughness = new MageInt(1); - this.getColor().setGreen(true); + this.color.setGreen(true); // (Dryad Arbor isn't a spell, it's affected by summoning sickness, and it has "{tap}: Add {G} to your mana pool.") this.addAbility(new GreenManaAbility()); diff --git a/Mage.Sets/src/mage/sets/futuresight/GlitteringWish.java b/Mage.Sets/src/mage/sets/futuresight/GlitteringWish.java index cff98bf319b..3f4ea5a174f 100644 --- a/Mage.Sets/src/mage/sets/futuresight/GlitteringWish.java +++ b/Mage.Sets/src/mage/sets/futuresight/GlitteringWish.java @@ -82,7 +82,7 @@ class GlitteringWishEffect extends OneShotEffect { @Override public boolean apply(MageObject input, Game game) { - return input.getColor().isMulticolored(); + return input.getColor(game).isMulticolored(); } @Override diff --git a/Mage.Sets/src/mage/sets/gatecrash/LazavDimirMastermind.java b/Mage.Sets/src/mage/sets/gatecrash/LazavDimirMastermind.java index e795b43c9ef..b3172590881 100644 --- a/Mage.Sets/src/mage/sets/gatecrash/LazavDimirMastermind.java +++ b/Mage.Sets/src/mage/sets/gatecrash/LazavDimirMastermind.java @@ -120,7 +120,7 @@ class LazavDimirEffect extends ContinuousEffectImpl { } permanent.getPower().setValue(cardToCopy.getPower().getValue()); permanent.getToughness().setValue(cardToCopy.getToughness().getValue()); - permanent.getColor().setColor(cardToCopy.getColor()); + permanent.getColor(game).setColor(cardToCopy.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(cardToCopy.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage.Sets/src/mage/sets/iceage/Pyroblast.java b/Mage.Sets/src/mage/sets/iceage/Pyroblast.java index 536577b0297..04784cb21bf 100644 --- a/Mage.Sets/src/mage/sets/iceage/Pyroblast.java +++ b/Mage.Sets/src/mage/sets/iceage/Pyroblast.java @@ -89,7 +89,7 @@ class PyroblastCounterTargetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - if(game.getStack().getSpell(source.getFirstTarget()).getColor().isBlue()){ + if(game.getStack().getSpell(source.getFirstTarget()).getColor(game).isBlue()){ game.getStack().counter(source.getFirstTarget(), source.getSourceId(), game); } return true; @@ -122,7 +122,7 @@ class DestroyTargetEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getTargets().getFirstTarget()); - if (permanent != null && permanent.getColor().isBlue()) { + if (permanent != null && permanent.getColor(game).isBlue()) { permanent.destroy(source.getSourceId(), game, false); } return true; diff --git a/Mage.Sets/src/mage/sets/innistrad/EssenceOfTheWild.java b/Mage.Sets/src/mage/sets/innistrad/EssenceOfTheWild.java index 90844048974..657f77a94c3 100644 --- a/Mage.Sets/src/mage/sets/innistrad/EssenceOfTheWild.java +++ b/Mage.Sets/src/mage/sets/innistrad/EssenceOfTheWild.java @@ -137,7 +137,7 @@ class EssenceOfTheWildCopyEffect extends ContinuousEffectImpl { Permanent permanent = game.getPermanent(targetId); if (permanent != null) { permanent.setName(essence.getName()); - permanent.getColor().setColor(essence.getColor()); + permanent.getColor(game).setColor(essence.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(essence.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java b/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java index 1e986905fd4..84e2bdea4ef 100644 --- a/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java +++ b/Mage.Sets/src/mage/sets/innistrad/GrimoireOfTheDead.java @@ -146,7 +146,7 @@ class GrimoireOfTheDeadEffect2 extends ContinuousEffectImpl { switch (layer) { case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - permanent.getColor().setBlack(true); + permanent.getColor(game).setBlack(true); } break; case TypeChangingEffects_4: diff --git a/Mage.Sets/src/mage/sets/invasion/AssaultBattery.java b/Mage.Sets/src/mage/sets/invasion/AssaultBattery.java index b658ba52cc7..7eb110ec646 100644 --- a/Mage.Sets/src/mage/sets/invasion/AssaultBattery.java +++ b/Mage.Sets/src/mage/sets/invasion/AssaultBattery.java @@ -50,12 +50,8 @@ public class AssaultBattery extends SplitCard { super(ownerId, 295, "Assault", "Battery", Rarity.UNCOMMON, new CardType[]{CardType.SORCERY}, "{R}", "{3}{G}", false); this.expansionSetCode = "INV"; - this.color.setRed(true); - this.color.setGreen(true); - // Assault // Assault deals 2 damage to target creature or player. - getLeftHalfCard().getColor().setRed(true); Effect effect = new DamageTargetEffect(2); effect.setText("Assault deals 2 damage to target creature or player"); getLeftHalfCard().getSpellAbility().addEffect(effect); @@ -63,7 +59,6 @@ public class AssaultBattery extends SplitCard { // Battery // Put a 3/3 green Elephant creature token onto the battlefield. - getRightHalfCard().getColor().setGreen(true); getRightHalfCard().getSpellAbility().addEffect(new CreateTokenEffect(new ElephantToken())); } diff --git a/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java b/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java index 9b93ba4a784..8e4ad8a781f 100644 --- a/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java +++ b/Mage.Sets/src/mage/sets/journeyintonyx/HallOfTriumph.java @@ -138,7 +138,7 @@ class HallOfTriumphBoostControlledEffect extends ContinuousEffectImpl { ObjectColor color = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); if (color != null) { for (Permanent perm: game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { - if (perm.getColor().shares(color)) { + if (perm.getColor(game).shares(color)) { perm.addPower(1); perm.addToughness(1); } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/GhostfireBlade.java b/Mage.Sets/src/mage/sets/khansoftarkir/GhostfireBlade.java index 9d62871250a..2b01c9e92ac 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/GhostfireBlade.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/GhostfireBlade.java @@ -67,7 +67,7 @@ public class GhostfireBlade extends CardImpl { public void adjustCosts(Ability ability, Game game) { if (ability instanceof EquipAbility) { Permanent targetCreature = game.getPermanent(ability.getTargets().getFirstTarget()); - if (targetCreature != null && targetCreature.getColor().isColorless()) { + if (targetCreature != null && targetCreature.getColor(game).isColorless()) { CardUtil.reduceCost(ability, 2); } } diff --git a/Mage.Sets/src/mage/sets/khansoftarkir/SarkhanTheDragonspeaker.java b/Mage.Sets/src/mage/sets/khansoftarkir/SarkhanTheDragonspeaker.java index f8aea6b73bc..cb84a4e3e85 100644 --- a/Mage.Sets/src/mage/sets/khansoftarkir/SarkhanTheDragonspeaker.java +++ b/Mage.Sets/src/mage/sets/khansoftarkir/SarkhanTheDragonspeaker.java @@ -135,7 +135,7 @@ class SarkhanTheDragonspeakerEffect extends ContinuousEffectImpl { } break; case ColorChangingEffects_5: - permanent.getColor().setColor(ObjectColor.RED); + permanent.getColor(game).setColor(ObjectColor.RED); break; case AbilityAddingRemovingEffects_6: if (sublayer == SubLayer.NA) { diff --git a/Mage.Sets/src/mage/sets/legends/Abomination.java b/Mage.Sets/src/mage/sets/legends/Abomination.java index 8ccb34a1237..0c33a7c7818 100644 --- a/Mage.Sets/src/mage/sets/legends/Abomination.java +++ b/Mage.Sets/src/mage/sets/legends/Abomination.java @@ -95,7 +95,7 @@ class AbominationTriggeredAbility extends TriggeredAbilityImpl { Permanent blocked = game.getPermanent(event.getTargetId()); Permanent abomination = game.getPermanent(sourceId); if (blocker != null && blocker != abomination - && blocker.getColor().isWhite() + && blocker.getColor(game).isWhite() && blocked == abomination) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getSourceId())); @@ -103,14 +103,14 @@ class AbominationTriggeredAbility extends TriggeredAbilityImpl { } } if (blocker != null && blocker == abomination - && game.getPermanent(event.getTargetId()).getColor().isWhite()) { + && game.getPermanent(event.getTargetId()).getColor(game).isWhite()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getTargetId())); return true; } } if (blocker != null && blocker != abomination - && blocker.getColor().isGreen() + && blocker.getColor(game).isGreen() && blocked == abomination) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getSourceId())); @@ -118,7 +118,7 @@ class AbominationTriggeredAbility extends TriggeredAbilityImpl { } } if (blocker != null && blocker == abomination - && game.getPermanent(event.getTargetId()).getColor().isGreen()) { + && game.getPermanent(event.getTargetId()).getColor(game).isGreen()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getTargetId())); return true; diff --git a/Mage.Sets/src/mage/sets/limitedalpha/CrystalRod.java b/Mage.Sets/src/mage/sets/limitedalpha/CrystalRod.java index fb43ebc33d1..3b0b24aff4a 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/CrystalRod.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/CrystalRod.java @@ -86,7 +86,7 @@ class CrystalRodAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().contains(ObjectColor.BLUE)) { + if (spell != null && spell.getColor(game).contains(ObjectColor.BLUE)) { return true; } } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/IronStar.java b/Mage.Sets/src/mage/sets/limitedalpha/IronStar.java index 24c38dacdff..0ff69ced1f0 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/IronStar.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/IronStar.java @@ -86,7 +86,7 @@ class IronStarAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().contains(ObjectColor.RED)) { + if (spell != null && spell.getColor(game).contains(ObjectColor.RED)) { return true; } } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/IvoryCup.java b/Mage.Sets/src/mage/sets/limitedalpha/IvoryCup.java index 03ce902aa2e..cfde122dc89 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/IvoryCup.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/IvoryCup.java @@ -85,7 +85,7 @@ class IvoryCupAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().contains(ObjectColor.WHITE)) { + if (spell != null && spell.getColor(game).contains(ObjectColor.WHITE)) { return true; } } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/ThroneOfBone.java b/Mage.Sets/src/mage/sets/limitedalpha/ThroneOfBone.java index 57cb3044207..529bd128f8d 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/ThroneOfBone.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/ThroneOfBone.java @@ -86,7 +86,7 @@ class ThroneOfBoneAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().contains(ObjectColor.BLACK)) { + if (spell != null && spell.getColor(game).contains(ObjectColor.BLACK)) { return true; } } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/WoodenSphere.java b/Mage.Sets/src/mage/sets/limitedalpha/WoodenSphere.java index 54c93977a9c..f342a150cc6 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/WoodenSphere.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/WoodenSphere.java @@ -86,7 +86,7 @@ class WoodenSphereAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().contains(ObjectColor.GREEN)) { + if (spell != null && spell.getColor(game).contains(ObjectColor.GREEN)) { return true; } } diff --git a/Mage.Sets/src/mage/sets/limitedbeta/Fork.java b/Mage.Sets/src/mage/sets/limitedbeta/Fork.java index 4db929c4711..534f9d774c7 100644 --- a/Mage.Sets/src/mage/sets/limitedbeta/Fork.java +++ b/Mage.Sets/src/mage/sets/limitedbeta/Fork.java @@ -93,7 +93,7 @@ class ForkEffect extends OneShotEffect { Spell spell = game.getStack().getSpell(targetPointer.getFirst(game, source)); if (spell != null) { Spell copy = spell.copySpell(); - copy.getColor().setRed(true); + copy.getColor(game).setRed(true); copy.setControllerId(controller.getId()); copy.setCopiedSpell(true); game.getStack().push(copy); diff --git a/Mage.Sets/src/mage/sets/magic2010/DreadWarlock.java b/Mage.Sets/src/mage/sets/magic2010/DreadWarlock.java index 2ee1ab461ab..4d6639a4fc5 100644 --- a/Mage.Sets/src/mage/sets/magic2010/DreadWarlock.java +++ b/Mage.Sets/src/mage/sets/magic2010/DreadWarlock.java @@ -114,7 +114,7 @@ class DreadWarlockEffect extends RestrictionEffect { @Override public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { - if (blocker.getColor().isBlack()) { + if (blocker.getColor(game).isBlack()) { return true; } return false; diff --git a/Mage.Sets/src/mage/sets/magic2010/RiseFromTheGrave.java b/Mage.Sets/src/mage/sets/magic2010/RiseFromTheGrave.java index 5596fd7914c..7a6ca7f3494 100644 --- a/Mage.Sets/src/mage/sets/magic2010/RiseFromTheGrave.java +++ b/Mage.Sets/src/mage/sets/magic2010/RiseFromTheGrave.java @@ -98,7 +98,7 @@ class RiseFromTheGraveEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - creature.getColor().setBlack(true); + creature.getColor(game).setBlack(true); } break; } diff --git a/Mage.Sets/src/mage/sets/magic2010/VampireNocturnus.java b/Mage.Sets/src/mage/sets/magic2010/VampireNocturnus.java index 48e1bf123e7..526e6fe4405 100644 --- a/Mage.Sets/src/mage/sets/magic2010/VampireNocturnus.java +++ b/Mage.Sets/src/mage/sets/magic2010/VampireNocturnus.java @@ -126,7 +126,7 @@ class VampireNocturnusCondition implements Condition { if (player != null) { Card card = player.getLibrary().getFromTop(game); if (card != null) { - return card.getColor().isBlack(); + return card.getColor(game).isBlack(); } } return false; diff --git a/Mage.Sets/src/mage/sets/magic2011/FireServant.java b/Mage.Sets/src/mage/sets/magic2011/FireServant.java index 3ce806c9eeb..20458e7d2de 100644 --- a/Mage.Sets/src/mage/sets/magic2011/FireServant.java +++ b/Mage.Sets/src/mage/sets/magic2011/FireServant.java @@ -100,7 +100,7 @@ class FireServantEffect extends ReplacementEffectImpl { StackObject spell = game.getStack().getStackObject(event.getSourceId()); return spell != null && spell.getControllerId().equals(source.getControllerId()) && - spell.getColor().isRed() && + spell.getColor(game).isRed() && (spell.getCardType().contains(CardType.INSTANT) || spell.getCardType().contains(CardType.SORCERY)); } diff --git a/Mage.Sets/src/mage/sets/magic2012/ChandrasPhoenix.java b/Mage.Sets/src/mage/sets/magic2012/ChandrasPhoenix.java index 39fde9af860..27c7871fafe 100644 --- a/Mage.Sets/src/mage/sets/magic2012/ChandrasPhoenix.java +++ b/Mage.Sets/src/mage/sets/magic2012/ChandrasPhoenix.java @@ -91,7 +91,7 @@ class ChandrasPhoenixTriggeredAbility extends TriggeredAbilityImpl { if (game.getOpponents(this.controllerId).contains(event.getPlayerId())) { Card c = game.getCard(event.getSourceId()); if (c != null) { - if (c.getColor().isRed() && (c.getCardType().contains(CardType.PLANESWALKER) || c.getCardType().contains(CardType.INSTANT) || c.getCardType().contains(CardType.SORCERY))) { + if (c.getColor(game).isRed() && (c.getCardType().contains(CardType.PLANESWALKER) || c.getCardType().contains(CardType.INSTANT) || c.getCardType().contains(CardType.SORCERY))) { return true; } } diff --git a/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java b/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java index 1f4efab0209..b20cc8df831 100644 --- a/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java +++ b/Mage.Sets/src/mage/sets/magic2014/FiendslayerPaladin.java @@ -123,8 +123,8 @@ class FiendslayerPaladinEffect extends ContinuousRuleModifyingEffectImpl { Card targetCard = game.getCard(event.getTargetId()); StackObject stackObject = (StackObject) game.getStack().getStackObject(event.getSourceId()); if (targetCard != null && stackObject != null && targetCard.getId().equals(source.getSourceId())) { - if (stackObject.getColor().contains(ObjectColor.BLACK) - || stackObject.getColor().contains(ObjectColor.RED)) { + if (stackObject.getColor(game).contains(ObjectColor.BLACK) + || stackObject.getColor(game).contains(ObjectColor.RED)) { if (!stackObject.getControllerId().equals(source.getControllerId()) && stackObject.getCardType().contains(CardType.INSTANT) || stackObject.getCardType().contains(CardType.SORCERY)) { diff --git a/Mage.Sets/src/mage/sets/magic2015/AvacynGuardianAngel.java b/Mage.Sets/src/mage/sets/magic2015/AvacynGuardianAngel.java index 05e0d807513..0e6d2fa2706 100644 --- a/Mage.Sets/src/mage/sets/magic2015/AvacynGuardianAngel.java +++ b/Mage.Sets/src/mage/sets/magic2015/AvacynGuardianAngel.java @@ -127,7 +127,7 @@ class AvacynGuardianAngelPreventToCreatureEffect extends PreventionEffectImpl { && event.getTargetId().equals(getTargetPointer().getFirst(game, source))) { ChoiceColor choice = (ChoiceColor) source.getChoices().get(0); MageObject sourceObject = game.getObject(event.getSourceId()); - if (sourceObject != null && choice != null && sourceObject.getColor().shares(choice.getColor())) { + if (sourceObject != null && choice != null && sourceObject.getColor(game).shares(choice.getColor())) { return true; } } @@ -166,7 +166,7 @@ class AvacynGuardianAngelPreventToPlayerEffect extends PreventionEffectImpl { && event.getTargetId().equals(getTargetPointer().getFirst(game, source))) { ChoiceColor choice = (ChoiceColor) source.getChoices().get(0); MageObject sourceObject = game.getObject(event.getSourceId()); - if (sourceObject != null && choice != null && sourceObject.getColor().shares(choice.getColor())) { + if (sourceObject != null && choice != null && sourceObject.getColor(game).shares(choice.getColor())) { return true; } } diff --git a/Mage.Sets/src/mage/sets/magic2015/PolymorphistsJest.java b/Mage.Sets/src/mage/sets/magic2015/PolymorphistsJest.java index 44c582583e5..e48c828a987 100644 --- a/Mage.Sets/src/mage/sets/magic2015/PolymorphistsJest.java +++ b/Mage.Sets/src/mage/sets/magic2015/PolymorphistsJest.java @@ -115,12 +115,12 @@ class PolymorphistsJestEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - permanent.getColor().setBlack(false); - permanent.getColor().setGreen(false); - permanent.getColor().setBlue(false); - permanent.getColor().setWhite(false); - permanent.getColor().setBlack(false); - permanent.getColor().setColor(ObjectColor.BLUE); + permanent.getColor(game).setBlack(false); + permanent.getColor(game).setGreen(false); + permanent.getColor(game).setBlue(false); + permanent.getColor(game).setWhite(false); + permanent.getColor(game).setBlack(false); + permanent.getColor(game).setColor(ObjectColor.BLUE); } break; case AbilityAddingRemovingEffects_6: diff --git a/Mage.Sets/src/mage/sets/magic2015/SoulOfRavnica.java b/Mage.Sets/src/mage/sets/magic2015/SoulOfRavnica.java index f6c4344da3b..e77bbcf0fb3 100644 --- a/Mage.Sets/src/mage/sets/magic2015/SoulOfRavnica.java +++ b/Mage.Sets/src/mage/sets/magic2015/SoulOfRavnica.java @@ -103,19 +103,19 @@ class SoulOfRavnicaEffect extends OneShotEffect { if (controller != null) { HashSet colors = new HashSet<>(); for (Permanent permanent : game.getBattlefield().getAllActivePermanents(controller.getId())) { - if (permanent.getColor().isBlack()) { + if (permanent.getColor(game).isBlack()) { colors.add(ObjectColor.BLACK); } - if (permanent.getColor().isBlue()) { + if (permanent.getColor(game).isBlue()) { colors.add(ObjectColor.BLUE); } - if (permanent.getColor().isRed()) { + if (permanent.getColor(game).isRed()) { colors.add(ObjectColor.RED); } - if (permanent.getColor().isGreen()) { + if (permanent.getColor(game).isGreen()) { colors.add(ObjectColor.GREEN); } - if (permanent.getColor().isWhite()) { + if (permanent.getColor(game).isWhite()) { colors.add(ObjectColor.WHITE); } } diff --git a/Mage.Sets/src/mage/sets/mirrodin/ChromeMox.java b/Mage.Sets/src/mage/sets/mirrodin/ChromeMox.java index dab4e360d89..00e8256abb9 100644 --- a/Mage.Sets/src/mage/sets/mirrodin/ChromeMox.java +++ b/Mage.Sets/src/mage/sets/mirrodin/ChromeMox.java @@ -151,7 +151,7 @@ class ChromeMoxManaEffect extends ManaEffect { if (imprintedCard != null) { Choice choice = new ChoiceImpl(true); choice.setMessage("Pick a mana color"); - ObjectColor color = imprintedCard.getColor(); + ObjectColor color = imprintedCard.getColor(game); if (color.isBlack()) { choice.getChoices().add("Black"); } diff --git a/Mage.Sets/src/mage/sets/modernmasters2015/KarplusanStrider.java b/Mage.Sets/src/mage/sets/modernmasters2015/KarplusanStrider.java index cedb57ab93d..81ceb5b06eb 100644 --- a/Mage.Sets/src/mage/sets/modernmasters2015/KarplusanStrider.java +++ b/Mage.Sets/src/mage/sets/modernmasters2015/KarplusanStrider.java @@ -111,7 +111,7 @@ class KarplusanStriderEffect extends ContinuousRuleModifyingEffectImpl { Permanent targettedPermanent = game.getPermanent(event.getTargetId()); Spell sourceSpell = game.getStack().getSpell(event.getSourceId()); if (targettedPermanent != null && sourceSpell != null) { - return sourceSpell.getColor().isBlue() || sourceSpell.getColor().isBlack(); + return sourceSpell.getColor(game).isBlue() || sourceSpell.getColor(game).isBlack(); } } return false; diff --git a/Mage.Sets/src/mage/sets/newphyrexia/CagedSun.java b/Mage.Sets/src/mage/sets/newphyrexia/CagedSun.java index 67e7b0fdfc7..e7fdb969e10 100644 --- a/Mage.Sets/src/mage/sets/newphyrexia/CagedSun.java +++ b/Mage.Sets/src/mage/sets/newphyrexia/CagedSun.java @@ -111,7 +111,7 @@ class CagedSunEffect2 extends ContinuousEffectImpl { ObjectColor color = (ObjectColor) game.getState().getValue(permanent.getId() + "_color"); if (color != null) { for (Permanent perm: game.getBattlefield().getAllActivePermanents(filter, source.getControllerId(), game)) { - if (perm.getColor().contains(color)) { + if (perm.getColor(game).contains(color)) { perm.addPower(1); perm.addToughness(1); } diff --git a/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java b/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java index fa3a2db0fee..6bd0b64e1dd 100644 --- a/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java +++ b/Mage.Sets/src/mage/sets/ninthedition/Deathgazer.java @@ -87,7 +87,7 @@ class DeathgazerTriggeredAbility extends TriggeredAbilityImpl { if (event.getType() == GameEvent.EventType.BLOCKER_DECLARED) { if (event.getSourceId().equals(this.getSourceId())) { Permanent permanent = game.getPermanent(event.getTargetId()); - if(permanent != null && !permanent.getColor().isBlack()) + if(permanent != null && !permanent.getColor(game).isBlack()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getTargetId())); @@ -97,7 +97,7 @@ class DeathgazerTriggeredAbility extends TriggeredAbilityImpl { } if (event.getTargetId().equals(this.getSourceId())) { Permanent permanent = game.getPermanent(event.getSourceId()); - if(permanent != null && !permanent.getColor().isBlack()) + if(permanent != null && !permanent.getColor(game).isBlack()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getSourceId())); diff --git a/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java b/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java index 4014969ef3f..583ed4bcfe5 100644 --- a/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java +++ b/Mage.Sets/src/mage/sets/odyssey/EarnestFellowship.java @@ -97,9 +97,9 @@ class EarnestFellowshipEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { for (Permanent permanent : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { - if (permanent.getColor().hasColor()) { + if (permanent.getColor(game).hasColor()) { List colorPredicates = new ArrayList<>(); - for (ObjectColor color : permanent.getColor().getColors()) { + for (ObjectColor color : permanent.getColor(game).getColors()) { colorPredicates.add(new ColorPredicate(color)); } FilterCard filterColors = new FilterCard("its colors"); diff --git a/Mage.Sets/src/mage/sets/odyssey/TestamentOfFaith.java b/Mage.Sets/src/mage/sets/odyssey/TestamentOfFaith.java index 4b9149507ce..c19111128ea 100644 --- a/Mage.Sets/src/mage/sets/odyssey/TestamentOfFaith.java +++ b/Mage.Sets/src/mage/sets/odyssey/TestamentOfFaith.java @@ -127,8 +127,8 @@ class TestamentOfFaithBecomesCreatureSourceEffect extends ContinuousEffectImpl i break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - if (token.getColor().hasColor()) { - permanent.getColor().setColor(token.getColor()); + if (token.getColor(game).hasColor()) { + permanent.getColor(game).setColor(token.getColor(game)); } } break; diff --git a/Mage.Sets/src/mage/sets/planarchaos/BoomBust.java b/Mage.Sets/src/mage/sets/planarchaos/BoomBust.java index 5f9bd3bf3b3..b73609a114a 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/BoomBust.java +++ b/Mage.Sets/src/mage/sets/planarchaos/BoomBust.java @@ -60,11 +60,8 @@ public class BoomBust extends SplitCard { super(ownerId, 112, "Boom", "Bust", Rarity.RARE, new CardType[]{CardType.SORCERY}, "{1}{R}", "{5}{R}", false); this.expansionSetCode = "PLC"; - this.color.setRed(true); - // Boom // Destroy target land you control and target land you don't control. - getLeftHalfCard().getColor().setRed(true); Effect effect = new DestroyTargetEffect(); effect.setText("Destroy target land you control and target land you don't control"); getLeftHalfCard().getSpellAbility().addEffect(effect); @@ -73,7 +70,6 @@ public class BoomBust extends SplitCard { // Bust // Destroy all lands. - getRightHalfCard().getColor().setRed(true); getRightHalfCard().getSpellAbility().addEffect(new DestroyAllEffect(new FilterLandPermanent())); } diff --git a/Mage.Sets/src/mage/sets/planarchaos/DeadGone.java b/Mage.Sets/src/mage/sets/planarchaos/DeadGone.java index ceab6f00f7c..199da64c059 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/DeadGone.java +++ b/Mage.Sets/src/mage/sets/planarchaos/DeadGone.java @@ -1,6 +1,5 @@ package mage.sets.planarchaos; -import mage.abilities.Mode; import mage.abilities.effects.common.DamageTargetEffect; import mage.abilities.effects.common.ReturnToHandTargetEffect; import mage.cards.Card; @@ -27,17 +26,14 @@ public class DeadGone extends SplitCard { public DeadGone(UUID ownerId) { super(ownerId, 113, "Dead", "Gone", Rarity.COMMON, new CardType[]{CardType.INSTANT}, "{R}", "{2}{R}", false); this.expansionSetCode = "PLC"; - this.color.setRed(true); // Dead // Dead deals 2 damage to target creature. - getLeftHalfCard().getColor().setRed(true); getLeftHalfCard().getSpellAbility().addEffect(new DeadDamageEffect()); getLeftHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent()); // Gone // Return target creature you don't control to its owner's hand. - getRightHalfCard().getColor().setRed(true); getRightHalfCard().getSpellAbility().addEffect(new ReturnToHandTargetEffect()); getRightHalfCard().getSpellAbility().addTarget(new TargetCreaturePermanent(filter)); } diff --git a/Mage.Sets/src/mage/sets/planarchaos/LifeAndLimb.java b/Mage.Sets/src/mage/sets/planarchaos/LifeAndLimb.java index ef75978269e..09813d3f59c 100644 --- a/Mage.Sets/src/mage/sets/planarchaos/LifeAndLimb.java +++ b/Mage.Sets/src/mage/sets/planarchaos/LifeAndLimb.java @@ -116,7 +116,7 @@ class LifeAndLimbEffect extends ContinuousEffectImpl { } break; case ColorChangingEffects_5: - permanent.getColor().setColor(ObjectColor.GREEN); + permanent.getColor(game).setColor(ObjectColor.GREEN); break; case AbilityAddingRemovingEffects_6: boolean flag = false; diff --git a/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java b/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java index 813ac559688..c64976c569b 100644 --- a/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java +++ b/Mage.Sets/src/mage/sets/planeshift/MeteorCrater.java @@ -178,7 +178,7 @@ class MeteorCraterEffect extends ManaEffect { List controlledPermanents = game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game); Mana types = new Mana(); for (Permanent permanent : controlledPermanents) { - ObjectColor color = permanent.getColor(); + ObjectColor color = permanent.getColor(game); if (color.isBlack()) { types.add(Mana.BlackMana); } diff --git a/Mage.Sets/src/mage/sets/planeshift/ShiftingSky.java b/Mage.Sets/src/mage/sets/planeshift/ShiftingSky.java index c856eb587af..cf386bea42c 100644 --- a/Mage.Sets/src/mage/sets/planeshift/ShiftingSky.java +++ b/Mage.Sets/src/mage/sets/planeshift/ShiftingSky.java @@ -28,7 +28,6 @@ package mage.sets.planeshift; import java.util.UUID; -import mage.MageObject; import mage.ObjectColor; import mage.abilities.Ability; import mage.abilities.common.EntersBattlefieldTriggeredAbility; @@ -113,7 +112,7 @@ class ShiftingSkyEffect extends OneShotEffect { Player p = game.getPlayer(playerId); if (p != null) { for (Permanent chosen : game.getBattlefield().getAllActivePermanents(filter, playerId, game)) { - setObject(chosen, colorString); + setObject(chosen, colorString, game); } } } @@ -127,22 +126,22 @@ class ShiftingSkyEffect extends OneShotEffect { return new ShiftingSkyEffect(this); } - private void setObject(Permanent chosen, String colorString) { + private void setObject(Permanent chosen, String colorString, Game game) { switch (colorString) { case "W": - chosen.getColor().setWhite(true); + chosen.getColor(game).setWhite(true); break; case "B": - chosen.getColor().setBlack(true); + chosen.getColor(game).setBlack(true); break; case "U": - chosen.getColor().setBlue(true); + chosen.getColor(game).setBlue(true); break; case "G": - chosen.getColor().setGreen(true); + chosen.getColor(game).setGreen(true); break; case "R": - chosen.getColor().setRed(true); + chosen.getColor(game).setRed(true); break; } } diff --git a/Mage.Sets/src/mage/sets/ravnica/CrownOfConvergence.java b/Mage.Sets/src/mage/sets/ravnica/CrownOfConvergence.java index d65d95c083c..4493234abf8 100644 --- a/Mage.Sets/src/mage/sets/ravnica/CrownOfConvergence.java +++ b/Mage.Sets/src/mage/sets/ravnica/CrownOfConvergence.java @@ -104,7 +104,7 @@ class CrownOfConvergenceColorBoostEffect extends BoostAllEffect { Card topCard = you.getLibrary().getFromTop(game); if (topCard != null) { for (Permanent permanent: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { - if (permanent.getColor().shares(topCard.getColor()) && !permanent.getColor().isColorless()) { + if (permanent.getColor(game).shares(topCard.getColor(game)) && !permanent.getColor(game).isColorless()) { permanent.addPower(power.calculate(game, source, this)); permanent.addToughness(toughness.calculate(game, source, this)); } diff --git a/Mage.Sets/src/mage/sets/ravnica/DimirDoppelganger.java b/Mage.Sets/src/mage/sets/ravnica/DimirDoppelganger.java index 9cc2cf0d14b..d1354b7a3a5 100644 --- a/Mage.Sets/src/mage/sets/ravnica/DimirDoppelganger.java +++ b/Mage.Sets/src/mage/sets/ravnica/DimirDoppelganger.java @@ -107,7 +107,7 @@ class DimirDoppelgangerEffect extends ContinuousEffectImpl { permanent.setName(cardToCopy.getName()); permanent.getPower().setValue(cardToCopy.getPower().getValue()); permanent.getToughness().setValue(cardToCopy.getToughness().getValue()); - permanent.getColor().setColor(cardToCopy.getColor()); + permanent.getColor(game).setColor(cardToCopy.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(cardToCopy.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage.Sets/src/mage/sets/ravnica/LeaveNoTrace.java b/Mage.Sets/src/mage/sets/ravnica/LeaveNoTrace.java index cf9a98f6318..ac98d00f4a2 100644 --- a/Mage.Sets/src/mage/sets/ravnica/LeaveNoTrace.java +++ b/Mage.Sets/src/mage/sets/ravnica/LeaveNoTrace.java @@ -92,10 +92,10 @@ class LeaveNoTraceEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Permanent target = game.getPermanent(targetPointer.getFirst(game, source)); if (target != null) { - ObjectColor color = target.getColor(); + ObjectColor color = target.getColor(game); target.destroy(source.getSourceId(), game, false); for (Permanent p : game.getBattlefield().getActivePermanents(filter, source.getControllerId(), game)) { - if (p.getColor().shares(color)) { + if (p.getColor(game).shares(color)) { p.destroy(source.getSourceId(), game, false); } } diff --git a/Mage.Sets/src/mage/sets/ravnica/RallyTheRighteous.java b/Mage.Sets/src/mage/sets/ravnica/RallyTheRighteous.java index 077dfb18391..71ee000110e 100644 --- a/Mage.Sets/src/mage/sets/ravnica/RallyTheRighteous.java +++ b/Mage.Sets/src/mage/sets/ravnica/RallyTheRighteous.java @@ -93,10 +93,10 @@ class RallyTheRighteousUntapEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Permanent target = game.getPermanent(getTargetPointer().getFirst(game, source)); if (target != null) { - ObjectColor color = target.getColor(); + ObjectColor color = target.getColor(game); target.untap(game); for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { - if (permanent.getColor().shares(color) && !permanent.getId().equals(target.getId())) { + if (permanent.getColor(game).shares(color) && !permanent.getId().equals(target.getId())) { permanent.untap(game); } } @@ -124,10 +124,10 @@ class RallyTheRighteousBoostEffect extends ContinuousEffectImpl { Permanent target = game.getPermanent(getTargetPointer().getFirst(game, source)); if (target != null) { affectedObjectList.add(new MageObjectReference(target, game)); - ObjectColor color = target.getColor(); + ObjectColor color = target.getColor(game); target.addPower(2); for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { - if (!permanent.getId().equals(target.getId()) && permanent.getColor().shares(color)) { + if (!permanent.getId().equals(target.getId()) && permanent.getColor(game).shares(color)) { affectedObjectList.add(new MageObjectReference(permanent, game)); } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/CivicSaber.java b/Mage.Sets/src/mage/sets/returntoravnica/CivicSaber.java index d463ae79988..9274fc8cd53 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/CivicSaber.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/CivicSaber.java @@ -84,7 +84,7 @@ class CivicSaberColorCount implements DynamicValue { if (equipment != null) { Permanent permanent = game.getPermanent(equipment.getAttachedTo()); if (permanent != null) { - count = permanent.getColor().getColorCount(); + count = permanent.getColor(game).getColorCount(); } } return count; diff --git a/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java b/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java index 9ca8f30b745..c83780397b9 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/GraveBetrayal.java @@ -195,7 +195,7 @@ class GraveBetrayalContiniousEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - creature.getColor().setBlack(true); + creature.getColor(game).setBlack(true); } break; } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/LobberCrew.java b/Mage.Sets/src/mage/sets/returntoravnica/LobberCrew.java index 9d8a1a6b558..74623e0cfbe 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/LobberCrew.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/LobberCrew.java @@ -97,7 +97,7 @@ class LobberCrewTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isMulticolored() && event.getPlayerId().equals(getControllerId())) { + if (spell != null && spell.getColor(game).isMulticolored() && event.getPlayerId().equals(getControllerId())) { return true; } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/Pyroconvergence.java b/Mage.Sets/src/mage/sets/returntoravnica/Pyroconvergence.java index cb2b6d91a03..1bbf63022c7 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/Pyroconvergence.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/Pyroconvergence.java @@ -85,7 +85,7 @@ class PyroconvergenceTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isMulticolored() && event.getPlayerId().equals(getControllerId())) { + if (spell != null && spell.getColor(game).isMulticolored() && event.getPlayerId().equals(getControllerId())) { return true; } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java b/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java index 9d6141b3a98..b844e1a25c7 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/TabletOfTheGuilds.java @@ -138,10 +138,10 @@ class TabletOfTheGuildsGainLifeEffect extends OneShotEffect { ObjectColor color1 = new ObjectColor((String) game.getState().getValue(source.getSourceId() + "_color1")); ObjectColor color2 = new ObjectColor((String) game.getState().getValue(source.getSourceId() + "_color2")); int amount = 0; - if (spell.getColor().contains(color1)) { + if (spell.getColor(game).contains(color1)) { ++amount; } - if (spell.getColor().contains(color2)) { + if (spell.getColor(game).contains(color2)) { ++amount; } if (amount > 0) { diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/AllIsDust.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/AllIsDust.java index d1350b361ba..ab16b725378 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/AllIsDust.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/AllIsDust.java @@ -76,7 +76,7 @@ class AllIsDustEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { List permanents = game.getBattlefield().getActivePermanents(source.getControllerId(), game); for (Permanent p : permanents) { - if (!p.getColor().isColorless()) { + if (!p.getColor(game).isColorless()) { p.sacrifice(source.getSourceId(), game); } } diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/CurseOfWizardry.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/CurseOfWizardry.java index d03c36b7c12..e91deb95bb9 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/CurseOfWizardry.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/CurseOfWizardry.java @@ -131,7 +131,7 @@ class CurseOfWizardryPlayerCastsSpellChosenColorTriggeredAbility extends Trigger if (chosenColor != null) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().shares(chosenColor)) { + if (spell != null && spell.getColor(game).shares(chosenColor)) { this.getEffects().get(0).setTargetPointer(new FixedTarget(event.getPlayerId())); return true; } diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java index d677a7c819f..07282e367fa 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/EldraziTemple.java @@ -96,6 +96,6 @@ class EldraziTempleCondition implements Condition { @Override public boolean apply(Game game, Ability source) { MageObject object = game.getObject(source.getSourceId()); - return object != null && object.hasSubtype("Eldrazi") && object.getColor().isColorless(); + return object != null && object.hasSubtype("Eldrazi") && object.getColor(game).isColorless(); } } diff --git a/Mage.Sets/src/mage/sets/riseoftheeldrazi/ZulaportEnforcer.java b/Mage.Sets/src/mage/sets/riseoftheeldrazi/ZulaportEnforcer.java index effbf4a5858..a1b8a492f4b 100644 --- a/Mage.Sets/src/mage/sets/riseoftheeldrazi/ZulaportEnforcer.java +++ b/Mage.Sets/src/mage/sets/riseoftheeldrazi/ZulaportEnforcer.java @@ -133,7 +133,7 @@ class ZulaportEnforcerEffect extends RestrictionEffect { @Override public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { - if (blocker.getColor().isBlack()) { + if (blocker.getColor(game).isBlack()) { return true; } return false; diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java index c2e167aebfc..267b4e2852a 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/GrandArchitect.java @@ -125,11 +125,11 @@ class GrandArchitectEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getFirstTarget()); if (permanent != null) { - permanent.getColor().setRed(false); - permanent.getColor().setWhite(false); - permanent.getColor().setGreen(false); - permanent.getColor().setBlue(true); - permanent.getColor().setBlack(false); + permanent.getColor(game).setRed(false); + permanent.getColor(game).setWhite(false); + permanent.getColor(game).setGreen(false); + permanent.getColor(game).setBlue(true); + permanent.getColor(game).setBlack(false); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java index f17f803ebe9..13089d5f07d 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/LiegeOfTheTangle.java @@ -145,7 +145,7 @@ class LiegeOfTheTangleEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - perm.getColor().setColor(token.getColor()); + perm.getColor(game).setColor(token.getColor(game)); } break; case PTChangingEffects_7: diff --git a/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java b/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java index 07a5ef4dde3..a02bb9ccda7 100644 --- a/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java +++ b/Mage.Sets/src/mage/sets/scarsofmirrodin/QuicksilverGargantuan.java @@ -93,7 +93,7 @@ public class QuicksilverGargantuan extends CardImpl { Card card = game.getCard(source.getFirstTarget()); Permanent permanent = game.getPermanent(source.getSourceId()); permanent.setName(card.getName()); - permanent.getColor().setColor(card.getColor()); + permanent.getColor(game).setColor(card.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(card.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage.Sets/src/mage/sets/seventhedition/DarkestHour.java b/Mage.Sets/src/mage/sets/seventhedition/DarkestHour.java index 280425a5827..19022d75324 100644 --- a/Mage.Sets/src/mage/sets/seventhedition/DarkestHour.java +++ b/Mage.Sets/src/mage/sets/seventhedition/DarkestHour.java @@ -83,7 +83,7 @@ class DarkestHourEffect extends ContinuousEffectImpl { @Override public boolean apply(Game game, Ability source) { for (Permanent permanent : game.getBattlefield().getActivePermanents(new FilterCreaturePermanent(), source.getControllerId(), source.getSourceId(), game)) { - permanent.getColor().setColor(ObjectColor.BLACK); + permanent.getColor(game).setColor(ObjectColor.BLACK); } return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/ConsignToDream.java b/Mage.Sets/src/mage/sets/shadowmoor/ConsignToDream.java index 99f3493addf..5375589abe6 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/ConsignToDream.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/ConsignToDream.java @@ -90,8 +90,8 @@ class ConsignToDreamEffect extends OneShotEffect { public boolean apply(Game game, Ability source) { Permanent target = game.getPermanent(source.getFirstTarget()); if (target != null) { - if (target.getColor().contains(ObjectColor.RED) - || target.getColor().contains(ObjectColor.GREEN)) { + if (target.getColor(game).contains(ObjectColor.RED) + || target.getColor(game).contains(ObjectColor.GREEN)) { applied = target.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); } else { applied = target.moveToZone(Zone.HAND, source.getSourceId(), game, false); diff --git a/Mage.Sets/src/mage/sets/shadowmoor/Gloomlance.java b/Mage.Sets/src/mage/sets/shadowmoor/Gloomlance.java index 38c20be6e2c..84c70998249 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/Gloomlance.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/Gloomlance.java @@ -90,8 +90,8 @@ class GloomlanceEffect extends OneShotEffect { Player targetController = game.getPlayer(targetCreature.getControllerId()); targetCreature.destroy(source.getSourceId(), game, false); Permanent destroyedCreature = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); - if (destroyedCreature.getColor().isGreen() - || destroyedCreature.getColor().isWhite()) { + if (destroyedCreature.getColor(game).isGreen() + || destroyedCreature.getColor(game).isWhite()) { targetController.discard(1, false, source, game); return true; } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java b/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java index 64695d2f25b..f2b8a590bef 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/GloomwidowsFeast.java @@ -101,8 +101,8 @@ class GloomwidowsFeastEffect extends OneShotEffect { if (targetCreature != null) { targetCreature.destroy(source.getSourceId(), game, false); Permanent destroyedCreature = game.getPermanentOrLKIBattlefield(source.getFirstTarget()); - if (destroyedCreature.getColor().isBlue() - || destroyedCreature.getColor().isBlack()) { + if (destroyedCreature.getColor(game).isBlue() + || destroyedCreature.getColor(game).isBlack()) { SpiderToken token = new SpiderToken(); token.putOntoBattlefield(1, game, source.getSourceId(), source.getControllerId()); return true; diff --git a/Mage.Sets/src/mage/sets/shadowmoor/IlluminatedFolio.java b/Mage.Sets/src/mage/sets/shadowmoor/IlluminatedFolio.java index 82b79bb4866..68e79db064f 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/IlluminatedFolio.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/IlluminatedFolio.java @@ -122,7 +122,7 @@ class TargetTwoCardsWithTheSameColorInHand extends TargetCardInHand { Card chosenCard = cardsToCheck.get(entry.getKey(), game); if (chosenCard != null) { for (UUID cardToCheck : cardsToCheck) { - if (!cardToCheck.equals(chosenCard.getId()) && chosenCard.getColor().equals(game.getCard(cardToCheck).getColor())) { + if (!cardToCheck.equals(chosenCard.getId()) && chosenCard.getColor(game).equals(game.getCard(cardToCheck).getColor(game))) { newPossibleTargets.add(cardToCheck); } } @@ -131,7 +131,7 @@ class TargetTwoCardsWithTheSameColorInHand extends TargetCardInHand { } else { for (UUID cardToCheck : cardsToCheck) { FilterCard colorFilter = new FilterCard(); - colorFilter.add(new ColorPredicate(game.getCard(cardToCheck).getColor())); + colorFilter.add(new ColorPredicate(game.getCard(cardToCheck).getColor(game))); if (cardsToCheck.count(colorFilter, game) > 1) { newPossibleTargets.add(cardToCheck); } @@ -150,7 +150,7 @@ class TargetTwoCardsWithTheSameColorInHand extends TargetCardInHand { int possibleCards = 0; for (UUID cardToCheck : cardsToCheck) { FilterCard colorFilter = new FilterCard(); - colorFilter.add(new ColorPredicate(game.getCard(cardToCheck).getColor())); + colorFilter.add(new ColorPredicate(game.getCard(cardToCheck).getColor(game))); if (cardsToCheck.count(colorFilter, game) > 1) { ++possibleCards; } @@ -165,12 +165,12 @@ class TargetTwoCardsWithTheSameColorInHand extends TargetCardInHand { if (card != null) { if (targets.size() == 1) { Card card2 = game.getCard(targets.entrySet().iterator().next().getKey()); - if (card2 != null && card2.getColor().equals(card.getColor())) { + if (card2 != null && card2.getColor(game).equals(card.getColor(game))) { return true; } } else { FilterCard colorFilter = new FilterCard(); - colorFilter.add(new ColorPredicate(card.getColor())); + colorFilter.add(new ColorPredicate(card.getColor(game))); Player player = game.getPlayer(card.getOwnerId()); if (player.getHand().getCards(colorFilter, game).size() > 1) { return true; diff --git a/Mage.Sets/src/mage/sets/shadowmoor/InquisitorsSnare.java b/Mage.Sets/src/mage/sets/shadowmoor/InquisitorsSnare.java index e32dac76740..6e2d4644565 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/InquisitorsSnare.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/InquisitorsSnare.java @@ -96,8 +96,8 @@ class InquisitorsSnareEffect extends OneShotEffect { FilterCreaturePermanent filter = new FilterCreaturePermanent(); filter.add(new PermanentIdPredicate(targetCreature.getId())); game.addEffect(new PreventAllDamageByAllEffect(filter, Duration.EndOfTurn, false), source); - if (targetCreature.getColor().contains(ObjectColor.BLACK) - || targetCreature.getColor().contains(ObjectColor.RED)) { + if (targetCreature.getColor(game).contains(ObjectColor.BLACK) + || targetCreature.getColor(game).contains(ObjectColor.RED)) { return targetCreature.destroy(source.getSourceId(), game, false); } } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/LureboundScarecrow.java b/Mage.Sets/src/mage/sets/shadowmoor/LureboundScarecrow.java index 68066d70307..0ee0aabd1b4 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/LureboundScarecrow.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/LureboundScarecrow.java @@ -135,7 +135,7 @@ class LureboundScarecrowTriggeredAbility extends StateTriggeredAbility { ObjectColor color = (ObjectColor) game.getState().getValue(card.getId() + "_color"); if (color != null) { for (Permanent perm: game.getBattlefield().getAllActivePermanents(controllerId)) { - if (perm.getColor().contains(color)) + if (perm.getColor(game).contains(color)) return false; } return true; diff --git a/Mage.Sets/src/mage/sets/shadowmoor/OonaQueenOfTheFae.java b/Mage.Sets/src/mage/sets/shadowmoor/OonaQueenOfTheFae.java index 6e783d289df..8a6a73d484f 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/OonaQueenOfTheFae.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/OonaQueenOfTheFae.java @@ -112,7 +112,7 @@ class OonaQueenOfTheFaeEffect extends OneShotEffect { for(int i = 0; i < cardsToExile; i++) { Card card = opponent.getLibrary().removeFromTop(game); if (card != null) { - if (card.getColor().contains(choice.getColor())) { + if (card.getColor(game).contains(choice.getColor())) { cardsWithColor++; } card.moveToExile(null, null, source.getSourceId(), game); diff --git a/Mage.Sets/src/mage/sets/shadowmoor/PaintersServant.java b/Mage.Sets/src/mage/sets/shadowmoor/PaintersServant.java index 18dbad17b8b..10364727e8c 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/PaintersServant.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/PaintersServant.java @@ -135,22 +135,22 @@ class PaintersServantEffect extends ContinuousEffectImpl { } String colorString = color.toString(); for (Permanent perm : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) { - setObjectColor(perm, colorString); + setObjectColor(perm, colorString, game); } // Stack for (MageObject object : game.getStack()) { if (object instanceof Spell) { - setObjectColor(object, colorString); + setObjectColor(object, colorString, game); } } // Exile for (Card card : game.getExile().getAllCards(game)) { - setObjectColor(card, colorString); + setCardColor(card, colorString, game); } // Command for (CommandObject commandObject : game.getState().getCommand()) { if (commandObject instanceof Commander) { - setObjectColor(commandObject, colorString); + setObjectColor(commandObject, colorString, game); } } @@ -159,15 +159,15 @@ class PaintersServantEffect extends ContinuousEffectImpl { if (player != null) { // Hand for (Card card : player.getHand().getCards(game)) { - setObjectColor(card, colorString); + setCardColor(card, colorString, game); } // Library for (Card card : player.getLibrary().getCards(game)) { - setObjectColor(card, colorString); + setCardColor(card, colorString, game); } // Graveyard for (Card card : player.getGraveyard().getCards(game)) { - setObjectColor(card, colorString); + setCardColor(card, colorString, game); } } } @@ -175,23 +175,44 @@ class PaintersServantEffect extends ContinuousEffectImpl { } return false; } - - protected static void setObjectColor(MageObject obj, String colorString) { - switch (colorString) { + + protected static void setCardColor(Card card, String colorString, Game game) { + ObjectColor color = game.getState().getCreateCardAttribute(card).getColor(); + switch (colorString) { case "W": - obj.getColor().setWhite(true); + color.setWhite(true); break; case "B": - obj.getColor().setBlack(true); + color.setBlack(true); break; case "U": - obj.getColor().setBlue(true); + color.setBlue(true); break; case "G": - obj.getColor().setGreen(true); + color.setGreen(true); break; case "R": - obj.getColor().setRed(true); + color.setRed(true); + break; + } + } + + protected static void setObjectColor(MageObject obj, String colorString, Game game) { + switch (colorString) { + case "W": + obj.getColor(game).setWhite(true); + break; + case "B": + obj.getColor(game).setBlack(true); + break; + case "U": + obj.getColor(game).setBlue(true); + break; + case "G": + obj.getColor(game).setGreen(true); + break; + case "R": + obj.getColor(game).setRed(true); break; } } diff --git a/Mage.Sets/src/mage/sets/shadowmoor/Scrapbasket.java b/Mage.Sets/src/mage/sets/shadowmoor/Scrapbasket.java index 6c14dc47e3b..c590ed08a1c 100644 --- a/Mage.Sets/src/mage/sets/shadowmoor/Scrapbasket.java +++ b/Mage.Sets/src/mage/sets/shadowmoor/Scrapbasket.java @@ -92,11 +92,11 @@ class BecomesAllColorsEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); if (permanent != null) { - permanent.getColor().setBlack(true); - permanent.getColor().setBlue(true); - permanent.getColor().setRed(true); - permanent.getColor().setGreen(true); - permanent.getColor().setWhite(true); + permanent.getColor(game).setBlack(true); + permanent.getColor(game).setBlue(true); + permanent.getColor(game).setRed(true); + permanent.getColor(game).setGreen(true); + permanent.getColor(game).setWhite(true); return true; } return false; diff --git a/Mage.Sets/src/mage/sets/tempest/Grindstone.java b/Mage.Sets/src/mage/sets/tempest/Grindstone.java index aac4ee1fec2..f2b73cbca18 100644 --- a/Mage.Sets/src/mage/sets/tempest/Grindstone.java +++ b/Mage.Sets/src/mage/sets/tempest/Grindstone.java @@ -114,8 +114,8 @@ class GrindstoneEffect extends OneShotEffect { Card card1 = targetPlayer.getLibrary().removeFromTop(game); if (targetPlayer.getLibrary().size() > 0) { Card card2 = targetPlayer.getLibrary().removeFromTop(game); - if (card1.getColor().hasColor() && card2.getColor().hasColor()) { - colorShared = card1.getColor().shares(card2.getColor()); + if (card1.getColor(game).hasColor() && card2.getColor(game).hasColor()) { + colorShared = card1.getColor(game).shares(card2.getColor(game)); } } } diff --git a/Mage.Sets/src/mage/sets/tempest/LightOfDay.java b/Mage.Sets/src/mage/sets/tempest/LightOfDay.java index 8924dcf50bb..17348a8cb6d 100644 --- a/Mage.Sets/src/mage/sets/tempest/LightOfDay.java +++ b/Mage.Sets/src/mage/sets/tempest/LightOfDay.java @@ -95,7 +95,7 @@ class LightOfDayEffect extends ReplacementEffectImpl { if (permanent != null) { Player player = game.getPlayer(source.getControllerId()); if (player.getInRange().contains(permanent.getControllerId())) { - if (permanent.getColor().isBlack()) { + if (permanent.getColor(game).isBlack()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/tenthedition/AngelsFeather.java b/Mage.Sets/src/mage/sets/tenthedition/AngelsFeather.java index 88610167c3d..2d01c26e37f 100644 --- a/Mage.Sets/src/mage/sets/tenthedition/AngelsFeather.java +++ b/Mage.Sets/src/mage/sets/tenthedition/AngelsFeather.java @@ -82,7 +82,7 @@ class AngelsFeatherAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isWhite()) { + if (spell != null && spell.getColor(game).isWhite()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/tenthedition/DragonsClaw.java b/Mage.Sets/src/mage/sets/tenthedition/DragonsClaw.java index ec8e5916f51..3fb21d7d48c 100644 --- a/Mage.Sets/src/mage/sets/tenthedition/DragonsClaw.java +++ b/Mage.Sets/src/mage/sets/tenthedition/DragonsClaw.java @@ -82,7 +82,7 @@ class DragonsClawAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isRed()) { + if (spell != null && spell.getColor(game).isRed()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/tenthedition/KrakensEye.java b/Mage.Sets/src/mage/sets/tenthedition/KrakensEye.java index 9a81eacf97d..81e51ec0539 100644 --- a/Mage.Sets/src/mage/sets/tenthedition/KrakensEye.java +++ b/Mage.Sets/src/mage/sets/tenthedition/KrakensEye.java @@ -82,7 +82,7 @@ class KrakensEyeAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isBlue()) { + if (spell != null && spell.getColor(game).isBlue()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/tenthedition/WurmsTooth.java b/Mage.Sets/src/mage/sets/tenthedition/WurmsTooth.java index d211eb06b33..31b2ff02519 100644 --- a/Mage.Sets/src/mage/sets/tenthedition/WurmsTooth.java +++ b/Mage.Sets/src/mage/sets/tenthedition/WurmsTooth.java @@ -82,7 +82,7 @@ class WurmsToothAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isGreen()) { + if (spell != null && spell.getColor(game).isGreen()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/timeshifted/SolkanarTheSwampKing.java b/Mage.Sets/src/mage/sets/timeshifted/SolkanarTheSwampKing.java index d0d9f4bbeb3..282bb67dd00 100644 --- a/Mage.Sets/src/mage/sets/timeshifted/SolkanarTheSwampKing.java +++ b/Mage.Sets/src/mage/sets/timeshifted/SolkanarTheSwampKing.java @@ -91,7 +91,7 @@ class SolkanarTheSwampKingAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isBlack()) { + if (spell != null && spell.getColor(game).isBlack()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/timespiral/AncestralVision.java b/Mage.Sets/src/mage/sets/timespiral/AncestralVision.java index f3ef3a34260..08a51389a09 100644 --- a/Mage.Sets/src/mage/sets/timespiral/AncestralVision.java +++ b/Mage.Sets/src/mage/sets/timespiral/AncestralVision.java @@ -46,7 +46,7 @@ public class AncestralVision extends CardImpl { super(ownerId, 48, "Ancestral Vision", Rarity.RARE, new CardType[]{CardType.SORCERY}, ""); this.expansionSetCode = "TSP"; - this.getColor().setBlue(true); + this.color.setBlue(true); // Suspend 4-{U} this.addAbility(new SuspendAbility(4, new ManaCostsImpl("U"), this)); diff --git a/Mage.Sets/src/mage/sets/timespiral/GauntletOfPower.java b/Mage.Sets/src/mage/sets/timespiral/GauntletOfPower.java index fec94eac07e..9cbcd3812c5 100644 --- a/Mage.Sets/src/mage/sets/timespiral/GauntletOfPower.java +++ b/Mage.Sets/src/mage/sets/timespiral/GauntletOfPower.java @@ -116,7 +116,7 @@ class GauntletOfPowerEffect1 extends ContinuousEffectImpl { ObjectColor color = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); if (color != null) { for (Permanent perm: game.getBattlefield().getActivePermanents(filter, source.getControllerId(), source.getSourceId(), game)) { - if (perm.getColor().contains(color)) { + if (perm.getColor(game).contains(color)) { perm.addPower(1); perm.addToughness(1); } diff --git a/Mage.Sets/src/mage/sets/timespiral/GhostflameSliver.java b/Mage.Sets/src/mage/sets/timespiral/GhostflameSliver.java index 7b1e4be27d7..ffbf3229a90 100644 --- a/Mage.Sets/src/mage/sets/timespiral/GhostflameSliver.java +++ b/Mage.Sets/src/mage/sets/timespiral/GhostflameSliver.java @@ -87,7 +87,7 @@ class GhostflameSliverEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { for (Permanent perm : game.getBattlefield().getActivePermanents(source.getControllerId(), game)) { if (filter.match(perm, game)) { - perm.getColor().setColor(colorless); + perm.getColor(game).setColor(colorless); } } return true; diff --git a/Mage.Sets/src/mage/sets/urzaslegacy/ThranLens.java b/Mage.Sets/src/mage/sets/urzaslegacy/ThranLens.java index 254189c4f63..7dfb1ef2d11 100644 --- a/Mage.Sets/src/mage/sets/urzaslegacy/ThranLens.java +++ b/Mage.Sets/src/mage/sets/urzaslegacy/ThranLens.java @@ -74,7 +74,7 @@ public class ThranLens extends CardImpl { @Override public boolean apply(Game game, Ability source) { for (Permanent perm: game.getBattlefield().getActivePermanents(source.getControllerId(), game)) { - perm.getColor().setColor(colorless); + perm.getColor(game).setColor(colorless); } return true; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/Bereavement.java b/Mage.Sets/src/mage/sets/urzassaga/Bereavement.java index 780d76549e3..84c1d1371e4 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/Bereavement.java +++ b/Mage.Sets/src/mage/sets/urzassaga/Bereavement.java @@ -84,7 +84,7 @@ class BereavementTriggeredAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.ZONE_CHANGE && ((ZoneChangeEvent)event).isDiesEvent()) { Permanent permanent = (Permanent) game.getLastKnownInformation(event.getTargetId(), Zone.BATTLEFIELD); - if (permanent != null && permanent.getCardType().contains(CardType.CREATURE) && permanent.getColor().isGreen()) { + if (permanent != null && permanent.getCardType().contains(CardType.CREATURE) && permanent.getColor(game).isGreen()) { this.getEffects().get(0).setTargetPointer(new FixedTarget(permanent.getControllerId())); return true; } diff --git a/Mage.Sets/src/mage/sets/urzassaga/Persecute.java b/Mage.Sets/src/mage/sets/urzassaga/Persecute.java index dccaf70e7d6..5c83ad2eeaf 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/Persecute.java +++ b/Mage.Sets/src/mage/sets/urzassaga/Persecute.java @@ -103,7 +103,7 @@ class PersecuteEffect extends OneShotEffect { controller.revealCards("Persecute", hand, game); Set cards = hand.getCards(game); for (Card card : cards) { - if (card != null && card.getColor().shares(choice.getColor())) { + if (card != null && card.getColor(game).shares(choice.getColor())) { controller.discard(card, source, game); } } diff --git a/Mage.Sets/src/mage/sets/urzassaga/TitaniasChosen.java b/Mage.Sets/src/mage/sets/urzassaga/TitaniasChosen.java index ccb6947cae5..98192bb6e63 100644 --- a/Mage.Sets/src/mage/sets/urzassaga/TitaniasChosen.java +++ b/Mage.Sets/src/mage/sets/urzassaga/TitaniasChosen.java @@ -91,7 +91,7 @@ class TitaniasChosenAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isGreen()) { + if (spell != null && spell.getColor(game).isGreen()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/vintagemasters/VolrathsShapeshifter.java b/Mage.Sets/src/mage/sets/vintagemasters/VolrathsShapeshifter.java index cd9b949838f..98aeac7b4a3 100644 --- a/Mage.Sets/src/mage/sets/vintagemasters/VolrathsShapeshifter.java +++ b/Mage.Sets/src/mage/sets/vintagemasters/VolrathsShapeshifter.java @@ -105,7 +105,7 @@ class VolrathsShapeshifterEffect extends ContinuousEffectImpl { permanent.getPower().setValue(card.getPower().getValue()); permanent.getToughness().setValue(card.getToughness().getValue()); - permanent.getColor().setColor(card.getColor()); + permanent.getColor(game).setColor(card.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(card.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage.Sets/src/mage/sets/visions/ElephantGrass.java b/Mage.Sets/src/mage/sets/visions/ElephantGrass.java index 11f14fe5eb5..bbbe371753c 100644 --- a/Mage.Sets/src/mage/sets/visions/ElephantGrass.java +++ b/Mage.Sets/src/mage/sets/visions/ElephantGrass.java @@ -90,7 +90,7 @@ class ElephantGrassReplacementEffect extends ReplacementEffectImpl { public boolean applies(GameEvent event, Ability source, Game game) { if (event.getTargetId().equals(source.getControllerId()) ) { Permanent creature = game.getPermanent(event.getSourceId()); - if(creature != null && creature.getColor().isBlack()){ + if(creature != null && creature.getColor(game).isBlack()){ return true; } } @@ -145,7 +145,7 @@ class ElephantGrassReplacementEffect2 extends ReplacementEffectImpl { public boolean applies(GameEvent event, Ability source, Game game) { if (event.getTargetId().equals(source.getControllerId()) ) { Permanent creature = game.getPermanent(event.getSourceId()); - if (creature != null && !creature.getColor().isBlack()) { + if (creature != null && !creature.getColor(game).isBlack()) { Player attackedPlayer = game.getPlayer(event.getTargetId()); if (attackedPlayer != null) { // only if a player is attacked. Attacking a planeswalker is free diff --git a/Mage.Sets/src/mage/sets/worldwake/KorFirewalker.java b/Mage.Sets/src/mage/sets/worldwake/KorFirewalker.java index 3e9552fac4a..9e46e536a43 100644 --- a/Mage.Sets/src/mage/sets/worldwake/KorFirewalker.java +++ b/Mage.Sets/src/mage/sets/worldwake/KorFirewalker.java @@ -100,7 +100,7 @@ class KorFirewalkerAbility extends TriggeredAbilityImpl { public boolean checkTrigger(GameEvent event, Game game) { if (event.getType() == GameEvent.EventType.SPELL_CAST) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell != null && spell.getColor().isRed()) { + if (spell != null && spell.getColor(game).isRed()) { return true; } } diff --git a/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java b/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java index 27d3d4f059e..0dd3fc178fd 100644 --- a/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/PermafrostTrap.java @@ -102,7 +102,7 @@ class PermafrostTrapWatcher extends Watcher { } if (event.getType() == GameEvent.EventType.ENTERS_THE_BATTLEFIELD) { Permanent perm = game.getPermanent(event.getTargetId()); - if (perm.getCardType().contains(CardType.CREATURE) && perm.getColor().contains(ObjectColor.GREEN) && !perm.getControllerId().equals(controllerId)) { + if (perm.getCardType().contains(CardType.CREATURE) && perm.getColor(game).contains(ObjectColor.GREEN) && !perm.getControllerId().equals(controllerId)) { condition = true; } } diff --git a/Mage.Sets/src/mage/sets/worldwake/RefractionTrap.java b/Mage.Sets/src/mage/sets/worldwake/RefractionTrap.java index 8064807857f..27641883e14 100644 --- a/Mage.Sets/src/mage/sets/worldwake/RefractionTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/RefractionTrap.java @@ -106,7 +106,7 @@ class RefractionTrapWatcher extends Watcher { if (event.getType() == GameEvent.EventType.SPELL_CAST && game.getOpponents(controllerId).contains(event.getPlayerId())) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell.getColor().isRed()) { + if (spell.getColor(game).isRed()) { if (spell.getCardType().contains(CardType.INSTANT) || spell.getCardType().contains(CardType.SORCERY)) { condition = true; diff --git a/Mage.Sets/src/mage/sets/worldwake/RicochetTrap.java b/Mage.Sets/src/mage/sets/worldwake/RicochetTrap.java index 573cb143468..f831a87dc80 100644 --- a/Mage.Sets/src/mage/sets/worldwake/RicochetTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/RicochetTrap.java @@ -110,7 +110,7 @@ class RicochetTrapWatcher extends Watcher { if (event.getType() == EventType.SPELL_CAST && game.getOpponents(controllerId).contains(event.getPlayerId())) { Spell spell = game.getStack().getSpell(event.getTargetId()); - if (spell.getColor().isBlue()) { + if (spell.getColor(game).isBlue()) { condition = true; } } diff --git a/Mage.Sets/src/mage/sets/worldwake/SlingbowTrap.java b/Mage.Sets/src/mage/sets/worldwake/SlingbowTrap.java index c91558c586a..6d3fa2bceeb 100644 --- a/Mage.Sets/src/mage/sets/worldwake/SlingbowTrap.java +++ b/Mage.Sets/src/mage/sets/worldwake/SlingbowTrap.java @@ -101,7 +101,7 @@ class SlingbowTrapAlternativeCost extends AlternativeCostImpl { List attackers = game.getCombat().getAttackers(); for (UUID creatureId : attackers) { Permanent creature = game.getPermanent(creatureId); - if (creature.getColor().isBlack() + if (creature.getColor(game).isBlack() && creature.getAbilities().contains(FlyingAbility.getInstance())) { return true; } diff --git a/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java b/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java index fb8c03d134b..e7451fd3a29 100644 --- a/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java +++ b/Mage.Sets/src/mage/sets/zendikar/ChandraAblaze.java @@ -145,7 +145,7 @@ class ChandraAblazeEffect2 extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { Card card = (Card) this.getValue("discardedCard"); - if (card != null && card.getColor().isRed()) { + if (card != null && card.getColor(game).isRed()) { Permanent permanent = game.getPermanent(targetPointer.getFirst(game, source)); if (permanent != null) { permanent.damage(4, source.getSourceId(), game, false, true); diff --git a/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java b/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java index 8bfef2890eb..6bf1a7ce352 100644 --- a/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java +++ b/Mage.Sets/src/mage/sets/zendikar/IonaShieldOfEmeria.java @@ -151,7 +151,7 @@ class IonaShieldOfEmeriaReplacementEffect extends ContinuousRuleModifyingEffectI if (game.getOpponents(source.getControllerId()).contains(event.getPlayerId()) ) { ObjectColor chosenColor = (ObjectColor) game.getState().getValue(source.getSourceId() + "_color"); Card card = game.getCard(event.getSourceId()); - if (chosenColor != null && card != null && card.getColor().contains(chosenColor)) { + if (chosenColor != null && card != null && card.getColor(game).contains(chosenColor)) { return true; } } diff --git a/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastCreaturesTest.java b/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastCreaturesTest.java index f7b3649f421..f65e7655177 100644 --- a/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastCreaturesTest.java +++ b/Mage.Tests/src/test/java/org/mage/test/AI/basic/CastCreaturesTest.java @@ -29,6 +29,7 @@ package org.mage.test.AI.basic; import mage.constants.PhaseStep; import mage.constants.Zone; +import org.junit.Ignore; import org.junit.Test; import org.mage.test.serverside.base.CardTestPlayerBaseAI; @@ -51,4 +52,33 @@ public class CastCreaturesTest extends CardTestPlayerBaseAI { assertPermanentCount(playerA, "Silvercoat Lion", 1); } + + @Test + public void testSimpleCast2() { + addCard(Zone.HAND, playerA, "Silvercoat Lion"); + addCard(Zone.HAND, playerA, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerA, "Plains", 2); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 2); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Silvercoat Lion", 2); + } + + @Test + @Ignore // AI should cast Myr Enforcer -> Check why it does not + public void testSimpleCast3() { + // Affinity for artifacts (This spell costs less to cast for each artifact you control.) + addCard(Zone.HAND, playerA, "Myr Enforcer"); + // {T}: Add to your mana pool. + // {T}, {1}, Sacrifice Mind Stone: Draw a card. + addCard(Zone.BATTLEFIELD, playerA, "Mind Stone", 3); + addCard(Zone.BATTLEFIELD, playerA, "Mountain", 1); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Myr Enforcer", 1); + } } diff --git a/Mage.Tests/src/test/java/org/mage/test/cards/continuous/PaintersServantTest.java b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/PaintersServantTest.java new file mode 100644 index 00000000000..9ad87ebb8c5 --- /dev/null +++ b/Mage.Tests/src/test/java/org/mage/test/cards/continuous/PaintersServantTest.java @@ -0,0 +1,157 @@ +/* + * 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 org.mage.test.cards.continuous; + +import mage.cards.Card; +import mage.constants.PhaseStep; +import mage.constants.Zone; +import mage.game.permanent.Permanent; +import org.junit.Assert; +import org.junit.Test; +import org.mage.test.serverside.base.CardTestPlayerBase; + +/** + * + * @author LevelX2 + */ +public class PaintersServantTest extends CardTestPlayerBase { + + /** + * Test that the added color is applied as Painter's Servant is on the battlefield + */ + @Test + public void testColorSet() { + // As Painter's Servant enters the battlefield, choose a color. + // All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. + addCard(Zone.HAND, playerA, "Painter's Servant", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + + addCard(Zone.HAND, playerA, "Lightning Bolt"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); + + addCard(Zone.HAND, playerB, "Lightning Bolt"); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant"); + setChoice(playerA, "Blue"); + + setStopAt(1, PhaseStep.BEGIN_COMBAT); + execute(); + + assertPermanentCount(playerA, "Painter's Servant", 1); + + Permanent silvercoatLion = getPermanent("Silvercoat Lion", playerA); + Assert.assertEquals(true, silvercoatLion.getColor(currentGame).isWhite()); + Assert.assertEquals(true, silvercoatLion.getColor(currentGame).isBlue()); + + silvercoatLion = getPermanent("Silvercoat Lion", playerB); + Assert.assertEquals(true, silvercoatLion.getColor(currentGame).isWhite()); + Assert.assertEquals(true, silvercoatLion.getColor(currentGame).isBlue()); + + for(Card card: playerA.getHand().getCards(currentGame)) { + Assert.assertEquals(true, card.getColor(currentGame).isRed()); + Assert.assertEquals(true, card.getColor(currentGame).isBlue()); + } + for(Card card: playerB.getHand().getCards(currentGame)) { + Assert.assertEquals(true, card.getColor(currentGame).isRed()); + Assert.assertEquals(true, card.getColor(currentGame).isBlue()); + } + for(Card card: playerA.getGraveyard().getCards(currentGame)) { + Assert.assertEquals(true, card.getColor(currentGame).isWhite()); + Assert.assertEquals(true, card.getColor(currentGame).isBlue()); + } + for(Card card: playerB.getGraveyard().getCards(currentGame)) { + Assert.assertEquals(true, card.getColor(currentGame).isWhite()); + Assert.assertEquals(true, card.getColor(currentGame).isBlue()); + } + + } + + /** + * Test that the added color is no longer applied as Painter's Servant has left the battlefield + */ + @Test + public void testColorReset() { + // As Painter's Servant enters the battlefield, choose a color. + // All cards that aren't on the battlefield, spells, and permanents are the chosen color in addition to their other colors. + addCard(Zone.HAND, playerA, "Painter's Servant", 1); + addCard(Zone.BATTLEFIELD, playerA, "Swamp", 2); + + addCard(Zone.HAND, playerA, "Lightning Bolt"); + addCard(Zone.BATTLEFIELD, playerA, "Silvercoat Lion"); + addCard(Zone.GRAVEYARD, playerA, "Silvercoat Lion"); + + addCard(Zone.HAND, playerB, "Lightning Bolt",2); + addCard(Zone.BATTLEFIELD, playerB, "Silvercoat Lion"); + addCard(Zone.GRAVEYARD, playerB, "Silvercoat Lion"); + addCard(Zone.BATTLEFIELD, playerB, "Mountain", 1); + + castSpell(1, PhaseStep.PRECOMBAT_MAIN, playerA, "Painter's Servant"); + setChoice(playerA, "Blue"); + + castSpell(1, PhaseStep.POSTCOMBAT_MAIN, playerB, "Lightning Bolt", "Painter's Servant"); + + setStopAt(1, PhaseStep.END_TURN); + execute(); + + assertGraveyardCount(playerA, "Painter's Servant", 1); + + Permanent silvercoatLion = getPermanent("Silvercoat Lion", playerA); + Assert.assertEquals(true, silvercoatLion.getColor(currentGame).isWhite()); + Assert.assertEquals(false, silvercoatLion.getColor(currentGame).isBlue()); + + silvercoatLion = getPermanent("Silvercoat Lion", playerB); + Assert.assertEquals(true, silvercoatLion.getColor(currentGame).isWhite()); + Assert.assertEquals(false, silvercoatLion.getColor(currentGame).isBlue()); + + for(Card card: playerA.getHand().getCards(currentGame)) { + Assert.assertEquals(true, card.getColor(currentGame).isRed()); + Assert.assertEquals(false, card.getColor(currentGame).isBlue()); + } + for(Card card: playerB.getHand().getCards(currentGame)) { + Assert.assertEquals(true, card.getColor(currentGame).isRed()); + Assert.assertEquals(false, card.getColor(currentGame).isBlue()); + } + for(Card card: playerA.getGraveyard().getCards(currentGame)) { + if(card.getName().equals("Silvercoat Lion")) { + Assert.assertEquals(true, card.getColor(currentGame).isWhite()); + Assert.assertEquals(false, card.getColor(currentGame).isBlue()); + } + } + for(Card card: playerB.getGraveyard().getCards(currentGame)) { + if(card.getName().equals("Silvercoat Lion")) { + Assert.assertEquals(true, card.getColor(currentGame).isWhite()); + Assert.assertEquals(false, card.getColor(currentGame).isBlue()); + } + } + + } + +} diff --git a/Mage/src/mage/MageObject.java b/Mage/src/mage/MageObject.java index 0694e0dfd7f..c2bd51447c8 100644 --- a/Mage/src/mage/MageObject.java +++ b/Mage/src/mage/MageObject.java @@ -26,7 +26,7 @@ public interface MageObject extends MageItem, Serializable { Abilities getAbilities(); boolean hasAbility(UUID abilityId, Game game); - ObjectColor getColor(); + ObjectColor getColor(Game game); ManaCosts getManaCost(); MageInt getPower(); diff --git a/Mage/src/mage/MageObjectImpl.java b/Mage/src/mage/MageObjectImpl.java index 075dfe1dc62..1d0c6400bcb 100644 --- a/Mage/src/mage/MageObjectImpl.java +++ b/Mage/src/mage/MageObjectImpl.java @@ -157,7 +157,7 @@ public abstract class MageObjectImpl implements MageObject { } @Override - public ObjectColor getColor() { + public ObjectColor getColor(Game game) { return color; } diff --git a/Mage/src/mage/abilities/effects/common/CopyEffect.java b/Mage/src/mage/abilities/effects/common/CopyEffect.java index c9eeb76f353..bbb1d6ba0ba 100644 --- a/Mage/src/mage/abilities/effects/common/CopyEffect.java +++ b/Mage/src/mage/abilities/effects/common/CopyEffect.java @@ -97,7 +97,7 @@ public class CopyEffect extends ContinuousEffectImpl { return false; } permanent.setName(target.getName()); - permanent.getColor().setColor(target.getColor()); + permanent.getColor(game).setColor(target.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(target.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage/src/mage/abilities/effects/common/CopyTokenEffect.java b/Mage/src/mage/abilities/effects/common/CopyTokenEffect.java index 24b30457dda..c614624f4b9 100644 --- a/Mage/src/mage/abilities/effects/common/CopyTokenEffect.java +++ b/Mage/src/mage/abilities/effects/common/CopyTokenEffect.java @@ -29,7 +29,7 @@ public class CopyTokenEffect extends ContinuousEffectImpl { public boolean apply(Game game, Ability source) { Permanent permanent = game.getPermanent(source.getSourceId()); permanent.setName(token.getName()); - permanent.getColor().setColor(token.getColor()); + permanent.getColor(game).setColor(token.getColor(game)); permanent.getCardType().clear(); for (CardType type: token.getCardType()) { permanent.getCardType().add(type); diff --git a/Mage/src/mage/abilities/effects/common/continuous/AddCardColorAttachedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/AddCardColorAttachedEffect.java index 93e1b523160..b81b21de6f6 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/AddCardColorAttachedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/AddCardColorAttachedEffect.java @@ -63,15 +63,15 @@ public class AddCardColorAttachedEffect extends ContinuousEffectImpl { Permanent target = game.getPermanent(equipment.getAttachedTo()); if (target != null) { if (addedColor.isBlack()) - target.getColor().setBlack(true); + target.getColor(game).setBlack(true); if (addedColor.isBlue()) - target.getColor().setBlue(true); + target.getColor(game).setBlue(true); if (addedColor.isWhite()) - target.getColor().setWhite(true); + target.getColor(game).setWhite(true); if (addedColor.isGreen()) - target.getColor().setGreen(true); + target.getColor(game).setGreen(true); if (addedColor.isRed()) - target.getColor().setRed(true); + target.getColor(game).setRed(true); } } return true; diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java index 27c18a29b57..068fee171e2 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesBasicLandEnchantedEffect.java @@ -85,11 +85,11 @@ public class BecomesBasicLandEnchantedEffect extends ContinuousEffectImpl { if (permanent != null) { switch (layer) { case ColorChangingEffects_5: - permanent.getColor().setWhite(false); - permanent.getColor().setGreen(false); - permanent.getColor().setBlack(false); - permanent.getColor().setBlue(false); - permanent.getColor().setRed(false); + permanent.getColor(game).setWhite(false); + permanent.getColor(game).setGreen(false); + permanent.getColor(game).setBlack(false); + permanent.getColor(game).setBlue(false); + permanent.getColor(game).setRed(false); break; case AbilityAddingRemovingEffects_6: permanent.removeAllAbilities(source.getSourceId(), game); diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesColorTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesColorTargetEffect.java index 6c74ef7e58c..b93a7cfff53 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesColorTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesColorTargetEffect.java @@ -107,7 +107,7 @@ public class BecomesColorTargetEffect extends ContinuousEffectImpl { MageObject o = game.getObject(targetId); if (o != null) { if (o instanceof Permanent || o instanceof StackObject) { - o.getColor().setColor(objectColor); + o.getColor(game).setColor(objectColor); result = true; } } diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java index 50802b7894e..f891657cff5 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAllEffect.java @@ -93,8 +93,8 @@ public class BecomesCreatureAllEffect extends ContinuousEffectImpl { break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - if (token.getColor().hasColor()) - permanent.getColor().setColor(token.getColor()); + if (token.getColor(game).hasColor()) + permanent.getColor(game).setColor(token.getColor(game)); } break; case AbilityAddingRemovingEffects_6: diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java index 89f97a867d5..329ed1d78e4 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureAttachedEffect.java @@ -115,14 +115,14 @@ public class BecomesCreatureAttachedEffect extends ContinuousEffectImpl { case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { if (loseOther) { - permanent.getColor().setBlack(false); - permanent.getColor().setGreen(false); - permanent.getColor().setBlue(false); - permanent.getColor().setWhite(false); - permanent.getColor().setRed(false); + permanent.getColor(game).setBlack(false); + permanent.getColor(game).setGreen(false); + permanent.getColor(game).setBlue(false); + permanent.getColor(game).setWhite(false); + permanent.getColor(game).setRed(false); } - if (token.getColor().hasColor()) { - permanent.getColor().setColor(token.getColor()); + if (token.getColor(game).hasColor()) { + permanent.getColor(game).setColor(token.getColor(game)); } } break; diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java index ee60cdf57eb..927f8974466 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureSourceEffect.java @@ -105,8 +105,8 @@ public class BecomesCreatureSourceEffect extends ContinuousEffectImpl implements break; case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { - if (token.getColor().hasColor()) { - permanent.getColor().setColor(token.getColor()); + if (token.getColor(game).hasColor()) { + permanent.getColor(game).setColor(token.getColor(game)); } } break; diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java index 8bee7f94b8f..10c22909b9d 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesCreatureTargetEffect.java @@ -111,14 +111,14 @@ public class BecomesCreatureTargetEffect extends ContinuousEffectImpl { case ColorChangingEffects_5: if (sublayer == SubLayer.NA) { if (loseAllAbilities) { - permanent.getColor().setBlack(false); - permanent.getColor().setGreen(false); - permanent.getColor().setBlue(false); - permanent.getColor().setWhite(false); - permanent.getColor().setBlack(false); + permanent.getColor(game).setBlack(false); + permanent.getColor(game).setGreen(false); + permanent.getColor(game).setBlue(false); + permanent.getColor(game).setWhite(false); + permanent.getColor(game).setBlack(false); } - if (token.getColor().hasColor()) { - permanent.getColor().setColor(token.getColor()); + if (token.getColor(game).hasColor()) { + permanent.getColor(game).setColor(token.getColor(game)); } } break; diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureAllEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureAllEffect.java index 3896cd97f6e..3abed713076 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureAllEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureAllEffect.java @@ -118,7 +118,7 @@ public class BecomesFaceDownCreatureAllEffect extends ContinuousEffectImpl imple permanent.getManaCost().clear(); break; case ColorChangingEffects_5: - permanent.getColor().setColor(new ObjectColor()); + permanent.getColor(game).setColor(new ObjectColor()); break; case AbilityAddingRemovingEffects_6: Card card = game.getCard(permanent.getId()); // diff --git a/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureEffect.java b/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureEffect.java index 14bb52a456b..cd0831f27df 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/BecomesFaceDownCreatureEffect.java @@ -175,7 +175,7 @@ public class BecomesFaceDownCreatureEffect extends ContinuousEffectImpl implemen permanent.getSubtype().clear(); break; case ColorChangingEffects_5: - permanent.getColor().setColor(new ObjectColor()); + permanent.getColor(game).setColor(new ObjectColor()); break; case AbilityAddingRemovingEffects_6: Card card = game.getCard(permanent.getId()); // diff --git a/Mage/src/mage/abilities/effects/common/continuous/SetCardColorAttachedEffect.java b/Mage/src/mage/abilities/effects/common/continuous/SetCardColorAttachedEffect.java index 9cdf7026418..dd32ebda2fb 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/SetCardColorAttachedEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/SetCardColorAttachedEffect.java @@ -61,7 +61,7 @@ public class SetCardColorAttachedEffect extends ContinuousEffectImpl { if (equipment != null && equipment.getAttachedTo() != null) { Permanent target = game.getPermanent(equipment.getAttachedTo()); if (target != null) { - target.getColor().setColor(setColor); + target.getColor(game).setColor(setColor); return true; } } diff --git a/Mage/src/mage/abilities/effects/common/continuous/SetCardColorSourceEffect.java b/Mage/src/mage/abilities/effects/common/continuous/SetCardColorSourceEffect.java index 85340707a5b..e45ed9f9a42 100644 --- a/Mage/src/mage/abilities/effects/common/continuous/SetCardColorSourceEffect.java +++ b/Mage/src/mage/abilities/effects/common/continuous/SetCardColorSourceEffect.java @@ -75,7 +75,7 @@ public class SetCardColorSourceEffect extends ContinuousEffectImpl { MageObject o = game.getObject(source.getSourceId()); if (o != null) { if (o instanceof Permanent || o instanceof StackObject) { - o.getColor().setColor(setColor); + o.getColor(game).setColor(setColor); } } diff --git a/Mage/src/mage/abilities/keyword/ConvokeAbility.java b/Mage/src/mage/abilities/keyword/ConvokeAbility.java index 9449efcb458..ef920d57d42 100644 --- a/Mage/src/mage/abilities/keyword/ConvokeAbility.java +++ b/Mage/src/mage/abilities/keyword/ConvokeAbility.java @@ -207,7 +207,7 @@ class ConvokeEffect extends OneShotEffect { String manaName; if (!perm.isTapped() && perm.tap(game)) { ManaPool manaPool = controller.getManaPool(); - Choice chooseManaType = buildChoice(perm.getColor(), unpaid.getMana()); + Choice chooseManaType = buildChoice(perm.getColor(game), unpaid.getMana()); if (chooseManaType.getChoices().size() > 0) { if (chooseManaType.getChoices().size() > 1) { chooseManaType.getChoices().add("Colorless"); diff --git a/Mage/src/mage/abilities/keyword/FearAbility.java b/Mage/src/mage/abilities/keyword/FearAbility.java index a860cfd25aa..9324251eb86 100644 --- a/Mage/src/mage/abilities/keyword/FearAbility.java +++ b/Mage/src/mage/abilities/keyword/FearAbility.java @@ -91,7 +91,7 @@ class FearEffect extends RestrictionEffect implements MageSingleton { @Override public boolean canBeBlocked(Permanent attacker, Permanent blocker, Ability source, Game game) { - if (blocker.getCardType().contains(CardType.ARTIFACT) || blocker.getColor().isBlack()) { + if (blocker.getCardType().contains(CardType.ARTIFACT) || blocker.getColor(game).isBlack()) { return true; } return false; diff --git a/Mage/src/mage/abilities/keyword/IntimidateAbility.java b/Mage/src/mage/abilities/keyword/IntimidateAbility.java index c48b166f428..01e8b02bc56 100644 --- a/Mage/src/mage/abilities/keyword/IntimidateAbility.java +++ b/Mage/src/mage/abilities/keyword/IntimidateAbility.java @@ -64,7 +64,7 @@ class IntimidateEffect extends RestrictionEffect implements MageSingleton { if (blocker.getCardType().contains(CardType.ARTIFACT) && (blocker.getCardType().contains(CardType.CREATURE))) { result = true; } - if (attacker.getColor().shares(blocker.getColor())) { + if (attacker.getColor(game).shares(blocker.getColor(game))) { result = true; } return result; diff --git a/Mage/src/mage/abilities/keyword/MorphAbility.java b/Mage/src/mage/abilities/keyword/MorphAbility.java index d6ec2347383..362be6c6191 100644 --- a/Mage/src/mage/abilities/keyword/MorphAbility.java +++ b/Mage/src/mage/abilities/keyword/MorphAbility.java @@ -219,7 +219,7 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost } } // change spell colors - ObjectColor spellColor = spell.getColor(); + ObjectColor spellColor = spell.getColor(game); spellColor.setBlack(false); spellColor.setRed(false); spellColor.setGreen(false); @@ -297,7 +297,7 @@ public class MorphAbility extends StaticAbility implements AlternativeSourceCost mageObject.getPower().initValue(2); mageObject.getToughness().initValue(2); mageObject.getAbilities().clear(); - mageObject.getColor().setColor(new ObjectColor()); + mageObject.getColor(null).setColor(new ObjectColor()); mageObject.setName(""); mageObject.getCardType().clear(); mageObject.getCardType().add(CardType.CREATURE); diff --git a/Mage/src/mage/abilities/keyword/TransformAbility.java b/Mage/src/mage/abilities/keyword/TransformAbility.java index 55a97861b70..9b01d319c02 100644 --- a/Mage/src/mage/abilities/keyword/TransformAbility.java +++ b/Mage/src/mage/abilities/keyword/TransformAbility.java @@ -69,7 +69,7 @@ public class TransformAbility extends SimpleStaticAbility { } permanent.setName(sourceCard.getName()); - permanent.getColor().setColor(sourceCard.getColor()); + permanent.getColor(game).setColor(sourceCard.getColor(game)); permanent.getManaCost().clear(); permanent.getManaCost().add(sourceCard.getManaCost()); permanent.getCardType().clear(); diff --git a/Mage/src/mage/cards/Card.java b/Mage/src/mage/cards/Card.java index f89865d773b..91217b0c02a 100644 --- a/Mage/src/mage/cards/Card.java +++ b/Mage/src/mage/cards/Card.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.UUID; import mage.MageObject; import mage.Mana; +import mage.ObjectColor; import mage.abilities.Abilities; import mage.abilities.Ability; import mage.abilities.SpellAbility; @@ -134,5 +135,5 @@ public interface Card extends MageObject { */ Card getMainCard(); - void setZone(Zone zone, Game game); + void setZone(Zone zone, Game game); } diff --git a/Mage/src/mage/cards/CardImpl.java b/Mage/src/mage/cards/CardImpl.java index 9458a22fe17..b656ae3bf29 100644 --- a/Mage/src/mage/cards/CardImpl.java +++ b/Mage/src/mage/cards/CardImpl.java @@ -36,6 +36,7 @@ import java.util.UUID; import mage.MageObject; import mage.MageObjectImpl; import mage.Mana; +import mage.ObjectColor; import mage.abilities.Abilities; import mage.abilities.AbilitiesImpl; import mage.abilities.Ability; @@ -59,6 +60,7 @@ import static mage.constants.Zone.PICK; import static mage.constants.Zone.STACK; import mage.counters.Counter; import mage.counters.Counters; +import mage.game.CardAttribute; import mage.game.CardState; import mage.game.Game; import mage.game.command.Commander; @@ -763,5 +765,15 @@ public abstract class CardImpl extends MageObjectImpl implements Card { public void setSpellAbility(SpellAbility ability) { spellAbility = ability; } - + + @Override + public ObjectColor getColor(Game game) { + if (game != null) { + CardAttribute cardAttribute = game.getState().getCardAttribute(getId()); + if (cardAttribute != null) { + return cardAttribute.getColor(); + } + } + return super.getColor(game); //To change body of generated methods, choose Tools | Templates. + } } diff --git a/Mage/src/mage/cards/repository/CardInfo.java b/Mage/src/mage/cards/repository/CardInfo.java index 4b1c4905f13..901ab028540 100644 --- a/Mage/src/mage/cards/repository/CardInfo.java +++ b/Mage/src/mage/cards/repository/CardInfo.java @@ -132,11 +132,11 @@ public class CardInfo { this.secondSideName = secondSide.getName(); } - this.blue = card.getColor().isBlue(); - this.black = card.getColor().isBlack(); - this.green = card.getColor().isGreen(); - this.red = card.getColor().isRed(); - this.white = card.getColor().isWhite(); + this.blue = card.getColor(null).isBlue(); + this.black = card.getColor(null).isBlack(); + this.green = card.getColor(null).isGreen(); + this.red = card.getColor(null).isRed(); + this.white = card.getColor(null).isWhite(); this.setTypes(card.getCardType()); this.setSubtypes(card.getSubtype()); diff --git a/Mage/src/mage/filter/predicate/mageobject/ColorPredicate.java b/Mage/src/mage/filter/predicate/mageobject/ColorPredicate.java index 0eba7899aff..74e5164049d 100644 --- a/Mage/src/mage/filter/predicate/mageobject/ColorPredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/ColorPredicate.java @@ -46,7 +46,7 @@ public class ColorPredicate implements Predicate { @Override public boolean apply(MageObject input, Game game) { - return input.getColor().contains(color); + return input.getColor(game).contains(color); } @Override diff --git a/Mage/src/mage/filter/predicate/mageobject/ColorlessPredicate.java b/Mage/src/mage/filter/predicate/mageobject/ColorlessPredicate.java index 8a7718bf386..fa6b88d4bcd 100644 --- a/Mage/src/mage/filter/predicate/mageobject/ColorlessPredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/ColorlessPredicate.java @@ -39,7 +39,7 @@ public class ColorlessPredicate implements Predicate { @Override public boolean apply(MageObject input, Game game) { - return input.getColor().isColorless(); + return input.getColor(game).isColorless(); } @Override diff --git a/Mage/src/mage/filter/predicate/mageobject/MonocoloredPredicate.java b/Mage/src/mage/filter/predicate/mageobject/MonocoloredPredicate.java index f6bd95ba51c..dbb0ba54834 100644 --- a/Mage/src/mage/filter/predicate/mageobject/MonocoloredPredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/MonocoloredPredicate.java @@ -39,7 +39,7 @@ public class MonocoloredPredicate implements Predicate { @Override public boolean apply(MageObject input, Game game) { - return 1 == input.getColor().getColorCount(); + return 1 == input.getColor(game).getColorCount(); } @Override diff --git a/Mage/src/mage/filter/predicate/mageobject/MulticoloredPredicate.java b/Mage/src/mage/filter/predicate/mageobject/MulticoloredPredicate.java index 196ad51753a..6aca6494c25 100644 --- a/Mage/src/mage/filter/predicate/mageobject/MulticoloredPredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/MulticoloredPredicate.java @@ -39,7 +39,7 @@ public class MulticoloredPredicate implements Predicate { @Override public boolean apply(MageObject input, Game game) { - return 1 < input.getColor().getColorCount(); + return 1 < input.getColor(game).getColorCount(); } @Override diff --git a/Mage/src/mage/filter/predicate/mageobject/SharesColorWithSourcePredicate.java b/Mage/src/mage/filter/predicate/mageobject/SharesColorWithSourcePredicate.java index caf9ae4306a..8633e960971 100644 --- a/Mage/src/mage/filter/predicate/mageobject/SharesColorWithSourcePredicate.java +++ b/Mage/src/mage/filter/predicate/mageobject/SharesColorWithSourcePredicate.java @@ -22,7 +22,7 @@ public class SharesColorWithSourcePredicate implements ObjectSourcePlayerPredica public boolean apply(ObjectSourcePlayer input, Game game) { MageObject sourceObject = game.getObject(input.getSourceId()); if (sourceObject != null) { - return input.getObject().getColor().shares(sourceObject.getColor()); + return input.getObject().getColor(game).shares(sourceObject.getColor(game)); } return false; diff --git a/Mage/src/mage/game/CardAttribute.java b/Mage/src/mage/game/CardAttribute.java new file mode 100644 index 00000000000..95b4659ab7d --- /dev/null +++ b/Mage/src/mage/game/CardAttribute.java @@ -0,0 +1,29 @@ +/* + * 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.game; + +import java.io.Serializable; +import mage.ObjectColor; +import mage.cards.Card; + +/** + * This class saves changed attributes of cards (e.g. in graveyard, exile or player hands or libraries). + * + * @author LevelX2 + */ +public class CardAttribute implements Serializable { + + protected ObjectColor color; + + public CardAttribute(Card card) { + color = card.getColor(null).copy(); + } + + public ObjectColor getColor() { + return color; + } + +} diff --git a/Mage/src/mage/game/GameState.java b/Mage/src/mage/game/GameState.java index 7d6d7eb7f8d..ebfdc555a19 100644 --- a/Mage/src/mage/game/GameState.java +++ b/Mage/src/mage/game/GameState.java @@ -109,6 +109,7 @@ public class GameState implements Serializable, Copyable { private Map zones = new HashMap<>(); private List simultaneousEvents = new ArrayList<>(); private Map cardState = new HashMap<>(); + private Map cardAttribute = new HashMap<>(); private Map zoneChangeCounter = new HashMap<>(); private Map copiedCards = new HashMap<>(); private int permanentOrderNumber; @@ -831,6 +832,7 @@ public class GameState implements Serializable, Copyable { for (CardState state: cardState.values()) { state.clearAbilities(); } + cardAttribute.clear(); } public void clear() { @@ -892,11 +894,23 @@ public class GameState implements Serializable, Copyable { public CardState getCardState(UUID cardId) { if (!cardState.containsKey(cardId)) { cardState.put(cardId, new CardState()); - // cardState.putIfAbsent(cardId, new CardState()); } return cardState.get(cardId); } + public CardAttribute getCardAttribute(UUID cardId) { + return cardAttribute.get(cardId); + } + + public CardAttribute getCreateCardAttribute(Card card) { + CardAttribute cardAtt = cardAttribute.get(card.getId()); + if (cardAtt == null) { + cardAtt = new CardAttribute(card); + cardAttribute.put(card.getId(), cardAtt); + } + return cardAtt; + } + public void addWatcher(Watcher watcher) { this.watchers.add(watcher); } diff --git a/Mage/src/mage/game/command/Commander.java b/Mage/src/mage/game/command/Commander.java index 0602bafbec1..ff0a5565263 100644 --- a/Mage/src/mage/game/command/Commander.java +++ b/Mage/src/mage/game/command/Commander.java @@ -149,8 +149,8 @@ public class Commander implements CommandObject{ } @Override - public ObjectColor getColor() { - return card.getColor(); + public ObjectColor getColor(Game game) { + return card.getColor(game); } @Override diff --git a/Mage/src/mage/game/command/Emblem.java b/Mage/src/mage/game/command/Emblem.java index 468aa9cc730..79d74ca8885 100644 --- a/Mage/src/mage/game/command/Emblem.java +++ b/Mage/src/mage/game/command/Emblem.java @@ -150,7 +150,7 @@ public class Emblem implements CommandObject { } @Override - public ObjectColor getColor() { + public ObjectColor getColor(Game game) { return emptyColor; } diff --git a/Mage/src/mage/game/permanent/PermanentCard.java b/Mage/src/mage/game/permanent/PermanentCard.java index 220905b133e..c6994cb72ed 100644 --- a/Mage/src/mage/game/permanent/PermanentCard.java +++ b/Mage/src/mage/game/permanent/PermanentCard.java @@ -99,7 +99,7 @@ public class PermanentCard extends PermanentImpl { this.abilities.setSourceId(objectId); this.cardType.clear(); this.cardType.addAll(card.getCardType()); - this.color = card.getColor().copy(); + this.color = card.getColor(null).copy(); this.manaCost = card.getManaCost().copy(); this.power = card.getPower().copy(); this.toughness = card.getToughness().copy(); diff --git a/Mage/src/mage/game/permanent/PermanentImpl.java b/Mage/src/mage/game/permanent/PermanentImpl.java index 5bfc16c5428..e50d04cb09f 100644 --- a/Mage/src/mage/game/permanent/PermanentImpl.java +++ b/Mage/src/mage/game/permanent/PermanentImpl.java @@ -38,6 +38,7 @@ import java.util.Map; import java.util.UUID; import mage.MageObject; import mage.MageObjectReference; +import mage.ObjectColor; import mage.abilities.Abilities; import mage.abilities.Ability; import mage.abilities.effects.ContinuousEffect; @@ -1359,5 +1360,11 @@ public abstract class PermanentImpl extends CardImpl implements Permanent { public void setCreateOrder(int createOrder) { this.createOrder = createOrder; } - + + @Override + public ObjectColor getColor(Game game) { + return color; + } + + } diff --git a/Mage/src/mage/game/permanent/PermanentToken.java b/Mage/src/mage/game/permanent/PermanentToken.java index 69d2aa37442..be5e63776a0 100644 --- a/Mage/src/mage/game/permanent/PermanentToken.java +++ b/Mage/src/mage/game/permanent/PermanentToken.java @@ -82,7 +82,7 @@ public class PermanentToken extends PermanentImpl { this.getManaCost().add(cost.copy()); } this.cardType = token.getCardType(); - this.color = token.getColor().copy(); + this.color = token.getColor(game).copy(); this.power.initValue(token.getPower().getValue()); this.toughness.initValue(token.getToughness().getValue()); this.supertype = token.getSupertype(); diff --git a/Mage/src/mage/game/stack/Spell.java b/Mage/src/mage/game/stack/Spell.java index 7fe9215ad07..bbb1ef01d8f 100644 --- a/Mage/src/mage/game/stack/Spell.java +++ b/Mage/src/mage/game/stack/Spell.java @@ -81,7 +81,7 @@ public class Spell extends StackObjImpl implements Card { public Spell(Card card, SpellAbility ability, UUID controllerId, Zone fromZone) { this.card = card; - this.color = card.getColor().copy(); + this.color = card.getColor(null).copy(); id = ability.getId(); this.ability = ability; this.ability.setControllerId(controllerId); @@ -431,7 +431,7 @@ public class Spell extends StackObjImpl implements Card { } @Override - public ObjectColor getColor() { + public ObjectColor getColor(Game game) { return color; } diff --git a/Mage/src/mage/game/stack/StackAbility.java b/Mage/src/mage/game/stack/StackAbility.java index 835d8bf1014..021ac659dbe 100644 --- a/Mage/src/mage/game/stack/StackAbility.java +++ b/Mage/src/mage/game/stack/StackAbility.java @@ -175,7 +175,7 @@ public class StackAbility extends StackObjImpl implements Ability { } @Override - public ObjectColor getColor() { + public ObjectColor getColor(Game game) { return emptyColor; } diff --git a/Mage/src/mage/util/GameLog.java b/Mage/src/mage/util/GameLog.java index b302a09d3dc..082178a1168 100644 --- a/Mage/src/mage/util/GameLog.java +++ b/Mage/src/mage/util/GameLog.java @@ -56,7 +56,7 @@ public class GameLog { } public static String getColoredObjectName(MageObject mageObject) { - return "" + mageObject.getName() + " ["+mageObject.getId().toString().substring(0,3) + "]"; + return "" + mageObject.getName() + " ["+mageObject.getId().toString().substring(0,3) + "]"; } public static String getNeutralColoredText(String text) { diff --git a/Mage/src/mage/util/functions/CopyTokenFunction.java b/Mage/src/mage/util/functions/CopyTokenFunction.java index 28e737801b1..001c8188202 100644 --- a/Mage/src/mage/util/functions/CopyTokenFunction.java +++ b/Mage/src/mage/util/functions/CopyTokenFunction.java @@ -83,7 +83,7 @@ public class CopyTokenFunction implements Function { } target.setName(sourceObj.getName()); - target.getColor().setColor(sourceObj.getColor()); + target.getColor(null).setColor(sourceObj.getColor(null)); target.getManaCost().clear(); target.getManaCost().add(sourceObj.getManaCost()); target.getCardType().clear(); diff --git a/Mage/src/mage/util/trace/TraceUtil.java b/Mage/src/mage/util/trace/TraceUtil.java index 7c413213b85..b4da8fb9850 100644 --- a/Mage/src/mage/util/trace/TraceUtil.java +++ b/Mage/src/mage/util/trace/TraceUtil.java @@ -59,7 +59,7 @@ public class TraceUtil { for (UUID blockerId : group.getBlockers()) { Permanent blocker = game.getPermanent(blockerId); if (blocker != null && !blocker.getCardType().contains(CardType.ARTIFACT) - && !attacker.getColor().shares(blocker.getColor())) { + && !attacker.getColor(game).shares(blocker.getColor(game))) { log.warn("Found creature with intimidate blocked by non artifact not sharing color creature"); traceCombat(game, attacker, blocker); }