From 763023b55023e22fca0ad6b4c8f0e6cf5aa27d1a Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 20 Oct 2014 21:26:18 +0200 Subject: [PATCH] * Fixed to the mana pool handling. --- Mage.Sets/src/mage/sets/limitedalpha/ManaShort.java | 2 +- Mage.Sets/src/mage/sets/limitedalpha/PowerSink.java | 2 +- Mage/src/mage/game/GameImpl.java | 4 +--- Mage/src/mage/players/ManaPool.java | 12 ++++++++++-- Mage/src/mage/players/PlayerImpl.java | 2 +- 5 files changed, 14 insertions(+), 8 deletions(-) diff --git a/Mage.Sets/src/mage/sets/limitedalpha/ManaShort.java b/Mage.Sets/src/mage/sets/limitedalpha/ManaShort.java index 393ab5fefca..aaae1a44163 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/ManaShort.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/ManaShort.java @@ -97,7 +97,7 @@ class ManaShortEffect extends OneShotEffect { land.tap(game); } - targetPlayer.getManaPool().emptyPool(); + targetPlayer.getManaPool().emptyPool(game); return true; } diff --git a/Mage.Sets/src/mage/sets/limitedalpha/PowerSink.java b/Mage.Sets/src/mage/sets/limitedalpha/PowerSink.java index f3035c5eec1..9c09ed21186 100644 --- a/Mage.Sets/src/mage/sets/limitedalpha/PowerSink.java +++ b/Mage.Sets/src/mage/sets/limitedalpha/PowerSink.java @@ -126,7 +126,7 @@ class PowerSinkCounterUnlessPaysEffect extends OneShotEffect { } // ...and empties his or her mana pool - player.getManaPool().emptyPool(); + player.getManaPool().emptyPool(game); } return true; } diff --git a/Mage/src/mage/game/GameImpl.java b/Mage/src/mage/game/GameImpl.java index be42d9a6a0a..495b341de80 100644 --- a/Mage/src/mage/game/GameImpl.java +++ b/Mage/src/mage/game/GameImpl.java @@ -1169,9 +1169,7 @@ public abstract class GameImpl implements Game, Serializable { @Override public void emptyManaPools() { for (Player player: getPlayers().values()) { - if (!replaceEvent(new GameEvent(GameEvent.EventType.EMPTY_MANA_POOL, player.getId(), null, player.getId()))) { - player.getManaPool().emptyPool(this); - } + player.getManaPool().emptyPool(this); } } diff --git a/Mage/src/mage/players/ManaPool.java b/Mage/src/mage/players/ManaPool.java index 891e5f6f683..5be74e97b42 100644 --- a/Mage/src/mage/players/ManaPool.java +++ b/Mage/src/mage/players/ManaPool.java @@ -34,6 +34,7 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; +import java.util.UUID; import mage.ConditionalMana; import mage.Mana; import mage.abilities.Ability; @@ -54,6 +55,8 @@ import mage.game.events.ManaEvent; */ public class ManaPool implements Serializable { + private final UUID playerId; + private final List manaItems = new ArrayList<>(); private boolean autoPayment; // auto payment from mana pool: true - mode is active @@ -61,12 +64,14 @@ public class ManaPool implements Serializable { private final Set doNotEmptyManaTypes = new HashSet<>(); - public ManaPool() { + public ManaPool(UUID playerId) { + this.playerId = playerId; autoPayment = true; unlockedManaType = null; } public ManaPool(final ManaPool pool) { + this.playerId = pool.playerId; for (ManaPoolItem item: pool.manaItems) { manaItems.add(item.copy()); } @@ -179,7 +184,7 @@ public class ManaPool implements Serializable { for (ManaType manaType : ManaType.values()) { if (item.get(manaType) > 0 && !doNotEmptyManaTypes.contains(manaType)) { if (!item.getDuration().equals(Duration.EndOfTurn) || game.getPhase().getType().equals(TurnPhase.END)) { - if (game.replaceEvent(new GameEvent(GameEvent.EventType.EMPTY_MANA_POOL, null, null, null))) { + if (game.replaceEvent(new GameEvent(GameEvent.EventType.EMPTY_MANA_POOL, playerId, null, playerId))) { int amount = item.get(manaType); item.clear(manaType); item.add(ManaType.COLORLESS, amount); @@ -190,6 +195,9 @@ public class ManaPool implements Serializable { } } } + if (item.count() == 0) { + it.remove(); + } } return total; } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 300072b3bea..c1b42e18d01 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -226,7 +226,7 @@ public abstract class PlayerImpl implements Player, Serializable { graveyard = new CardsImpl(Zone.GRAVEYARD); abilities = new AbilitiesImpl<>(); counters = new Counters(); - manaPool = new ManaPool(); + manaPool = new ManaPool(playerId); library = new Library(playerId); sideboard = new CardsImpl(Zone.OUTSIDE); }