From a9aac34a8afdbd5ac641e2baeb8c9a5b2883e91c Mon Sep 17 00:00:00 2001 From: Hanmac Date: Mon, 13 Feb 2017 05:44:16 +0000 Subject: [PATCH] GameAction: fixed StaticAbility for Card changes Zone --- .../src/main/java/forge/game/GameAction.java | 47 ++++++++++--------- 1 file changed, 24 insertions(+), 23 deletions(-) diff --git a/forge-game/src/main/java/forge/game/GameAction.java b/forge-game/src/main/java/forge/game/GameAction.java index 5f311d6ea5a..3459a6557f8 100644 --- a/forge-game/src/main/java/forge/game/GameAction.java +++ b/forge-game/src/main/java/forge/game/GameAction.java @@ -22,6 +22,8 @@ import com.google.common.collect.Iterables; import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Multimap; +import com.google.common.collect.Sets; + import forge.GameCommand; import forge.card.CardStateName; import forge.card.CardType; @@ -65,14 +67,10 @@ import forge.util.Visitor; import forge.util.maps.HashMapOfLists; import forge.util.maps.MapOfLists; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Comparator; -import java.util.HashMap; -import java.util.HashSet; import java.util.Iterator; -import java.util.LinkedList; import java.util.List; import java.util.Map; import java.util.Map.Entry; @@ -211,6 +209,9 @@ public class GameAction { for (final ReplacementEffect repl : copied.getReplacementEffects()) { repl.setHostCard(copied); } + for (final StaticAbility sa : copied.getStaticAbilities()) { + sa.setHostCard(copied); + } if (c.getName().equals("Skullbriar, the Walking Grave")) { copied.setCounters(c.getCounters()); } @@ -309,7 +310,7 @@ public class GameAction { // play the change zone sound game.fireEvent(new GameEventCardChangeZone(c, zoneFrom, zoneTo)); - final HashMap runParams = new HashMap(); + final Map runParams = Maps.newHashMap(); runParams.put("Card", lastKnownInfo); runParams.put("Origin", zoneFrom != null ? zoneFrom.getZoneType().name() : null); runParams.put("Destination", zoneTo.getZoneType().name()); @@ -317,7 +318,7 @@ public class GameAction { runParams.put("IndividualCostPaymentInstance", game.costPaymentStack.peek()); game.getTriggerHandler().runTrigger(TriggerType.ChangesZone, runParams, false); if (zoneFrom != null && zoneFrom.is(ZoneType.Battlefield)) { - final HashMap runParams2 = new HashMap(); + final Map runParams2 = Maps.newHashMap(); runParams2.put("Card", lastKnownInfo); runParams2.put("OriginalController", zoneFrom.getPlayer()); game.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams2, false); @@ -527,7 +528,7 @@ public class GameAction { c.setTurnInZone(tiz); c.setCameUnderControlSinceLastUpkeep(true); - final HashMap runParams = new HashMap(); + final Map runParams = Maps.newHashMap(); runParams.put("Card", c); runParams.put("OriginalController", original); game.getTriggerHandler().runTrigger(TriggerType.ChangesController, runParams, false); @@ -758,7 +759,7 @@ public class GameAction { } } - final HashMap runParams = new HashMap(); + final Map runParams = Maps.newHashMap(); game.getTriggerHandler().runTrigger(TriggerType.Always, runParams, false); if (runEvents && !affectedCards.isEmpty()) { @@ -767,7 +768,7 @@ public class GameAction { } public final void checkStateEffects(final boolean runEvents) { - checkStateEffects(runEvents, new HashSet()); + checkStateEffects(runEvents, Sets.newHashSet()); } public final void checkStateEffects(final boolean runEvents, final Set affectedCards) { // sol(10/29) added for Phase updates, state effects shouldn't be @@ -817,7 +818,7 @@ public class GameAction { // Rule 704.5f - Put into grave (no regeneration) for toughness <= 0 if (c.getNetToughness() <= 0) { if (noRegCreats == null) { - noRegCreats = new LinkedList(); + noRegCreats = Lists.newLinkedList(); } noRegCreats.add(c); checkAgain = true; @@ -825,7 +826,7 @@ public class GameAction { for (final Integer dmg : c.getReceivedDamageFromThisTurn().values()) { if (c.getNetToughness() <= dmg.intValue()) { if (desCreats == null) { - desCreats = new LinkedList(); + desCreats = Lists.newLinkedList(); } desCreats.add(c); checkAgain = true; @@ -837,7 +838,7 @@ public class GameAction { // Rule 704.5h - Destroy due to deathtouch else if (c.getNetToughness() <= c.getDamage() || c.hasBeenDealtDeathtouchDamage()) { if (desCreats == null) { - desCreats = new LinkedList(); + desCreats = Lists.newLinkedList(); } desCreats.add(c); c.setHasBeenDealtDeathtouchDamage(false); @@ -1068,7 +1069,7 @@ public class GameAction { if (p.checkLoseCondition()) { // this will set appropriate outcomes // Run triggers if (losers == null) { - losers = new ArrayList(3); + losers = Lists.newArrayListWithCapacity(3); } losers.add(p); } @@ -1092,7 +1093,7 @@ public class GameAction { reason = null; // they cannot lose! } else { if (losers == null) { - losers = new ArrayList(3); + losers = Lists.newArrayListWithCapacity(3); } losers.add(p); } @@ -1108,8 +1109,8 @@ public class GameAction { } if (reason == null) { - List notLost = new ArrayList(); - Set teams = new HashSet(); + List notLost = Lists.newArrayList(); + Set teams = Sets.newHashSet(); for (Player p : allPlayers) { if (p.getOutcome() == null || p.getOutcome().hasWon()) { notLost.add(p); @@ -1219,7 +1220,7 @@ public class GameAction { return false; } - List toKeep = new ArrayList(); + List toKeep = Lists.newArrayList(); long ts = 0; for (final Card crd : worlds) { @@ -1292,7 +1293,7 @@ public class GameAction { } // Replacement effects - final HashMap repRunParams = new HashMap(); + final Map repRunParams = Maps.newHashMap(); repRunParams.put("Event", "Destroy"); repRunParams.put("Source", sa); repRunParams.put("Card", c); @@ -1311,7 +1312,7 @@ public class GameAction { game.fireEvent(new GameEventCardDestroyed()); // Run triggers - final HashMap runParams = new HashMap(); + final Map runParams = Maps.newHashMap(); runParams.put("Card", c); runParams.put("Causer", activator); game.getTriggerHandler().runTrigger(TriggerType.Destroyed, runParams, false); @@ -1465,7 +1466,7 @@ public class GameAction { checkStateEffects(true); // why? // Run Trigger beginning of the game - final HashMap runParams = new HashMap(); + final Map runParams = Maps.newHashMap(); game.getTriggerHandler().runTrigger(TriggerType.NewGame, runParams, true); // @@ -1494,7 +1495,7 @@ public class GameAction { } // Power Play - Each player with a Power Play in the CommandZone becomes the Starting Player - Set powerPlayers = new HashSet<>(); + Set powerPlayers = Sets.newHashSet(); for (Card c : game.getCardsIn(ZoneType.Command)) { if (c.getName().equals("Power Play")) { powerPlayers.add(c.getOwner()); @@ -1630,7 +1631,7 @@ public class GameAction { private void runOpeningHandActions(final Player first) { Player takesAction = first; do { - List usableFromOpeningHand = new ArrayList(); + List usableFromOpeningHand = Lists.newArrayList(); // Select what can be activated from a given hand for (final Card c : takesAction.getCardsIn(ZoneType.Hand)) { @@ -1689,7 +1690,7 @@ public class GameAction { game.setMonarch(p); // Run triggers - final HashMap runParams = new HashMap(); + final Map runParams = Maps.newHashMap(); runParams.put("Player", p); game.getTriggerHandler().runTrigger(TriggerType.BecomeMonarch, runParams, false); }