From e74f5995cbab335e5d658f190ef6403b08fd3cb8 Mon Sep 17 00:00:00 2001 From: LevelX2 Date: Sat, 18 Jun 2016 14:46:35 +0200 Subject: [PATCH] Fixed some more possible null pointer exceptions. --- .../src/mage/sets/antiquities/TawnossCoffin.java | 4 +++- .../src/mage/sets/coldsnap/JestersScepter.java | 4 ++-- .../mage/sets/returntoravnica/EpicExperiment.java | 5 ++++- Mage.Sets/src/mage/sets/zendikar/InfernoTrap.java | 2 +- .../src/main/java/mage/game/combat/CombatGroup.java | 3 +++ Mage/src/main/java/mage/players/PlayerImpl.java | 13 +++++++------ 6 files changed, 20 insertions(+), 11 deletions(-) diff --git a/Mage.Sets/src/mage/sets/antiquities/TawnossCoffin.java b/Mage.Sets/src/mage/sets/antiquities/TawnossCoffin.java index 0f490f893a2..b3634e3a1a1 100644 --- a/Mage.Sets/src/mage/sets/antiquities/TawnossCoffin.java +++ b/Mage.Sets/src/mage/sets/antiquities/TawnossCoffin.java @@ -218,7 +218,9 @@ class TawnossCoffinReturnEffect extends OneShotEffect { @Override public boolean apply(Game game, Ability source) { ExileZone exileZone = game.getExile().getExileZone(source.getSourceId()); - + if (exileZone == null) { + return true; + } FilterCard filter = new FilterCard(); filter.add(new CardTypePredicate(CardType.CREATURE)); //There should be only 1 there, but the for each loop seems the most practical to get to it diff --git a/Mage.Sets/src/mage/sets/coldsnap/JestersScepter.java b/Mage.Sets/src/mage/sets/coldsnap/JestersScepter.java index b348ea41b44..89b7b2dddba 100644 --- a/Mage.Sets/src/mage/sets/coldsnap/JestersScepter.java +++ b/Mage.Sets/src/mage/sets/coldsnap/JestersScepter.java @@ -244,8 +244,8 @@ class JestersScepterCounterEffect extends OneShotEffect { String nameOfExiledCardPayment = (String) game.getState().getValue(source.getSourceId() + "_nameOfExiledCardPayment"); String nameOfExiledCardPayment2 = (String) game.getState().getValue(source.getSourceId() + "_nameOfExiledCardPayment2"); if (nameOfExiledCardPayment != null) { - if (nameOfExiledCardPayment.matches(spell.getName()) - || nameOfExiledCardPayment2.matches(spell.getName())) { + if (nameOfExiledCardPayment.equals(spell.getCard().getName()) + || (nameOfExiledCardPayment2 != null) && nameOfExiledCardPayment2.equals(spell.getCard().getName())) { return game.getStack().counter(targetPointer.getFirst(game, source), source.getSourceId(), game); } } diff --git a/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java b/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java index d66e668851b..1224ee031d2 100644 --- a/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java +++ b/Mage.Sets/src/mage/sets/returntoravnica/EpicExperiment.java @@ -119,7 +119,10 @@ class EpicExperimentEffect extends OneShotEffect { } } // move cards not cast to graveyard - controller.moveCards(game.getExile().getExileZone(source.getSourceId()).getCards(game), Zone.GRAVEYARD, source, game); + ExileZone exileZone = game.getExile().getExileZone(source.getSourceId()); + if (exileZone != null) { + controller.moveCards(exileZone.getCards(game), Zone.GRAVEYARD, source, game); + } return true; } return false; diff --git a/Mage.Sets/src/mage/sets/zendikar/InfernoTrap.java b/Mage.Sets/src/mage/sets/zendikar/InfernoTrap.java index 0dd863a919e..2d7c397e47f 100644 --- a/Mage.Sets/src/mage/sets/zendikar/InfernoTrap.java +++ b/Mage.Sets/src/mage/sets/zendikar/InfernoTrap.java @@ -90,7 +90,7 @@ class InfernoTrapCondition implements Condition { InfernoTrapWatcher watcher = (InfernoTrapWatcher) game.getState().getWatchers().get(InfernoTrapWatcher.class.getName()); if (watcher != null) { Set damagingCreatures = watcher.getDamagingCreatures(source.getControllerId()); - return !damagingCreatures.isEmpty() && damagingCreatures.size() > 1; + return damagingCreatures != null && damagingCreatures.size() > 1; } return false; } diff --git a/Mage/src/main/java/mage/game/combat/CombatGroup.java b/Mage/src/main/java/mage/game/combat/CombatGroup.java index 0dfafdcb247..1d3904c7c64 100644 --- a/Mage/src/main/java/mage/game/combat/CombatGroup.java +++ b/Mage/src/main/java/mage/game/combat/CombatGroup.java @@ -487,6 +487,9 @@ public class CombatGroup implements Serializable, Copyable { attackerPerms.add(game.getPermanent(attackerId)); } UUID attackerId = player.chooseAttackerOrder(attackerPerms, game); + if (!player.isInGame()) { + break; + } attackerOrder.add(attackerId); attackerList.remove(attackerId); } diff --git a/Mage/src/main/java/mage/players/PlayerImpl.java b/Mage/src/main/java/mage/players/PlayerImpl.java index 39aa8162124..d477f5f93e7 100644 --- a/Mage/src/main/java/mage/players/PlayerImpl.java +++ b/Mage/src/main/java/mage/players/PlayerImpl.java @@ -28,6 +28,7 @@ package mage.players; import java.io.Serializable; +import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; @@ -139,6 +140,7 @@ public abstract class PlayerImpl implements Player, Serializable { private static final Logger logger = Logger.getLogger(PlayerImpl.class); private static Random rnd = new Random(); + private static SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss.SSS"); /** * Used to cancel waiting requests send to the player @@ -203,7 +205,7 @@ public abstract class PlayerImpl implements Player, Serializable { protected boolean canPayLifeCost = true; protected boolean loseByZeroOrLessLife = true; protected boolean canPlayCardsFromGraveyard = true; - + protected FilterPermanent sacrificeCostFilter; protected final List alternativeSourceCosts = new ArrayList<>(); @@ -1232,8 +1234,7 @@ public abstract class PlayerImpl implements Player, Serializable { } if (!ability.isUsesStack()) { ability.resolve(game); - } - else { + } else { game.fireEvent(new GameEvent(EventType.TRIGGERED_ABILITY, ability.getId(), ability.getSourceId(), ability.getControllerId())); } game.removeBookmark(bookmark); @@ -2950,10 +2951,10 @@ public abstract class PlayerImpl implements Player, Serializable { public void setCanPaySacrificeCostFilter(FilterPermanent filter) { this.sacrificeCostFilter = filter; } - + @Override public FilterPermanent getSacrificeCostFilter() { - return sacrificeCostFilter; + return sacrificeCostFilter; } @Override @@ -3016,7 +3017,7 @@ public abstract class PlayerImpl implements Player, Serializable { if (game.getContinuousEffects().asThough(card.getId(), AsThoughEffectType.LOOK_AT_FACE_DOWN, this.getId(), game)) { if (chooseUse(Outcome.Benefit, "Look at that card?", null, game)) { Cards cards = new CardsImpl(card); - this.lookAtCards(getName(), cards, game); + this.lookAtCards(getName() + " - " + sdf.format(System.currentTimeMillis()), cards, game); return true; } }