From 60fb7d880944518cf17dd09dd95a3454da6b3c2e Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Tue, 24 Sep 2019 22:03:09 -0600 Subject: [PATCH 01/14] add myself to `CONTRIBUTORS.txt` --- forge-gui/release-files/CONTRIBUTORS.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/forge-gui/release-files/CONTRIBUTORS.txt b/forge-gui/release-files/CONTRIBUTORS.txt index 2ff5c065a82..e629c816105 100644 --- a/forge-gui/release-files/CONTRIBUTORS.txt +++ b/forge-gui/release-files/CONTRIBUTORS.txt @@ -19,6 +19,7 @@ Myrd nefigah OgreBattlecruiser pfps +Ryan1729 Seravy Sirspud Sloth From 6da178c8ae0b0be50968a37b0f928cb49e0bb04b Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Tue, 24 Sep 2019 22:31:46 -0600 Subject: [PATCH 02/14] use the same `methodNameOld` trick as before with `runTrigger` --- .../src/main/java/forge/game/GameAction.java | 4 +- .../src/main/java/forge/game/GameEntity.java | 4 +- .../game/ability/effects/CounterEffect.java | 2 +- .../ability/effects/ReplaceDamageEffect.java | 2 +- .../game/ability/effects/ReplaceEffect.java | 2 +- .../effects/ReplaceSplitDamageEffect.java | 2 +- .../src/main/java/forge/game/card/Card.java | 6 +- .../java/forge/game/card/token/TokenInfo.java | 2 +- .../main/java/forge/game/player/Player.java | 16 ++--- .../game/replacement/ReplacementHandler.java | 66 +++++++++++-------- .../game/spellability/AbilityManaPart.java | 2 +- 11 files changed, 60 insertions(+), 48 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 9e3aeb0c06c..4661f40d5dc 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -303,7 +303,7 @@ public class GameAction { repParams.putAll(params); } - ReplacementResult repres = game.getReplacementHandler().run(ReplacementType.Moved, toStringMap(repParams)); + ReplacementResult repres = game.getReplacementHandler().runOld(ReplacementType.Moved, toStringMap(repParams)); if (repres != ReplacementResult.NotReplaced) { // reset failed manifested Cards back to original if (c.isManifested()) { @@ -1404,7 +1404,7 @@ public class GameAction { repRunParams.put("Affected", c); repRunParams.put("Regeneration", regenerate); - if (game.getReplacementHandler().run(ReplacementType.Destroy, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.Destroy, repRunParams) != ReplacementResult.NotReplaced) { return false; } diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index c8a82cbf8d2..d856722e2b7 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -128,7 +128,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { repParams.put("Cause", cause); } - switch (getGame().getReplacementHandler().run(ReplacementType.DamageDone, repParams)) { + switch (getGame().getReplacementHandler().runOld(ReplacementType.DamageDone, repParams)) { case NotReplaced: return damage; case Updated: @@ -181,7 +181,7 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { repParams.put("Cause", cause); } - switch (getGame().getReplacementHandler().run(ReplacementType.DamageDone, repParams)) { + switch (getGame().getReplacementHandler().runOld(ReplacementType.DamageDone, repParams)) { case NotReplaced: restDamage = damage; break; diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index 1c072cf3dba..f26a9bda9e0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -159,7 +159,7 @@ public class CounterEffect extends SpellAbilityEffect { repParams.put("TgtSA", tgtSA); repParams.put("Affected", tgtSA.getHostCard()); repParams.put("Cause", srcSA.getHostCard()); - if (game.getReplacementHandler().run(ReplacementType.Counter, repParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.Counter, repParams) != ReplacementResult.NotReplaced) { return; } game.getStack().remove(si); diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java index 6620b89c346..5c0786596d7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java @@ -61,7 +61,7 @@ public class ReplaceDamageEffect extends SpellAbilityEffect { //try to call replacementHandler with new Params - ReplacementResult result = game.getReplacementHandler().run(event, params); + ReplacementResult result = game.getReplacementHandler().runOld(event, params); switch (result) { case NotReplaced: case Updated: { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java index 260eb307491..168faea6fc6 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java @@ -61,7 +61,7 @@ public class ReplaceEffect extends SpellAbilityEffect { } //try to call replacementHandler with new Params - ReplacementResult result = game.getReplacementHandler().run(retype, params); + ReplacementResult result = game.getReplacementHandler().runOld(retype, params); switch (result) { case NotReplaced: case Updated: { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java index 4d504b97c28..3ec56f5b801 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java @@ -80,7 +80,7 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect { params.put("DamageAmount", dmg); //try to call replacementHandler with new Params - ReplacementResult result = game.getReplacementHandler().run(event, params); + ReplacementResult result = game.getReplacementHandler().runOld(event, params); switch (result) { case NotReplaced: case Updated: { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index f1925b5d307..a2048b02963 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -689,7 +689,7 @@ public class Card extends GameEntity implements Comparable { // Run replacement effects Map repParams = Maps.newHashMap(); repParams.put("Affected", this); - getGame().getReplacementHandler().run(ReplacementType.TurnFaceUp, repParams); + getGame().getReplacementHandler().runOld(ReplacementType.TurnFaceUp, repParams); // Run triggers getGame().getTriggerHandler().registerActiveTrigger(this, false); @@ -1240,7 +1240,7 @@ public class Card extends GameEntity implements Comparable { repParams.put("CounterNum", addAmount); repParams.put("EffectOnly", applyMultiplier); - switch (getGame().getReplacementHandler().run(ReplacementType.AddCounter, repParams)) { + switch (getGame().getReplacementHandler().runOld(ReplacementType.AddCounter, repParams)) { case NotReplaced: break; case Updated: { @@ -3575,7 +3575,7 @@ public class Card extends GameEntity implements Comparable { final Map repRunParams = Maps.newHashMap(); repRunParams.put("Affected", this); - if (getGame().getReplacementHandler().run(ReplacementType.Untap, repRunParams) != ReplacementResult.NotReplaced) { + if (getGame().getReplacementHandler().runOld(ReplacementType.Untap, repRunParams) != ReplacementResult.NotReplaced) { return; } diff --git a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java index 59000cb3b8f..9ce07d63e13 100644 --- a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java +++ b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java @@ -172,7 +172,7 @@ public class TokenInfo { repParams.put("TokenNum", multiplier); repParams.put("EffectOnly", applyMultiplier); - switch (game.getReplacementHandler().run(ReplacementType.CreateToken, repParams)) { + switch (game.getReplacementHandler().runOld(ReplacementType.CreateToken, repParams)) { case NotReplaced: break; case Updated: { diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 02b148414e7..ca6ef357618 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -238,7 +238,7 @@ public class Player extends GameEntity implements Comparable { final Map repRunParams = Maps.newHashMap(); repRunParams.put("Affected", this); - if (game.getReplacementHandler().run(ReplacementType.SetInMotion, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.SetInMotion, repRunParams) != ReplacementResult.NotReplaced) { return; } @@ -412,7 +412,7 @@ public class Player extends GameEntity implements Comparable { return false; } - switch (getGame().getReplacementHandler().run(ReplacementType.GainLife, repParams)) { + switch (getGame().getReplacementHandler().runOld(ReplacementType.GainLife, repParams)) { case NotReplaced: break; case Updated: @@ -921,7 +921,7 @@ public class Player extends GameEntity implements Comparable { repParams.put("CounterNum", addAmount); repParams.put("EffectOnly", applyMultiplier); - switch (getGame().getReplacementHandler().run(ReplacementType.AddCounter, repParams)) { + switch (getGame().getReplacementHandler().runOld(ReplacementType.AddCounter, repParams)) { case NotReplaced: break; case Updated: { @@ -1281,7 +1281,7 @@ public class Player extends GameEntity implements Comparable { repParams.put("Source", cause); repParams.put("SurveilNum", num); - switch (getGame().getReplacementHandler().run(ReplacementType.Surveil, repParams)) { + switch (getGame().getReplacementHandler().runOld(ReplacementType.Surveil, repParams)) { case NotReplaced: break; case Updated: { @@ -1350,7 +1350,7 @@ public class Player extends GameEntity implements Comparable { repRunParams.put("Affected", this); repRunParams.put("Number", n); - if (game.getReplacementHandler().run(ReplacementType.DrawCards, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.DrawCards, repRunParams) != ReplacementResult.NotReplaced) { return drawn; } @@ -1381,7 +1381,7 @@ public class Player extends GameEntity implements Comparable { final Map repRunParams = Maps.newHashMap(); repRunParams.put("Affected", this); - if (game.getReplacementHandler().run(ReplacementType.Draw, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.Draw, repRunParams) != ReplacementResult.NotReplaced) { return drawn; } @@ -1561,7 +1561,7 @@ public class Player extends GameEntity implements Comparable { repRunParams.put("Source", source); repRunParams.put("Affected", this); - if (game.getReplacementHandler().run(ReplacementType.Discard, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.Discard, repRunParams) != ReplacementResult.NotReplaced) { return null; } } @@ -1864,7 +1864,7 @@ public class Player extends GameEntity implements Comparable { final Map runParams = Maps.newHashMap(); runParams.put("Affected", this); - if (game.getReplacementHandler().run(ReplacementType.GameLoss, runParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().runOld(ReplacementType.GameLoss, runParams) != ReplacementResult.NotReplaced) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index 272388ef303..eec2171b2d4 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -21,6 +21,7 @@ import forge.card.MagicColor; import forge.game.Game; import forge.game.GameLogEntryType; import forge.game.ability.AbilityFactory; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardCollection; @@ -40,6 +41,8 @@ import com.google.common.collect.Sets; import java.util.*; +import static forge.util.EnumMapUtil.toStringMap; + public class ReplacementHandler { private final Game game; /** @@ -52,30 +55,6 @@ public class ReplacementHandler { //private final List tmpEffects = new ArrayList(); - public ReplacementResult run(ReplacementType event, final Map runParams) { - final Object affected = runParams.get("Affected"); - Player decider = null; - - // Figure out who decides which of multiple replacements to apply - // as well as whether or not to apply optional replacements. - if (affected instanceof Player) { - decider = (Player) affected; - } else { - decider = ((Card) affected).getController(); - } - - // try out all layer - for (ReplacementLayer layer : ReplacementLayer.values()) { - ReplacementResult res = run(event, runParams, layer, decider); - if (res != ReplacementResult.NotReplaced) { - return res; - } - } - - return ReplacementResult.NotReplaced; - - } - public List getReplacementList(final ReplacementType event, final Map runParams, final ReplacementLayer layer) { final CardCollection preList = new CardCollection(); @@ -171,9 +150,42 @@ public class ReplacementHandler { * * @param runParams * the run params,same as for triggers. - * @return true if the event was replaced. + * @return ReplacementResult, an enum that represents what happened to the replacement effect. */ - public ReplacementResult run(final ReplacementType event, final Map runParams, final ReplacementLayer layer, final Player decider) { + public ReplacementResult run(ReplacementType event, final Map runParams) { + return runOld(event, toStringMap(runParams)); + } + + // The plan is to slowly refactor any usages of runOld to use run. Then we can just inline + // runOld into run and change the code inside to just always use a Map. + // The reason we can't just call them both run is because we get a same erasure compile error if we do. + @Deprecated + public ReplacementResult runOld(ReplacementType event, final Map runParams) { + final Object affected = runParams.get("Affected"); + Player decider = null; + + // Figure out who decides which of multiple replacements to apply + // as well as whether or not to apply optional replacements. + if (affected instanceof Player) { + decider = (Player) affected; + } else { + decider = ((Card) affected).getController(); + } + + // try out all layer + for (ReplacementLayer layer : ReplacementLayer.values()) { + ReplacementResult res = run(event, runParams, layer, decider); + if (res != ReplacementResult.NotReplaced) { + return res; + } + } + + return ReplacementResult.NotReplaced; + + } + + @Deprecated + private ReplacementResult run(final ReplacementType event, final Map runParams, final ReplacementLayer layer, final Player decider) { final List possibleReplacers = getReplacementList(event, runParams, layer); if (possibleReplacers.isEmpty()) { @@ -189,7 +201,7 @@ public class ReplacementHandler { ReplacementResult res = executeReplacement(runParams, chosenRE, decider, game); if (res == ReplacementResult.NotReplaced) { if (!possibleReplacers.isEmpty()) { - res = run(event, runParams); + res = runOld(event, runParams); } chosenRE.setHasRun(false); chosenRE.setOtherChoices(null); diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index 8d1cd6db131..e409f24961d 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -133,7 +133,7 @@ public class AbilityManaPart implements java.io.Serializable { repParams.put("Affected", source); repParams.put("Player", player); repParams.put("AbilityMana", sa); - if (player.getGame().getReplacementHandler().run(ReplacementType.ProduceMana, repParams) != ReplacementResult.NotReplaced) { + if (player.getGame().getReplacementHandler().runOld(ReplacementType.ProduceMana, repParams) != ReplacementResult.NotReplaced) { return; } //clear lastProduced From 5298b8666d9a5b4c2f9b85e4f77b905312be5714 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Wed, 25 Sep 2019 00:04:28 -0600 Subject: [PATCH 03/14] refactor `getReplacementList` to use `AbiltyKey` as much as currently possible --- .../src/main/java/forge/ai/ComputerUtil.java | 24 ++++++++++--------- .../java/forge/ai/ComputerUtilCombat.java | 14 +++++------ .../java/forge/ai/ability/ManifestAi.java | 11 +++++---- .../java/forge/game/ability/AbilityKey.java | 5 +++- .../game/replacement/ReplacementHandler.java | 10 ++++++-- 5 files changed, 38 insertions(+), 26 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index f8550ba8066..102e6ccc4ea 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -29,6 +29,7 @@ import forge.card.MagicColor; import forge.card.mana.ManaCostShard; import forge.game.*; import forge.game.ability.AbilityFactory; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.ability.effects.CharmEffect; @@ -2849,10 +2850,10 @@ public class ComputerUtil { } // Run any applicable replacement effects. - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", player); - repParams.put("LifeGained", 1); - repParams.put("Source", source); + final Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Affected, player); + repParams.put(AbilityKey.LifeGained, 1); + repParams.put(AbilityKey.Source, source); List list = player.getGame().getReplacementHandler().getReplacementList( ReplacementType.GainLife, @@ -2880,15 +2881,16 @@ public class ComputerUtil { } // Run any applicable replacement effects. - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", player); - repParams.put("LifeGained", n); - repParams.put("Source", source); + final Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Affected, player); + repParams.put(AbilityKey.LifeGained, n); + repParams.put(AbilityKey.Source, source); List list = player.getGame().getReplacementHandler().getReplacementList( - ReplacementType.GainLife, - repParams, - ReplacementLayer.Other); + ReplacementType.GainLife, + repParams, + ReplacementLayer.Other + ); if (Iterables.any(list, CardTraitPredicates.hasParam("AiLogic", "NoLife"))) { // no life gain is not negative diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index d1616e3ab7f..7f90ba83941 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -30,6 +30,7 @@ import forge.game.Game; import forge.game.GameEntity; import forge.game.GlobalRuleChange; import forge.game.ability.AbilityFactory; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.card.*; @@ -2583,13 +2584,12 @@ public class ComputerUtilCombat { final Game game = attacker.getGame(); // first try to replace the damage - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", target); - repParams.put("DamageSource", attacker); - repParams.put("DamageAmount", damage); - repParams.put("IsCombat", true); - repParams.put("Prevention", true); - // repParams.put("PreventMap", preventMap); + final Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Affected, target); + repParams.put(AbilityKey.DamageSource, attacker); + repParams.put(AbilityKey.DamageAmount, damage); + repParams.put(AbilityKey.IsCombat, true); + repParams.put(AbilityKey.Prevention, true); List list = game.getReplacementHandler().getReplacementList( ReplacementType.DamageDone, repParams, ReplacementLayer.Other); diff --git a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java index f98cd0bd02e..e913008e014 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java @@ -8,6 +8,7 @@ import forge.ai.ComputerUtilCard; import forge.ai.ComputerUtilMana; import forge.ai.SpellAbilityAi; import forge.game.Game; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.card.CardCollection; import forge.game.card.CardCollectionView; @@ -97,11 +98,11 @@ public class ManifestAi extends SpellAbilityAi { topCopy.turnFaceDownNoUpdate(); topCopy.setManifested(true); - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", topCopy); - repParams.put("Origin", card.getZone().getZoneType()); - repParams.put("Destination", ZoneType.Battlefield); - repParams.put("Source", sa.getHostCard()); + final Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Affected, topCopy); + repParams.put(AbilityKey.Origin, card.getZone().getZoneType()); + repParams.put(AbilityKey.Destination, ZoneType.Battlefield); + repParams.put(AbilityKey.Source, sa.getHostCard()); List list = game.getReplacementHandler().getReplacementList(ReplacementType.Moved, repParams, ReplacementLayer.Other); if (!list.isEmpty()) { return false; 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 a33cd8e8f3e..f97a215bd31 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -59,10 +59,12 @@ public enum AbilityKey { Fighter("Fighter"), FirstTime("FirstTime"), Fizzle("Fizzle"), + IsCombat("IsCombat"), // TODO confirm that this and IsCombatDamage can be merged IsCombatDamage("IsCombatDamage"), IndividualCostPaymentInstance("IndividualCostPaymentInstance"), IsMadness("IsMadness"), - LifeAmount("LifeAmount"), + LifeAmount("LifeAmount"), //TODO confirm that this and LifeGained can be merged + LifeGained("LifeGained"), MonstrosityAmount("MonstrosityAmount"), NewCounterAmount("NewCounterAmount"), Num("Num"), // TODO confirm that this and NumThisTurn can be merged @@ -79,6 +81,7 @@ public enum AbilityKey { PayingMana("PayingMana"), Phase("Phase"), Player("Player"), + Prevention("Prevention"), Produced("Produced"), Result("Result"), Scheme("Scheme"), diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index eec2171b2d4..e33cebcdb25 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -55,7 +55,13 @@ public class ReplacementHandler { //private final List tmpEffects = new ArrayList(); - public List getReplacementList(final ReplacementType event, final Map runParams, final ReplacementLayer layer) { + public List getReplacementList(final ReplacementType event, final Map runParams, final ReplacementLayer layer) { + return getReplacementListOld(event, toStringMap(runParams), layer); + } + // The plan is to slowly refactor any usages of getReplacementListOld to use getReplacementList. Then we can just inline + // getReplacementListOld into getReplacementList and change the code inside to just always use a Map. + // The reason we can't just call them both getReplacementList is because we get a same erasure compile error if we do. + private List getReplacementListOld(final ReplacementType event, final Map runParams, final ReplacementLayer layer) { final CardCollection preList = new CardCollection(); boolean checkAgain = false; @@ -186,7 +192,7 @@ public class ReplacementHandler { @Deprecated private ReplacementResult run(final ReplacementType event, final Map runParams, final ReplacementLayer layer, final Player decider) { - final List possibleReplacers = getReplacementList(event, runParams, layer); + final List possibleReplacers = getReplacementListOld(event, runParams, layer); if (possibleReplacers.isEmpty()) { return ReplacementResult.NotReplaced; From 94b39d726117c2147755336f9100ea5e657449a2 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Wed, 25 Sep 2019 00:17:14 -0600 Subject: [PATCH 04/14] do the first couple `runOld` to `run refactors --- forge-game/src/main/java/forge/game/GameAction.java | 2 +- forge-game/src/main/java/forge/game/card/Card.java | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 4661f40d5dc..a7e6ac0045e 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -303,7 +303,7 @@ public class GameAction { repParams.putAll(params); } - ReplacementResult repres = game.getReplacementHandler().runOld(ReplacementType.Moved, toStringMap(repParams)); + ReplacementResult repres = game.getReplacementHandler().run(ReplacementType.Moved, repParams); if (repres != ReplacementResult.NotReplaced) { // reset failed manifested Cards back to original if (c.isManifested()) { diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index a2048b02963..85928cf97c5 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -687,9 +687,9 @@ public class Card extends GameEntity implements Comparable { if (result && runTriggers) { // Run replacement effects - Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - getGame().getReplacementHandler().runOld(ReplacementType.TurnFaceUp, repParams); + Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Affected, this); + getGame().getReplacementHandler().run(ReplacementType.TurnFaceUp, repParams); // Run triggers getGame().getTriggerHandler().registerActiveTrigger(this, false); From 9d39ce5dda25aa3254dae7180007343594ce6f78 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Wed, 25 Sep 2019 00:31:35 -0600 Subject: [PATCH 05/14] remove unused import --- forge-game/src/main/java/forge/game/GameAction.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index a7e6ac0045e..165c9247d79 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -55,8 +55,6 @@ import org.apache.commons.lang3.tuple.ImmutablePair; import java.util.*; -import static forge.util.EnumMapUtil.toStringMap; - /** * Methods for common actions performed during a game. * From 15e5d68520eb37437ea53394bfeda7644e50e5eb Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 25 Sep 2019 08:03:32 +0000 Subject: [PATCH 06/14] Update ManifestAi: unused import --- forge-ai/src/main/java/forge/ai/ability/ManifestAi.java | 1 - 1 file changed, 1 deletion(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java index e913008e014..f5b399102a3 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java @@ -2,7 +2,6 @@ package forge.ai.ability; import com.google.common.base.Predicate; import com.google.common.collect.Iterables; -import com.google.common.collect.Maps; import forge.ai.ComputerUtil; import forge.ai.ComputerUtilCard; import forge.ai.ComputerUtilMana; From c9b66d974320e832694fa005b691dfae0f62da99 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Wed, 25 Sep 2019 19:50:00 -0600 Subject: [PATCH 07/14] add `mapFromAffected` convenience function --- forge-ai/src/main/java/forge/ai/ComputerUtil.java | 6 ++---- forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java | 3 +-- forge-ai/src/main/java/forge/ai/ability/ManifestAi.java | 3 +-- forge-game/src/main/java/forge/game/GameAction.java | 3 +-- .../src/main/java/forge/game/ability/AbilityKey.java | 8 ++++++++ forge-game/src/main/java/forge/game/card/Card.java | 4 +--- 6 files changed, 14 insertions(+), 13 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtil.java b/forge-ai/src/main/java/forge/ai/ComputerUtil.java index 102e6ccc4ea..f6c451b0668 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtil.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtil.java @@ -2850,8 +2850,7 @@ public class ComputerUtil { } // Run any applicable replacement effects. - final Map repParams = AbilityKey.newMap(); - repParams.put(AbilityKey.Affected, player); + final Map repParams = AbilityKey.mapFromAffected(player); repParams.put(AbilityKey.LifeGained, 1); repParams.put(AbilityKey.Source, source); @@ -2881,8 +2880,7 @@ public class ComputerUtil { } // Run any applicable replacement effects. - final Map repParams = AbilityKey.newMap(); - repParams.put(AbilityKey.Affected, player); + final Map repParams = AbilityKey.mapFromAffected(player); repParams.put(AbilityKey.LifeGained, n); repParams.put(AbilityKey.Source, source); diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java index 7f90ba83941..a81da13c9ba 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilCombat.java @@ -2584,8 +2584,7 @@ public class ComputerUtilCombat { final Game game = attacker.getGame(); // first try to replace the damage - final Map repParams = AbilityKey.newMap(); - repParams.put(AbilityKey.Affected, target); + final Map repParams = AbilityKey.mapFromAffected(target); repParams.put(AbilityKey.DamageSource, attacker); repParams.put(AbilityKey.DamageAmount, damage); repParams.put(AbilityKey.IsCombat, true); diff --git a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java index e913008e014..6983e70b096 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ManifestAi.java @@ -98,8 +98,7 @@ public class ManifestAi extends SpellAbilityAi { topCopy.turnFaceDownNoUpdate(); topCopy.setManifested(true); - final Map repParams = AbilityKey.newMap(); - repParams.put(AbilityKey.Affected, topCopy); + final Map repParams = AbilityKey.mapFromAffected(topCopy); repParams.put(AbilityKey.Origin, card.getZone().getZoneType()); repParams.put(AbilityKey.Destination, ZoneType.Battlefield); repParams.put(AbilityKey.Source, sa.getHostCard()); diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 165c9247d79..6311663807c 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -290,8 +290,7 @@ public class GameAction { copied.getOwner().addInboundToken(copied); } - Map repParams = AbilityKey.newMap(); - repParams.put(AbilityKey.Affected, copied); + Map repParams = AbilityKey.mapFromAffected(copied); repParams.put(AbilityKey.CardLKI, lastKnownInfo); repParams.put(AbilityKey.Cause, cause); repParams.put(AbilityKey.Origin, zoneFrom != null ? zoneFrom.getZoneType() : null); 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 f97a215bd31..8307cb95cbd 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -3,6 +3,7 @@ package forge.game.ability; import java.util.EnumMap; import java.util.Map; +import forge.game.GameEntity; import forge.game.card.Card; /** @@ -144,4 +145,11 @@ public enum AbilityKey { runParams.put(Card, card); return runParams; } + + public static Map mapFromAffected(GameEntity gameEntity) { + final Map runParams = newMap(); + + runParams.put(Affected, gameEntity); + return runParams; + } } diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 85928cf97c5..4beb976b28c 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -687,9 +687,7 @@ public class Card extends GameEntity implements Comparable { if (result && runTriggers) { // Run replacement effects - Map repParams = AbilityKey.newMap(); - repParams.put(AbilityKey.Affected, this); - getGame().getReplacementHandler().run(ReplacementType.TurnFaceUp, repParams); + getGame().getReplacementHandler().run(ReplacementType.TurnFaceUp, AbilityKey.mapFromAffected(this)); // Run triggers getGame().getTriggerHandler().registerActiveTrigger(this, false); From a9e97d65085edfdf63836332a383bb1b88134b87 Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Thu, 26 Sep 2019 12:29:52 +0000 Subject: [PATCH 08/14] Update Player: use some mapFromAffected --- .../src/main/java/forge/game/player/Player.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index ca6ef357618..898ef9d1b3e 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -235,10 +235,7 @@ public class Player extends GameEntity implements Comparable { } // Replacement effects - final Map repRunParams = Maps.newHashMap(); - repRunParams.put("Affected", this); - - if (game.getReplacementHandler().runOld(ReplacementType.SetInMotion, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().run(ReplacementType.SetInMotion, AbilityKey.mapFromAffected(this)) != ReplacementResult.NotReplaced) { return; } @@ -1378,10 +1375,7 @@ public class Player extends GameEntity implements Comparable { final PlayerZone library = getZone(ZoneType.Library); // Replacement effects - final Map repRunParams = Maps.newHashMap(); - repRunParams.put("Affected", this); - - if (game.getReplacementHandler().runOld(ReplacementType.Draw, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().run(ReplacementType.Draw, AbilityKey.mapFromAffected(this)) != ReplacementResult.NotReplaced) { return drawn; } @@ -1861,10 +1855,7 @@ public class Player extends GameEntity implements Comparable { } // Replacement effects - final Map runParams = Maps.newHashMap(); - runParams.put("Affected", this); - - if (game.getReplacementHandler().runOld(ReplacementType.GameLoss, runParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().run(ReplacementType.GameLoss, AbilityKey.mapFromAffected(this)) != ReplacementResult.NotReplaced) { return false; } } From a3b0d8ac3cd4bcda83eb50c71d5ce76c98fd0685 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Fri, 27 Sep 2019 01:25:04 -0600 Subject: [PATCH 09/14] do the remaining easy `repRunParams` changeovers --- .../src/main/java/forge/game/GameAction.java | 11 ++-- .../src/main/java/forge/game/GameEntity.java | 44 +++++++-------- .../java/forge/game/ability/AbilityKey.java | 12 ++++ .../game/ability/effects/CounterEffect.java | 9 ++- .../src/main/java/forge/game/card/Card.java | 20 +++---- .../java/forge/game/card/token/TokenInfo.java | 18 +++--- .../main/java/forge/game/player/Player.java | 55 +++++++++---------- .../game/spellability/AbilityManaPart.java | 11 ++-- 8 files changed, 89 insertions(+), 91 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 6311663807c..8760379783a 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -1395,13 +1395,12 @@ public class GameAction { } // Replacement effects - final Map repRunParams = Maps.newHashMap(); - repRunParams.put("Source", sa); - repRunParams.put("Card", c); - repRunParams.put("Affected", c); - repRunParams.put("Regeneration", regenerate); + final Map repRunParams = AbilityKey.mapFromCard(c); + repRunParams.put(AbilityKey.Source, sa); + repRunParams.put(AbilityKey.Affected, c); + repRunParams.put(AbilityKey.Regeneration, regenerate); - if (game.getReplacementHandler().runOld(ReplacementType.Destroy, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().run(ReplacementType.Destroy, repRunParams) != ReplacementResult.NotReplaced) { return false; } diff --git a/forge-game/src/main/java/forge/game/GameEntity.java b/forge-game/src/main/java/forge/game/GameEntity.java index d856722e2b7..9c9bbd46c3d 100644 --- a/forge-game/src/main/java/forge/game/GameEntity.java +++ b/forge-game/src/main/java/forge/game/GameEntity.java @@ -115,25 +115,24 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { public int replaceDamage(final int damage, final Card source, final boolean isCombat, final boolean prevention, final CardDamageMap damageMap, final CardDamageMap preventMap, GameEntityCounterTable counterTable, final SpellAbility cause) { // Replacement effects - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - repParams.put("DamageSource", source); - repParams.put("DamageAmount", damage); - repParams.put("IsCombat", isCombat); - repParams.put("NoPreventDamage", !prevention); - repParams.put("DamageMap", damageMap); - repParams.put("PreventMap", preventMap); - repParams.put("CounterTable", counterTable); + final Map repParams = AbilityKey.mapFromAffected(this); + repParams.put(AbilityKey.DamageSource, source); + repParams.put(AbilityKey.DamageAmount, damage); + repParams.put(AbilityKey.IsCombat, isCombat); + repParams.put(AbilityKey.NoPreventDamage, !prevention); + repParams.put(AbilityKey.DamageMap, damageMap); + repParams.put(AbilityKey.PreventMap, preventMap); + repParams.put(AbilityKey.CounterTable, counterTable); if (cause != null) { - repParams.put("Cause", cause); + repParams.put(AbilityKey.Cause, cause); } - switch (getGame().getReplacementHandler().runOld(ReplacementType.DamageDone, repParams)) { + switch (getGame().getReplacementHandler().run(ReplacementType.DamageDone, repParams)) { case NotReplaced: return damage; case Updated: - int newDamage = (int) repParams.get("DamageAmount"); - GameEntity newTarget = (GameEntity) repParams.get("Affected"); + int newDamage = (int) repParams.get(AbilityKey.DamageAmount); + GameEntity newTarget = (GameEntity) repParams.get(AbilityKey.Affected); // check if this is still the affected card or player if (this.equals(newTarget)) { return newDamage; @@ -170,23 +169,22 @@ public abstract class GameEntity extends GameObject implements IIdentifiable { int restDamage = damage; // first try to replace the damage - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - repParams.put("DamageSource", source); - repParams.put("DamageAmount", damage); - repParams.put("IsCombat", isCombat); - repParams.put("Prevention", true); - repParams.put("PreventMap", preventMap); + final Map repParams = AbilityKey.mapFromAffected(this); + repParams.put(AbilityKey.DamageSource, source); + repParams.put(AbilityKey.DamageAmount, damage); + repParams.put(AbilityKey.IsCombat, isCombat); + repParams.put(AbilityKey.Prevention, true); + repParams.put(AbilityKey.PreventMap, preventMap); if (cause != null) { - repParams.put("Cause", cause); + repParams.put(AbilityKey.Cause, cause); } - switch (getGame().getReplacementHandler().runOld(ReplacementType.DamageDone, repParams)) { + switch (getGame().getReplacementHandler().run(ReplacementType.DamageDone, repParams)) { case NotReplaced: restDamage = damage; break; case Updated: - restDamage = (int) repParams.get("DamageAmount"); + restDamage = (int) repParams.get(AbilityKey.DamageAmount); break; default: restDamage = 0; 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 8307cb95cbd..c2ce43ef6e3 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -38,12 +38,15 @@ public enum AbilityKey { CostStack("CostStack"), CounterAmount("CounterAmount"), CounteredSA("CounteredSA"), + CounterNum("CounterNum"), + CounterTable("CounterTable"), CounterType("CounterType"), Crew("Crew"), CumulativeUpkeepPaid("CumulativeUpkeepPaid"), CurrentCastSpells("CurrentCastSpells"), CurrentStormCount("CurrentStormCount"), DamageAmount("DamageAmount"), + DamageMap("DamageMap"), DamageSource("DamageSource"), DamageSources("DamageSources"), DamageTarget("DamageTarget"), @@ -54,6 +57,7 @@ public enum AbilityKey { Destination("Destination"), Devoured("Devoured"), EchoPaid("EchoPaid"), + EffectOnly("EffectOnly"), Exploited("Exploited"), Explorer("Explorer"), Event("Event"), @@ -66,8 +70,10 @@ public enum AbilityKey { IsMadness("IsMadness"), LifeAmount("LifeAmount"), //TODO confirm that this and LifeGained can be merged LifeGained("LifeGained"), + Mana("Mana"), MonstrosityAmount("MonstrosityAmount"), NewCounterAmount("NewCounterAmount"), + NoPreventDamage("NoPreventDamage"), Num("Num"), // TODO confirm that this and NumThisTurn can be merged NumBlockers("NumBlockers"), NumThisTurn("NumThisTurn"), @@ -82,8 +88,10 @@ public enum AbilityKey { PayingMana("PayingMana"), Phase("Phase"), Player("Player"), + PreventMap("PreventMap"), Prevention("Prevention"), Produced("Produced"), + Regeneration("Regeneration"), Result("Result"), Scheme("Scheme"), Source("Source"), @@ -95,8 +103,12 @@ public enum AbilityKey { StackInstance("StackInstance"), StackSa("StackSa"), StackSi("StackSi"), + SurveilNum("SurveilNum"), Target("Target"), Targets("Targets"), + TgtSA("TgtSA"), + Token("Token"), + TokenNum("TokenNum"), Transformer("Transformer"), Vehicle("Vehicle"), Won("Won"); diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index f26a9bda9e0..2b05fa8f0d0 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -155,11 +155,10 @@ public class CounterEffect extends SpellAbilityEffect { final SpellAbility srcSA, final SpellAbilityStackInstance si) { final Game game = tgtSA.getActivatingPlayer().getGame(); // Run any applicable replacement effects. - final Map repParams = Maps.newHashMap(); - repParams.put("TgtSA", tgtSA); - repParams.put("Affected", tgtSA.getHostCard()); - repParams.put("Cause", srcSA.getHostCard()); - if (game.getReplacementHandler().runOld(ReplacementType.Counter, repParams) != ReplacementResult.NotReplaced) { + final Map repParams = AbilityKey.mapFromAffected(tgtSA.getHostCard()); + repParams.put(AbilityKey.TgtSA, tgtSA); + repParams.put(AbilityKey.Cause, srcSA.getHostCard()); + if (game.getReplacementHandler().run(ReplacementType.Counter, repParams) != ReplacementResult.NotReplaced) { return; } game.getStack().remove(si); diff --git a/forge-game/src/main/java/forge/game/card/Card.java b/forge-game/src/main/java/forge/game/card/Card.java index 4beb976b28c..f242d4fd4e1 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -1231,18 +1231,17 @@ public class Card extends GameEntity implements Comparable { addAmount = 0; // As per rule 107.1b return 0; } - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - repParams.put("Source", source); - repParams.put("CounterType", counterType); - repParams.put("CounterNum", addAmount); - repParams.put("EffectOnly", applyMultiplier); + final Map repParams = AbilityKey.mapFromAffected(this); + repParams.put(AbilityKey.Source, source); + repParams.put(AbilityKey.CounterType, counterType); + repParams.put(AbilityKey.CounterNum, addAmount); + repParams.put(AbilityKey.EffectOnly, applyMultiplier); - switch (getGame().getReplacementHandler().runOld(ReplacementType.AddCounter, repParams)) { + switch (getGame().getReplacementHandler().run(ReplacementType.AddCounter, repParams)) { case NotReplaced: break; case Updated: { - addAmount = (int) repParams.get("CounterNum"); + addAmount = (int) repParams.get(AbilityKey.CounterNum); break; } default: @@ -3570,10 +3569,7 @@ public class Card extends GameEntity implements Comparable { if (!tapped) { return; } // Run Replacement effects - final Map repRunParams = Maps.newHashMap(); - repRunParams.put("Affected", this); - - if (getGame().getReplacementHandler().runOld(ReplacementType.Untap, repRunParams) != ReplacementResult.NotReplaced) { + if (getGame().getReplacementHandler().run(ReplacementType.Untap, AbilityKey.mapFromAffected(this)) != ReplacementResult.NotReplaced) { return; } diff --git a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java index 9ce07d63e13..9018ea93840 100644 --- a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java +++ b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java @@ -9,6 +9,7 @@ import forge.StaticData; import forge.card.CardType; import forge.card.MagicColor; import forge.game.Game; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardFactory; @@ -166,19 +167,18 @@ public class TokenInfo { Player player = controller; Card proto = prototype; - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", player); - repParams.put("Token", prototype); - repParams.put("TokenNum", multiplier); - repParams.put("EffectOnly", applyMultiplier); + final Map repParams = AbilityKey.mapFromAffected(player); + repParams.put(AbilityKey.Token, prototype); + repParams.put(AbilityKey.TokenNum, multiplier); + repParams.put(AbilityKey.EffectOnly, applyMultiplier); - switch (game.getReplacementHandler().runOld(ReplacementType.CreateToken, repParams)) { + switch (game.getReplacementHandler().run(ReplacementType.CreateToken, repParams)) { case NotReplaced: break; case Updated: { - multiplier = (int) repParams.get("TokenNum"); - player = (Player) repParams.get("Affected"); - proto = (Card) repParams.get("Token"); + multiplier = (int) repParams.get(AbilityKey.TokenNum); + player = (Player) repParams.get(AbilityKey.Affected); + proto = (Card) repParams.get(AbilityKey.Token); break; } default: diff --git a/forge-game/src/main/java/forge/game/player/Player.java b/forge-game/src/main/java/forge/game/player/Player.java index 898ef9d1b3e..65e2d8702b7 100644 --- a/forge-game/src/main/java/forge/game/player/Player.java +++ b/forge-game/src/main/java/forge/game/player/Player.java @@ -400,22 +400,21 @@ public class Player extends GameEntity implements Comparable { public final boolean gainLife(int lifeGain, final Card source, final SpellAbility sa) { // Run any applicable replacement effects. - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - repParams.put("LifeGained", lifeGain); - repParams.put("Source", source); + final Map repParams = AbilityKey.mapFromAffected(this); + repParams.put(AbilityKey.LifeGained, lifeGain); + repParams.put(AbilityKey.Source, source); if (!canGainLife()) { return false; } - switch (getGame().getReplacementHandler().runOld(ReplacementType.GainLife, repParams)) { + switch (getGame().getReplacementHandler().run(ReplacementType.GainLife, repParams)) { case NotReplaced: break; case Updated: // check if this is still the affected player - if (this.equals(repParams.get("Affected"))) { - lifeGain = (int) repParams.get("LifeGained"); + if (this.equals(repParams.get(AbilityKey.Affected))) { + lifeGain = (int) repParams.get(AbilityKey.LifeGained); // negative update means life loss if (lifeGain < 0) { this.loseLife(-lifeGain); @@ -911,18 +910,17 @@ public class Player extends GameEntity implements Comparable { return 0; } - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - repParams.put("Source", source); - repParams.put("CounterType", counterType); - repParams.put("CounterNum", addAmount); - repParams.put("EffectOnly", applyMultiplier); + final Map repParams = AbilityKey.mapFromAffected(this); + repParams.put(AbilityKey.Source, source); + repParams.put(AbilityKey.CounterType, counterType); + repParams.put(AbilityKey.CounterNum, addAmount); + repParams.put(AbilityKey.EffectOnly, applyMultiplier); - switch (getGame().getReplacementHandler().runOld(ReplacementType.AddCounter, repParams)) { + switch (getGame().getReplacementHandler().run(ReplacementType.AddCounter, repParams)) { case NotReplaced: break; case Updated: { - addAmount = (int) repParams.get("CounterNum"); + addAmount = (int) repParams.get(AbilityKey.CounterNum); break; } default: @@ -1273,16 +1271,15 @@ public class Player extends GameEntity implements Comparable { public void surveil(int num, SpellAbility cause) { - final Map repParams = Maps.newHashMap(); - repParams.put("Affected", this); - repParams.put("Source", cause); - repParams.put("SurveilNum", num); + final Map repParams = AbilityKey.mapFromAffected(this); + repParams.put(AbilityKey.Source, cause); + repParams.put(AbilityKey.SurveilNum, num); - switch (getGame().getReplacementHandler().runOld(ReplacementType.Surveil, repParams)) { + switch (getGame().getReplacementHandler().run(ReplacementType.Surveil, repParams)) { case NotReplaced: break; case Updated: { - num = (int) repParams.get("SurveilNum"); + num = (int) repParams.get(AbilityKey.SurveilNum); break; } default: @@ -1343,11 +1340,10 @@ public class Player extends GameEntity implements Comparable { final CardCollection toReveal = new CardCollection(); // Replacement effects - final Map repRunParams = Maps.newHashMap(); - repRunParams.put("Affected", this); - repRunParams.put("Number", n); + final Map repRunParams = AbilityKey.mapFromAffected(this); + repRunParams.put(AbilityKey.Number, n); - if (game.getReplacementHandler().runOld(ReplacementType.DrawCards, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().run(ReplacementType.DrawCards, repRunParams) != ReplacementResult.NotReplaced) { return drawn; } @@ -1550,12 +1546,11 @@ public class Player extends GameEntity implements Comparable { // that should not trigger other Replacement again if (!discardToTopOfLibrary && !discardMadness) { // Replacement effects - final Map repRunParams = Maps.newHashMap(); - repRunParams.put("Card", c); - repRunParams.put("Source", source); - repRunParams.put("Affected", this); + final Map repRunParams = AbilityKey.mapFromCard(c); + repRunParams.put(AbilityKey.Source, source); + repRunParams.put(AbilityKey.Affected, this); - if (game.getReplacementHandler().runOld(ReplacementType.Discard, repRunParams) != ReplacementResult.NotReplaced) { + if (game.getReplacementHandler().run(ReplacementType.Discard, repRunParams) != ReplacementResult.NotReplaced) { return null; } } diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index e409f24961d..9dfae9446b8 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -128,12 +128,11 @@ public class AbilityManaPart implements java.io.Serializable { final Card source = this.getSourceCard(); final ManaPool manaPool = player.getManaPool(); String afterReplace = applyManaReplacement(sa, produced); - final Map repParams = Maps.newHashMap(); - repParams.put("Mana", afterReplace); - repParams.put("Affected", source); - repParams.put("Player", player); - repParams.put("AbilityMana", sa); - if (player.getGame().getReplacementHandler().runOld(ReplacementType.ProduceMana, repParams) != ReplacementResult.NotReplaced) { + final Map repParams = AbilityKey.mapFromAffected(source); + repParams.put(AbilityKey.Mana, afterReplace); + repParams.put(AbilityKey.Player, player); + repParams.put(AbilityKey.AbilityMana, sa); + if (player.getGame().getReplacementHandler().run(ReplacementType.ProduceMana, repParams) != ReplacementResult.NotReplaced) { return; } //clear lastProduced From df4b0b03b97060402ff14d3b9a1c7d3c3f74a0a7 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Fri, 27 Sep 2019 17:13:44 -0600 Subject: [PATCH 10/14] remove `runOld` and `getReplacementListOld` --- .../src/main/java/forge/ai/AiController.java | 3 +- .../java/forge/ai/PlayerControllerAi.java | 4 +- .../java/forge/ai/ability/ChangeZoneAi.java | 5 +- .../java/forge/game/ability/AbilityKey.java | 2 + .../ability/effects/ReplaceDamageEffect.java | 19 +++--- .../game/ability/effects/ReplaceEffect.java | 19 +++--- .../effects/ReplaceSplitDamageEffect.java | 33 ++++++----- .../forge/game/player/PlayerController.java | 2 +- .../game/replacement/ReplacementHandler.java | 59 +++++++------------ .../forge/game/spellability/SpellAbility.java | 12 ++++ .../util/PlayerControllerForTests.java | 2 +- .../forge/player/PlayerControllerHuman.java | 2 +- 12 files changed, 82 insertions(+), 80 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/AiController.java b/forge-ai/src/main/java/forge/ai/AiController.java index 4add78baf31..391d83cdcdd 100644 --- a/forge-ai/src/main/java/forge/ai/AiController.java +++ b/forge-ai/src/main/java/forge/ai/AiController.java @@ -2079,8 +2079,7 @@ public class AiController { return true; } - public ReplacementEffect chooseSingleReplacementEffect(List list, - Map runParams) { + public ReplacementEffect chooseSingleReplacementEffect(List list) { // no need to choose anything if (list.size() <= 1) { return Iterables.getFirst(list, null); diff --git a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java index 3f461395650..d7042d89276 100644 --- a/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java +++ b/forge-ai/src/main/java/forge/ai/PlayerControllerAi.java @@ -866,8 +866,8 @@ public class PlayerControllerAi extends PlayerController { } @Override - public ReplacementEffect chooseSingleReplacementEffect(String prompt, List possibleReplacers, Map runParams) { - return brains.chooseSingleReplacementEffect(possibleReplacers, runParams); + public ReplacementEffect chooseSingleReplacementEffect(String prompt, List possibleReplacers) { + return brains.chooseSingleReplacementEffect(possibleReplacers); } @Override diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index 0a747747895..ecaa91b27d0 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -10,6 +10,7 @@ import forge.card.MagicColor; import forge.game.Game; import forge.game.GameObject; import forge.game.GlobalRuleChange; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.card.*; @@ -1789,8 +1790,8 @@ public class ChangeZoneAi extends SpellAbilityAi { } public boolean doReturnCommanderLogic(SpellAbility sa, Player aiPlayer) { - Map originalParams = (Map)sa.getReplacingObject("OriginalParams"); - SpellAbility causeSa = (SpellAbility)originalParams.get("Cause"); + Map originalParams = (Map)sa.getReplacingObject(AbilityKey.OriginalParams); + SpellAbility causeSa = (SpellAbility)originalParams.get(AbilityKey.Cause); SpellAbility causeSub = null; // Squee, the Immortal: easier to recast it (the call below has to be "contains" since SA is an intrinsic effect) 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 c2ce43ef6e3..4821b088c8a 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityKey.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityKey.java @@ -85,6 +85,7 @@ public enum AbilityKey { Origin("Origin"), OriginalController("OriginalController"), OriginalDefender("OriginalDefender"), + OriginalParams("OriginalParams"), PayingMana("PayingMana"), Phase("Phase"), Player("Player"), @@ -92,6 +93,7 @@ public enum AbilityKey { Prevention("Prevention"), Produced("Produced"), Regeneration("Regeneration"), + ReplacementResult("ReplacementResult"), Result("Result"), Scheme("Scheme"), Source("Source"), diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java index 5c0786596d7..e8ea9c504f9 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java @@ -2,6 +2,7 @@ package forge.game.ability.effects; import java.util.Map; +import forge.game.ability.AbilityKey; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Maps; @@ -31,10 +32,10 @@ public class ReplaceDamageEffect extends SpellAbilityEffect { String varValue = sa.getParamOrDefault("VarName", "1"); @SuppressWarnings("unchecked") - Map originalParams = (Map) sa.getReplacingObject("OriginalParams"); - Map params = Maps.newHashMap(originalParams); + Map originalParams = (Map) sa.getReplacingObject(AbilityKey.OriginalParams); + Map params = AbilityKey.newMap(originalParams); - Integer dmg = (Integer) sa.getReplacingObject("DamageAmount"); + Integer dmg = (Integer) sa.getReplacingObject(AbilityKey.DamageAmount); int prevent = AbilityUtils.calculateAmount(card, varValue, sa); @@ -54,27 +55,27 @@ public class ReplaceDamageEffect extends SpellAbilityEffect { // no damage for original target anymore if (dmg <= 0) { - originalParams.put("ReplacementResult", ReplacementResult.Replaced); + originalParams.put(AbilityKey.ReplacementResult, ReplacementResult.Replaced); return; } - params.put("DamageAmount", dmg); + params.put(AbilityKey.DamageAmount, dmg); //try to call replacementHandler with new Params - ReplacementResult result = game.getReplacementHandler().runOld(event, params); + ReplacementResult result = game.getReplacementHandler().run(event, params); switch (result) { case NotReplaced: case Updated: { - for (Map.Entry e : params.entrySet()) { + for (Map.Entry e : params.entrySet()) { originalParams.put(e.getKey(), e.getValue()); } // effect was updated - originalParams.put("ReplacementResult", ReplacementResult.Updated); + originalParams.put(AbilityKey.ReplacementResult, ReplacementResult.Updated); break; } default: // effect was replaced with something else - originalParams.put("ReplacementResult", result); + originalParams.put(AbilityKey.ReplacementResult, result); break; } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java index 168faea6fc6..af761de13fb 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceEffect.java @@ -7,6 +7,7 @@ import com.google.common.collect.Maps; import forge.game.Game; import forge.game.GameObject; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; @@ -23,14 +24,14 @@ public class ReplaceEffect extends SpellAbilityEffect { final Card card = sa.getHostCard(); final Game game = card.getGame(); - final String varName = sa.getParam("VarName"); + final AbilityKey varName = AbilityKey.fromString(sa.getParam("VarName")); final String varValue = sa.getParam("VarValue"); final String type = sa.getParamOrDefault("VarType", "amount"); final ReplacementType retype = sa.getReplacementEffect().getMode(); @SuppressWarnings("unchecked") - Map originalParams = (Map) sa.getReplacingObject("OriginalParams"); - Map params = Maps.newHashMap(originalParams); + Map originalParams = (Map) sa.getReplacingObject(AbilityKey.OriginalParams); + Map params = Maps.newHashMap(originalParams); if ("Card".equals(type)) { List list = AbilityUtils.getDefinedCards(card, varValue, sa); @@ -56,25 +57,25 @@ public class ReplaceEffect extends SpellAbilityEffect { params.put(varName, AbilityUtils.calculateAmount(card, varValue, sa)); } - if (params.containsKey("EffectOnly")) { - params.put("EffectOnly", true); + if (params.containsKey(AbilityKey.EffectOnly)) { + params.put(AbilityKey.EffectOnly, true); } //try to call replacementHandler with new Params - ReplacementResult result = game.getReplacementHandler().runOld(retype, params); + ReplacementResult result = game.getReplacementHandler().run(retype, params); switch (result) { case NotReplaced: case Updated: { - for (Map.Entry e : params.entrySet()) { + for (Map.Entry e : params.entrySet()) { originalParams.put(e.getKey(), e.getValue()); } // effect was updated - originalParams.put("ReplacementResult", ReplacementResult.Updated); + originalParams.put(AbilityKey.ReplacementResult, ReplacementResult.Updated); break; } default: // effect was replaced with something else - originalParams.put("ReplacementResult", result); + originalParams.put(AbilityKey.ReplacementResult, result); break; } } diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java index 3ec56f5b801..f97e17b1612 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java @@ -3,6 +3,7 @@ package forge.game.ability.effects; import java.util.List; import java.util.Map; +import forge.game.ability.AbilityKey; import org.apache.commons.lang3.StringUtils; import com.google.common.collect.Maps; @@ -36,10 +37,10 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect { String varValue = sa.getParamOrDefault("VarName", "1"); @SuppressWarnings("unchecked") - Map originalParams = (Map) sa.getReplacingObject("OriginalParams"); - Map params = Maps.newHashMap(originalParams); + Map originalParams = (Map) sa.getReplacingObject(AbilityKey.OriginalParams); + Map params = AbilityKey.newMap(originalParams); - Integer dmg = (Integer) sa.getReplacingObject("DamageAmount"); + Integer dmg = (Integer) sa.getReplacingObject(AbilityKey.DamageAmount); int prevent = AbilityUtils.calculateAmount(card, varValue, sa); @@ -57,15 +58,15 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect { card.setSVar(varValue, "Number$" + prevent); } - Card sourceLKI = (Card) sa.getReplacingObject("Source"); + Card sourceLKI = (Card) sa.getReplacingObject(AbilityKey.Source); - CardDamageMap damageMap = (CardDamageMap) originalParams.get("DamageMap"); - CardDamageMap preventMap = (CardDamageMap) originalParams.get("PreventMap"); - GameEntityCounterTable counterTable = (GameEntityCounterTable) originalParams.get("CounterTable"); - SpellAbility cause = (SpellAbility) originalParams.get("Cause"); + CardDamageMap damageMap = (CardDamageMap) originalParams.get(AbilityKey.DamageMap); + CardDamageMap preventMap = (CardDamageMap) originalParams.get(AbilityKey.PreventMap); + GameEntityCounterTable counterTable = (GameEntityCounterTable) originalParams.get(AbilityKey.CounterTable); + SpellAbility cause = (SpellAbility) originalParams.get(AbilityKey.Cause); - boolean isCombat = (Boolean) originalParams.get("IsCombat"); - boolean noPrevention = (Boolean) originalParams.get("NoPreventDamage"); + boolean isCombat = (Boolean) originalParams.get(AbilityKey.IsCombat); + boolean noPrevention = (Boolean) originalParams.get(AbilityKey.NoPreventDamage); GameEntity obj = (GameEntity) list.get(0); @@ -74,26 +75,26 @@ public class ReplaceSplitDamageEffect extends SpellAbilityEffect { // no damage for original target anymore if (dmg <= 0) { - originalParams.put("ReplacementResult", ReplacementResult.Replaced); + originalParams.put(AbilityKey.ReplacementResult, ReplacementResult.Replaced); return; } - params.put("DamageAmount", dmg); + params.put(AbilityKey.DamageAmount, dmg); //try to call replacementHandler with new Params - ReplacementResult result = game.getReplacementHandler().runOld(event, params); + ReplacementResult result = game.getReplacementHandler().run(event, params); switch (result) { case NotReplaced: case Updated: { - for (Map.Entry e : params.entrySet()) { + for (Map.Entry e : params.entrySet()) { originalParams.put(e.getKey(), e.getValue()); } // effect was updated - originalParams.put("ReplacementResult", ReplacementResult.Updated); + originalParams.put(AbilityKey.ReplacementResult, ReplacementResult.Updated); break; } default: // effect was replaced with something else - originalParams.put("ReplacementResult", result); + originalParams.put(AbilityKey.ReplacementResult, result); break; } } diff --git a/forge-game/src/main/java/forge/game/player/PlayerController.java b/forge-game/src/main/java/forge/game/player/PlayerController.java index ecea26174d9..d5cef95818b 100644 --- a/forge-game/src/main/java/forge/game/player/PlayerController.java +++ b/forge-game/src/main/java/forge/game/player/PlayerController.java @@ -211,7 +211,7 @@ public abstract class PlayerController { Map params); public abstract boolean confirmPayment(CostPart costPart, String string, SpellAbility sa); - public abstract ReplacementEffect chooseSingleReplacementEffect(String prompt, List possibleReplacers, Map runParams); + public abstract ReplacementEffect chooseSingleReplacementEffect(String prompt, List possibleReplacers); public abstract String chooseProtectionType(String string, SpellAbility sa, List choices); // these 4 need some refining. diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index e33cebcdb25..d2273e35e2a 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -56,22 +56,16 @@ public class ReplacementHandler { //private final List tmpEffects = new ArrayList(); public List getReplacementList(final ReplacementType event, final Map runParams, final ReplacementLayer layer) { - return getReplacementListOld(event, toStringMap(runParams), layer); - } - // The plan is to slowly refactor any usages of getReplacementListOld to use getReplacementList. Then we can just inline - // getReplacementListOld into getReplacementList and change the code inside to just always use a Map. - // The reason we can't just call them both getReplacementList is because we get a same erasure compile error if we do. - private List getReplacementListOld(final ReplacementType event, final Map runParams, final ReplacementLayer layer) { final CardCollection preList = new CardCollection(); boolean checkAgain = false; Card affectedLKI = null; Card affectedCard = null; - if (ReplacementType.Moved.equals(event) && ZoneType.Battlefield.equals(runParams.get("Destination"))) { + if (ReplacementType.Moved.equals(event) && ZoneType.Battlefield.equals(runParams.get(AbilityKey.Destination))) { // if it was caused by an replacement effect, use the already calculated RE list // otherwise the RIOT card would cause a StackError - SpellAbility cause = (SpellAbility) runParams.get("Cause"); + SpellAbility cause = (SpellAbility) runParams.get(AbilityKey.Cause); if (cause != null && cause.isReplacementAbility()) { final ReplacementEffect re = cause.getReplacementEffect(); // only return for same layer @@ -81,13 +75,13 @@ public class ReplacementHandler { } // Rule 614.12 Enter the Battlefield Replacement Effects look at what the card would be on the battlefield - affectedCard = (Card) runParams.get("Affected"); + affectedCard = (Card) runParams.get(AbilityKey.Affected); affectedLKI = CardUtil.getLKICopy(affectedCard); affectedLKI.setLastKnownZone(affectedCard.getController().getZone(ZoneType.Battlefield)); preList.add(affectedLKI); game.getAction().checkStaticAbilities(false, Sets.newHashSet(affectedLKI), preList); checkAgain = true; - runParams.put("Affected", affectedLKI); + runParams.put(AbilityKey.Affected, affectedLKI); } final List possibleReplacers = Lists.newArrayList(); @@ -124,7 +118,7 @@ public class ReplacementHandler { && (layer == null || replacementEffect.getLayer() == layer) && event.equals(replacementEffect.getMode()) && replacementEffect.requirementsCheck(game) - && replacementEffect.canReplace(runParams) + && replacementEffect.canReplace(toStringMap(runParams)) && !possibleReplacers.contains(replacementEffect) && replacementEffect.zonesCheck(cardZone)) { possibleReplacers.add(replacementEffect); @@ -142,7 +136,7 @@ public class ReplacementHandler { for (final ReplacementEffect re : affectedLKI.getReplacementEffects()) { re.setHostCard(affectedCard); } - runParams.put("Affected", affectedCard); + runParams.put(AbilityKey.Affected, affectedCard); } game.getAction().checkStaticAbilities(false); } @@ -159,15 +153,7 @@ public class ReplacementHandler { * @return ReplacementResult, an enum that represents what happened to the replacement effect. */ public ReplacementResult run(ReplacementType event, final Map runParams) { - return runOld(event, toStringMap(runParams)); - } - - // The plan is to slowly refactor any usages of runOld to use run. Then we can just inline - // runOld into run and change the code inside to just always use a Map. - // The reason we can't just call them both run is because we get a same erasure compile error if we do. - @Deprecated - public ReplacementResult runOld(ReplacementType event, final Map runParams) { - final Object affected = runParams.get("Affected"); + final Object affected = runParams.get(AbilityKey.Affected); Player decider = null; // Figure out who decides which of multiple replacements to apply @@ -190,15 +176,14 @@ public class ReplacementHandler { } - @Deprecated - private ReplacementResult run(final ReplacementType event, final Map runParams, final ReplacementLayer layer, final Player decider) { - final List possibleReplacers = getReplacementListOld(event, runParams, layer); + private ReplacementResult run(final ReplacementType event, final Map runParams, final ReplacementLayer layer, final Player decider) { + final List possibleReplacers = getReplacementList(event, runParams, layer); if (possibleReplacers.isEmpty()) { return ReplacementResult.NotReplaced; } - ReplacementEffect chosenRE = decider.getController().chooseSingleReplacementEffect("Choose a replacement effect to apply first.", possibleReplacers, runParams); + ReplacementEffect chosenRE = decider.getController().chooseSingleReplacementEffect("Choose a replacement effect to apply first.", possibleReplacers); possibleReplacers.remove(chosenRE); @@ -207,7 +192,7 @@ public class ReplacementHandler { ReplacementResult res = executeReplacement(runParams, chosenRE, decider, game); if (res == ReplacementResult.NotReplaced) { if (!possibleReplacers.isEmpty()) { - res = runOld(event, runParams); + res = run(event, runParams); } chosenRE.setHasRun(false); chosenRE.setOtherChoices(null); @@ -231,7 +216,7 @@ public class ReplacementHandler { * @param replacementEffect * the replacement effect to run */ - private ReplacementResult executeReplacement(final Map runParams, + private ReplacementResult executeReplacement(final Map runParams, final ReplacementEffect replacementEffect, final Player decider, final Game game) { final Map mapParams = replacementEffect.getMapParams(); @@ -253,9 +238,9 @@ public class ReplacementHandler { SpellAbility tailend = effectSA; do { - replacementEffect.setReplacingObjects(runParams, tailend); + replacementEffect.setReplacingObjects(toStringMap(runParams), tailend); //set original Params to update them later - tailend.setReplacingObject("OriginalParams", runParams); + tailend.setReplacingObject(AbilityKey.OriginalParams, runParams); tailend = tailend.getSubAbility(); } while(tailend != null); @@ -264,9 +249,9 @@ public class ReplacementHandler { effectSA = replacementEffect.getOverridingAbility(); SpellAbility tailend = effectSA; do { - replacementEffect.setReplacingObjects(runParams, tailend); + replacementEffect.setReplacingObjects(toStringMap(runParams), tailend); //set original Params to update them later - tailend.setReplacingObject("OriginalParams", runParams); + tailend.setReplacingObject(AbilityKey.OriginalParams, runParams); tailend = tailend.getSubAbility(); } while(tailend != null); } @@ -293,7 +278,7 @@ public class ReplacementHandler { Card cardForUi = host.getCardForUi(); String effectDesc = TextUtil.fastReplace(replacementEffect.toString(), "CARDNAME", cardForUi.getName()); final String question = replacementEffect instanceof ReplaceDiscard - ? TextUtil.concatWithSpace("Apply replacement effect of", cardForUi.toString(), "to", TextUtil.addSuffix(runParams.get("Card").toString(),"?\r\n"), TextUtil.enclosedParen(effectDesc)) + ? TextUtil.concatWithSpace("Apply replacement effect of", cardForUi.toString(), "to", TextUtil.addSuffix(runParams.get(AbilityKey.Card).toString(),"?\r\n"), TextUtil.enclosedParen(effectDesc)) : TextUtil.concatWithSpace("Apply replacement effect of", TextUtil.addSuffix(cardForUi.toString(),"?\r\n"), TextUtil.enclosedParen(effectDesc)); boolean confirmed = optDecider.getController().confirmReplacementEffect(replacementEffect, effectSA, question); if (!confirmed) { @@ -310,9 +295,9 @@ public class ReplacementHandler { Player player = host.getController(); if (mapParams.containsKey("ManaReplacement")) { - final SpellAbility manaAb = (SpellAbility) runParams.get("AbilityMana"); - final Player player1 = (Player) runParams.get("Player"); - final String rep = (String) runParams.get("Mana"); + final SpellAbility manaAb = (SpellAbility) runParams.get(AbilityKey.AbilityMana); + final Player player1 = (Player) runParams.get(AbilityKey.Player); + final String rep = (String) runParams.get(AbilityKey.Mana); // Replaced mana type final Card repHost = host; String repType = repHost.getSVar(mapParams.get("ManaReplacement")); @@ -325,8 +310,8 @@ public class ReplacementHandler { player.getController().playSpellAbilityNoStack(effectSA, true); // if the spellability is a replace effect then its some new logic // if ReplacementResult is set in run params use that instead - if (runParams.containsKey("ReplacementResult")) { - return (ReplacementResult) runParams.get("ReplacementResult"); + if (runParams.containsKey(AbilityKey.ReplacementResult)) { + return (ReplacementResult) runParams.get(AbilityKey.ReplacementResult); } } diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index e27af7b79bb..ea335a7df7d 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -599,10 +599,22 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit public boolean hasReplacingObject(final String type) { return replacingObjects.containsKey(type); } + public Object getReplacingObject(final AbilityKey type) { + return getReplacingObject(type.toString()); + } + // Eventually we want to switch the internal map to be a `Map` instead of a + // `Map`. + @Deprecated public Object getReplacingObject(final String type) { final Object res = replacingObjects.get(type); return res; } + public void setReplacingObject(final AbilityKey type, final Object o) { + setReplacingObject(type.toString(), o); + } + // Eventually we want to switch the internal map to be a `Map` instead of a + // `Map`. + @Deprecated public void setReplacingObject(final String type, final Object o) { replacingObjects.put(type, o); } diff --git a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java index 4e3b48f2917..f1906ebdb0f 100644 --- a/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java +++ b/forge-gui-desktop/src/test/java/forge/gamesimulationtests/util/PlayerControllerForTests.java @@ -506,7 +506,7 @@ public class PlayerControllerForTests extends PlayerController { } @Override - public ReplacementEffect chooseSingleReplacementEffect(String prompt, List possibleReplacers, Map runParams) { + public ReplacementEffect chooseSingleReplacementEffect(String prompt, List possibleReplacers) { // TODO Auto-generated method stub return Iterables.getFirst(possibleReplacers, null); } diff --git a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java index 267eae1e1a9..36dd6de0d00 100644 --- a/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java +++ b/forge-gui/src/main/java/forge/player/PlayerControllerHuman.java @@ -1587,7 +1587,7 @@ public class PlayerControllerHuman extends PlayerController implements IGameCont @Override public ReplacementEffect chooseSingleReplacementEffect(final String prompt, - final List possibleReplacers, final Map runParams) { + final List possibleReplacers) { final ReplacementEffect first = possibleReplacers.get(0); if (possibleReplacers.size() == 1) { return first; From a3355ba05a38e7a766f136f6c8377c2e660dadd2 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Fri, 27 Sep 2019 17:27:36 -0600 Subject: [PATCH 11/14] remove imports --- .../src/main/java/forge/game/ability/effects/CounterEffect.java | 1 - .../java/forge/game/ability/effects/ReplaceDamageEffect.java | 2 -- .../forge/game/ability/effects/ReplaceSplitDamageEffect.java | 2 -- forge-game/src/main/java/forge/game/card/token/TokenInfo.java | 1 - 4 files changed, 6 deletions(-) diff --git a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java index 2b05fa8f0d0..f82231f20b4 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/CounterEffect.java @@ -18,7 +18,6 @@ import java.util.List; import java.util.Map; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; public class CounterEffect extends SpellAbilityEffect { @Override diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java index e8ea9c504f9..6261fac4440 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceDamageEffect.java @@ -5,8 +5,6 @@ import java.util.Map; import forge.game.ability.AbilityKey; import org.apache.commons.lang3.StringUtils; -import com.google.common.collect.Maps; - import forge.game.Game; import forge.game.ability.AbilityUtils; import forge.game.ability.SpellAbilityEffect; diff --git a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java index f97e17b1612..048d41e1c17 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ReplaceSplitDamageEffect.java @@ -6,8 +6,6 @@ import java.util.Map; import forge.game.ability.AbilityKey; import org.apache.commons.lang3.StringUtils; -import com.google.common.collect.Maps; - import forge.game.Game; import forge.game.GameEntity; import forge.game.GameEntityCounterTable; diff --git a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java index 9018ea93840..c540ad0b56a 100644 --- a/forge-game/src/main/java/forge/game/card/token/TokenInfo.java +++ b/forge-game/src/main/java/forge/game/card/token/TokenInfo.java @@ -3,7 +3,6 @@ package forge.game.card.token; import com.google.common.base.Joiner; import com.google.common.collect.Iterables; import com.google.common.collect.Lists; -import com.google.common.collect.Maps; import forge.ImageKeys; import forge.StaticData; import forge.card.CardType; From f6134e3ccf39e20da245d003f32f2b572965d8d5 Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Sat, 5 Oct 2019 22:24:05 -0600 Subject: [PATCH 12/14] update `canReplace` method --- .../main/java/forge/ai/ComputerUtilMana.java | 11 +++---- .../game/replacement/ReplaceAddCounter.java | 13 +++++---- .../game/replacement/ReplaceCounter.java | 9 +++--- .../forge/game/replacement/ReplaceDamage.java | 27 ++++++++--------- .../game/replacement/ReplaceDestroy.java | 13 +++++---- .../game/replacement/ReplaceDiscard.java | 11 +++---- .../forge/game/replacement/ReplaceDraw.java | 7 +++-- .../game/replacement/ReplaceDrawCards.java | 7 +++-- .../game/replacement/ReplaceGainLife.java | 11 +++---- .../game/replacement/ReplaceGameLoss.java | 5 ++-- .../forge/game/replacement/ReplaceMoved.java | 29 ++++++++++--------- .../game/replacement/ReplaceProduceMana.java | 9 +++--- .../game/replacement/ReplaceSetInMotion.java | 5 ++-- .../game/replacement/ReplaceSurveil.java | 7 +++-- .../forge/game/replacement/ReplaceToken.java | 13 +++++---- .../game/replacement/ReplaceTurnFaceUp.java | 5 ++-- .../forge/game/replacement/ReplaceUntap.java | 7 +++-- .../game/replacement/ReplacementEffect.java | 3 +- .../game/replacement/ReplacementHandler.java | 2 +- .../java/forge/match/input/InputPayMana.java | 17 +++++------ 20 files changed, 113 insertions(+), 98 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java index 9c724737a83..4102df2fefb 100644 --- a/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java +++ b/forge-ai/src/main/java/forge/ai/ComputerUtilMana.java @@ -13,6 +13,7 @@ import forge.card.mana.ManaCostParser; import forge.card.mana.ManaCostShard; import forge.game.Game; import forge.game.GameActionUtil; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.ability.ApiType; import forge.game.card.*; @@ -1408,11 +1409,11 @@ public class ComputerUtilMana { AbilityManaPart mp = m.getManaPart(); // setup produce mana replacement effects - final Map repParams = new HashMap<>(); - repParams.put("Mana", mp.getOrigProduced()); - repParams.put("Affected", sourceCard); - repParams.put("Player", ai); - repParams.put("AbilityMana", m); + final Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Mana, mp.getOrigProduced()); + repParams.put(AbilityKey.Affected, sourceCard); + repParams.put(AbilityKey.Player, ai); + repParams.put(AbilityKey.AbilityMana, m); for (final ReplacementEffect replacementEffect : replacementEffects) { if (replacementEffect.canReplace(repParams)) { diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java b/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java index 882daefed56..bc19054dc6f 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java @@ -1,5 +1,6 @@ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.card.CounterType; import forge.game.player.Player; @@ -27,20 +28,20 @@ public class ReplaceAddCounter extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { - if (((int) runParams.get("CounterNum")) <= 0) { + public boolean canReplace(Map runParams) { + if (((int) runParams.get(AbilityKey.CounterNum)) <= 0) { return false; } if (hasParam("EffectOnly")) { - final Boolean effectOnly = (Boolean) runParams.get("EffectOnly"); + final Boolean effectOnly = (Boolean) runParams.get(AbilityKey.EffectOnly); if (!effectOnly) { return false; } } if (hasParam("ValidCard")) { - Object o = runParams.get("Affected"); + Object o = runParams.get(AbilityKey.Affected); if (!(o instanceof Card)) { return false; } @@ -48,7 +49,7 @@ public class ReplaceAddCounter extends ReplacementEffect { return false; } } else if (hasParam("ValidPlayer")) { - Object o = runParams.get("Affected"); + Object o = runParams.get(AbilityKey.Affected); if (!(o instanceof Player)) { return false; } @@ -59,7 +60,7 @@ public class ReplaceAddCounter extends ReplacementEffect { if (hasParam("ValidCounterType")) { String type = getParam("ValidCounterType"); - if (CounterType.getType(type) != runParams.get("CounterType")) { + if (CounterType.getType(type) != runParams.get(AbilityKey.CounterType)) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java b/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java index b3d27814b95..56644cfb3cf 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -42,15 +43,15 @@ public class ReplaceCounter extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { - final SpellAbility spellAbility = (SpellAbility) runParams.get("TgtSA"); + public boolean canReplace(Map runParams) { + final SpellAbility spellAbility = (SpellAbility) runParams.get(AbilityKey.TgtSA); if (hasParam("ValidCard")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidCard").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidCard").split(","), this.getHostCard())) { return false; } } if (hasParam("ValidCause")) { - if (!matchesValid(runParams.get("Cause"), getParam("ValidCause").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Cause), getParam("ValidCause").split(","), this.getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java index 4063ec610bb..aae8f952b89 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.card.CardFactoryUtil; @@ -46,49 +47,49 @@ public class ReplaceDamage extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { - if (!(runParams.containsKey("Prevention") == (hasParam("PreventionEffect") || hasParam("Prevent")))) { + public boolean canReplace(Map runParams) { + if (!(runParams.containsKey(AbilityKey.Prevention) == (hasParam("PreventionEffect") || hasParam("Prevent")))) { return false; } - if (((Integer) runParams.get("DamageAmount")) == 0) { + if (((Integer) runParams.get(AbilityKey.DamageAmount)) == 0) { // If no actual damage is dealt, there is nothing to replace return false; } if (hasParam("ValidSource")) { String validSource = getParam("ValidSource"); validSource = AbilityUtils.applyAbilityTextChangeEffects(validSource, this); - if (!matchesValid(runParams.get("DamageSource"), validSource.split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.DamageSource), validSource.split(","), getHostCard())) { return false; } } if (hasParam("ValidTarget")) { String validTarget = getParam("ValidTarget"); validTarget = AbilityUtils.applyAbilityTextChangeEffects(validTarget, this); - if (!matchesValid(runParams.get("Affected"), validTarget.split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), validTarget.split(","), getHostCard())) { return false; } } if (hasParam("ValidCause")) { - if (!runParams.containsKey("Cause")) { + if (!runParams.containsKey(AbilityKey.Cause)) { return false; } - SpellAbility cause = (SpellAbility) runParams.get("Cause"); + SpellAbility cause = (SpellAbility) runParams.get(AbilityKey.Cause); String validCause = getParam("ValidCause"); validCause = AbilityUtils.applyAbilityTextChangeEffects(validCause, this); if (!matchesValid(cause, validCause.split(","), getHostCard())) { return false; } if (hasParam("CauseIsSource")) { - if (!cause.getHostCard().equals(runParams.get("DamageSource"))) { + if (!cause.getHostCard().equals(runParams.get(AbilityKey.DamageSource))) { return false; } } } if (hasParam("RelativeToSource")) { - Card source = (Card) runParams.get("DamageSource"); + Card source = (Card) runParams.get(AbilityKey.DamageSource); String validRelative = getParam("RelativeToSource"); validRelative = AbilityUtils.applyAbilityTextChangeEffects(validRelative, this); - if (!matchesValid(runParams.get("DamageTarget"), validRelative.split(","), source)) { + if (!matchesValid(runParams.get(AbilityKey.DamageTarget), validRelative.split(","), source)) { return false; } } @@ -103,17 +104,17 @@ public class ReplaceDamage extends ReplacementEffect { intoperand = CardFactoryUtil.xCount(getHostCard(), getHostCard().getSVar(operand)); } - if (!Expressions.compare((Integer) runParams.get("DamageAmount"), operator, intoperand)) { + if (!Expressions.compare((Integer) runParams.get(AbilityKey.DamageAmount), operator, intoperand)) { return false; } } if (hasParam("IsCombat")) { if (getParam("IsCombat").equals("True")) { - if (!((Boolean) runParams.get("IsCombat"))) { + if (!((Boolean) runParams.get(AbilityKey.IsCombat))) { return false; } } else { - if ((Boolean) runParams.get("IsCombat")) { + if ((Boolean) runParams.get(AbilityKey.IsCombat)) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java index d5fe606ab2b..08420e3817d 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -42,23 +43,23 @@ public class ReplaceDestroy extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), getHostCard())) { return false; } } if (hasParam("ValidCard")) { - Card card = (Card)runParams.get("Card"); + Card card = (Card)runParams.get(AbilityKey.Card); if (!matchesValid(card, getParam("ValidCard").split(","), getHostCard())) { return false; } // extra check for Regeneration if (hasParam("Regeneration")) { - if (!runParams.containsKey("Regeneration")) { + if (!runParams.containsKey(AbilityKey.Regeneration)) { return false; } - if (!(Boolean)runParams.get("Regeneration")) { + if (!(Boolean)runParams.get(AbilityKey.Regeneration)) { return false; } if (!card.canBeShielded()) { @@ -71,7 +72,7 @@ public class ReplaceDestroy extends ReplacementEffect { } } if (hasParam("ValidSource")) { - if (!matchesValid(runParams.get("Source"), getParam("ValidSource").split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Source), getParam("ValidSource").split(","), getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java index e761d06540e..9d69bd7c31b 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -42,24 +43,24 @@ public class ReplaceDiscard extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), this.getHostCard())) { return false; } } if (hasParam("ValidCard")) { - if (!matchesValid(runParams.get("Card"), getParam("ValidCard").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Card), getParam("ValidCard").split(","), this.getHostCard())) { return false; } } if (hasParam("ValidSource")) { - if (!matchesValid(runParams.get("Source"), getParam("ValidSource").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Source), getParam("ValidSource").split(","), this.getHostCard())) { return false; } } if (hasParam("DiscardFromEffect")) { - if (null == runParams.get("Source")) { + if (null == runParams.get(AbilityKey.Source)) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java index 7a32b0b30d0..de69e9bda57 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.phase.PhaseType; import forge.game.player.Player; @@ -44,14 +45,14 @@ public class ReplaceDraw extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), this.getHostCard())) { return false; } } if (hasParam("NotFirstCardInDrawStep")) { - final Player p = (Player)runParams.get("Affected"); + final Player p = (Player)runParams.get(AbilityKey.Affected); if (p.numDrawnThisDrawStep() == 0 && this.getHostCard().getGame().getPhaseHandler().is(PhaseType.DRAW) && this.getHostCard().getGame().getPhaseHandler().isPlayerTurn(p)) { diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java index ca486aa3e64..f2310586db2 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; import forge.util.Expressions; @@ -43,14 +44,14 @@ public class ReplaceDrawCards extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), this.getHostCard())) { return false; } } if (hasParam("Number")) { - final int n = (Integer)runParams.get("Number"); + final int n = (Integer)runParams.get(AbilityKey.Number); String comparator = getParam("Number"); final String operator = comparator.substring(0, 2); final int operandValue = Integer.parseInt(comparator.substring(2)); diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java b/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java index c026bd4ff38..a432be40f6e 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -42,22 +43,22 @@ public class ReplaceGainLife extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { - if (((int)runParams.get("LifeGained")) <= 0) { + public boolean canReplace(Map runParams) { + if (((int)runParams.get(AbilityKey.LifeGained)) <= 0) { return false; } if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), this.getHostCard())) { return false; } } if (hasParam("ValidSource")) { - if (!matchesValid(runParams.get("Source"), getParam("ValidSource").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Source), getParam("ValidSource").split(","), this.getHostCard())) { return false; } } if ("True".equals(getParam("SourceController"))) { - if (runParams.get("Source") == null || !runParams.get("Affected").equals(((Card)runParams.get("Source")).getController())) { + if (runParams.get(AbilityKey.Source) == null || !runParams.get(AbilityKey.Affected).equals(((Card)runParams.get(AbilityKey.Source)).getController())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceGameLoss.java b/forge-game/src/main/java/forge/game/replacement/ReplaceGameLoss.java index 0cb784588e5..3860af6c119 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceGameLoss.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceGameLoss.java @@ -1,5 +1,6 @@ package forge.game.replacement; + import forge.game.ability.AbilityKey; import forge.game.card.Card; import java.util.Map; @@ -24,9 +25,9 @@ public class ReplaceGameLoss extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), this.getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java index 650b0e82085..5da9b24a876 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java @@ -1,5 +1,6 @@ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.player.Player; @@ -28,9 +29,9 @@ public class ReplaceMoved extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { final Player controller = getHostCard().getController(); - final Card affected = (Card) runParams.get("Affected"); + final Card affected = (Card) runParams.get(AbilityKey.Affected); if (hasParam("ValidCard")) { if (!matchesValid(affected, getParam("ValidCard").split(","), getHostCard())) { @@ -39,27 +40,27 @@ public class ReplaceMoved extends ReplacementEffect { } if (hasParam("ValidLKI")) { - if (!matchesValid(runParams.get("CardLKI"), getParam("ValidLKI").split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.CardLKI), getParam("ValidLKI").split(","), getHostCard())) { return false; } } if (hasParam("Origin")) { - ZoneType zt = (ZoneType) runParams.get("Origin"); + ZoneType zt = (ZoneType) runParams.get(AbilityKey.Origin); if (!ZoneType.listValueOf(getParam("Origin")).contains(zt)) { return false; } } if (hasParam("Destination")) { - ZoneType zt = (ZoneType) runParams.get("Destination"); + ZoneType zt = (ZoneType) runParams.get(AbilityKey.Destination); if (!ZoneType.listValueOf(getParam("Destination")).contains(zt)) { return false; } } if (hasParam("ExcludeDestination")) { - ZoneType zt = (ZoneType) runParams.get("Destination"); + ZoneType zt = (ZoneType) runParams.get(AbilityKey.Destination); if (ZoneType.listValueOf(getParam("ExcludeDestination")).contains(zt)) { return false; } @@ -67,29 +68,29 @@ public class ReplaceMoved extends ReplacementEffect { if (hasParam("Fizzle")) { // if Replacement look for Fizzle - if (!runParams.containsKey("Fizzle")) { + if (!runParams.containsKey(AbilityKey.Fizzle)) { return false; } - Boolean val = (Boolean) runParams.get("Fizzle"); + Boolean val = (Boolean) runParams.get(AbilityKey.Fizzle); if ("True".equals(getParam("Fizzle")) != val) { return false; } } if (hasParam("ValidStackSa")) { - if (!runParams.containsKey("StackSa")) { + if (!runParams.containsKey(AbilityKey.StackSa)) { return false; } - if (!((SpellAbility)runParams.get("StackSa")).isValid(getParam("ValidStackSa").split(","), getHostCard().getController(), getHostCard(), null)) { + if (!((SpellAbility)runParams.get(AbilityKey.StackSa)).isValid(getParam("ValidStackSa").split(","), getHostCard().getController(), getHostCard(), null)) { return false; } } if (hasParam("Cause")) { - if (!runParams.containsKey("Cause")) { + if (!runParams.containsKey(AbilityKey.Cause)) { return false; } - SpellAbility cause = (SpellAbility) runParams.get("Cause"); + SpellAbility cause = (SpellAbility) runParams.get(AbilityKey.Cause); if (cause == null) { return false; } @@ -99,8 +100,8 @@ public class ReplaceMoved extends ReplacementEffect { } if (hasParam("NotCause")) { - if (runParams.containsKey("Cause")) { - SpellAbility cause = (SpellAbility) runParams.get("Cause"); + if (runParams.containsKey(AbilityKey.Cause)) { + SpellAbility cause = (SpellAbility) runParams.get(AbilityKey.Cause); if (cause != null) { if (cause.isValid(getParam("NotCause").split(","), controller, getHostCard(), null)) { return false; diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceProduceMana.java b/forge-game/src/main/java/forge/game/replacement/ReplaceProduceMana.java index 3cfc1f92d81..13e8b68f782 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceProduceMana.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceProduceMana.java @@ -1,5 +1,6 @@ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.card.CardFactoryUtil; import forge.game.spellability.SpellAbility; @@ -29,10 +30,10 @@ public class ReplaceProduceMana extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { //Check for tapping if (!hasParam("NoTapCheck")) { - final SpellAbility manaAbility = (SpellAbility) runParams.get("AbilityMana"); + final SpellAbility manaAbility = (SpellAbility) runParams.get(AbilityKey.AbilityMana); if (manaAbility == null || manaAbility.getRootAbility().getPayCosts() == null || !manaAbility.getRootAbility().getPayCosts().hasTapCost()) { return false; } @@ -48,14 +49,14 @@ public class ReplaceProduceMana extends ReplacementEffect { } catch (NumberFormatException e) { intoperand = CardFactoryUtil.xCount(getHostCard(), getHostCard().getSVar(operand)); } - int manaAmount = StringUtils.countMatches((String) runParams.get("Mana"), " ") + 1; + int manaAmount = StringUtils.countMatches((String) runParams.get(AbilityKey.Mana), " ") + 1; if (!Expressions.compare(manaAmount, operator, intoperand)) { return false; } } if (hasParam("ValidCard")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidCard").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidCard").split(","), this.getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceSetInMotion.java b/forge-game/src/main/java/forge/game/replacement/ReplaceSetInMotion.java index d74b1171dad..1b2b39f382b 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceSetInMotion.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceSetInMotion.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import java.util.Map; @@ -41,9 +42,9 @@ public class ReplaceSetInMotion extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java b/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java index 3ee74291981..507cf5e941b 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java @@ -1,5 +1,6 @@ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -25,13 +26,13 @@ public class ReplaceSurveil extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.Map) */ @Override - public boolean canReplace(Map runParams) { - if (((int) runParams.get("SurveilNum")) <= 0) { + public boolean canReplace(Map runParams) { + if (((int) runParams.get(AbilityKey.SurveilNum)) <= 0) { return false; } if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), this.getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java b/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java index fc6bb5ef15c..80d41010819 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java @@ -1,5 +1,6 @@ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -25,27 +26,27 @@ public class ReplaceToken extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.Map) */ @Override - public boolean canReplace(Map runParams) { - if (((int) runParams.get("TokenNum")) <= 0) { + public boolean canReplace(Map runParams) { + if (((int) runParams.get(AbilityKey.TokenNum)) <= 0) { return false; } if (hasParam("EffectOnly")) { - final Boolean effectOnly = (Boolean) runParams.get("EffectOnly"); + final Boolean effectOnly = (Boolean) runParams.get(AbilityKey.EffectOnly); if (!effectOnly) { return false; } } if (hasParam("ValidPlayer")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidPlayer").split(","), getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidPlayer").split(","), getHostCard())) { return false; } } if (hasParam("ValidToken")) { - if (runParams.containsKey("Token")) { - if (!matchesValid(runParams.get("Token"), getParam("ValidToken").split(","), getHostCard())) { + if (runParams.containsKey(AbilityKey.Token)) { + if (!matchesValid(runParams.get(AbilityKey.Token), getParam("ValidToken").split(","), getHostCard())) { return false; } } else { diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java b/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java index a2c78959de3..37feb4fba4e 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java @@ -1,5 +1,6 @@ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -25,9 +26,9 @@ public class ReplaceTurnFaceUp extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidCard")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidCard").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidCard").split(","), this.getHostCard())) { return false; } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java b/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java index 7e4168f1281..d6307edb38b 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java @@ -17,6 +17,7 @@ */ package forge.game.replacement; +import forge.game.ability.AbilityKey; import forge.game.card.Card; import forge.game.player.Player; import forge.game.phase.PhaseType; @@ -44,14 +45,14 @@ public class ReplaceUntap extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#canReplace(java.util.HashMap) */ @Override - public boolean canReplace(Map runParams) { + public boolean canReplace(Map runParams) { if (hasParam("ValidCard")) { - if (!matchesValid(runParams.get("Affected"), getParam("ValidCard").split(","), this.getHostCard())) { + if (!matchesValid(runParams.get(AbilityKey.Affected), getParam("ValidCard").split(","), this.getHostCard())) { return false; } } if (hasParam("UntapStep")) { - final Object o = runParams.get("Affected"); + final Object o = runParams.get(AbilityKey.Affected); //normally should not happen, but protect from possible crash. if (!(o instanceof Card)) { return false; diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java index 1007b1fc727..87a81af46fb 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java @@ -19,6 +19,7 @@ package forge.game.replacement; import forge.game.Game; import forge.game.TriggerReplacementBase; +import forge.game.ability.AbilityKey; import forge.game.ability.AbilityUtils; import forge.game.card.Card; import forge.game.phase.PhaseType; @@ -121,7 +122,7 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { * the run params * @return true, if successful */ - public abstract boolean canReplace(final Map runParams); + public abstract boolean canReplace (final Map runParams); /** *

diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index d2273e35e2a..97b049b770f 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -118,7 +118,7 @@ public class ReplacementHandler { && (layer == null || replacementEffect.getLayer() == layer) && event.equals(replacementEffect.getMode()) && replacementEffect.requirementsCheck(game) - && replacementEffect.canReplace(toStringMap(runParams)) + && replacementEffect.canReplace(runParams) && !possibleReplacers.contains(replacementEffect) && replacementEffect.zonesCheck(cardZone)) { possibleReplacers.add(replacementEffect); diff --git a/forge-gui/src/main/java/forge/match/input/InputPayMana.java b/forge-gui/src/main/java/forge/match/input/InputPayMana.java index 21dfe05227d..de1da8bf5b6 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPayMana.java +++ b/forge-gui/src/main/java/forge/match/input/InputPayMana.java @@ -1,13 +1,10 @@ package forge.match.input; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.LinkedList; -import java.util.List; -import java.util.Queue; +import java.util.*; import forge.GuiBase; import forge.game.GameActionUtil; +import forge.game.ability.AbilityKey; import forge.game.spellability.SpellAbilityView; import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; @@ -363,11 +360,11 @@ public abstract class InputPayMana extends InputSyncronizedBase { final Card source = am.getHostCard(); final Player activator = am.getActivatingPlayer(); final Game g = source.getGame(); - final HashMap repParams = new HashMap<>(); - repParams.put("Mana", m.getOrigProduced()); - repParams.put("Affected", source); - repParams.put("Player", activator); - repParams.put("AbilityMana", am); + final Map repParams = AbilityKey.newMap(); + repParams.put(AbilityKey.Mana, m.getOrigProduced()); + repParams.put(AbilityKey.Affected, source); + repParams.put(AbilityKey.Player, activator); + repParams.put(AbilityKey.AbilityMana, am); for (final Player p : g.getPlayers()) { for (final Card crd : p.getAllCards()) { From 5f3a0b3f0b5dd5057fadae05af27b30cde09edee Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Sat, 5 Oct 2019 23:44:22 -0600 Subject: [PATCH 13/14] change `replacingObjects` type --- .../java/forge/ai/ability/ChangeZoneAi.java | 2 +- .../java/forge/game/ability/AbilityUtils.java | 16 ++++++++------- .../ability/effects/ETBReplacementEffect.java | 3 ++- .../game/ability/effects/TokenEffect.java | 8 ++++++-- .../game/replacement/ReplaceAddCounter.java | 12 +++++------ .../game/replacement/ReplaceCounter.java | 4 ++-- .../forge/game/replacement/ReplaceDamage.java | 8 ++++---- .../game/replacement/ReplaceDestroy.java | 4 ++-- .../game/replacement/ReplaceDiscard.java | 8 ++++---- .../forge/game/replacement/ReplaceDraw.java | 4 ++-- .../game/replacement/ReplaceDrawCards.java | 4 ++-- .../game/replacement/ReplaceGainLife.java | 6 +++--- .../forge/game/replacement/ReplaceMoved.java | 8 ++++---- .../game/replacement/ReplaceSurveil.java | 6 +++--- .../forge/game/replacement/ReplaceToken.java | 6 +++--- .../game/replacement/ReplaceTurnFaceUp.java | 4 ++-- .../forge/game/replacement/ReplaceUntap.java | 4 ++-- .../game/replacement/ReplacementEffect.java | 6 ++---- .../game/replacement/ReplacementHandler.java | 4 ++-- .../forge/game/spellability/SpellAbility.java | 20 +++---------------- 20 files changed, 64 insertions(+), 73 deletions(-) diff --git a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java index ecaa91b27d0..40c59393086 100644 --- a/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java +++ b/forge-ai/src/main/java/forge/ai/ability/ChangeZoneAi.java @@ -1814,7 +1814,7 @@ public class ChangeZoneAi extends SpellAbilityAi { // A blink effect implemented using a delayed trigger return !"Exile".equals(exec.getParam("Origin")) || !"Battlefield".equals(exec.getParam("Destination")); } - } else return causeSa.getHostCard() == null || !causeSa.getHostCard().equals(sa.getReplacingObject("Card")) + } else return causeSa.getHostCard() == null || !causeSa.getHostCard().equals(sa.getReplacingObject(AbilityKey.Card)) || !causeSa.getActivatingPlayer().equals(aiPlayer); } diff --git a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java index f17336ca80a..97877f115ad 100644 --- a/forge-game/src/main/java/forge/game/ability/AbilityUtils.java +++ b/forge-game/src/main/java/forge/game/ability/AbilityUtils.java @@ -48,7 +48,7 @@ public class AbilityUtils { public static CounterType getCounterType(String name, SpellAbility sa) throws Exception { CounterType counterType; if ("ReplacedCounterType".equals(name)) { - name = (String) sa.getReplacingObject("CounterType"); + name = (String) sa.getReplacingObject(AbilityKey.CounterType); } try { counterType = CounterType.getType(name); @@ -157,7 +157,9 @@ public class AbilityUtils { } else if (defined.startsWith("Replaced") && (sa != null)) { final SpellAbility root = sa.getRootAbility(); - final Object crd = root.getReplacingObject(defined.substring(8)); + AbilityKey type = AbilityKey.fromString(defined.substring(8)); + final Object crd = root.getReplacingObject(type); + if (crd instanceof Card) { c = game.getCardState((Card) crd); } else if (crd instanceof List) { @@ -712,7 +714,7 @@ public class AbilityUtils { } else if (calcX[0].startsWith("Replaced")) { final SpellAbility root = sa.getRootAbility(); - list = new CardCollection((Card) root.getReplacingObject(calcX[0].substring(8))); + list = new CardCollection((Card) root.getReplacingObject(AbilityKey.fromString(calcX[0].substring(8)))); } else if (calcX[0].startsWith("ReplaceCount")) { // ReplaceCount is similar to a regular Count, but just @@ -720,7 +722,7 @@ public class AbilityUtils { final SpellAbility root = sa.getRootAbility(); final String[] l = calcX[1].split("/"); final String m = CardFactoryUtil.extractOperators(calcX[1]); - final int count = (Integer) root.getReplacingObject(l[0]); + final int count = (Integer) root.getReplacingObject(AbilityKey.fromString(l[0])); return CardFactoryUtil.doXMath(count, m, card) * multiplier; } @@ -1063,7 +1065,7 @@ public class AbilityUtils { if (defined.endsWith("Controller")) { String replacingType = defined.substring(8); replacingType = replacingType.substring(0, replacingType.length() - 10); - final Object c = root.getReplacingObject(replacingType); + final Object c = root.getReplacingObject(AbilityKey.fromString(replacingType)); if (c instanceof Card) { o = ((Card) c).getController(); } @@ -1074,14 +1076,14 @@ public class AbilityUtils { else if (defined.endsWith("Owner")) { String replacingType = defined.substring(8); replacingType = replacingType.substring(0, replacingType.length() - 5); - final Object c = root.getReplacingObject(replacingType); + final Object c = root.getReplacingObject(AbilityKey.fromString(replacingType)); if (c instanceof Card) { o = ((Card) c).getOwner(); } } else { final String replacingType = defined.substring(8); - o = root.getReplacingObject(replacingType); + o = root.getReplacingObject(AbilityKey.fromString(replacingType)); } if (o != null) { if (o instanceof Player) { diff --git a/forge-game/src/main/java/forge/game/ability/effects/ETBReplacementEffect.java b/forge-game/src/main/java/forge/game/ability/effects/ETBReplacementEffect.java index 4241b8280d1..b524281dbe7 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/ETBReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/ETBReplacementEffect.java @@ -1,5 +1,6 @@ package forge.game.ability.effects; +import forge.game.ability.AbilityKey; import forge.game.ability.SpellAbilityEffect; import forge.game.card.Card; import forge.game.spellability.SpellAbility; @@ -11,6 +12,6 @@ import forge.game.spellability.SpellAbility; public class ETBReplacementEffect extends SpellAbilityEffect { @Override public void resolve(SpellAbility sa) { - sa.getActivatingPlayer().getGame().getAction().moveToPlay(((Card) sa.getReplacingObject("Card")), sa); + sa.getActivatingPlayer().getGame().getAction().moveToPlay(((Card) sa.getReplacingObject(AbilityKey.Card)), sa); } } \ No newline at end of file diff --git a/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java b/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java index 0d76b269cdc..2d142123536 100644 --- a/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java +++ b/forge-game/src/main/java/forge/game/ability/effects/TokenEffect.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; import forge.card.MagicColor; +import forge.game.ability.AbilityKey; import forge.game.card.token.TokenInfo; import org.apache.commons.lang3.StringUtils; @@ -224,8 +225,11 @@ public class TokenEffect extends SpellAbilityEffect { // Cause of the Token Effect, in general it should be this // but if its a Replacement Effect, it might be something else or null SpellAbility cause = sa; - if (root.isReplacementAbility() && root.hasReplacingObject("Cause")) { - cause = (SpellAbility)root.getReplacingObject("Cause"); + if (root.isReplacementAbility()) { + Object replacingObject = root.getReplacingObject(AbilityKey.Cause); + if (replacingObject != null) { + cause = (SpellAbility) replacingObject; + } } final boolean remember = sa.hasParam("RememberTokens"); diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java b/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java index bc19054dc6f..27a388c2160 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceAddCounter.java @@ -72,14 +72,14 @@ public class ReplaceAddCounter extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("CounterNum", runParams.get("CounterNum")); - sa.setReplacingObject("CounterType", ((CounterType) runParams.get("CounterType")).getName()); - Object o = runParams.get("Affected"); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.CounterNum, runParams.get(AbilityKey.CounterNum)); + sa.setReplacingObject(AbilityKey.CounterType, ((CounterType) runParams.get(AbilityKey.CounterType)).getName()); + Object o = runParams.get(AbilityKey.Affected); if (o instanceof Card) { - sa.setReplacingObject("Card", o); + sa.setReplacingObject(AbilityKey.Card, o); } else if (o instanceof Player) { - sa.setReplacingObject("Player", o); + sa.setReplacingObject(AbilityKey.Player, o); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java b/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java index 56644cfb3cf..c5968fd1d16 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceCounter.java @@ -68,8 +68,8 @@ public class ReplaceCounter extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Card", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java index aae8f952b89..2d8681ef508 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDamage.java @@ -150,10 +150,10 @@ public class ReplaceDamage extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("DamageAmount", runParams.get("DamageAmount")); - sa.setReplacingObject("Target", runParams.get("Affected")); - sa.setReplacingObject("Source", runParams.get("DamageSource")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.DamageAmount, runParams.get(AbilityKey.DamageAmount)); + sa.setReplacingObject(AbilityKey.Target, runParams.get(AbilityKey.Affected)); + sa.setReplacingObject(AbilityKey.Source, runParams.get(AbilityKey.DamageSource)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java index 08420e3817d..e9c22681fb7 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDestroy.java @@ -84,8 +84,8 @@ public class ReplaceDestroy extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Card", runParams.get("Card")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Card)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java index 9d69bd7c31b..25bde9c0c6e 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDiscard.java @@ -72,10 +72,10 @@ public class ReplaceDiscard extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Card", runParams.get("Card")); - sa.setReplacingObject("Player", runParams.get("Affected")); - sa.setReplacingObject("Source", runParams.get("Source")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Card)); + sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected)); + sa.setReplacingObject(AbilityKey.Source, runParams.get(AbilityKey.Source)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java index de69e9bda57..9dbaf529cad 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDraw.java @@ -69,7 +69,7 @@ public class ReplaceDraw extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Player", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java b/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java index f2310586db2..fecf53a8bf2 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceDrawCards.java @@ -69,7 +69,7 @@ public class ReplaceDrawCards extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Player", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java b/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java index a432be40f6e..083ad7b23d2 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceGainLife.java @@ -70,9 +70,9 @@ public class ReplaceGainLife extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("LifeGained", runParams.get("LifeGained")); - sa.setReplacingObject("Player", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.LifeGained, runParams.get(AbilityKey.LifeGained)); + sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java index 5da9b24a876..ee295efe59d 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceMoved.java @@ -117,10 +117,10 @@ public class ReplaceMoved extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Card", runParams.get("Affected")); - sa.setReplacingObject("CardLKI", runParams.get("CardLKI")); - sa.setReplacingObject("Cause", runParams.get("Cause")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected)); + sa.setReplacingObject(AbilityKey.CardLKI, runParams.get(AbilityKey.CardLKI)); + sa.setReplacingObject(AbilityKey.Cause, runParams.get(AbilityKey.Cause)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java b/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java index 507cf5e941b..e7b8440e0b5 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceSurveil.java @@ -44,9 +44,9 @@ public class ReplaceSurveil extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Player", runParams.get("Affected")); - sa.setReplacingObject("SurveilNum", runParams.get("SurveilNum")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected)); + sa.setReplacingObject(AbilityKey.SurveilNum, runParams.get(AbilityKey.SurveilNum)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java b/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java index 80d41010819..7204edfdcbe 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceToken.java @@ -62,9 +62,9 @@ public class ReplaceToken extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.Map, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("TokenNum", runParams.get("TokenNum")); - sa.setReplacingObject("Player", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.TokenNum, runParams.get(AbilityKey.TokenNum)); + sa.setReplacingObject(AbilityKey.Player, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java b/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java index 37feb4fba4e..3f433f38916 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceTurnFaceUp.java @@ -39,8 +39,8 @@ public class ReplaceTurnFaceUp extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Card", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java b/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java index d6307edb38b..d52c65e75b8 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplaceUntap.java @@ -73,8 +73,8 @@ public class ReplaceUntap extends ReplacementEffect { * @see forge.card.replacement.ReplacementEffect#setReplacingObjects(java.util.HashMap, forge.card.spellability.SpellAbility) */ @Override - public void setReplacingObjects(Map runParams, SpellAbility sa) { - sa.setReplacingObject("Card", runParams.get("Affected")); + public void setReplacingObjects(Map runParams, SpellAbility sa) { + sa.setReplacingObject(AbilityKey.Card, runParams.get(AbilityKey.Affected)); } } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java index 87a81af46fb..c4e0296f419 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementEffect.java @@ -200,13 +200,11 @@ public abstract class ReplacementEffect extends TriggerReplacementBase { /** * Sets the replacing objects. - * - * @param runParams + * @param runParams * the run params * @param spellAbility - * the SpellAbility */ - public void setReplacingObjects(final Map runParams, final SpellAbility spellAbility) { + public void setReplacingObjects(final Map runParams, final SpellAbility spellAbility) { // Should be overridden by replacers that need it. } diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index 97b049b770f..815ba915123 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -238,7 +238,7 @@ public class ReplacementHandler { SpellAbility tailend = effectSA; do { - replacementEffect.setReplacingObjects(toStringMap(runParams), tailend); + replacementEffect.setReplacingObjects(runParams, tailend); //set original Params to update them later tailend.setReplacingObject(AbilityKey.OriginalParams, runParams); tailend = tailend.getSubAbility(); @@ -249,7 +249,7 @@ public class ReplacementHandler { effectSA = replacementEffect.getOverridingAbility(); SpellAbility tailend = effectSA; do { - replacementEffect.setReplacingObjects(toStringMap(runParams), tailend); + replacementEffect.setReplacingObjects(runParams, tailend); //set original Params to update them later tailend.setReplacingObject(AbilityKey.OriginalParams, runParams); tailend = tailend.getSubAbility(); diff --git a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java index ea335a7df7d..55760357af4 100644 --- a/forge-game/src/main/java/forge/game/spellability/SpellAbility.java +++ b/forge-game/src/main/java/forge/game/spellability/SpellAbility.java @@ -143,7 +143,7 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit private EnumMap triggeringObjects = AbilityKey.newMap(); - private HashMap replacingObjects = Maps.newHashMap(); + private EnumMap replacingObjects = AbilityKey.newMap(); private List chosenList = null; private CardCollection tappedForConvoke = new CardCollection(); @@ -593,29 +593,15 @@ public abstract class SpellAbility extends CardTraitBase implements ISpellAbilit triggerRemembered = Lists.newArrayList(); } - public HashMap getReplacingObjects() { + public Map getReplacingObjects() { return replacingObjects; } - public boolean hasReplacingObject(final String type) { - return replacingObjects.containsKey(type); - } public Object getReplacingObject(final AbilityKey type) { - return getReplacingObject(type.toString()); - } - // Eventually we want to switch the internal map to be a `Map` instead of a - // `Map`. - @Deprecated - public Object getReplacingObject(final String type) { final Object res = replacingObjects.get(type); return res; } + public void setReplacingObject(final AbilityKey type, final Object o) { - setReplacingObject(type.toString(), o); - } - // Eventually we want to switch the internal map to be a `Map` instead of a - // `Map`. - @Deprecated - public void setReplacingObject(final String type, final Object o) { replacingObjects.put(type, o); } From 33ccc5c21f6dc3ca0b7576c62936748482a4ab5e Mon Sep 17 00:00:00 2001 From: Ryan1729 Date: Sat, 5 Oct 2019 23:52:14 -0600 Subject: [PATCH 14/14] remove import ... --- .../main/java/forge/game/replacement/ReplacementHandler.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java index 815ba915123..07625c7e86e 100644 --- a/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java +++ b/forge-game/src/main/java/forge/game/replacement/ReplacementHandler.java @@ -41,8 +41,6 @@ import com.google.common.collect.Sets; import java.util.*; -import static forge.util.EnumMapUtil.toStringMap; - public class ReplacementHandler { private final Game game; /**