From e033d9045ede11db87da3e4df800f269c202284a Mon Sep 17 00:00:00 2001 From: Hellfish Date: Wed, 26 Oct 2011 08:03:54 +0000 Subject: [PATCH] *Fixed how state triggers could go on the stack twice if they triggered within the same checkStateEffects "cycle". Fixes Garruk Relentless' Transform trigger. *Fixed other cases of double triggering and some code duplication. *Fixed Max's Cut&Paste Deck importer' interaction with alternate card faces. --- src/main/java/forge/GameAction.java | 16 ++++++++-------- src/main/java/forge/MagicStack.java | 6 ++++++ src/main/java/forge/Player.java | 12 ++---------- .../java/forge/gui/deckeditor/DeckImport.java | 9 +++++++-- 4 files changed, 23 insertions(+), 20 deletions(-) diff --git a/src/main/java/forge/GameAction.java b/src/main/java/forge/GameAction.java index 8473c49b842..993db061d62 100644 --- a/src/main/java/forge/GameAction.java +++ b/src/main/java/forge/GameAction.java @@ -136,6 +136,14 @@ public class GameAction { if (copied.isToken() && !zone.is(Constant.Zone.Battlefield)) { zone.remove(copied); } + + if (prev != null) { + if (prev.is(Constant.Zone.Battlefield) && c.isCreature()) { + AllZone.getCombat().removeFromCombat(c); + } + + prev.remove(c); + } HashMap runParams = new HashMap(); runParams.put("Card", lastKnownInfo); @@ -152,14 +160,6 @@ public class GameAction { AllZone.getTriggerHandler().clearSuppression("ChangesZone"); } - if (prev != null) { - if (prev.is(Constant.Zone.Battlefield) && c.isCreature()) { - AllZone.getCombat().removeFromCombat(c); - } - - prev.remove(c); - } - /* if (!(c.isToken() || suppress || zone.is(Constant.Zone.Battlefield)) && !zone.is(Constant.Zone.Battlefield)) copied = AllZone.getCardFactory().copyCard(copied); diff --git a/src/main/java/forge/MagicStack.java b/src/main/java/forge/MagicStack.java index dc249d8f903..96f374a1660 100644 --- a/src/main/java/forge/MagicStack.java +++ b/src/main/java/forge/MagicStack.java @@ -1294,6 +1294,12 @@ public class MagicStack extends MyObservable { return true; } } + + for(SpellAbility sa : simultaneousStackEntryList) { + if(sa.getSourceTrigger() == triggerID) { + return true; + } + } return false; } diff --git a/src/main/java/forge/Player.java b/src/main/java/forge/Player.java index d20cb2360d5..72828350ae5 100644 --- a/src/main/java/forge/Player.java +++ b/src/main/java/forge/Player.java @@ -870,17 +870,9 @@ public abstract class Player extends GameEntity { Card[] cards = zone == Zone.Stack ? AllZone.getStackZone().getCards() : getZone(zone).getCards(); return new CardList(cards); } - - private static ArrayList allZones = new ArrayList(); - - static { - for(Zone z : Constant.Zone.values()) { - allZones.add(z); - } - } - + public CardList getAllCards() { - return getCardsIn(allZones); + return getCardsIn(ALL_ZONES); } public CardList getCardsIncludePhasingIn(final Constant.Zone zone) { diff --git a/src/main/java/forge/gui/deckeditor/DeckImport.java b/src/main/java/forge/gui/deckeditor/DeckImport.java index 1f41b7fe3a9..91daed5e6ba 100644 --- a/src/main/java/forge/gui/deckeditor/DeckImport.java +++ b/src/main/java/forge/gui/deckeditor/DeckImport.java @@ -30,6 +30,7 @@ import forge.deck.DeckRecognizer; import forge.deck.DeckRecognizer.TokenType; import forge.game.GameType; import forge.gui.GuiUtils; +import forge.item.CardPrinted; /** * Dialog for quick import of decks @@ -176,10 +177,14 @@ public class DeckImport extends JDialog { DeckRecognizer.TokenType type = t.getType(); if (type == DeckRecognizer.TokenType.SectionName && t.getText().toLowerCase().contains("side") ) { isMain = false; } if (type != DeckRecognizer.TokenType.KnownCard) { continue; } + CardPrinted crd = t.getCard(); + if(crd.isAlternate()) { + continue; + } if (isMain) { - result.addMain(t.getCard(), t.getNumber()); + result.addMain(crd, t.getNumber()); } else { - result.addSideboard(t.getCard(), t.getNumber()); + result.addSideboard(crd, t.getNumber()); } } return result;