[LTC] Implement Gandalf, Westward Voyager (#10727)

* refactor and cleanup SpellCastControllerTriggeredAbility

* [LTC] Implement Gandalf, Westward Voyager

* throw on unexpected setTargetPointer
This commit is contained in:
Susucre 2023-08-05 04:26:25 +02:00 committed by GitHub
parent 4ac9293821
commit 0e5069ccc2
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
82 changed files with 567 additions and 361 deletions

View file

@ -4,6 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.counter.AddPoisonCounterTargetEffect;
import mage.constants.CardType;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.predicate.Predicates;
@ -21,7 +22,10 @@ public final class AjaniSleeperAgentEmblem extends Emblem {
// You get an emblem with "Whenever you cast a creature or planeswalker spell, target opponent gets two poison counters."
public AjaniSleeperAgentEmblem() {
super("Emblem Ajani");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, new AddPoisonCounterTargetEffect(2), filter, false, false);
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new AddPoisonCounterTargetEffect(2),
filter, false, SetTargetPointer.NONE
);
ability.addTarget(new TargetOpponent());
this.getAbilities().add(ability);
}

View file

@ -5,6 +5,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
import mage.constants.Outcome;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.FilterSpell;
import mage.filter.predicate.mageobject.ColorPredicate;
@ -30,7 +31,9 @@ public class ChandraDressedToKillEmblem extends Emblem {
// Whenever you cast a red spell, this emblem deals X damage to any target, where X is the amount of mana spent to cast that spell.
public ChandraDressedToKillEmblem() {
super("Emblem Chandra");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, new ChandraDressedToKillEmblemEffect(), filter, false, true);
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new ChandraDressedToKillEmblemEffect(),
filter, false, SetTargetPointer.SPELL);
ability.addTarget(new TargetAnyTarget());
this.getAbilities().add(ability);
}

View file

@ -4,6 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
@ -19,7 +20,7 @@ public final class ChandraTorchOfDefianceEmblem extends Emblem {
super("Emblem Chandra");
Effect effect = new DamageTargetEffect(5);
effect.setText("this emblem deals 5 damage to any target");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, false);
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, SetTargetPointer.NONE);
ability.addTarget(new TargetAnyTarget());
getAbilities().add(ability);
}

View file

@ -4,6 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.search.SearchLibraryPutInPlayEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.filter.common.FilterCreatureCard;
@ -23,7 +24,11 @@ public final class GarrukCallerOfBeastsEmblem extends Emblem {
public GarrukCallerOfBeastsEmblem() {
super("Emblem Garruk");
Effect effect = new SearchLibraryPutInPlayEffect(new TargetCardInLibrary(new FilterCreatureCard("creature card")), false);
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A_CREATURE, true, false);
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, effect,
StaticFilters.FILTER_SPELL_A_CREATURE,
true, SetTargetPointer.NONE
);
this.getAbilities().add(ability);
}

View file

@ -4,6 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.MillCardsTargetEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
@ -19,7 +20,10 @@ public final class JaceTelepathUnboundEmblem extends Emblem {
super("Emblem Jace");
Effect effect = new MillCardsTargetEffect(5);
effect.setText("target opponent mills five cards");
Ability ability = new SpellCastControllerTriggeredAbility(Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A, false, false);
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, effect, StaticFilters.FILTER_SPELL_A,
false, SetTargetPointer.NONE
);
ability.addTarget(new TargetOpponent());
getAbilities().add(ability);
}

View file

@ -3,6 +3,7 @@ package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
@ -18,7 +19,7 @@ public final class NarsetOfTheAncientWayEmblem extends Emblem {
super("Emblem Narset");
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new DamageTargetEffect(2, "this emblem"),
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, false
StaticFilters.FILTER_SPELL_A_NON_CREATURE, false, SetTargetPointer.NONE
);
ability.addTarget(new TargetAnyTarget());
this.getAbilities().add(ability);

View file

@ -4,6 +4,7 @@ import mage.abilities.Ability;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.DamageTargetEffect;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
@ -19,7 +20,8 @@ public final class RalIzzetViceroyEmblem extends Emblem {
super("Emblem Ral");
Ability ability = new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new DamageTargetEffect(4, "this emblem"),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, false
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
false, SetTargetPointer.NONE
);
ability.addEffect(
new DrawCardSourceControllerEffect(2)

View file

@ -4,6 +4,7 @@ import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.costs.mana.GenericManaCost;
import mage.abilities.effects.common.CopyTargetSpellEffect;
import mage.abilities.effects.common.DoIfCostPaid;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
@ -18,7 +19,7 @@ public final class RowanScholarOfSparksEmblem extends Emblem {
super("Emblem Rowan");
this.getAbilities().add(new SpellCastControllerTriggeredAbility(
Zone.COMMAND, new DoIfCostPaid(new CopyTargetSpellEffect(true), new GenericManaCost(2)),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, true
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY, false, SetTargetPointer.SPELL
));
}

View file

@ -6,6 +6,7 @@ import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.continuous.GainAbilityTargetEffect;
import mage.abilities.keyword.HasteAbility;
import mage.constants.Duration;
import mage.constants.SetTargetPointer;
import mage.constants.SubType;
import mage.constants.Zone;
import mage.filter.FilterSpell;
@ -30,7 +31,7 @@ public final class TyvarKellEmblem extends Emblem {
Zone.COMMAND,
new GainAbilityTargetEffect(
HasteAbility.getInstance(), Duration.EndOfTurn, null, true
).setText("it gains haste until end of turn"), filter, false, true, true
).setText("it gains haste until end of turn"), filter, false, SetTargetPointer.CARD
);
ability.addEffect(new DrawCardSourceControllerEffect(2, "you").concatBy("and"));
this.getAbilities().add(ability);

View file

@ -2,6 +2,7 @@ package mage.game.command.emblems;
import mage.abilities.common.SpellCastControllerTriggeredAbility;
import mage.abilities.effects.common.CopyTargetSpellEffect;
import mage.constants.SetTargetPointer;
import mage.constants.Zone;
import mage.filter.StaticFilters;
import mage.game.command.Emblem;
@ -19,7 +20,7 @@ public final class WillKenrithEmblem extends Emblem {
new CopyTargetSpellEffect(true).withSpellName("it"),
StaticFilters.FILTER_SPELL_AN_INSTANT_OR_SORCERY,
false,
true
SetTargetPointer.SPELL
));
}