From 031cd4176d2510ebc2ffbf61596c7359f57c80f9 Mon Sep 17 00:00:00 2001 From: tool4ever Date: Tue, 22 Oct 2024 10:14:43 +0200 Subject: [PATCH] Fix logic for Henzie (#6402) --- forge-core/src/main/java/forge/card/mana/ManaCost.java | 8 ++++---- .../src/main/java/forge/card/mana/ManaCostParser.java | 10 ++++++---- .../main/java/forge/game/mana/ManaCostBeingPaid.java | 5 ++++- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/forge-core/src/main/java/forge/card/mana/ManaCost.java b/forge-core/src/main/java/forge/card/mana/ManaCost.java index bd78b9e8519..fdfa28734c2 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCost.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCost.java @@ -42,7 +42,7 @@ public final class ManaCost implements Comparable, Iterable shards; private final int genericCost; - private boolean hasNoCost = true; // lands cost + private final boolean hasNoCost; // lands cost private String stringValue; // precalculated for toString; private Float compareWeight = null; @@ -93,14 +93,14 @@ public final class ManaCost implements Comparable, Iterable shardsTemp = Lists.newArrayList(); while (parser.hasNext()) { - this.hasNoCost = false; final ManaCostShard shard = parser.next(); if (shard != null && shard != ManaCostShard.GENERIC) { shardsTemp.add(shard); } // null is OK - that was generic mana } - this.genericCost = parser.getTotalGenericCost(); // collect generic mana - // here + int generic = parser.getTotalGenericCost(); // collect generic mana here + this.hasNoCost = generic == -1; + this.genericCost = generic == -1 ? 0 : generic; sealClass(shardsTemp); } diff --git a/forge-core/src/main/java/forge/card/mana/ManaCostParser.java b/forge-core/src/main/java/forge/card/mana/ManaCostParser.java index 3cbe4bc3f15..80a86445471 100644 --- a/forge-core/src/main/java/forge/card/mana/ManaCostParser.java +++ b/forge-core/src/main/java/forge/card/mana/ManaCostParser.java @@ -1,6 +1,6 @@ package forge.card.mana; -import org.apache.commons.lang3.StringUtils; +import com.google.common.primitives.Ints; /** @@ -54,7 +54,7 @@ public class ManaCostParser implements IParserManaCost { */ @Override public final boolean hasNext() { - return this.nextToken < this.cost.length && !this.cost[this.nextToken].equals("-1"); + return this.nextToken < this.cost.length; } /* @@ -65,8 +65,10 @@ public class ManaCostParser implements IParserManaCost { @Override public final ManaCostShard next() { final String unparsed = this.cost[this.nextToken++]; - if (StringUtils.isNumeric(unparsed)) { - this.genericCost += Integer.parseInt(unparsed); + // consider negation sign + Integer i = Ints.tryParse(unparsed); + if (i != null) { + this.genericCost += i; return null; } diff --git a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java index 04788a01ae3..995b62f2dfd 100644 --- a/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java +++ b/forge-game/src/main/java/forge/game/mana/ManaCostBeingPaid.java @@ -97,7 +97,10 @@ public class ManaCostBeingPaid { @Override public int getTotalGenericCost() { ShardCount c = unpaidShards.get(ManaCostShard.GENERIC); - return c == null ? 0 : c.totalCount; + if (c == null) { + return unpaidShards.isEmpty() ? -1 : 0; + } + return c.totalCount; } }