diff --git a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java index 2670932411c..c579a8b7808 100644 --- a/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java +++ b/forge-gui-desktop/src/main/java/forge/gui/CardDetailPanel.java @@ -177,15 +177,15 @@ public class CardDetailPanel extends SkinnedPanel { setInfoLabel.setOpaque(false); setInfoLabel.setBorder(null); cdArea.setText(""); - if (card == null) { + + final CardStateView state = card.getState(isInAltState); + if (card == null || state == null) { updateBorder(null, false); return; } boolean canShow = MatchUtil.canCardBeShown(card); - final CardStateView state = card.getState(isInAltState); - if (state.getManaCost().isNoCost() || !canShow) { nameCostLabel.setText(CardDetailUtil.formatCardName(card, canShow, isInAltState)); } diff --git a/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java b/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java index 9db70383f82..5e5dfdc36a2 100644 --- a/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java +++ b/forge-gui-desktop/src/main/java/forge/view/arcane/PlayArea.java @@ -542,7 +542,7 @@ public class PlayArea extends CardPanelContainer implements CardPanelMouseListen if (selectOtherCardsInStack) { if (stack != null) { for (CardPanel p : stack) { - if (p != panel && p.getCard() != null) { + if (p != panel && p.getCard() != null && p.getStack() == stack) { if (otherCardViewsToSelect == null) { otherCardViewsToSelect = new ArrayList(); } diff --git a/forge-gui/src/main/java/forge/match/input/InputPassPriority.java b/forge-gui/src/main/java/forge/match/input/InputPassPriority.java index 3f71df5932b..45ae4fccc72 100644 --- a/forge-gui/src/main/java/forge/match/input/InputPassPriority.java +++ b/forge-gui/src/main/java/forge/match/input/InputPassPriority.java @@ -17,6 +17,7 @@ */ package forge.match.input; +import java.util.ArrayList; import java.util.List; import forge.game.Game; @@ -131,9 +132,36 @@ public class InputPassPriority extends InputSyncronizedBase { return false; } - return selectAbility(player.getController().getAbilityToPlay(abilities, triggerEvent)); + final SpellAbility ability = player.getController().getAbilityToPlay(abilities, triggerEvent); + if (selectAbility(ability)) { + if (otherCardsToSelect != null && ability.isManaAbility()) { + //if mana ability activated, activate same ability on other cards to select if possible + String abStr = ability.toUnsuppressedString(); + final List otherAbilitiesToPlay = new ArrayList(); + for (Card c : otherCardsToSelect) { + for (SpellAbility ab : c.getAllPossibleAbilities(player, true)) { + if (ab.toUnsuppressedString().equals(abStr)) { + otherAbilitiesToPlay.add(ab); + break; + } + } + } + if (otherAbilitiesToPlay.size() > 0) { + ThreadUtil.invokeInGameThread(new Runnable() { //must execute other abilities on game thread + @Override + public void run() { + for (SpellAbility ab : otherAbilitiesToPlay) { + player.getController().playChosenSpellAbility(ab); + } + } + }); + } + } + return true; + } + return false; } - + @Override public boolean selectAbility(final SpellAbility ab) { if (ab != null) {