From 84c251fa68c3dcef33e44cff9bca4993e8115827 Mon Sep 17 00:00:00 2001 From: HarvelsX Date: Sat, 25 Dec 2021 11:50:39 +0300 Subject: [PATCH] Maybe fix https://github.com/HarvelsX/HuskSync/issues/1; --- .../husksync/bukkit/util/PlayerSetter.java | 32 +++++++++++-------- .../util/nms/MinecraftVersionUtils.java | 2 +- 2 files changed, 19 insertions(+), 15 deletions(-) diff --git a/bukkit/src/main/java/me/william278/husksync/bukkit/util/PlayerSetter.java b/bukkit/src/main/java/me/william278/husksync/bukkit/util/PlayerSetter.java index a9c7305f..d16273c3 100644 --- a/bukkit/src/main/java/me/william278/husksync/bukkit/util/PlayerSetter.java +++ b/bukkit/src/main/java/me/william278/husksync/bukkit/util/PlayerSetter.java @@ -164,18 +164,20 @@ public class PlayerSetter { = DataSerializer.deserializeAdvancementData(data.getSerializedAdvancements()); if (Settings.useNativeImplementation) { - try { - nativeSyncPlayerAdvancements(player, advancementRecords); - } catch (Exception e) { - plugin.getLogger().log(Level.WARNING, - "Your server does not support a native implementation of achievements synchronization"); - plugin.getLogger().log(Level.WARNING, - "Your server version {0}. Please disable using native implementation!", Bukkit.getVersion()); - - Settings.useNativeImplementation = false; - setPlayerAdvancements(player, advancementRecords, data); - plugin.getLogger().log(Level.SEVERE, e.getMessage(), e); - } + Bukkit.getScheduler().runTaskAsynchronously(plugin, () -> { + try { + nativeSyncPlayerAdvancements(player, advancementRecords); + } catch (Exception e) { + plugin.getLogger().log(Level.WARNING, + "Your server does not support a native implementation of achievements synchronization"); + plugin.getLogger().log(Level.WARNING, + "Your server version {0}. Please disable using native implementation!", Bukkit.getVersion()); + + Settings.useNativeImplementation = false; + setPlayerAdvancements(player, advancementRecords, data); + plugin.getLogger().log(Level.SEVERE, e.getMessage(), e); + } + }); } else { setPlayerAdvancements(player, advancementRecords, data); } @@ -313,8 +315,10 @@ public class PlayerSetter { } }); - AdvancementUtils.markPlayerAdvancementsFirst(playerAdvancements); - AdvancementUtils.ensureAllVisible(playerAdvancements); + synchronized (playerAdvancements) { + AdvancementUtils.markPlayerAdvancementsFirst(playerAdvancements); + AdvancementUtils.ensureAllVisible(playerAdvancements); + } } /** diff --git a/bukkit/src/main/java/me/william278/husksync/bukkit/util/nms/MinecraftVersionUtils.java b/bukkit/src/main/java/me/william278/husksync/bukkit/util/nms/MinecraftVersionUtils.java index 1db45833..1d473b65 100644 --- a/bukkit/src/main/java/me/william278/husksync/bukkit/util/nms/MinecraftVersionUtils.java +++ b/bukkit/src/main/java/me/william278/husksync/bukkit/util/nms/MinecraftVersionUtils.java @@ -13,7 +13,7 @@ public class MinecraftVersionUtils { public final static String SERVER_VERSION = Bukkit.getBukkitVersion().split("-")[0]; public static int compare(String version) { - if (version == null) return 1; + if (version == null || SERVER_VERSION == null) return 1; String[] as = SERVER_VERSION.split("\\."); String[] bs = version.split("\\.");