refactor: common logic for "at..." triggered abilities (#13045)

* add new common framework for at step triggered abilities

* move postcombat main and second main triggers to it

* update draw step triggers

* refactor BeginningOfCombatTriggeredAbility

* refactor BeginningOfFirstMainTriggeredAbility

* move Pronoun to constants package

* cleanup some cards to use simpler constructors

* package reorganization
This commit is contained in:
xenohedron 2024-10-27 21:03:40 -04:00 committed by GitHub
parent c9cc398b48
commit eee0fee79e
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
329 changed files with 1149 additions and 1331 deletions

View file

@ -1,7 +1,7 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.abilities.effects.common.CreateTokenEffect;
import mage.abilities.effects.common.counter.AddCountersAllEffect;
import mage.constants.TargetController;
@ -20,8 +20,8 @@ public final class BasriKetEmblem extends Emblem {
super("Emblem Basri");
Ability ability = new BeginningOfCombatTriggeredAbility(
Zone.COMMAND,
new CreateTokenEffect(new SoldierToken()),
TargetController.YOU, false, false);
TargetController.YOU, new CreateTokenEffect(new SoldierToken()),
false);
ability.addEffect(
new AddCountersAllEffect(CounterType.P1P1.createInstance(), StaticFilters.FILTER_PERMANENT_CREATURE_CONTROLLED)
.setText(", then put a +1/+1 counter on each creature you control")

View file

@ -1,7 +1,7 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.abilities.effects.common.ReturnCreatureFromGraveyardToBattlefieldAndGainHasteEffect;
import mage.constants.TargetController;
import mage.constants.Zone;
@ -18,8 +18,8 @@ public final class LilianaWakerOfTheDeadEmblem extends Emblem {
super("Emblem Liliana");
Ability ability = new BeginningOfCombatTriggeredAbility(
Zone.COMMAND,
new ReturnCreatureFromGraveyardToBattlefieldAndGainHasteEffect(),
TargetController.YOU, false, false);
TargetController.YOU, new ReturnCreatureFromGraveyardToBattlefieldAndGainHasteEffect(),
false);
ability.addTarget(new TargetCardInGraveyard(StaticFilters.FILTER_CARD_CREATURE));
this.getAbilities().add(ability);
}

View file

@ -1,7 +1,7 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfFirstMainTriggeredAbility;
import mage.abilities.triggers.BeginningOfFirstMainTriggeredAbility;
import mage.abilities.condition.Condition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.OneShotEffect;
@ -31,7 +31,7 @@ public class RadiationEmblem extends Emblem {
this.frameStyle = FrameStyle.M15_NORMAL;
this.getAbilities().add(new ConditionalInterveningIfTriggeredAbility(
new BeginningOfFirstMainTriggeredAbility(Zone.ALL, new RadiationEffect(), TargetController.YOU, false, false),
new BeginningOfFirstMainTriggeredAbility(Zone.ALL, TargetController.YOU, new RadiationEffect(), false),
RadiationCondition.instance,
"At the beginning of your precombat main phase, if you have any rad counters, "
+ "mill that many cards. For each nonland card milled this way, you lose 1 life and a rad counter."

View file

@ -1,6 +1,6 @@
package mage.game.command.emblems;
import mage.abilities.common.BeginningOfDrawTriggeredAbility;
import mage.abilities.triggers.BeginningOfDrawTriggeredAbility;
import mage.abilities.common.BeginningOfEndStepTriggeredAbility;
import mage.abilities.effects.common.DrawCardSourceControllerEffect;
import mage.abilities.effects.common.discard.DiscardHandControllerEffect;
@ -16,7 +16,7 @@ public final class SarkhanTheDragonspeakerEmblem extends Emblem {
public SarkhanTheDragonspeakerEmblem() {
super("Emblem Sarkhan");
this.getAbilities().add(new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardSourceControllerEffect(2).setText("draw two additional cards"), TargetController.YOU, false));
this.getAbilities().add(new BeginningOfDrawTriggeredAbility(Zone.COMMAND, TargetController.YOU, new DrawCardSourceControllerEffect(2).setText("draw two additional cards"), false));
this.getAbilities().add(new BeginningOfEndStepTriggeredAbility(Zone.COMMAND, new DiscardHandControllerEffect(), TargetController.YOU, null, false));
}

View file

@ -1,7 +1,7 @@
package mage.game.command.emblems;
import mage.abilities.Ability;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.abilities.effects.Effect;
import mage.abilities.effects.common.continuous.AddCardTypeTargetEffect;
import mage.abilities.effects.common.continuous.SetBasePowerToughnessTargetEffect;
@ -23,7 +23,7 @@ public final class TezzeretTheSchemerEmblem extends Emblem {
Effect effect = new AddCardTypeTargetEffect(Duration.EndOfGame, CardType.ARTIFACT, CardType.CREATURE);
effect.setText("target artifact you control becomes an artifact creature");
Ability ability = new BeginningOfCombatTriggeredAbility(Zone.COMMAND, effect, TargetController.YOU, false, true);
Ability ability = new BeginningOfCombatTriggeredAbility(Zone.COMMAND, TargetController.YOU, effect, false);
effect = new SetBasePowerToughnessTargetEffect(5, 5, Duration.EndOfGame);
effect.setText("with base power and toughness 5/5");
ability.addEffect(effect);

View file

@ -3,7 +3,7 @@ package mage.game.command.planes;
import mage.abilities.Ability;
import mage.abilities.TriggeredAbilityImpl;
import mage.abilities.common.ActivateIfConditionActivatedAbility;
import mage.abilities.common.BeginningOfDrawTriggeredAbility;
import mage.abilities.triggers.BeginningOfDrawTriggeredAbility;
import mage.abilities.common.SimpleStaticAbility;
import mage.abilities.condition.common.MainPhaseStackEmptyCondition;
import mage.abilities.costs.mana.GenericManaCost;
@ -41,7 +41,7 @@ public class PanopticonPlane extends Plane {
this.getAbilities().add(pwability);
// At the beginning of your draw step, draw an additional card.
Ability ability = new BeginningOfDrawTriggeredAbility(Zone.COMMAND, new DrawCardTargetEffect(1), TargetController.ACTIVE, false);
Ability ability = new BeginningOfDrawTriggeredAbility(Zone.COMMAND, TargetController.YOU, new DrawCardTargetEffect(1), false);
this.getAbilities().add(ability);
// Active player can roll the planar die: Whenever you roll {CHAOS}, draw a card

View file

@ -1,7 +1,7 @@
package mage.game.permanent.token;
import mage.MageInt;
import mage.abilities.common.BeginningOfCombatTriggeredAbility;
import mage.abilities.triggers.BeginningOfCombatTriggeredAbility;
import mage.abilities.condition.common.WasCardExiledThisTurnCondition;
import mage.abilities.decorator.ConditionalInterveningIfTriggeredAbility;
import mage.abilities.effects.common.counter.AddCountersSourceEffect;
@ -33,7 +33,6 @@ public final class AshiokWickedManipulatorNightmareToken extends TokenImpl {
this.addAbility(new ConditionalInterveningIfTriggeredAbility(
new BeginningOfCombatTriggeredAbility(
new AddCountersSourceEffect(CounterType.P1P1.createInstance()),
TargetController.YOU,
false
),
WasCardExiledThisTurnCondition.instance,