diff --git a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java index 9c23671..5bc106a 100644 --- a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java +++ b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java @@ -397,7 +397,7 @@ public class VanillaSync { // server.execute() from draining, preventing latch countdown). lock.unlock(); - if (!applyLatch.await(15, TimeUnit.SECONDS)) { + if (!applyLatch.await(60, TimeUnit.SECONDS)) { PlayerSync.LOGGER.error("Timeout waiting for main thread sync for player {}", player_uuid); syncNotCompletedPlayer.remove(player_uuid); } diff --git a/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java b/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java index 828cc2e..c6cd59c 100644 --- a/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java +++ b/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java @@ -574,8 +574,14 @@ public class ModsSupport { for (UUID uuid : diskUuids) { restoreStorageContents(uuid, (storedNbt) -> { try { + // FIX: storedNbt is the INNER data ({type, capacity, resources}). + // The map codec expects {uuid-string: {type, capacity, resources}}. + // Wrap the data back in a UUID-keyed CompoundTag before decoding. + net.minecraft.nbt.CompoundTag wrapped = new net.minecraft.nbt.CompoundTag(); + wrapped.put(uuid.toString(), storedNbt); + @SuppressWarnings("unchecked") - com.mojang.serialization.DataResult dataResult = fCodec.decode(ops, storedNbt); + com.mojang.serialization.DataResult dataResult = fCodec.decode(ops, wrapped); Optional opt = dataResult.result(); if (opt.isPresent()) { com.mojang.datafixers.util.Pair pair = (com.mojang.datafixers.util.Pair) opt.get();