From bbbee3421d3beb140baea55f820246a9cd815fd0 Mon Sep 17 00:00:00 2001 From: Lyu Zong-Hong Date: Fri, 28 May 2021 21:17:24 +0900 Subject: [PATCH] Fix bug that can't flip or transform when mutated --- forge-game/src/main/java/forge/game/card/Card.java | 14 ++++++++++---- .../src/main/java/forge/game/card/CardFactory.java | 4 ++-- 2 files changed, 12 insertions(+), 6 deletions(-) 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 e07dd244c23..f529bfd5547 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -610,6 +610,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return false; } + // Need to remove mutated states, otherwise the changeToState() will fail + if (hasMergedCard()) { + removeMutatedStates(); + } CardCollectionView cards = hasMergedCard() ? getMergedCards() : new CardCollection(this); boolean retResult = false; for (final Card c : cards) { @@ -621,8 +625,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { boolean result = c.changeToState(c.backside ? CardStateName.Transformed : CardStateName.Original); retResult = retResult || result; } - if (retResult && hasMergedCard()) { - removeMutatedStates(); + if (hasMergedCard()) { rebuildMutatedStates(cause); } @@ -643,6 +646,10 @@ public class Card extends GameEntity implements Comparable, IHasSVars { return false; } + // Need to remove mutated states, otherwise the changeToState() will fail + if (hasMergedCard()) { + removeMutatedStates(); + } CardCollectionView cards = hasMergedCard() ? getMergedCards() : new CardCollection(this); boolean retResult = false; for (final Card c : cards) { @@ -653,8 +660,7 @@ public class Card extends GameEntity implements Comparable, IHasSVars { boolean result = c.changeToState(CardStateName.Flipped); retResult = retResult || result; } - if (retResult && hasMergedCard()) { - removeMutatedStates(); + if (hasMergedCard()) { rebuildMutatedStates(cause); game.getTriggerHandler().clearActiveTriggers(this, null); game.getTriggerHandler().registerActiveTrigger(this, false); diff --git a/forge-game/src/main/java/forge/game/card/CardFactory.java b/forge-game/src/main/java/forge/game/card/CardFactory.java index 9b969b9c7b0..b35d00512e4 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -852,8 +852,8 @@ public class CardFactory { final CardCloneStates result = new CardCloneStates(top, sa); result.put(state, ret); - // For transformed, melded or MDFC card, also copy the original state to avoid crash - if (state == CardStateName.Transformed || state == CardStateName.Meld || state == CardStateName.Modal) { + // For face down, flipped, transformed, melded or MDFC card, also copy the original state to avoid crash + if (state != CardStateName.Original) { final CardState ret1 = new CardState(card, CardStateName.Original); ret1.copyFrom(top.getState(CardStateName.Original, true), false); result.put(CardStateName.Original, ret1);