From ae4f005a9cc28c0dc4c236d9c70274c53f91fb6b Mon Sep 17 00:00:00 2001 From: William Date: Wed, 13 Jul 2022 15:16:39 +0100 Subject: [PATCH] Additional exception handling to player quit event, stop edge-case asynchronous execution --- .../husksync/listener/EventListener.java | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/common/src/main/java/net/william278/husksync/listener/EventListener.java b/common/src/main/java/net/william278/husksync/listener/EventListener.java index 274c23c6..1b673814 100644 --- a/common/src/main/java/net/william278/husksync/listener/EventListener.java +++ b/common/src/main/java/net/william278/husksync/listener/EventListener.java @@ -145,11 +145,18 @@ public abstract class EventListener { if (usersAwaitingSync.contains(user.uuid)) { return; } - plugin.getRedisManager().setUserServerSwitch(user).thenRun(() -> user.getUserData(plugin.getLoggingAdapter()).thenAccept( - optionalUserData -> optionalUserData.ifPresent( - userData -> plugin.getRedisManager().setUserData(user, userData).thenRun( - () -> plugin.getDatabase().setUserData(user, userData, DataSaveCause.DISCONNECT).join())))); - usersAwaitingSync.remove(user.uuid); + + // Handle asynchronous disconnection + CompletableFuture.runAsync(() -> plugin.getRedisManager().setUserServerSwitch(user) + .thenRun(() -> user.getUserData(plugin.getLoggingAdapter()).thenAccept(optionalUserData -> + optionalUserData.ifPresent(userData -> plugin.getRedisManager().setUserData(user, userData) + .thenRun(() -> plugin.getDatabase().setUserData(user, userData, DataSaveCause.DISCONNECT))))) + .thenRun(() -> usersAwaitingSync.remove(user.uuid)).exceptionally(throwable -> { + plugin.getLoggingAdapter().log(Level.SEVERE, + "An exception occurred handling a player disconnection"); + throwable.printStackTrace(); + return null; + }).join()); } /**