change BEcomesBasicLandTargetEffect to use SubType

This commit is contained in:
igoudt 2017-08-07 21:58:59 +02:00
parent ba4d9c9f44
commit 8d52e995e8
6 changed files with 39 additions and 33 deletions

View file

@ -27,10 +27,6 @@
*/ */
package mage.cards.c; package mage.cards.c;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
import mage.MageObjectReference; import mage.MageObjectReference;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.DelayedTriggeredAbility; import mage.abilities.DelayedTriggeredAbility;
@ -61,6 +57,11 @@ import mage.target.common.TargetLandPermanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import mage.watchers.Watcher; import mage.watchers.Watcher;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;
import java.util.UUID;
/** /**
* *
* @author MTGfan * @author MTGfan
@ -80,7 +81,7 @@ public class CyclopeanTomb extends CardImpl {
Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.MIRE.createInstance()), new GenericManaCost(2), new IsStepCondition(PhaseStep.UPKEEP), "{2}, {T}: Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep."); Ability ability = new ConditionalActivatedAbility(Zone.BATTLEFIELD, new AddCountersTargetEffect(CounterType.MIRE.createInstance()), new GenericManaCost(2), new IsStepCondition(PhaseStep.UPKEEP), "{2}, {T}: Put a mire counter on target non-Swamp land. That land is a Swamp for as long as it has a mire counter on it. Activate this ability only during your upkeep.");
ability.addCost(new TapSourceCost()); ability.addCost(new TapSourceCost());
ability.addTarget(new TargetLandPermanent(filter)); ability.addTarget(new TargetLandPermanent(filter));
ability.addEffect(new BecomeSwampEffect(Duration.Custom, false, true, "Swamp")); ability.addEffect(new BecomeSwampEffect(Duration.Custom, false, true, SubType.SWAMP));
this.addAbility(ability, new CyclopeanTombCounterWatcher()); this.addAbility(ability, new CyclopeanTombCounterWatcher());
// When Cyclopean Tomb is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb. // When Cyclopean Tomb is put into a graveyard from the battlefield, at the beginning of each of your upkeeps for the rest of the game, remove all mire counters from a land that a mire counter was put onto with Cyclopean Tomb but that a mire counter has not been removed from with Cyclopean Tomb.
this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new CyclopeanTombCreateTriggeredEffect())); this.addAbility(new PutIntoGraveFromBattlefieldSourceTriggeredAbility(new CyclopeanTombCreateTriggeredEffect()));
@ -98,7 +99,7 @@ public class CyclopeanTomb extends CardImpl {
class BecomeSwampEffect extends BecomesBasicLandTargetEffect { class BecomeSwampEffect extends BecomesBasicLandTargetEffect {
public BecomeSwampEffect(Duration duration, boolean chooseLandType, boolean loseOther, String... landNames) { public BecomeSwampEffect(Duration duration, boolean chooseLandType, boolean loseOther, SubType... landNames) {
super(duration, chooseLandType, loseOther, landNames); super(duration, chooseLandType, loseOther, landNames);
staticText = "That land is a Swamp for as long as it has a mire counter on it"; staticText = "That land is a Swamp for as long as it has a mire counter on it";
} }

View file

@ -27,7 +27,6 @@
*/ */
package mage.cards.d; package mage.cards.d;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.common.SimpleActivatedAbility;
@ -49,6 +48,8 @@ import mage.target.Target;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetLandPermanent; import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/** /**
* *
* @author cbt33, LevelX2 (Walk the Aeons), KholdFuzion (Dandan) * @author cbt33, LevelX2 (Walk the Aeons), KholdFuzion (Dandan)
@ -65,7 +66,7 @@ public class Dreamwinder extends CardImpl {
// Dreamwinder can't attack unless defending player controls an Island. // Dreamwinder can't attack unless defending player controls an Island.
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackUnlessDefenderControllsPermanent(new FilterLandPermanent(SubType.ISLAND,"an Island")))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackUnlessDefenderControllsPermanent(new FilterLandPermanent(SubType.ISLAND,"an Island"))));
// {U}, Sacrifice an Island: Target land becomes an Island until end of turn. // {U}, Sacrifice an Island: Target land becomes an Island until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn, "Island"), new ManaCostsImpl("{U}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn, SubType.ISLAND), new ManaCostsImpl("{U}"));
Target target = new TargetLandPermanent(); Target target = new TargetLandPermanent();
ability.addTarget(target); ability.addTarget(target);
FilterControlledLandPermanent filter = new FilterControlledLandPermanent("an Island"); FilterControlledLandPermanent filter = new FilterControlledLandPermanent("an Island");

View file

@ -27,7 +27,6 @@
*/ */
package mage.cards.k; package mage.cards.k;
import java.util.UUID;
import mage.MageInt; import mage.MageInt;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.ControlsPermanentsControllerTriggeredAbility; import mage.abilities.common.ControlsPermanentsControllerTriggeredAbility;
@ -48,6 +47,8 @@ import mage.filter.predicate.permanent.ControllerPredicate;
import mage.target.common.TargetControlledPermanent; import mage.target.common.TargetControlledPermanent;
import mage.target.common.TargetLandPermanent; import mage.target.common.TargetLandPermanent;
import java.util.UUID;
/** /**
* *
* @author fireshoes * @author fireshoes
@ -72,7 +73,7 @@ public class KukemssaSerpent extends CardImpl {
this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackUnlessDefenderControllsPermanent(new FilterLandPermanent(SubType.ISLAND, "an Island")))); this.addAbility(new SimpleStaticAbility(Zone.BATTLEFIELD, new CantAttackUnlessDefenderControllsPermanent(new FilterLandPermanent(SubType.ISLAND, "an Island"))));
// {U}, Sacrifice an Island: Target land an opponent controls becomes an Island until end of turn. // {U}, Sacrifice an Island: Target land an opponent controls becomes an Island until end of turn.
Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn, "Island"), new ManaCostsImpl("{U}")); Ability ability = new SimpleActivatedAbility(Zone.BATTLEFIELD, new BecomesBasicLandTargetEffect(Duration.EndOfTurn, SubType.ISLAND), new ManaCostsImpl("{U}"));
ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filterControlledLand, true))); ability.addCost(new SacrificeTargetCost(new TargetControlledPermanent(1, 1, filterControlledLand, true)));
ability.addTarget(new TargetLandPermanent(filterOpponentLand)); ability.addTarget(new TargetLandPermanent(filterOpponentLand));
this.addAbility(ability); this.addAbility(ability);

View file

@ -27,7 +27,6 @@
*/ */
package mage.cards.q; package mage.cards.q;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility; import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility;
@ -52,6 +51,8 @@ import mage.target.Target;
import mage.target.TargetPermanent; import mage.target.TargetPermanent;
import mage.target.targetpointer.FixedTarget; import mage.target.targetpointer.FixedTarget;
import java.util.UUID;
/** /**
* *
* @author jeffwadsworth * @author jeffwadsworth
@ -105,7 +106,7 @@ class QuicksilverFountainEffect extends OneShotEffect {
if (player.choose(Outcome.Neutral, targetNonIslandLand, source.getId(), game)) { if (player.choose(Outcome.Neutral, targetNonIslandLand, source.getId(), game)) {
Permanent landChosen = game.getPermanent(targetNonIslandLand.getFirstTarget()); Permanent landChosen = game.getPermanent(targetNonIslandLand.getFirstTarget());
landChosen.addCounters(CounterType.FLOOD.createInstance(), source, game); landChosen.addCounters(CounterType.FLOOD.createInstance(), source, game);
ContinuousEffect becomesBasicLandTargetEffect = new BecomesBasicLandTargetEffect(Duration.OneUse, "Island"); ContinuousEffect becomesBasicLandTargetEffect = new BecomesBasicLandTargetEffect(Duration.OneUse, SubType.ISLAND);
becomesBasicLandTargetEffect.addDependencyType(DependencyType.BecomeIsland); becomesBasicLandTargetEffect.addDependencyType(DependencyType.BecomeIsland);
ConditionalContinuousEffect effect = new ConditionalContinuousEffect(becomesBasicLandTargetEffect, new LandHasFloodCounterCondition(this), staticText); ConditionalContinuousEffect effect = new ConditionalContinuousEffect(becomesBasicLandTargetEffect, new LandHasFloodCounterCondition(this), staticText);
this.setTargetPointer(new FixedTarget(landChosen, game)); this.setTargetPointer(new FixedTarget(landChosen, game));

View file

@ -27,7 +27,6 @@
*/ */
package mage.cards.u; package mage.cards.u;
import java.util.UUID;
import mage.abilities.Ability; import mage.abilities.Ability;
import mage.abilities.common.SimpleStaticAbility; import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.effects.common.continuous.AddCardSubtypeAllEffect; import mage.abilities.effects.common.continuous.AddCardSubtypeAllEffect;
@ -38,6 +37,8 @@ import mage.cards.CardSetInfo;
import mage.constants.*; import mage.constants.*;
import mage.filter.common.FilterLandPermanent; import mage.filter.common.FilterLandPermanent;
import java.util.UUID;
/** /**
* *
* @author Plopman * @author Plopman

View file

@ -39,6 +39,7 @@ import mage.players.Player;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List;
import java.util.UUID; import java.util.UUID;
/** /**
@ -49,38 +50,38 @@ import java.util.UUID;
public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl { public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl {
protected boolean chooseLandType; protected boolean chooseLandType;
protected ArrayList<String> landTypes = new ArrayList(); protected List<SubType> landTypes = new ArrayList();
protected ArrayList<String> landTypesToAdd = new ArrayList(); protected List<SubType> landTypesToAdd = new ArrayList();
protected boolean loseOther; // loses all other abilities, card types, and creature types protected boolean loseOther; // loses all other abilities, card types, and creature types
public BecomesBasicLandTargetEffect(Duration duration) { public BecomesBasicLandTargetEffect(Duration duration) {
this(duration, true, new String[0]); this(duration, true);
} }
public BecomesBasicLandTargetEffect(Duration duration, String... landNames) { public BecomesBasicLandTargetEffect(Duration duration, SubType... landNames) {
this(duration, false, landNames); this(duration, false, landNames);
} }
public BecomesBasicLandTargetEffect(Duration duration, boolean chooseLandType, String... landNames) { public BecomesBasicLandTargetEffect(Duration duration, boolean chooseLandType, SubType... landNames) {
this(duration, chooseLandType, true, landNames); this(duration, chooseLandType, true, landNames);
} }
public BecomesBasicLandTargetEffect(Duration duration, boolean chooseLandType, boolean loseOther, String... landNames) { public BecomesBasicLandTargetEffect(Duration duration, boolean chooseLandType, boolean loseOther, SubType... landNames) {
super(duration, Outcome.Detriment); super(duration, Outcome.Detriment);
this.landTypes.addAll(Arrays.asList(landNames)); this.landTypes.addAll(Arrays.asList(landNames));
if (landTypes.contains("Mountain")) { if (landTypes.contains(SubType.MOUNTAIN)) {
dependencyTypes.add(DependencyType.BecomeMountain); dependencyTypes.add(DependencyType.BecomeMountain);
} }
if (landTypes.contains("Forest")) { if (landTypes.contains(SubType.FOREST)) {
dependencyTypes.add(DependencyType.BecomeForest); dependencyTypes.add(DependencyType.BecomeForest);
} }
if (landTypes.contains("Swamp")) { if (landTypes.contains(SubType.SWAMP)) {
dependencyTypes.add(DependencyType.BecomeSwamp); dependencyTypes.add(DependencyType.BecomeSwamp);
} }
if (landTypes.contains("Island")) { if (landTypes.contains(SubType.ISLAND)) {
dependencyTypes.add(DependencyType.BecomeIsland); dependencyTypes.add(DependencyType.BecomeIsland);
} }
if (landTypes.contains("Plains")) { if (landTypes.contains(SubType.PLAINS)) {
dependencyTypes.add(DependencyType.BecomePlains); dependencyTypes.add(DependencyType.BecomePlains);
} }
this.chooseLandType = chooseLandType; this.chooseLandType = chooseLandType;
@ -116,7 +117,7 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl {
if (controller != null) { if (controller != null) {
Choice choice = new ChoiceBasicLandType(); Choice choice = new ChoiceBasicLandType();
controller.choose(outcome, choice, game); controller.choose(outcome, choice, game);
landTypes.add(choice.getChoice()); landTypes.add(SubType.byDescription(choice.getChoice()));
} else { } else {
this.discard(); this.discard();
} }
@ -147,7 +148,7 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl {
land.getSubtype(game).addAll(landTypes); land.getSubtype(game).addAll(landTypes);
} else { } else {
landTypesToAdd.clear(); landTypesToAdd.clear();
for (String subtype : landTypes) { for (SubType subtype : landTypes) {
if (!land.getSubtype(game).contains(subtype)) { if (!land.getSubtype(game).contains(subtype)) {
land.getSubtype(game).add(subtype); land.getSubtype(game).add(subtype);
landTypesToAdd.add(subtype); landTypesToAdd.add(subtype);
@ -156,21 +157,21 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl {
} }
break; break;
case AbilityAddingRemovingEffects_6: case AbilityAddingRemovingEffects_6:
for (String landType : landTypesToAdd) { for (SubType landType : landTypesToAdd) {
switch (landType) { switch (landType) {
case "Swamp": case SWAMP:
land.addAbility(new BlackManaAbility(), source.getSourceId(), game); land.addAbility(new BlackManaAbility(), source.getSourceId(), game);
break; break;
case "Mountain": case MOUNTAIN:
land.addAbility(new RedManaAbility(), source.getSourceId(), game); land.addAbility(new RedManaAbility(), source.getSourceId(), game);
break; break;
case "Forest": case FOREST:
land.addAbility(new GreenManaAbility(), source.getSourceId(), game); land.addAbility(new GreenManaAbility(), source.getSourceId(), game);
break; break;
case "Island": case ISLAND:
land.addAbility(new BlueManaAbility(), source.getSourceId(), game); land.addAbility(new BlueManaAbility(), source.getSourceId(), game);
break; break;
case "Plains": case PLAINS:
land.addAbility(new WhiteManaAbility(), source.getSourceId(), game); land.addAbility(new WhiteManaAbility(), source.getSourceId(), game);
break; break;
} }
@ -194,7 +195,7 @@ public class BecomesBasicLandTargetEffect extends ContinuousEffectImpl {
} else { } else {
sb.append("Target land becomes a "); sb.append("Target land becomes a ");
int i = 1; int i = 1;
for (String landType : landTypes) { for (SubType landType : landTypes) {
if (i > 1) { if (i > 1) {
if (i == landTypes.size()) { if (i == landTypes.size()) {
sb.append(" and "); sb.append(" and ");