diff --git a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java index 7cb85b5eb72..3090badad37 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TokenEffectBase.java @@ -64,6 +64,7 @@ public abstract class TokenEffectBase extends SpellAbilityEffect { Card c = game.getAction().moveToPlay(tok, sa); if (c == null || c.getZone() == null) { // in case token can't enter the battlefield, it isn't created + triggerList.put(ZoneType.None, ZoneType.None, c); continue; } triggerList.put(ZoneType.None, c.getZone().getZoneType(), c); diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java index 15395cadfb3..16d9ab638ea 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerHandler.java @@ -221,7 +221,7 @@ public class TriggerHandler { public final void registerActiveTrigger(final Card c, final boolean onlyExtrinsic) { for (final Trigger t : c.getTriggers()) { - if (!onlyExtrinsic || c.isCloned() || !t.isIntrinsic() || t instanceof TriggerAlways) { + if (!onlyExtrinsic || c.isCloned() || !t.isIntrinsic() || TriggerType.Always.equals(t.getMode())) { registerOneTrigger(t); } } @@ -379,7 +379,7 @@ public class TriggerHandler { if (regtrig.getHostCard().isFaceDown() && regtrig.isIntrinsic()) { return false; // Morphed cards only have pumped triggers go off. } - if (regtrig instanceof TriggerAlways) { + if (TriggerType.Always.equals(regtrig.getMode())) { if (game.getStack().hasStateTrigger(regtrig.getId())) { return false; // State triggers that are already on the stack // don't trigger again. @@ -432,7 +432,7 @@ public class TriggerHandler { return false; // Trigger removed by effect } - if (regtrig instanceof TriggerAlways) { + if (TriggerType.Always.equals(regtrig.getMode())) { if (game.getStack().hasStateTrigger(regtrig.getId())) { return false; // State triggers that are already on the stack // don't trigger again. diff --git a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java index 95cd1b0e5ab..d364d93b626 100644 --- a/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java +++ b/forge-game/src/main/java/forge/game/trigger/WrappedAbility.java @@ -444,7 +444,7 @@ public class WrappedAbility extends Ability { final Game game = sa.getActivatingPlayer().getGame(); final Trigger regtrig = getTrigger(); - if (!(regtrig instanceof TriggerAlways) && !regtrig.hasParam("NoResolvingCheck")) { + if (!(TriggerType.Always.equals(regtrig.getMode())) && !regtrig.hasParam("NoResolvingCheck")) { // Most State triggers don't have "Intervening If" if (!regtrig.requirementsCheck(game)) { return; diff --git a/forge-gui/res/cardsfolder/upcoming/mystic_reflection.txt b/forge-gui/res/cardsfolder/upcoming/mystic_reflection.txt new file mode 100644 index 00000000000..68df2729df1 --- /dev/null +++ b/forge-gui/res/cardsfolder/upcoming/mystic_reflection.txt @@ -0,0 +1,14 @@ +Name:Mystic Reflection +ManaCost:1 U +Types:Instant +A:SP$ Effect | ValidTgts$ Creature.nonLegendary | TgtPrompt$ Choose target nonlegendary creature | RememberObjects$ Targeted | ReplacementEffects$ ReplaceETB | Triggers$ TrigRemove | SVars$ EnterAsCopy,DBImprint,MoveToBattlefield,Z,ExileSelf | SpellDescription$ Choose target nonlegendary creature. The next time one or more creatures or planeswalkers enter the battlefield this turn, they enter as copies of the chosen creature. +SVar:ReplaceETB:Event$ Moved | Destination$ Battlefield | ValidCard$ Creature,Planeswalker | ReplaceWith$ EnterAsCopy | Description$ The next time one or more creatures or planeswalkers enter the battlefield this turn, they enter as copies of the chosen creature. +SVar:EnterAsCopy:DB$ Clone | Defined$ Remembered | CloneTarget$ ReplacedCard | SubAbility$ MoveToBattlefield +SVar:MoveToBattlefield:DB$ InternalEtbReplacement | SubAbility$ DBImprint +SVar:DBImprint:DB$ Pump | ImprintCards$ ReplacedCard +SVar:TrigRemove:Mode$ ChangesZoneAll | CheckSVar$ Z | Execute$ ExileSelf | Static$ True +SVar:ExileSelf:DB$ ChangeZone | Origin$ Command | Destination$ Exile | Defined$ Self +SVar:Z:Imprinted$Amount +K:Foretell:U +AI:RemoveDeck:All +Oracle:Choose target nonlegendary creature. The next time one or more creatures or planeswalkers enter the battlefield this turn, they enter as copies of the chosen creature.\nForetell {U} (During your turn, you may pay {2} and exile this card from your hand face down. Cast it on a later turn for its foretell cost.)