From 3abdeee850bfdb52fc738b396cb5423bf922a378 Mon Sep 17 00:00:00 2001 From: Adam Pantel <> Date: Thu, 1 Apr 2021 16:23:33 -0400 Subject: [PATCH] Combine into one class --- .../java/forge/game/ability/AbilityKey.java | 2 +- ...ava => TriggerSpellAbilityCastOrCopy.java} | 34 ++++-- .../game/trigger/TriggerSpellAbilityCopy.java | 111 ------------------ .../game/trigger/TriggerSpellCastOrCopy.java | 105 ----------------- .../java/forge/game/trigger/TriggerType.java | 12 +- .../main/java/forge/game/zone/MagicStack.java | 22 ++-- 6 files changed, 43 insertions(+), 243 deletions(-) rename forge-game/src/main/java/forge/game/trigger/{TriggerSpellAbilityCast.java => TriggerSpellAbilityCastOrCopy.java} (89%) delete mode 100644 forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCopy.java delete mode 100644 forge-game/src/main/java/forge/game/trigger/TriggerSpellCastOrCopy.java diff --git a/forge-game/src/main/java/forge/game/ability/AbilityKey.java b/forge-game/src/main/java/forge/game/ability/AbilityKey.java index 64ebf3d1fb9..be0632c1ccc 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -25,6 +25,7 @@ public enum AbilityKey { AttackedTarget("AttackedTarget"), Blocker("Blocker"), Blockers("Blockers"), + CastOrCopy("CastOrCopy"), CastSA("CastSA"), CastSACMC("CastSACMC"), Card("Card"), @@ -33,7 +34,6 @@ public enum AbilityKey { Cause("Cause"), Causer("Causer"), Championed("Championed"), - CopySA("CopySA"), Cost("Cost"), CostStack("CostStack"), CounterAmount("CounterAmount"), diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCast.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java similarity index 89% rename from forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCast.java rename to forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java index 29609e96d60..41078435d3f 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCast.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCastOrCopy.java @@ -50,7 +50,7 @@ import forge.util.Localizer; * @author Forge * @version $Id$ */ -public class TriggerSpellAbilityCast extends Trigger { +public class TriggerSpellAbilityCastOrCopy extends Trigger { /** *

@@ -64,7 +64,7 @@ public class TriggerSpellAbilityCast extends Trigger { * @param intrinsic * the intrinsic */ - public TriggerSpellAbilityCast(final Map params, final Card host, final boolean intrinsic) { + public TriggerSpellAbilityCastOrCopy(final Map params, final Card host, final boolean intrinsic) { super(params, host, intrinsic); } @@ -80,17 +80,31 @@ public class TriggerSpellAbilityCast extends Trigger { final Card cast = spellAbility.getHostCard(); final Game game = cast.getGame(); final SpellAbilityStackInstance si = game.getStack().getInstanceFromSpellAbility(spellAbility); + String castOrCopy = (String) runParams.get(AbilityKey.CastOrCopy); - if (this.getMode() == TriggerType.SpellCast) { - if (!spellAbility.isSpell()) { + // Specific checks for trigger types + if (castOrCopy.equals("Copy")) { + if (this.getMode().equals(TriggerType.AbilityCast) || + this.getMode().equals(TriggerType.SpellAbilityCast) || + this.getMode().equals(TriggerType.SpellCast)) { return false; } - } else if (this.getMode() == TriggerType.AbilityCast) { - if (!spellAbility.isAbility()) { + } else if (castOrCopy.equals("Cast")) { + if (this.getMode().equals(TriggerType.SpellAbilityCopy) || + this.getMode().equals(TriggerType.SpellCopy)) { + return false; + } + } + if (spellAbility.isSpell()) { + if (this.getMode().equals(TriggerType.AbilityCast)) { + return false; + } + } else if (spellAbility.isAbility()) { + if (this.getMode().equals(TriggerType.SpellCast) || + this.getMode().equals(TriggerType.SpellCopy) || + this.getMode().equals(TriggerType.SpellCastOrCopy)) { return false; } - } else if (this.getMode() == TriggerType.SpellAbilityCast) { - // Empty block for readability. } if (hasParam("ActivatedOnly")) { @@ -100,6 +114,10 @@ public class TriggerSpellAbilityCast extends Trigger { } + if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) { + return false; + } + if (!matchesValidParam("ValidControllingPlayer", cast.getController())) { return false; } diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCopy.java deleted file mode 100644 index 207b5dbb039..00000000000 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellAbilityCopy.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package forge.game.trigger; - -import java.util.Map; - -import forge.game.Game; -import forge.game.ability.AbilityKey; -import forge.game.card.Card; -import forge.game.spellability.SpellAbility; -import forge.game.spellability.SpellAbilityStackInstance; -import forge.util.Localizer; - -/** - *

- * Trigger_SpellAbilityCopy class. - *

- * - * @author Forge - * @version $Id$ - */ -public class TriggerSpellAbilityCopy extends Trigger { - - /** - *

- * Constructor for Trigger_SpellAbilityCopy. - *

- * - * @param params - * a {@link java.util.HashMap} object. - * @param host - * a {@link forge.game.card.Card} object. - * @param intrinsic - * the intrinsic - */ - public TriggerSpellAbilityCopy(final Map params, final Card host, final boolean intrinsic) { - super(params, host, intrinsic); - } - - /** {@inheritDoc} - * @param runParams*/ - @Override - public final boolean performTest(final Map runParams) { - final SpellAbility spellAbility = (SpellAbility) runParams.get(AbilityKey.CopySA); - if (spellAbility == null) { - System.out.println("TriggerSpellAbilityCopy performTest encountered spellAbility == null. runParams2 = " + runParams); - return false; - } - final Card cast = spellAbility.getHostCard(); - final Game game = cast.getGame(); - final SpellAbilityStackInstance si = game.getStack().getInstanceFromSpellAbility(spellAbility); - - if (this.getMode() == TriggerType.SpellCopy) { - if (!spellAbility.isSpell()) { - return false; - } - } - - if (!matchesValidParam("ValidCard", cast)) { - return false; - } - if (!matchesValidParam("ValidSA", spellAbility)) { - return false; - } - if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) { - return false; - } - - if (hasParam("ValidActivatingPlayer")) { - if (si == null || !matchesValid(si.getSpellAbility(true).getActivatingPlayer(), getParam("ValidActivatingPlayer").split(","))) { - return false; - } - } - return true; - } - - - /** {@inheritDoc} */ - @Override - public final void setTriggeringObjects(final SpellAbility sa, Map runParams) { - final SpellAbility copySA = (SpellAbility) runParams.get(AbilityKey.CopySA); - final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(copySA); - sa.setTriggeringObject(AbilityKey.Card, copySA.getHostCard()); - sa.setTriggeringObject(AbilityKey.SpellAbility, copySA); - sa.setTriggeringObject(AbilityKey.StackInstance, si); - } - - @Override - public String getImportantStackObjects(SpellAbility sa) { - StringBuilder sb = new StringBuilder(); - sb.append(Localizer.getInstance().getMessage("lblCard")).append(": ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", "); - sb.append(Localizer.getInstance().getMessage("lblActivator")).append(": ").append(sa.getTriggeringObject(AbilityKey.Activator)).append(", "); - sb.append(Localizer.getInstance().getMessage("lblSpellAbility")).append(": ").append(sa.getTriggeringObject(AbilityKey.SpellAbility)); - return sb.toString(); - } -} diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerSpellCastOrCopy.java b/forge-game/src/main/java/forge/game/trigger/TriggerSpellCastOrCopy.java deleted file mode 100644 index aefad833d5a..00000000000 --- a/forge-game/src/main/java/forge/game/trigger/TriggerSpellCastOrCopy.java +++ /dev/null @@ -1,105 +0,0 @@ -/* - * Forge: Play Magic: the Gathering. - * Copyright (C) 2011 Forge Team - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - */ -package forge.game.trigger; - -import forge.game.Game; -import forge.game.ability.AbilityKey; -import forge.game.card.Card; -import forge.game.spellability.SpellAbility; -import forge.game.spellability.SpellAbilityStackInstance; -import forge.util.Localizer; - -import java.util.Map; - -/** - *

- * Trigger_SpellAbilityCopy class. - *

- * - * @author Forge - * @version $Id$ - */ -public class TriggerSpellCastOrCopy extends Trigger { - - /** - *

- * Constructor for Trigger_SpellCastOrCopy. - *

- * - * @param params - * a {@link java.util.HashMap} object. - * @param host - * a {@link Card} object. - * @param intrinsic - * the intrinsic - */ - public TriggerSpellCastOrCopy(final Map params, final Card host, final boolean intrinsic) { - super(params, host, intrinsic); - } - - /** {@inheritDoc} - * @param runParams*/ - @Override - public final boolean performTest(final Map runParams) { - final SpellAbility spellAbility = (SpellAbility) runParams.get(AbilityKey.CastSA); - if (spellAbility == null) { - System.out.println("TriggerSpellCastOrCopy performTest encountered spellAbility == null. runParams2 = " + runParams); - return false; - } - final Card cast = spellAbility.getHostCard(); - final Game game = cast.getGame(); - final SpellAbilityStackInstance si = game.getStack().getInstanceFromSpellAbility(spellAbility); - - if (!matchesValidParam("ValidCard", cast)) { - return false; - } - if (!matchesValidParam("ValidSA", spellAbility)) { - return false; - } - if (!matchesValidParam("ValidPlayer", runParams.get(AbilityKey.Player))) { - return false; - } - - if (hasParam("ValidActivatingPlayer")) { - if (si == null || !matchesValid(si.getSpellAbility(true).getActivatingPlayer(), getParam("ValidActivatingPlayer").split(","))) { - return false; - } - } - return true; - } - - - /** {@inheritDoc} */ - @Override - public final void setTriggeringObjects(final SpellAbility sa, Map runParams) { - final SpellAbility castSA = (SpellAbility) runParams.get(AbilityKey.CastSA); - final SpellAbilityStackInstance si = sa.getHostCard().getGame().getStack().getInstanceFromSpellAbility(castSA); - sa.setTriggeringObject(AbilityKey.Card, castSA.getHostCard()); - sa.setTriggeringObject(AbilityKey.SpellAbility, castSA); - sa.setTriggeringObject(AbilityKey.StackInstance, si); - } - - @Override - public String getImportantStackObjects(SpellAbility sa) { - StringBuilder sb = new StringBuilder(); - sb.append(Localizer.getInstance().getMessage("lblCard")).append(": ").append(sa.getTriggeringObject(AbilityKey.Card)).append(", "); - sb.append(Localizer.getInstance().getMessage("lblActivator")).append(": ").append(sa.getTriggeringObject(AbilityKey.Activator)).append(", "); - sb.append(Localizer.getInstance().getMessage("lblSpellAbility")).append(": ").append(sa.getTriggeringObject(AbilityKey.SpellAbility)); - return sb.toString(); - } -} diff --git a/forge-game/src/main/java/forge/game/trigger/TriggerType.java b/forge-game/src/main/java/forge/game/trigger/TriggerType.java index c1f9148207a..21e5c5f99e9 100644 --- a/forge-game/src/main/java/forge/game/trigger/TriggerType.java +++ b/forge-game/src/main/java/forge/game/trigger/TriggerType.java @@ -13,7 +13,7 @@ import forge.game.card.Card; */ public enum TriggerType { Abandoned(TriggerAbandoned.class), - AbilityCast(TriggerSpellAbilityCast.class), + AbilityCast(TriggerSpellAbilityCastOrCopy.class), Adapt(TriggerAdapt.class), Always(TriggerAlways.class), Attached(TriggerAttached.class), @@ -90,11 +90,11 @@ public enum TriggerType { SearchedLibrary(TriggerSearchedLibrary.class), SetInMotion(TriggerSetInMotion.class), Shuffled(TriggerShuffled.class), - SpellAbilityCast(TriggerSpellAbilityCast.class), - SpellAbilityCopy(TriggerSpellAbilityCopy.class), - SpellCast(TriggerSpellAbilityCast.class), - SpellCastOrCopy(TriggerSpellCastOrCopy.class), - SpellCopy(TriggerSpellAbilityCopy.class), + SpellAbilityCast(TriggerSpellAbilityCastOrCopy.class), + SpellAbilityCopy(TriggerSpellAbilityCastOrCopy.class), + SpellCast(TriggerSpellAbilityCastOrCopy.class), + SpellCastOrCopy(TriggerSpellAbilityCastOrCopy.class), + SpellCopy(TriggerSpellAbilityCastOrCopy.class), Surveil(TriggerSurveil.class), Taps(TriggerTaps.class), TapsForMana(TriggerTapsForMana.class), diff --git a/forge-game/src/main/java/forge/game/zone/MagicStack.java b/forge-game/src/main/java/forge/game/zone/MagicStack.java index ceb8b3054e4..1db5c8c21c4 100644 --- a/forge-game/src/main/java/forge/game/zone/MagicStack.java +++ b/forge-game/src/main/java/forge/game/zone/MagicStack.java @@ -293,15 +293,16 @@ public class MagicStack /* extends MyObservable */ implements Iterable runParams = AbilityKey.newMap(); + runParams.put(AbilityKey.Cost, sp.getPayCosts()); + runParams.put(AbilityKey.Player, sp.getHostCard().getController()); + runParams.put(AbilityKey.Activator, sp.getActivatingPlayer()); + runParams.put(AbilityKey.CastSA, si.getSpellAbility(true)); + runParams.put(AbilityKey.CastSACMC, si.getSpellAbility(true).getHostCard().getCMC()); + runParams.put(AbilityKey.CurrentStormCount, thisTurnCast.size()); + runParams.put(AbilityKey.CurrentCastSpells, Lists.newArrayList(thisTurnCast)); if (!sp.isCopied()) { + runParams.put(AbilityKey.CastOrCopy, "Cast"); // Run SpellAbilityCast triggers - runParams.put(AbilityKey.Cost, sp.getPayCosts()); - runParams.put(AbilityKey.Player, sp.getHostCard().getController()); - runParams.put(AbilityKey.Activator, sp.getActivatingPlayer()); - runParams.put(AbilityKey.CastSA, si.getSpellAbility(true)); - runParams.put(AbilityKey.CastSACMC, si.getSpellAbility(true).getHostCard().getCMC()); - runParams.put(AbilityKey.CurrentStormCount, thisTurnCast.size()); - runParams.put(AbilityKey.CurrentCastSpells, Lists.newArrayList(thisTurnCast)); game.getTriggerHandler().runTrigger(TriggerType.SpellAbilityCast, runParams, true); sp.applyPayingManaEffects(); @@ -333,11 +334,8 @@ public class MagicStack /* extends MyObservable */ implements Iterable