From 2a993eb0e0d50340a85c5f42edda06cd1828946f Mon Sep 17 00:00:00 2001 From: "Jamin W. Collins" Date: Wed, 4 Mar 2020 19:06:07 -0700 Subject: [PATCH 1/2] fixing openZones method signature for network-play Changes introduced in ef0a1a84 altered the method signature for openZones, but did not fully update the signature for network-play calls. Signed-off-by: Jamin W. Collins --- forge-gui/src/main/java/forge/net/ProtocolMethod.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/forge-gui/src/main/java/forge/net/ProtocolMethod.java b/forge-gui/src/main/java/forge/net/ProtocolMethod.java index 4497b5cf0f9..642e79dec5c 100644 --- a/forge-gui/src/main/java/forge/net/ProtocolMethod.java +++ b/forge-gui/src/main/java/forge/net/ProtocolMethod.java @@ -75,7 +75,7 @@ public enum ProtocolMethod { clearSelectables (Mode.SERVER), refreshField (Mode.SERVER), // TODO case "setPlayerAvatar": - openZones (Mode.SERVER, PlayerZoneUpdates.class, Collection/*ZoneType*/.class, Map/*PlayerView,Object*/.class), + openZones (Mode.SERVER, PlayerZoneUpdates.class, PlayerView.class, Collection/*ZoneType*/.class, Map/*PlayerView,Object*/.class), restoreOldZones (Mode.SERVER, Void.TYPE, PlayerView.class, PlayerZoneUpdates.class), isUiSetToSkipPhase (Mode.SERVER, Boolean.TYPE, PlayerView.class, PhaseType.class), setRememberedActions(Mode.SERVER, Void.TYPE), From 4f3a8590ddc62d326ef4d361516f27d9e8ff35f9 Mon Sep 17 00:00:00 2001 From: "Jamin W. Collins" Date: Wed, 4 Mar 2020 19:08:02 -0700 Subject: [PATCH 2/2] semi-ignore non-fatal IndexOutOfBoundsException Not entirely sure why there are IndexOutOfBoundsException being seen currently, but they are not fatal and do not appear to result in game state skew between client and server. So, logging and moving on. Signed-off-by: Jamin W. Collins --- .../java/forge/trackable/TrackableTypes.java | 24 +++++++++++-------- 1 file changed, 14 insertions(+), 10 deletions(-) diff --git a/forge-game/src/main/java/forge/trackable/TrackableTypes.java b/forge-game/src/main/java/forge/trackable/TrackableTypes.java index 6214563f8f7..0dce88f71e5 100644 --- a/forge-game/src/main/java/forge/trackable/TrackableTypes.java +++ b/forge-game/src/main/java/forge/trackable/TrackableTypes.java @@ -100,17 +100,21 @@ public class TrackableTypes { if (newCollection != null) { //swap in objects in old collection for objects in new collection for (int i = 0; i < newCollection.size(); i++) { - T newObj = newCollection.get(i); - if (newObj != null) { - T existingObj = from.getTracker().getObj(itemType, newObj.getId()); - if (existingObj != null) { //if object exists already, update its changed properties - existingObj.copyChangedProps(newObj); - newCollection.remove(i); - newCollection.add(i, existingObj); - } - else { //if object is new, cache in object lookup - from.getTracker().putObj(itemType, newObj.getId(), newObj); + try { + T newObj = newCollection.get(i); + if (newObj != null) { + T existingObj = from.getTracker().getObj(itemType, newObj.getId()); + if (existingObj != null) { //if object exists already, update its changed properties + existingObj.copyChangedProps(newObj); + newCollection.remove(i); + newCollection.add(i, existingObj); + } + else { //if object is new, cache in object lookup + from.getTracker().putObj(itemType, newObj.getId(), newObj); + } } + } catch (IndexOutOfBoundsException e) { + System.err.println("got an IndexOutOfBoundsException, trying to continue ..."); } } }