diff --git a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java index 4a4ed7a6b1b..37626b09d53 100644 --- a/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java +++ b/forge-game/src/main/java/forge/game/spellability/AbilityManaPart.java @@ -17,7 +17,10 @@ */ package forge.game.spellability; -import com.google.common.collect.Lists; +import com.google.common.collect.HashMultiset; +import com.google.common.collect.Maps; +import com.google.common.collect.Multiset; + import forge.card.ColorSet; import forge.card.GamePieceType; import forge.card.MagicColor; @@ -49,6 +52,7 @@ import forge.util.TextUtil; import org.apache.commons.lang3.StringUtils; +import java.util.Collection; import java.util.List; import java.util.Map; import java.util.stream.Collectors; @@ -78,7 +82,7 @@ public class AbilityManaPart implements java.io.Serializable { private final boolean persistentMana; private final boolean combatMana; - private transient List lastManaProduced = Lists.newArrayList(); + private transient Multiset lastManaProduced = HashMultiset.create(); private transient Card sourceCard; private transient IHasSVars sVarHolder; @@ -177,19 +181,20 @@ public final String produceMana(final String produced, final Player player, Spel //clear lastProduced this.lastManaProduced.clear(); + // TODO use MagicColor + Map manaHolder = Maps.newHashMap(); + // loop over mana produced string for (final String c : afterReplace.split(" ")) { if (StringUtils.isNumeric(c)) { - for (int i = Integer.parseInt(c); i > 0; i--) { - this.lastManaProduced.add(new Mana((byte) ManaAtom.COLORLESS, source, this, player)); - } + this.lastManaProduced.add(manaHolder.computeIfAbsent((byte) ManaAtom.COLORLESS, b -> new Mana(b, source, this, player)), Integer.parseInt(c)); } else { byte attemptedMana = MagicColor.fromName(c); if (attemptedMana == 0) { attemptedMana = (byte)ManaAtom.COLORLESS; } - this.lastManaProduced.add(new Mana(attemptedMana, source, this, player)); + this.lastManaProduced.add(manaHolder.computeIfAbsent(attemptedMana, b -> new Mana(b, source, this, player))); } } @@ -566,7 +571,7 @@ public void clearExpressChoice() { * * @return a {@link java.lang.String} object. */ - public List getLastManaProduced() { + public Collection getLastManaProduced() { return this.lastManaProduced; }