From 8d8a2074f0ba0b4cb1016d0b53c69e246264bd19 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 27 Dec 2014 03:51:10 +0100 Subject: [PATCH] * Lion's Eye Diamond - Fixed that it now only can be cast at the time an instant spell could be cast. --- .../main/java/mage/player/ai/ComputerPlayer.java | 9 ++++++++- .../src/mage/player/human/HumanPlayer.java | 9 +++++++++ Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java | 13 ++++++++++++- Mage/src/mage/players/Player.java | 2 ++ Mage/src/mage/players/PlayerImpl.java | 9 +++++++++ 5 files changed, 40 insertions(+), 2 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java index e4c216e8426..6b48a4057a7 100644 --- a/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.AI/src/main/java/mage/player/ai/ComputerPlayer.java @@ -1007,9 +1007,16 @@ public class ComputerPlayer extends PlayerImpl implements Player { log.debug("findPlayables: " + playableInstant.toString() + "---" + playableNonInstant.toString() + "---" + playableAbilities.toString() ); } } - + @Override public boolean playMana(ManaCost unpaid, Game game) { + payManaMode = true; + boolean result = playManaHandling(unpaid, game); + payManaMode = false; + return result; + } + + protected boolean playManaHandling(ManaCost unpaid, Game game) { // log.info("paying for " + unpaid.getText()); ManaCost cost; List producers; diff --git a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java index 7d382e014ca..689e5a8db36 100644 --- a/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java +++ b/Mage.Server.Plugins/Mage.Player.Human/src/mage/player/human/HumanPlayer.java @@ -604,8 +604,17 @@ public class HumanPlayer extends PlayerImpl { return null; } + @Override public boolean playMana(ManaCost unpaid, Game game) { + payManaMode = true; + boolean result = playManaHandling(unpaid, game); + payManaMode = false; + return result; + } + + + protected boolean playManaHandling(ManaCost unpaid, Game game) { updateGameStatePriority("playMana", game); game.firePlayManaEvent(playerId, "Pay " + unpaid.getText()); waitForResponse(game); diff --git a/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java b/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java index ce7a10b8a25..4f42ee0fdc5 100644 --- a/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java +++ b/Mage.Sets/src/mage/sets/mirage/LionsEyeDiamond.java @@ -1,4 +1,4 @@ -/* + /* * Copyright 2010 BetaSteward_at_googlemail.com. All rights reserved. * * Redistribution and use in source and binary forms, with or without modification, are @@ -39,6 +39,8 @@ import mage.cards.CardImpl; import mage.constants.CardType; import mage.constants.Rarity; import mage.constants.Zone; +import mage.game.Game; +import mage.players.Player; /** * @@ -82,6 +84,15 @@ class LionsEyeDiamondAbility extends ManaAbility { super(ability); } + @Override + public boolean canActivate(UUID playerId, Game game) { + Player player = game.getPlayer(playerId); + if (player != null && !player.isInPayManaMode()) { + return super.canActivate(playerId, game); + } + return false; + } + @Override public LionsEyeDiamondAbility copy() { return new LionsEyeDiamondAbility(this); diff --git a/Mage/src/mage/players/Player.java b/Mage/src/mage/players/Player.java index cf188f22257..b22e86a7fd8 100644 --- a/Mage/src/mage/players/Player.java +++ b/Mage/src/mage/players/Player.java @@ -529,4 +529,6 @@ public interface Player extends MageItem, Copyable { boolean isRequestToShowHandCardsAllowed(); Set getUsersAllowedToSeeHandCards(); + boolean isInPayManaMode(); + } diff --git a/Mage/src/mage/players/PlayerImpl.java b/Mage/src/mage/players/PlayerImpl.java index 0e544ab4951..9c350a71493 100644 --- a/Mage/src/mage/players/PlayerImpl.java +++ b/Mage/src/mage/players/PlayerImpl.java @@ -225,6 +225,8 @@ public abstract class PlayerImpl implements Player, Serializable { // indicates that a sourceId will be cast without paying mana protected UUID castSourceIdWithoutMana; + // indicates that the player is in mana payment phase + protected boolean payManaMode = false; protected UserData userData; @@ -321,6 +323,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.reachedNextTurnAfterLeaving = player.reachedNextTurnAfterLeaving; this.castSourceIdWithoutMana = player.castSourceIdWithoutMana; + this.payManaMode = player.payManaMode; } @Override @@ -434,6 +437,7 @@ public abstract class PlayerImpl implements Player, Serializable { this.canGainLife = true; this.canLoseLife = true; this.topCardRevealed = false; + this.payManaMode = false; this.setLife(game.getLife(), game); this.setReachedNextTurnAfterLeaving(false); game.getState().getWatchers().add(new BloodthirstWatcher(playerId)); @@ -904,6 +908,11 @@ public abstract class PlayerImpl implements Player, Serializable { return castSourceIdWithoutMana; } + @Override + public boolean isInPayManaMode() { + return payManaMode; + } + @Override public boolean cast(SpellAbility ability, Game game, boolean noMana) {