Update IceCave.java
I used getOpponents, but that required changing input from source.getControllerId() to spell.getControllerId() so that it would get the opponents of the player who played the spell, rather than the opponents of the player who controls Ice Cave. I also implemented a null check for the spellController as I made it.
@@ -94,17 +94,21 @@ class IceCaveEffect extends OneShotEffect {
Player controller = game.getPlayer(source.getControllerId());
Permanent sourcePermanent = game.getPermanentOrLKIBattlefield(source.getSourceId());
Spell spell = (Spell) game.getStack().getStackObject(targetPointer.getFirst(game, source));
- if(sourcePermanent != null && spell != null) {
+ if(sourcePermanent != null && spell != null && controller != null) {
+ Player spellController = game.getPlayer(spell.getControllerId());
Cost cost = new ManaCostsImpl(spell.getSpellAbility().getManaCosts().getText());
- for (UUID playerId : game.getState().getPlayerList(source.getControllerId())) {
+ if (spellController != null) {
+ for (UUID playerId : game.getOpponents(spell.getControllerId())) {
Player player = game.getPlayer(playerId);
- if(player.getId() != spell.getControllerId()) {
+ if (player != null) {
cost.clearPaid();
if (cost.canPay(source, source.getSourceId(), player.getId(), game)
&& player.chooseUse(outcome, "Pay " + cost.getText() + " to counter " + spell.getIdName() + '?', source, game)) {
if (cost.pay(source, game, source.getSourceId(), playerId, false, null)) {
game.informPlayers(player.getLogName() + " pays" + cost.getText() + " to counter " + spell.getIdName() + '.');
game.getStack().counter(spell.getId(), source.getSourceId(), game);
+ return true;
+ }
}
}
}
