From ae657acee3c40a2545cc9e7fb911a1b3a4712ced Mon Sep 17 00:00:00 2001 From: William278 Date: Thu, 20 Mar 2025 19:29:20 +0000 Subject: [PATCH] feat: skip unserializable items on Fabric --- .../husksync/data/FabricSerializer.java | 33 +++++++++++++------ 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/fabric/src/main/java/net/william278/husksync/data/FabricSerializer.java b/fabric/src/main/java/net/william278/husksync/data/FabricSerializer.java index 5e298708..48c3d600 100644 --- a/fabric/src/main/java/net/william278/husksync/data/FabricSerializer.java +++ b/fabric/src/main/java/net/william278/husksync/data/FabricSerializer.java @@ -39,6 +39,7 @@ import org.jetbrains.annotations.ApiStatus; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -173,6 +174,7 @@ public abstract class FabricSerializer { container.putInt("size", items.length); final NbtList itemList = new NbtList(); final DynamicRegistryManager registryManager = plugin.getMinecraftServer().getRegistryManager(); + final List skipped = new ArrayList<>(); for (int i = 0; i < items.length; i++) { final ItemStack item = items[i]; if (item == null || item.isEmpty() || item.getCount() < 1 || item.getCount() > 99) { @@ -180,9 +182,16 @@ public abstract class FabricSerializer { } final NbtCompound entry = encodeNbt(item, registryManager); + if (entry == null) { + skipped.add(item); + continue; + } entry.putInt("Slot", i); itemList.add(entry); } + if (!skipped.isEmpty()) { + plugin.debug("Skipped serializing items in array: %s".formatted(Arrays.toString(skipped.toArray()))); + } container.put(ITEMS_TAG, itemList); return container; } @@ -216,17 +225,21 @@ public abstract class FabricSerializer { ).getValue(); } - @NotNull + @Nullable private NbtCompound encodeNbt(@NotNull ItemStack item, @NotNull DynamicRegistryManager registryManager) { - //#if MC==12104 - return (NbtCompound) item.toNbt(registryManager); - //#elseif MC==12101 - //$$ return (NbtCompound) item.encode(registryManager); - //#elseif MC==12001 - //$$ final NbtCompound compound = new NbtCompound(); - //$$ item.writeNbt(compound); - //$$ return compound; - //#endif + try { + //#if MC==12104 + return (NbtCompound) item.toNbt(registryManager); + //#elseif MC==12101 + //$$ return (NbtCompound) item.encode(registryManager); + //#elseif MC==12001 + //$$ final NbtCompound compound = new NbtCompound(); + //$$ item.writeNbt(compound); + //$$ return compound; + //#endif + } catch (Throwable e) { + return null; + } } @NotNull