From 135288ec02a1d9d8ef23daa6933f15aafa9025e3 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Mon, 14 Jul 2014 15:24:43 +0200 Subject: [PATCH] * Spirit of the Labyrinth - Fixed that the draw restriction did not qork for opponents. --- .../bornofthegods/SpiritOfTheLabyrinth.java | 29 ++++++++++++++----- .../mage/sets/fifthedition/Brainstorm.java | 13 +++++---- 2 files changed, 28 insertions(+), 14 deletions(-) diff --git a/Mage.Sets/src/mage/sets/bornofthegods/SpiritOfTheLabyrinth.java b/Mage.Sets/src/mage/sets/bornofthegods/SpiritOfTheLabyrinth.java index 4114ed0d76b..a29af83ecff 100644 --- a/Mage.Sets/src/mage/sets/bornofthegods/SpiritOfTheLabyrinth.java +++ b/Mage.Sets/src/mage/sets/bornofthegods/SpiritOfTheLabyrinth.java @@ -27,6 +27,7 @@ */ package mage.sets.bornofthegods; +import java.util.HashSet; import java.util.UUID; import mage.MageInt; import mage.abilities.Ability; @@ -76,12 +77,17 @@ public class SpiritOfTheLabyrinth extends CardImpl { class SpiritOfTheLabyrinthWatcher extends Watcher { + private final HashSet playersThatDrewCard; + public SpiritOfTheLabyrinthWatcher() { - super("DrewCard", WatcherScope.PLAYER); + super("DrewCard", WatcherScope.GAME); + this.playersThatDrewCard = new HashSet<>(); } public SpiritOfTheLabyrinthWatcher(final SpiritOfTheLabyrinthWatcher watcher) { super(watcher); + this.playersThatDrewCard = new HashSet<>(); + playersThatDrewCard.addAll(watcher.playersThatDrewCard); } @Override @@ -91,16 +97,23 @@ class SpiritOfTheLabyrinthWatcher extends Watcher { @Override public void watch(GameEvent event, Game game) { - if (condition == true) {//no need to check - condition has already occured - return; - } if (event.getType() == GameEvent.EventType.DREW_CARD ) { - if (event.getPlayerId().equals(this.getControllerId())) { - condition = true; + if (!playersThatDrewCard.contains(event.getPlayerId())) { + playersThatDrewCard.add(event.getPlayerId()); } } } + @Override + public void reset() { + super.reset(); + playersThatDrewCard.clear(); + } + + public boolean hasPlayerDrewCardThisTurn(UUID playerId) { + return playersThatDrewCard.contains(playerId); + } + } class SpiritOfTheLabyrinthEffect extends ReplacementEffectImpl { @@ -132,8 +145,8 @@ class SpiritOfTheLabyrinthEffect extends ReplacementEffectImpl { @Override public boolean applies(GameEvent event, Ability source, Game game) { if (event.getType() == GameEvent.EventType.DRAW_CARD) { - Watcher watcher = game.getState().getWatchers().get("DrewCard", event.getPlayerId()); - if (watcher != null && watcher.conditionMet()) { + SpiritOfTheLabyrinthWatcher watcher = (SpiritOfTheLabyrinthWatcher) game.getState().getWatchers().get("DrewCard"); + if (watcher != null && watcher.hasPlayerDrewCardThisTurn(event.getPlayerId())) { return true; } } diff --git a/Mage.Sets/src/mage/sets/fifthedition/Brainstorm.java b/Mage.Sets/src/mage/sets/fifthedition/Brainstorm.java index a7242142cba..a45bdfc2fb2 100644 --- a/Mage.Sets/src/mage/sets/fifthedition/Brainstorm.java +++ b/Mage.Sets/src/mage/sets/fifthedition/Brainstorm.java @@ -96,12 +96,13 @@ class BrainstormEffect extends OneShotEffect { private boolean putOnLibrary(Player player, Ability source, Game game) { TargetCardInHand target = new TargetCardInHand(); - player.chooseTarget(Outcome.ReturnToHand, target, source, game); - Card card = player.getHand().get(target.getFirstTarget(), game); - if (card != null) { - player.getHand().remove(card); - card.moveToZone(Zone.LIBRARY, source.getSourceId(), game, true); + if (target.canChoose(source.getSourceId(), player.getId(), game)) { + player.chooseTarget(Outcome.ReturnToHand, target, source, game); + Card card = player.getHand().get(target.getFirstTarget(), game); + if (card != null) { + return player.moveCardToLibraryWithInfo(card, source.getSourceId(), game, Zone.HAND, true, false); + } } - return true; + return false; } }