From 03924a4044f5f2b35b2adf7b5cd64a835f3428ee Mon Sep 17 00:00:00 2001 From: Hans Mackowiak Date: Wed, 29 Mar 2023 04:53:26 +0200 Subject: [PATCH] CardFactory getCloneStates set PT for Vehicle (#2713) * Update CardFactory.java Set PT should also be done for vehicle * Update CardFactory.java * Clean up * Clean up --------- Co-authored-by: tool4EvEr --- forge-game/src/main/java/forge/game/card/Card.java | 10 ++-------- .../src/main/java/forge/game/card/CardFactory.java | 10 ++++++---- .../src/main/java/forge/game/card/CardState.java | 4 ++-- forge-game/src/main/java/forge/game/card/CardUtil.java | 6 +++++- 4 files changed, 15 insertions(+), 15 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 d82fbd469d0..984f8e3174a 100644 --- a/forge-game/src/main/java/forge/game/card/Card.java +++ b/forge-game/src/main/java/forge/game/card/Card.java @@ -3934,38 +3934,32 @@ public class Card extends GameEntity implements Comparable, IHasSVars { currentState.setBaseLoyalty(Integer.toString(n)); } - // values that are printed on card public final int getBasePower() { return currentState.getBasePower(); } - public final int getBaseToughness() { return currentState.getBaseToughness(); } - // values that are printed on card public final void setBasePower(final int n) { currentState.setBasePower(n); } - public final void setBaseToughness(final int n) { currentState.setBaseToughness(n); } // values that are printed on card public final String getBasePowerString() { - return currentState.getBasePowerString(); + return (null == currentState.getBasePowerString()) ? String.valueOf(getBasePower()) : currentState.getBasePowerString(); } - public final String getBaseToughnessString() { - return currentState.getBaseToughnessString(); + return (null == currentState.getBaseToughnessString()) ? String.valueOf(getBaseToughness()) : currentState.getBaseToughnessString(); } // values that are printed on card public final void setBasePowerString(final String s) { currentState.setBasePowerString(s); } - public final void setBaseToughnessString(final String s) { currentState.setBaseToughnessString(s); } 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 b6267e7fb93..7d76f29962e 100644 --- a/forge-game/src/main/java/forge/game/card/CardFactory.java +++ b/forge-game/src/main/java/forge/game/card/CardFactory.java @@ -568,7 +568,7 @@ public class CardFactory { c.setRules(in.getRules()); return c; - } // copyStats() + } /** * Copy characteristics of a particular state of one card to those of a @@ -764,12 +764,14 @@ public class CardFactory { state.removeIntrinsicKeyword(kw); } - if (state.getType().isCreature()) { + // CR 208.3 A noncreature object not on the battlefield has power or toughness only if it has a power and toughness printed on it. + // currently only LKI can be trusted? + if (state.getType().isCreature() || in.getOriginalState(originalState.getStateName()).getBasePowerString() != null) { if (sa.hasParam("SetPower")) { - state.setBasePower(AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("SetPower"), sa)); + state.setBasePower(AbilityUtils.calculateAmount(host, sa.getParam("SetPower"), sa)); } if (sa.hasParam("SetToughness")) { - state.setBaseToughness(AbilityUtils.calculateAmount(sa.getHostCard(), sa.getParam("SetToughness"), sa)); + state.setBaseToughness(AbilityUtils.calculateAmount(host, sa.getParam("SetToughness"), sa)); } } diff --git a/forge-game/src/main/java/forge/game/card/CardState.java b/forge-game/src/main/java/forge/game/card/CardState.java index 32469ade7f1..a529582a31a 100644 --- a/forge-game/src/main/java/forge/game/card/CardState.java +++ b/forge-game/src/main/java/forge/game/card/CardState.java @@ -202,10 +202,10 @@ public class CardState extends GameObject implements IHasSVars { // values that are printed on card public final String getBasePowerString() { - return (null == basePowerString) ? "" + getBasePower() : basePowerString; + return basePowerString; } public final String getBaseToughnessString() { - return (null == baseToughnessString) ? "" + getBaseToughness() : baseToughnessString; + return baseToughnessString; } // values that are printed on card diff --git a/forge-game/src/main/java/forge/game/card/CardUtil.java b/forge-game/src/main/java/forge/game/card/CardUtil.java index e567cd853f0..1110614f04f 100644 --- a/forge-game/src/main/java/forge/game/card/CardUtil.java +++ b/forge-game/src/main/java/forge/game/card/CardUtil.java @@ -222,7 +222,7 @@ public final class CardUtil { newCopy.addAlternateState(CardStateName.Cloner, false); newCopy.getState(CardStateName.Cloner).copyFrom(in.getState(CardStateName.Cloner), true); } - //*/ + */ newCopy.setToken(in.isToken()); newCopy.setCopiedSpell(in.isCopiedSpell()); @@ -233,6 +233,10 @@ public final class CardUtil { newCopy.setBasePower(in.getCurrentPower()); newCopy.setBaseToughness(in.getCurrentToughness()); + // printed P/T + newCopy.setBasePowerString(in.getCurrentState().getBasePowerString()); + newCopy.setBaseToughnessString(in.getCurrentState().getBaseToughnessString()); + // extra copy PT boost newCopy.setPTBoost(in.getPTBoostTable());