From 04e581fc1ffc764cee3421a0a7afb91d1b32a3c4 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 18 Aug 2026 00:00:39 +0800 Subject: [PATCH 1/4] move extra text renders for Prepare Cards --- forge-game/src/main/java/forge/game/card/Card.java | 12 ------------ .../src/main/java/forge/gui/card/CardDetailUtil.java | 9 +++++++++ 2 files changed, 9 insertions(+), 12 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 5249b18cd2aa..9db5a0dda31e 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3117,18 +3117,6 @@ public String getAbilityText(final CardState state) { sb.append("\r\n"); } - if (hasState(CardStateName.PreparedSpell) && state.getStateName().equals(CardStateName.Original)) { - CardState prepState = getState(CardStateName.PreparedSpell); - SpellAbility prepSA = prepState.getFirstSpellAbility(); - if (prepSA != null) { - sb.append(Localizer.getInstance().getMessage("lblPrepared")); - sb.append(" — ").append(CardTranslation.getTranslatedName(prepState)); - sb.append(" ").append(prepSA.getPayCosts().toSimpleString()); - sb.append(": "); - sb.append(prepSA); - } - } - // replace triple line feeds with double line feeds final String s = "\r\n\r\n\r\n"; int start = sb.lastIndexOf(s); diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index ef5cae395daa..8cafe6066715 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -656,6 +656,15 @@ public static String composeCardText(final CardStateView state, final GameView g area.append("\n\n"); area.append("Owner: ").append(card.getOwner().toString()); } + + if (card.hasPreparedSpell()) { + area.append("\n\n"); + area.append("Prepared — " + + card.getBackSideName() + " " + + card.getAlternateState().getManaCost().toString() + ":" + + card.getAlternateState().getAbilityText() + ); + } return area.toString().trim(); } } From bdbe784f5c036a8d548cf0a111c64aef0df435ac Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 18 Aug 2026 00:19:01 +0800 Subject: [PATCH 2/4] minor changes --- forge-game/src/main/java/forge/game/card/CardView.java | 10 +++++----- .../main/java/forge/trackable/TrackableProperty.java | 2 +- forge-gui-mobile/src/forge/util/CardRendererUtils.java | 2 +- .../src/main/java/forge/gui/card/CardDetailUtil.java | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 4c162b92d9e4..33af83a3f137 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -983,7 +983,7 @@ public CardStateView getRightSplitState() { public boolean hasBackSide() { return get(TrackableProperty.HasBackSide); } - public String getBackSideName() { return get(TrackableProperty.BackSideName); } + public String getAlternateStateName() { return get(TrackableProperty.AlternateStateName); } public CardStateView createAlternateState(final CardStateName state0) { return new CardStateView(getId(), state0, tracker); @@ -992,9 +992,9 @@ public CardStateView createAlternateState(final CardStateName state0) { public CardStateView getState(final boolean alternate0) { return alternate0 ? getAlternateState() : getCurrentState(); } - void updateBackSide(String stateName, boolean hasBackSide) { + void updateAlternateStateName(String stateName, boolean hasBackSide) { set(TrackableProperty.HasBackSide, hasBackSide); - set(TrackableProperty.BackSideName, stateName); + set(TrackableProperty.AlternateStateName, stateName); } public boolean wasDestroyed() { @@ -1051,9 +1051,9 @@ void updateState(Card c) { set(TrackableProperty.Room, c.isRoom()); set(TrackableProperty.FacedownImageKey, c.getFacedownImageKey()); - //backside + //alternateStateName && hasBackside if (c.getAlternateState() != null) - updateBackSide(c.getAlternateState().getName(), c.isDoubleFaced()); + updateAlternateStateName(c.getAlternateState().getName(), c.isDoubleFaced()); final Card cloner = c.getCloner(); set(TrackableProperty.Cloner, cloner == null ? null : cloner.getName() + " (" + cloner.getId() + ")"); diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index d7949f3e6cd9..75032eb25d93 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -110,6 +110,7 @@ public enum TrackableProperty { PairedWith(TrackableTypes.CardViewType), CurrentState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), AlternateState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), + AlternateStateName(TrackableTypes.StringType), LeftSplitState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), RightSplitState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), Room(TrackableTypes.BooleanType, FreezeMode.IgnoresFreeze), @@ -217,7 +218,6 @@ public enum TrackableProperty { SA_IsSpell(TrackableTypes.BooleanType), //HasBackSide - BackSideName(TrackableTypes.StringType), HasBackSide(TrackableTypes.BooleanType), //StackItem diff --git a/forge-gui-mobile/src/forge/util/CardRendererUtils.java b/forge-gui-mobile/src/forge/util/CardRendererUtils.java index 3ce9cec83534..4581c511d0ca 100644 --- a/forge-gui-mobile/src/forge/util/CardRendererUtils.java +++ b/forge-gui-mobile/src/forge/util/CardRendererUtils.java @@ -43,7 +43,7 @@ public static boolean canShowAlternate(final CardView card, final String referen boolean showAlt = false; if (card.hasAlternateState()) { if (card.hasBackSide()) - showAlt = reference.contains(card.getBackSideName()) || card.getAlternateState().getAbilityText().contains(reference); + showAlt = reference.contains(card.getAlternateStateName()) || card.getAlternateState().getAbilityText().contains(reference); else if (card.hasSecondaryState()) showAlt = reference.equals(card.getAlternateState().getAbilityText()); else if (card.isSplitCard()) { diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index 8cafe6066715..ce62dab949ec 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -660,7 +660,7 @@ public static String composeCardText(final CardStateView state, final GameView g if (card.hasPreparedSpell()) { area.append("\n\n"); area.append("Prepared — " - + card.getBackSideName() + " " + + card.getAlternateStateName() + " " + card.getAlternateState().getManaCost().toString() + ":" + card.getAlternateState().getAbilityText() ); From b008b630430842e90eba901475e4692641e3abff Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 18 Aug 2026 01:24:40 +0800 Subject: [PATCH 3/4] Update CardDetailUtil.java extra space and translation --- forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index ce62dab949ec..19d6259e849b 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -659,9 +659,9 @@ public static String composeCardText(final CardStateView state, final GameView g if (card.hasPreparedSpell()) { area.append("\n\n"); - area.append("Prepared — " + area.append(Localizer.getInstance().getMessage("lblPrepared") + " — " + card.getAlternateStateName() + " " - + card.getAlternateState().getManaCost().toString() + ":" + + card.getAlternateState().getManaCost().toString() + ": " + card.getAlternateState().getAbilityText() ); } From d5a2a755294ae3425e4a8eb18ddf719f1c1f7fd4 Mon Sep 17 00:00:00 2001 From: kevlahnota Date: Tue, 1 Sep 2026 21:47:04 +0800 Subject: [PATCH 4/4] update --- forge-game/src/main/java/forge/game/card/CardView.java | 8 +++----- .../src/main/java/forge/trackable/TrackableProperty.java | 1 - forge-gui-mobile/src/forge/util/CardRendererUtils.java | 2 +- .../src/main/java/forge/gui/card/CardDetailUtil.java | 2 +- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/forge-game/src/main/java/forge/game/card/CardView.java b/forge-game/src/main/java/forge/game/card/CardView.java index 33af83a3f137..74a2a82401a2 100644 --- a/forge-game/src/main/java/forge/game/card/CardView.java +++ b/forge-game/src/main/java/forge/game/card/CardView.java @@ -983,7 +983,6 @@ public CardStateView getRightSplitState() { public boolean hasBackSide() { return get(TrackableProperty.HasBackSide); } - public String getAlternateStateName() { return get(TrackableProperty.AlternateStateName); } public CardStateView createAlternateState(final CardStateName state0) { return new CardStateView(getId(), state0, tracker); @@ -992,9 +991,8 @@ public CardStateView createAlternateState(final CardStateName state0) { public CardStateView getState(final boolean alternate0) { return alternate0 ? getAlternateState() : getCurrentState(); } - void updateAlternateStateName(String stateName, boolean hasBackSide) { + void updateBackSide(boolean hasBackSide) { set(TrackableProperty.HasBackSide, hasBackSide); - set(TrackableProperty.AlternateStateName, stateName); } public boolean wasDestroyed() { @@ -1051,9 +1049,9 @@ void updateState(Card c) { set(TrackableProperty.Room, c.isRoom()); set(TrackableProperty.FacedownImageKey, c.getFacedownImageKey()); - //alternateStateName && hasBackside + // hasBackside if (c.getAlternateState() != null) - updateAlternateStateName(c.getAlternateState().getName(), c.isDoubleFaced()); + updateBackSide(c.isDoubleFaced()); final Card cloner = c.getCloner(); set(TrackableProperty.Cloner, cloner == null ? null : cloner.getName() + " (" + cloner.getId() + ")"); diff --git a/forge-game/src/main/java/forge/trackable/TrackableProperty.java b/forge-game/src/main/java/forge/trackable/TrackableProperty.java index 75032eb25d93..57794ade1145 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableProperty.java +++ b/forge-game/src/main/java/forge/trackable/TrackableProperty.java @@ -110,7 +110,6 @@ public enum TrackableProperty { PairedWith(TrackableTypes.CardViewType), CurrentState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), AlternateState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), - AlternateStateName(TrackableTypes.StringType), LeftSplitState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), RightSplitState(TrackableTypes.CardStateViewType, FreezeMode.IgnoresFreeze), Room(TrackableTypes.BooleanType, FreezeMode.IgnoresFreeze), diff --git a/forge-gui-mobile/src/forge/util/CardRendererUtils.java b/forge-gui-mobile/src/forge/util/CardRendererUtils.java index 4581c511d0ca..f177eea38879 100644 --- a/forge-gui-mobile/src/forge/util/CardRendererUtils.java +++ b/forge-gui-mobile/src/forge/util/CardRendererUtils.java @@ -43,7 +43,7 @@ public static boolean canShowAlternate(final CardView card, final String referen boolean showAlt = false; if (card.hasAlternateState()) { if (card.hasBackSide()) - showAlt = reference.contains(card.getAlternateStateName()) || card.getAlternateState().getAbilityText().contains(reference); + showAlt = reference.contains(card.getAlternateState().getName()) || card.getAlternateState().getAbilityText().contains(reference); else if (card.hasSecondaryState()) showAlt = reference.equals(card.getAlternateState().getAbilityText()); else if (card.isSplitCard()) { diff --git a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java index 19d6259e849b..995b4d657f42 100644 --- a/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java +++ b/forge-gui/src/main/java/forge/gui/card/CardDetailUtil.java @@ -660,7 +660,7 @@ public static String composeCardText(final CardStateView state, final GameView g if (card.hasPreparedSpell()) { area.append("\n\n"); area.append(Localizer.getInstance().getMessage("lblPrepared") + " — " - + card.getAlternateStateName() + " " + + card.getAlternateState().getName() + " " + card.getAlternateState().getManaCost().toString() + ": " + card.getAlternateState().getAbilityText() );