diff --git a/forge-gui/src/main/java/forge/net/server/RemoteClient.java b/forge-gui/src/main/java/forge/net/server/RemoteClient.java index 7897904292f..9d48719919d 100644 --- a/forge-gui/src/main/java/forge/net/server/RemoteClient.java +++ b/forge-gui/src/main/java/forge/net/server/RemoteClient.java @@ -20,7 +20,11 @@ public final class RemoteClient implements IToClient { @Override public void send(final NetEvent event) { System.out.println("Sending event " + event + " to " + channel); - channel.writeAndFlush(event); + try { + channel.writeAndFlush(event).sync(); + } catch (Exception e) { + e.printStackTrace(); + } } @Override diff --git a/forge-gui/src/main/java/forge/player/TargetSelection.java b/forge-gui/src/main/java/forge/player/TargetSelection.java index d83693c9e1d..b0eda8b15bd 100644 --- a/forge-gui/src/main/java/forge/player/TargetSelection.java +++ b/forge-gui/src/main/java/forge/player/TargetSelection.java @@ -18,6 +18,7 @@ package forge.player; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; import java.util.Map; @@ -29,9 +30,11 @@ import forge.game.GameEntity; import forge.game.GameObject; import forge.game.card.Card; import forge.game.card.CardUtil; +import forge.game.card.CardView; import forge.game.player.PlayerView; import forge.game.spellability.SpellAbility; import forge.game.spellability.SpellAbilityStackInstance; +import forge.game.spellability.StackItemView; import forge.game.spellability.TargetRestrictions; import forge.game.zone.Zone; import forge.game.zone.ZoneType; @@ -170,20 +173,20 @@ public class TargetSelection { // Send in a list of valid cards, and popup a choice box to target final Game game = ability.getActivatingPlayer().getGame(); - final List crdsBattle = Lists.newArrayList(); - final List crdsExile = Lists.newArrayList(); - final List crdsGrave = Lists.newArrayList(); - final List crdsLibrary = Lists.newArrayList(); - final List crdsStack = Lists.newArrayList(); - final List crdsAnte = Lists.newArrayList(); + final List crdsBattle = Lists.newArrayList(); + final List crdsExile = Lists.newArrayList(); + final List crdsGrave = Lists.newArrayList(); + final List crdsLibrary = Lists.newArrayList(); + final List crdsStack = Lists.newArrayList(); + final List crdsAnte = Lists.newArrayList(); for (final Card inZone : choices) { Zone zz = game.getZoneOf(inZone); - if (zz.is(ZoneType.Battlefield)) crdsBattle.add(inZone); - else if (zz.is(ZoneType.Exile)) crdsExile.add(inZone); - else if (zz.is(ZoneType.Graveyard)) crdsGrave.add(inZone); - else if (zz.is(ZoneType.Library)) crdsLibrary.add(inZone); - else if (zz.is(ZoneType.Stack)) crdsStack.add(inZone); - else if (zz.is(ZoneType.Ante)) crdsAnte.add(inZone); + if (zz.is(ZoneType.Battlefield)) crdsBattle.add(CardView.get(inZone)); + else if (zz.is(ZoneType.Exile)) crdsExile.add(CardView.get(inZone)); + else if (zz.is(ZoneType.Graveyard)) crdsGrave.add(CardView.get(inZone)); + else if (zz.is(ZoneType.Library)) crdsLibrary.add(CardView.get(inZone)); + else if (zz.is(ZoneType.Stack)) crdsStack.add(CardView.get(inZone)); + else if (zz.is(ZoneType.Ante)) crdsAnte.add(CardView.get(inZone)); } List choicesFiltered = new ArrayList(); if (!crdsBattle.isEmpty()) { @@ -232,8 +235,8 @@ public class TargetSelection { return true; } - if (chosen instanceof Card) { - ability.getTargets().add((Card) chosen); + if (chosen instanceof CardView) { + ability.getTargets().add(game.getCard((CardView) chosen)); } return true; } @@ -243,6 +246,7 @@ public class TargetSelection { final String message = tgt.getVTSelection(); // Find what's targetable, then allow human to choose final List selectOptions = new ArrayList(); + HashMap stackItemViewSpellAbilityHashMap = new HashMap<>(); final Game game = ability.getActivatingPlayer().getGame(); for (final SpellAbilityStackInstance si : game.getStack()) { @@ -252,7 +256,8 @@ public class TargetSelection { ability.resetTargets(); } else if (ability.canTargetSpellAbility(abilityOnStack)) { - selectOptions.add(si); + stackItemViewSpellAbilityHashMap.put(si.getView(), si); + selectOptions.add(si.getView()); } } @@ -275,8 +280,8 @@ public class TargetSelection { if (madeChoice == null) { return false; } - if (madeChoice instanceof SpellAbilityStackInstance) { - ability.getTargets().add(((SpellAbilityStackInstance)madeChoice).getSpellAbility(true)); + if (madeChoice instanceof StackItemView) { + ability.getTargets().add(stackItemViewSpellAbilityHashMap.get(madeChoice).getSpellAbility(true)); } else {// 'FINISH TARGETING' chosen bTargetingDone = true;