From d1432ebb3150c3d5b1ef9b166bc57e893e49b03f Mon Sep 17 00:00:00 2001 From: William Date: Wed, 13 Jul 2022 14:21:15 +0100 Subject: [PATCH] Hotfix: Fix IllegalArgumentException when attempting to set non-primitive PersistentDataContainer key types. --- .../william278/husksync/player/BukkitPlayer.java | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java index d18c8620..aae8381a 100644 --- a/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java +++ b/bukkit/src/main/java/net/william278/husksync/player/BukkitPlayer.java @@ -26,6 +26,7 @@ import java.util.*; import java.util.concurrent.CompletableFuture; import java.util.concurrent.atomic.AtomicBoolean; import java.util.concurrent.atomic.AtomicReference; +import java.util.logging.Level; /** * Bukkit implementation of an {@link OnlineUser} @@ -402,10 +403,18 @@ public class BukkitPlayer extends OnlineUser { return new PersistentDataContainerData(new HashMap<>()); } final HashMap persistentDataMap = new HashMap<>(); - for (NamespacedKey key : container.getKeys()) { - persistentDataMap.put(key.toString(), ArrayUtils.toObject(container.get(key, PersistentDataType.BYTE_ARRAY))); + // Set persistent data keys; ignore keys that we cannot synchronise as byte arrays + for (final NamespacedKey key : container.getKeys()) { + try { + persistentDataMap.put(key.toString(), ArrayUtils.toObject(container.get(key, PersistentDataType.BYTE_ARRAY))); + } catch (IllegalArgumentException | NullPointerException ignored) { + } } return new PersistentDataContainerData(persistentDataMap); + }).exceptionally(throwable -> { + BukkitHuskSync.getInstance().getLoggingAdapter().log(Level.WARNING, "Could not read " + player.getName() + "'s persistent data map, skipping!"); + throwable.printStackTrace(); + return new PersistentDataContainerData(new HashMap<>()); }); }