From d0044fa8244f23b139f273466d43ec16298cafcb Mon Sep 17 00:00:00 2001 From: mlus <1319237806@qq.com> Date: Tue, 17 Feb 2026 19:08:34 +0800 Subject: [PATCH] snbt structure clean --- .../fubuki/playersync/mixin/cobblemon/MixinPCStore.java | 3 ++- .../playersync/mixin/cobblemon/MixinPartyStore.java | 3 ++- src/main/java/vip/fubuki/playersync/sync/VanillaSync.java | 3 ++- .../vip/fubuki/playersync/sync/addons/ModsSupport.java | 4 ++-- .../java/vip/fubuki/playersync/util/LocalJsonUtil.java | 8 ++++++++ 5 files changed, 16 insertions(+), 5 deletions(-) diff --git a/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPCStore.java b/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPCStore.java index c34e609..714d675 100644 --- a/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPCStore.java +++ b/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPCStore.java @@ -14,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import vip.fubuki.playersync.util.JDBCsetUp; +import vip.fubuki.playersync.util.LocalJsonUtil; import java.sql.ResultSet; import java.sql.SQLException; @@ -46,7 +47,7 @@ public class MixinPCStore { ResultSet rs = qr.resultSet(); if (rs.next()) { String serializedData = rs.getString("pc"); - loadedNbt = TagParser.parseTag(serializedData); + loadedNbt = TagParser.parseTag(LocalJsonUtil.cleanSnbt(serializedData)); } rs.close(); diff --git a/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPartyStore.java b/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPartyStore.java index f9f9e98..5896ecc 100644 --- a/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPartyStore.java +++ b/src/main/java/vip/fubuki/playersync/mixin/cobblemon/MixinPartyStore.java @@ -14,6 +14,7 @@ import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.ModifyVariable; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; import vip.fubuki.playersync.util.JDBCsetUp; +import vip.fubuki.playersync.util.LocalJsonUtil; import java.sql.ResultSet; import java.sql.SQLException; @@ -46,7 +47,7 @@ public class MixinPartyStore { ResultSet rs = qr.resultSet(); if (rs.next()) { String serializedData = rs.getString("inv"); - loadedNbt = TagParser.parseTag(serializedData); + loadedNbt = TagParser.parseTag(LocalJsonUtil.cleanSnbt(serializedData)); } rs.close(); diff --git a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java index c333e19..60e34f0 100644 --- a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java +++ b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java @@ -36,6 +36,7 @@ import net.neoforged.fml.common.EventBusSubscriber; import net.neoforged.neoforge.event.OnDatapackSyncEvent; import net.neoforged.neoforge.event.entity.living.LivingDeathEvent; import net.neoforged.neoforge.event.entity.player.PlayerEvent; +import net.neoforged.neoforge.event.entity.player.PlayerInteractEvent; import net.neoforged.neoforge.event.entity.player.PlayerNegotiationEvent; import net.neoforged.neoforge.event.server.ServerStoppedEvent; import net.neoforged.neoforge.event.tick.LevelTickEvent; @@ -379,7 +380,7 @@ public class VanillaSync { } String nbtString = deserializeString(serializedNbt); - CompoundTag compoundTag = TagParser.parseTag(nbtString); + CompoundTag compoundTag = TagParser.parseTag(LocalJsonUtil.cleanSnbt(nbtString)); if (compoundTag.isEmpty() || !compoundTag.contains("id", Tag.TAG_STRING)) { return ItemStack.EMPTY; // Invalid or empty tag 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 5bb3d80..1eb0263 100644 --- a/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java +++ b/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java @@ -44,7 +44,7 @@ public class ModsSupport { if (rsBackpack.next()) { String serialized = rsBackpack.getString("backpack_nbt"); String nbtString = VanillaSync.deserializeString(serialized); - CompoundTag backpackNbt = TagParser.parseTag(nbtString); + CompoundTag backpackNbt = TagParser.parseTag(LocalJsonUtil.cleanSnbt(nbtString)); // Update BackpackStorage with the retrieved NBT net.p3pp3rf1y.sophisticatedbackpacks.backpack.BackpackStorage.get().setBackpackContents(contentsUuid, backpackNbt); PlayerSync.LOGGER.info("Restored backpack data for UUID " + contentsUuid); @@ -111,7 +111,7 @@ public class ModsSupport { String serialized = entry.getValue(); try { String nbtString = VanillaSync.deserializeString(serialized); - CompoundTag tag = TagParser.parseTag(nbtString); + CompoundTag tag = TagParser.parseTag(LocalJsonUtil.cleanSnbt(nbtString)); ItemStack stack = ItemStack.parse(ServerLifecycleHooks.getCurrentServer().registryAccess(),tag).get(); if (handler.getCurios().containsKey(slotType)) { ICurioStacksHandler stacksHandler = handler.getCurios().get(slotType); diff --git a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java index 44c2249..b91fb6d 100644 --- a/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java +++ b/src/main/java/vip/fubuki/playersync/util/LocalJsonUtil.java @@ -42,4 +42,12 @@ public class LocalJsonUtil { public static Map StringToEntryMap(String param) { return stringToGenericMap(param, Integer::parseInt); } + + public static String cleanSnbt(String snbt) { + if (snbt == null) return null; + + return snbt.replaceAll(",\\s*\\{\"\":\"\"}", "") + .replaceAll("\\{\"\":\"\"}\\s*,", "") + .replaceAll("\\{\"\":\"\"}", ""); + } }