From 61a58d36c2ffaf6c81786ff9827c7987cb637b90 Mon Sep 17 00:00:00 2001 From: Oleg Agafonov <jaydi85@gmail.com> Date: Thu, 26 Dec 2019 05:24:44 +0400 Subject: [PATCH] Refactor: added missing getPlayersInRange in cards code (to ignore leaved/lost players); --- .../src/mage/player/ai/ComputerPlayer6.java | 2 +- .../src/mage/cards/d/DescentIntoMadness.java | 65 ++++++++++--------- .../src/mage/cards/e/EnsnaringBridge.java | 2 +- Mage.Sets/src/mage/cards/p/PeaceTalks.java | 2 +- Mage.Sets/src/mage/cards/p/PriceOfGlory.java | 11 +--- Mage.Sets/src/mage/cards/s/SyphonMind.java | 14 ++-- Mage.Sets/src/mage/cards/t/TidalFlats.java | 12 ++-- .../java/org/mage/test/player/TestPlayer.java | 5 -- .../java/org/mage/test/stub/PlayerStub.java | 5 -- .../BeginningOfUntapTriggeredAbility.java | 10 ++- Mage/src/main/java/mage/game/Game.java | 22 +++---- Mage/src/main/java/mage/game/GameState.java | 5 +- .../java/mage/game/permanent/Battlefield.java | 18 ++--- Mage/src/main/java/mage/players/Player.java | 7 -- .../main/java/mage/players/PlayerImpl.java | 5 -- 15 files changed, 75 insertions(+), 110 deletions(-) diff --git a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java index 4a3936a1e6..e0d065ac3a 100644 --- a/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java +++ b/Mage.Server.Plugins/Mage.Player.AI.MA/src/mage/player/ai/ComputerPlayer6.java @@ -227,7 +227,7 @@ public class ComputerPlayer6 extends ComputerPlayer /*implements Player*/ { } val = minimaxAB(node, depth - 1, alpha, beta); } else { - logger.trace("Add Action -- alpha: " + alpha + " beta: " + beta + " depth:" + depth + " step:" + game.getTurn().getStepType() + " for player:" + game.getPlayer(game.getPlayerList().get()).getName()); + logger.trace("Add Action -- alpha: " + alpha + " beta: " + beta + " depth:" + depth + " step:" + game.getTurn().getStepType() + " for player:" + game.getPlayer(game.getActivePlayerId()).getName()); if (allPassed(game)) { if (!game.getStack().isEmpty()) { resolve(node, depth, game); diff --git a/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java b/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java index 5d0e29e5fd..da95405944 100644 --- a/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java +++ b/Mage.Sets/src/mage/cards/d/DescentIntoMadness.java @@ -1,10 +1,5 @@ - package mage.cards.d; -import java.util.ArrayList; -import java.util.LinkedList; -import java.util.List; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.BeginningOfUpkeepTriggeredAbility; import mage.abilities.effects.OneShotEffect; @@ -24,13 +19,17 @@ import mage.filter.predicate.permanent.PermanentIdPredicate; import mage.game.Game; import mage.game.permanent.Permanent; import mage.players.Player; -import mage.players.PlayerList; import mage.target.Target; import mage.target.TargetCard; import mage.target.common.TargetControlledPermanent; +import java.util.ArrayList; +import java.util.LinkedList; +import java.util.List; +import java.util.UUID; + /** - * 5/1/2012 For each despair counter on Descent into Madness, you'll exile a permanent + * 5/1/2012 For each despair counter on Descent into Madness, you'll exile a permanent * you control or exile a card from your hand, not both. * 5/1/2012 First you choose the permanents and/or cards from your hand that will be * exiled. Then each other player in turn order does the same. Then all the chosen permanents @@ -43,13 +42,13 @@ import mage.target.common.TargetControlledPermanent; * 5/1/2012 If Descent into Madness isn't on the battlefield when its ability resolves, * use the number of counters on it when it left the battlefield to determine how many permanents * and/or cards from hands to exile. - * + * * @author noxx */ public final class DescentIntoMadness extends CardImpl { public DescentIntoMadness(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.ENCHANTMENT},"{3}{B}{B}"); + super(ownerId, setInfo, new CardType[]{CardType.ENCHANTMENT}, "{3}{B}{B}"); // At the beginning of your upkeep, put a despair counter on Descent into Madness, then each player exiles X permanents they control and/or cards from their hand, where X is the number of despair counters on Descent into Madness. @@ -83,7 +82,7 @@ class DescentIntoMadnessEffect extends OneShotEffect { } @Override - public boolean apply(Game game, Ability source) { + public boolean apply(Game game, Ability source) { Player controller = game.getPlayer(source.getControllerId()); Permanent sourcePermanent = game.getPermanent(source.getSourceId()); if (sourcePermanent != null && controller != null) { @@ -92,18 +91,20 @@ class DescentIntoMadnessEffect extends OneShotEffect { if (sourcePermanent == null) { sourcePermanent = (Permanent) game.getLastKnownInformation(source.getSourceId(), Zone.BATTLEFIELD); } - if (sourcePermanent != null && controller != null) { + if (sourcePermanent != null && controller != null) { int count = sourcePermanent.getCounters(game).getCount(CounterType.DESPAIR); if (count > 0) { // select the permanents and hand cards in turn order LinkedList<UUID> selectedObjects = new LinkedList<>(); - PlayerList playerList = game.getState().getPlayerList(controller.getId()); - Player currentPlayer = controller; - do { - selectCards(currentPlayer, selectedObjects, count, source, game); - currentPlayer = playerList.getNextInRange(controller, game); - } while (!currentPlayer.equals(controller) && controller.canRespond()); - + + // ask all players + for (UUID playerId : game.getState().getPlayersInRange(controller.getId(), game)) { + Player currentPlayer = game.getPlayer(playerId); + if (currentPlayer != null && currentPlayer.canRespond()) { + selectCards(currentPlayer, selectedObjects, count, source, game); + } + } + // move permanents and hand cards to exile for (UUID objectId : selectedObjects) { if (game.getState().getZone(objectId) == Zone.BATTLEFIELD) { @@ -121,10 +122,10 @@ class DescentIntoMadnessEffect extends OneShotEffect { if (player != null) { player.moveCardToExileWithInfo(card, null, "", source.getSourceId(), game, Zone.HAND, true); } - } + } } } - + } return true; } @@ -134,22 +135,22 @@ class DescentIntoMadnessEffect extends OneShotEffect { private void selectCards(Player player, List<UUID> selectedObjects, int count, Ability source, Game game) { int amount = Math.min(count, player.getHand().size() + game.getBattlefield().getAllActivePermanents(player.getId()).size()); int cardsFromHand = 0; - + while (player.canRespond() && amount > 0) { - + Target target; do { FilterControlledPermanent filter = new FilterControlledPermanent(); - filter.setMessage("permanent you control (" + amount + " left in total)" ); + filter.setMessage("permanent you control (" + amount + " left in total)"); List<PermanentIdPredicate> uuidPredicates = new ArrayList<>(); - for (UUID uuid :selectedObjects) { + for (UUID uuid : selectedObjects) { uuidPredicates.add(new PermanentIdPredicate(uuid)); } - filter.add(Predicates.not(Predicates.or(uuidPredicates))); - + filter.add(Predicates.not(Predicates.or(uuidPredicates))); + target = new TargetControlledPermanent(0, 1, filter, true); if (target.canChoose(player.getId(), game) - && player.choose(Outcome.Exile, target, source.getSourceId(), game)) { + && player.choose(Outcome.Exile, target, source.getSourceId(), game)) { for (UUID targetId : target.getTargets()) { if (!selectedObjects.contains(targetId)) { Permanent chosen = game.getPermanent(targetId); @@ -162,17 +163,17 @@ class DescentIntoMadnessEffect extends OneShotEffect { } } } while (amount > 0 && !target.getTargets().isEmpty() && player.canRespond()); - if (amount > 0) { + if (amount > 0) { TargetCard targetInHand; do { FilterCard filterInHand = new FilterCard(); - filterInHand.setMessage("card from your hand (" + amount + " left in total)"); + filterInHand.setMessage("card from your hand (" + amount + " left in total)"); targetInHand = new TargetCard(0, 1, Zone.HAND, filterInHand); List<CardIdPredicate> uuidPredicates = new ArrayList<>(); - for (UUID uuid :selectedObjects) { + for (UUID uuid : selectedObjects) { uuidPredicates.add(new CardIdPredicate(uuid)); } - filterInHand.add(Predicates.not(Predicates.or(uuidPredicates))); + filterInHand.add(Predicates.not(Predicates.or(uuidPredicates))); if (targetInHand.canChoose(player.getId(), game) && player.choose(Outcome.Exile, player.getHand(), targetInHand, game)) { @@ -188,7 +189,7 @@ class DescentIntoMadnessEffect extends OneShotEffect { } } if (cardsFromHand > 0) { - game.informPlayers(player.getLogName() + " selects " + cardsFromHand + (cardsFromHand == 1?" card":" cards") + " from their hand"); + game.informPlayers(player.getLogName() + " selects " + cardsFromHand + (cardsFromHand == 1 ? " card" : " cards") + " from their hand"); } } } diff --git a/Mage.Sets/src/mage/cards/e/EnsnaringBridge.java b/Mage.Sets/src/mage/cards/e/EnsnaringBridge.java index eb32232266..dfac1b9ca3 100644 --- a/Mage.Sets/src/mage/cards/e/EnsnaringBridge.java +++ b/Mage.Sets/src/mage/cards/e/EnsnaringBridge.java @@ -53,7 +53,7 @@ class EnsnaringBridgeRestrictionEffect extends RestrictionEffect { if (controller == null) { return false; } - return controller.getInRange().contains(permanent.getControllerId()) + return game.getState().getPlayersInRange(controller.getId(), game).contains(permanent.getControllerId()) && permanent.getPower().getValue() > controller.getHand().size(); } diff --git a/Mage.Sets/src/mage/cards/p/PeaceTalks.java b/Mage.Sets/src/mage/cards/p/PeaceTalks.java index e50bbf11e3..bff35048f3 100644 --- a/Mage.Sets/src/mage/cards/p/PeaceTalks.java +++ b/Mage.Sets/src/mage/cards/p/PeaceTalks.java @@ -142,7 +142,7 @@ class PeaceTalksPlayersAndPermanentsCantBeTargetsOfSpellsOrActivatedAbilities ex @Override public boolean applies(GameEvent event, Ability source, Game game) { - for (UUID playerId : game.getPlayer(source.getControllerId()).getInRange()) { + for (UUID playerId : game.getState().getPlayersInRange(source.getControllerId(), game)) { if (event.getTargetId().equals(playerId)) { return false; } diff --git a/Mage.Sets/src/mage/cards/p/PriceOfGlory.java b/Mage.Sets/src/mage/cards/p/PriceOfGlory.java index c34c287cd4..1fbc55a591 100644 --- a/Mage.Sets/src/mage/cards/p/PriceOfGlory.java +++ b/Mage.Sets/src/mage/cards/p/PriceOfGlory.java @@ -1,7 +1,5 @@ - package mage.cards.p; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.TriggeredAbilityImpl; import mage.abilities.effects.OneShotEffect; @@ -17,8 +15,9 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.targetpointer.FixedTarget; +import java.util.UUID; + /** - * * @author cbt33, Loki (Heartbeat of Spring) */ public final class PriceOfGlory extends CardImpl { @@ -63,12 +62,8 @@ class PriceOfGloryAbility extends TriggeredAbilityImpl { if (permanent == null) { return false; } - Player player = game.getPlayer(controllerId); - if (player == null) { - return false; - } if (permanent.isLand() - && player.getInRange().contains(permanent.getControllerId()) + && game.getState().getPlayersInRange(controllerId, game).contains(permanent.getControllerId()) && !permanent.isControlledBy(game.getActivePlayerId())) { // intervening if clause getEffects().get(0).setTargetPointer(new FixedTarget(permanent.getId())); return true; diff --git a/Mage.Sets/src/mage/cards/s/SyphonMind.java b/Mage.Sets/src/mage/cards/s/SyphonMind.java index d66789f773..820017992a 100644 --- a/Mage.Sets/src/mage/cards/s/SyphonMind.java +++ b/Mage.Sets/src/mage/cards/s/SyphonMind.java @@ -1,7 +1,5 @@ - package mage.cards.s; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.effects.OneShotEffect; import mage.cards.Card; @@ -13,15 +11,15 @@ import mage.game.Game; import mage.players.Player; import mage.target.common.TargetCardInHand; +import java.util.UUID; + /** - * * @author jeffwadsworth */ public final class SyphonMind extends CardImpl { public SyphonMind(UUID ownerId, CardSetInfo setInfo) { - super(ownerId,setInfo,new CardType[]{CardType.SORCERY},"{3}{B}"); - + super(ownerId, setInfo, new CardType[]{CardType.SORCERY}, "{3}{B}"); // Each other player discards a card. You draw a card for each card discarded this way. this.getSpellAbility().addEffect(new SyphonMindEffect()); @@ -60,8 +58,8 @@ class SyphonMindEffect extends OneShotEffect { boolean result = false; Player you = game.getPlayer(source.getControllerId()); if (you != null) { - for (UUID playerId : you.getInRange()) { - if (!playerId.equals(source.getControllerId())) { + for (UUID playerId : game.getState().getPlayersInRange(you.getId(), game)) { + if (!playerId.equals(you.getId())) { Player otherPlayer = game.getPlayer(playerId); if (otherPlayer != null && !otherPlayer.getHand().isEmpty()) { TargetCardInHand target = new TargetCardInHand(); @@ -77,7 +75,7 @@ class SyphonMindEffect extends OneShotEffect { } } } - } + } you.drawCards(amount, game); } return result; diff --git a/Mage.Sets/src/mage/cards/t/TidalFlats.java b/Mage.Sets/src/mage/cards/t/TidalFlats.java index 686c387329..7bdc8a5767 100644 --- a/Mage.Sets/src/mage/cards/t/TidalFlats.java +++ b/Mage.Sets/src/mage/cards/t/TidalFlats.java @@ -1,10 +1,5 @@ - package mage.cards.t; -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.UUID; import mage.abilities.Ability; import mage.abilities.common.SimpleActivatedAbility; import mage.abilities.costs.Cost; @@ -29,8 +24,12 @@ import mage.game.permanent.Permanent; import mage.players.Player; import mage.target.targetpointer.FixedTarget; +import java.util.ArrayList; +import java.util.List; +import java.util.Objects; +import java.util.UUID; + /** - * * @author L_J */ public final class TidalFlats extends CardImpl { @@ -76,7 +75,6 @@ class TidalFlatsEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { - game.getPlayerList(); Player controller = game.getPlayer(source.getControllerId()); if (controller == null) { return false; diff --git a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java index 3816f591c7..f31dd797f6 100644 --- a/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java +++ b/Mage.Tests/src/test/java/org/mage/test/player/TestPlayer.java @@ -2203,11 +2203,6 @@ public class TestPlayer implements Player { return computerPlayer.getCounters(); } - @Override - public void otherPlayerLeftGame(Game game) { - computerPlayer.otherPlayerLeftGame(game); - } - @Override public void beginTurn(Game game) { checkLegalMovesThisTurn(game); diff --git a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java index 0a570d788c..d745681ea4 100644 --- a/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java +++ b/Mage.Tests/src/test/java/org/mage/test/stub/PlayerStub.java @@ -403,11 +403,6 @@ public class PlayerStub implements Player { return false; } - @Override - public void otherPlayerLeftGame(Game game) { - - } - @Override public ManaPool getManaPool() { return null; diff --git a/Mage/src/main/java/mage/abilities/common/BeginningOfUntapTriggeredAbility.java b/Mage/src/main/java/mage/abilities/common/BeginningOfUntapTriggeredAbility.java index bc685c9fa7..89d9f87241 100644 --- a/Mage/src/main/java/mage/abilities/common/BeginningOfUntapTriggeredAbility.java +++ b/Mage/src/main/java/mage/abilities/common/BeginningOfUntapTriggeredAbility.java @@ -10,11 +10,9 @@ import mage.constants.TargetController; import mage.constants.Zone; import mage.game.Game; import mage.game.events.GameEvent; -import mage.players.Player; import mage.target.targetpointer.FixedTarget; /** - * * @author Jeff */ public class BeginningOfUntapTriggeredAbility extends TriggeredAbilityImpl { @@ -59,8 +57,8 @@ public class BeginningOfUntapTriggeredAbility extends TriggeredAbilityImpl { } return yours; case NOT_YOU: - Player controller = game.getPlayer(this.getControllerId()); - if (controller != null && controller.getInRange().contains(event.getPlayerId()) && !event.getPlayerId().equals(this.getControllerId())) { + if (game.getState().getPlayersInRange(this.getControllerId(), game).contains(event.getPlayerId()) + && !event.getPlayerId().equals(this.getControllerId())) { if (getTargets().isEmpty()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getPlayerId())); @@ -80,8 +78,7 @@ public class BeginningOfUntapTriggeredAbility extends TriggeredAbilityImpl { } break; case ANY: - controller = game.getPlayer(this.getControllerId()); - if (controller != null && controller.getInRange().contains(event.getPlayerId())) { + if (game.getState().getPlayersInRange(this.getControllerId(), game).contains(event.getPlayerId())) { if (getTargets().isEmpty()) { for (Effect effect : this.getEffects()) { effect.setTargetPointer(new FixedTarget(event.getPlayerId())); @@ -89,6 +86,7 @@ public class BeginningOfUntapTriggeredAbility extends TriggeredAbilityImpl { } return true; } + break; } return false; } diff --git a/Mage/src/main/java/mage/game/Game.java b/Mage/src/main/java/mage/game/Game.java index 354e8817a3..2da26d73c9 100644 --- a/Mage/src/main/java/mage/game/Game.java +++ b/Mage/src/main/java/mage/game/Game.java @@ -1,8 +1,5 @@ package mage.game; -import java.io.Serializable; -import java.util.*; -import java.util.stream.Collectors; import mage.MageItem; import mage.MageObject; import mage.abilities.Ability; @@ -44,6 +41,10 @@ import mage.players.Players; import mage.util.MessageToClient; import mage.util.functions.ApplyToPermanent; +import java.io.Serializable; +import java.util.*; +import java.util.stream.Collectors; + public interface Game extends MageItem, Serializable { MatchType getGameType(); @@ -127,7 +128,6 @@ public interface Game extends MageItem, Serializable { return player.getInRange().stream() .filter(opponentId -> !opponentId.equals(playerId)) .collect(Collectors.toSet()); - } default boolean isActivePlayer(UUID playerId) { @@ -298,9 +298,9 @@ public interface Game extends MageItem, Serializable { /** * Creates and fires an damage prevention event * - * @param damageEvent damage event that will be replaced (instanceof check - * will be done) - * @param source ability that's the source of the prevention effect + * @param damageEvent damage event that will be replaced (instanceof check + * will be done) + * @param source ability that's the source of the prevention effect * @param game * @param amountToPrevent max preventable amount * @return true prevention was successfull / false prevention was replaced @@ -310,12 +310,12 @@ public interface Game extends MageItem, Serializable { /** * Creates and fires an damage prevention event * - * @param event damage event that will be replaced (instanceof check will be - * done) - * @param source ability that's the source of the prevention effect + * @param event damage event that will be replaced (instanceof check will be + * done) + * @param source ability that's the source of the prevention effect * @param game * @param preventAllDamage true if there is no limit to the damage that can - * be prevented + * be prevented * @return true prevention was successfull / false prevention was replaced */ PreventionEffectData preventDamage(GameEvent event, Ability source, Game game, boolean preventAllDamage); diff --git a/Mage/src/main/java/mage/game/GameState.java b/Mage/src/main/java/mage/game/GameState.java index 14f9de51ea..b43dc75c4c 100644 --- a/Mage/src/main/java/mage/game/GameState.java +++ b/Mage/src/main/java/mage/game/GameState.java @@ -635,6 +635,9 @@ public class GameState implements Serializable, Copyable<GameState> { * Returns a list of all active players of the game in range of playerId, * also setting the playerId to the first/current player of the list. Also * returning the other players in turn order. + * <p> + * Not safe for continuous effects, see rule 800.4k (effects must work until end of turn even after player leaves) + * Use Player.InRange() to find active players list at the start of the turn * * @param playerId * @param game @@ -645,7 +648,7 @@ public class GameState implements Serializable, Copyable<GameState> { Player currentPlayer = game.getPlayer(playerId); if (currentPlayer != null) { for (Player player : players.values()) { - if (!player.hasLeft() && !player.hasLost() && currentPlayer.getInRange().contains(player.getId())) { + if (player.isInGame() && currentPlayer.getInRange().contains(player.getId())) { newPlayerList.add(player.getId()); } } diff --git a/Mage/src/main/java/mage/game/permanent/Battlefield.java b/Mage/src/main/java/mage/game/permanent/Battlefield.java index cff67b0068..178880baa6 100644 --- a/Mage/src/main/java/mage/game/permanent/Battlefield.java +++ b/Mage/src/main/java/mage/game/permanent/Battlefield.java @@ -1,4 +1,3 @@ - package mage.game.permanent; import mage.abilities.keyword.PhasingAbility; @@ -6,7 +5,6 @@ import mage.constants.CardType; import mage.constants.RangeOfInfluence; import mage.filter.FilterPermanent; import mage.game.Game; -import mage.players.Player; import java.io.Serializable; import java.util.*; @@ -85,8 +83,8 @@ public class Battlefield implements Serializable { && permanent.isPhasedIn()) .count(); } else { - Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); - return (int) field.values() + List<UUID> range = game.getState().getPlayersInRange(sourcePlayerId, game); + return (int) field.values() .stream() .filter(permanent -> range.contains(permanent.getControllerId()) && filter.match(permanent, sourceId, sourcePlayerId, game) @@ -150,7 +148,7 @@ public class Battlefield implements Serializable { && permanent.isPhasedIn()).count() >= num; } else { - Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); + List<UUID> range = game.getState().getPlayersInRange(sourcePlayerId, game); return field.values().stream() .filter(permanent -> range.contains(permanent.getControllerId()) && filter.match(permanent, null, sourcePlayerId, game) @@ -298,12 +296,8 @@ public class Battlefield implements Serializable { .filter(perm -> perm.isPhasedIn() && filter.match(perm, sourceId, sourcePlayerId, game)) .collect(Collectors.toList()); } else { - Player player = game.getPlayer(sourcePlayerId); - if(player == null){ - return Collections.emptyList(); - } - Set<UUID> range = player.getInRange(); - return field.values() + List<UUID> range = game.getState().getPlayersInRange(sourcePlayerId, game); + return field.values() .stream() .filter(perm -> perm.isPhasedIn() && range.contains(perm.getControllerId()) && filter.match(perm, sourceId, sourcePlayerId, game)).collect(Collectors.toList()); @@ -323,7 +317,7 @@ public class Battlefield implements Serializable { if (game.getRangeOfInfluence() == RangeOfInfluence.ALL) { return getAllActivePermanents(); } else { - Set<UUID> range = game.getPlayer(sourcePlayerId).getInRange(); + List<UUID> range = game.getState().getPlayersInRange(sourcePlayerId, game); return field.values() .stream() .filter(perm -> perm.isPhasedIn() diff --git a/Mage/src/main/java/mage/players/Player.java b/Mage/src/main/java/mage/players/Player.java index 21c1c4ec00..989f14df13 100644 --- a/Mage/src/main/java/mage/players/Player.java +++ b/Mage/src/main/java/mage/players/Player.java @@ -211,13 +211,6 @@ public interface Player extends MageItem, Copyable<Player> { */ boolean canRespond(); - /** - * Called if other player left the game - * - * @param game - */ - void otherPlayerLeftGame(Game game); - ManaPool getManaPool(); Set<UUID> getInRange(); diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index a5941952c1..38c9f1fdf5 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -457,11 +457,6 @@ public abstract class PlayerImpl implements Player, Serializable { return counters; } - @Override - public void otherPlayerLeftGame(Game game) { - findRange(game); - } - @Override public void beginTurn(Game game) { this.landsPlayed = 0;