From a7f13737138efbf67168761683bbeb76c1c0a643 Mon Sep 17 00:00:00 2001 From: mlus <1319237806@qq.com> Date: Fri, 21 Mar 2025 19:42:08 +0800 Subject: [PATCH] 1.3.5 release --- gradle.properties | 2 +- .../vip/fubuki/playersync/PlayerSync.java | 12 +++--- .../fubuki/playersync/sync/ModsSupport.java | 42 +++++++++++++++++++ .../fubuki/playersync/sync/VanillaSync.java | 35 ---------------- 4 files changed, 50 insertions(+), 41 deletions(-) diff --git a/gradle.properties b/gradle.properties index a945a2e..d986998 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,4 +3,4 @@ org.gradle.jvmargs=-Xmx3G org.gradle.daemon=false -mod_version=1.20.1-1.3.4 \ No newline at end of file +mod_version=1.20.1-1.3.5 \ No newline at end of file diff --git a/src/main/java/vip/fubuki/playersync/PlayerSync.java b/src/main/java/vip/fubuki/playersync/PlayerSync.java index 0b35648..ecda779 100644 --- a/src/main/java/vip/fubuki/playersync/PlayerSync.java +++ b/src/main/java/vip/fubuki/playersync/PlayerSync.java @@ -130,11 +130,13 @@ public class PlayerSync { } // Create backpack_data table - JDBCsetUp.executeUpdate( - "CREATE TABLE IF NOT EXISTS " + dbName + ".backpack_data (" + - "uuid CHAR(36) NOT NULL, backpack_nbt MEDIUMBLOB, PRIMARY KEY (uuid)" + - ");", 1 - ); + if(ModList.get().isLoaded("sophisticatedbackpacks")){ + JDBCsetUp.executeUpdate( + "CREATE TABLE IF NOT EXISTS " + dbName + ".backpack_data (" + + "uuid CHAR(36) NOT NULL, backpack_nbt MEDIUMBLOB, PRIMARY KEY (uuid)" + + ");", 1 + ); + } LOGGER.info("PlayerSync is ready!"); } diff --git a/src/main/java/vip/fubuki/playersync/sync/ModsSupport.java b/src/main/java/vip/fubuki/playersync/sync/ModsSupport.java index 6dd6d70..3ab32f2 100644 --- a/src/main/java/vip/fubuki/playersync/sync/ModsSupport.java +++ b/src/main/java/vip/fubuki/playersync/sync/ModsSupport.java @@ -1,11 +1,13 @@ package vip.fubuki.playersync.sync; import com.mojang.brigadier.exceptions.CommandSyntaxException; +import net.minecraft.nbt.CompoundTag; import net.minecraft.nbt.NbtUtils; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.fml.ModList; +import vip.fubuki.playersync.PlayerSync; import vip.fubuki.playersync.util.JDBCsetUp; import vip.fubuki.playersync.util.LocalJsonUtil; @@ -13,6 +15,10 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.util.HashMap; import java.util.Map; +import java.util.Optional; +import java.util.UUID; + +import static vip.fubuki.playersync.sync.VanillaSync.deserializeString; public class ModsSupport { @@ -56,6 +62,42 @@ public class ModsSupport { StoreCurios(player,true); } } + if(ModList.get().isLoaded("sophisticatedbackpacks")){ + // --- Begin Backpack Data Restore --- + PlayerSync.LOGGER.info("Restoring backpack data for player " + player.getUUID()); + net.p3pp3rf1y.sophisticatedbackpacks.util.PlayerInventoryProvider.get().runOnBackpacks(player, (ItemStack backpackItem, String handler, String identifier, int slot) -> { + backpackItem.getCapability(net.p3pp3rf1y.sophisticatedbackpacks.api.CapabilityBackpackWrapper.getCapabilityInstance()) + .ifPresent(wrapper -> { + // Retrieve the contents UUID from the backpack's NBT using NBTHelper + Optional uuidOpt = net.p3pp3rf1y.sophisticatedcore.util.NBTHelper.getUniqueId(wrapper.getBackpack(), "contentsUuid"); + if (uuidOpt.isPresent()) { + UUID contentsUuid = uuidOpt.get(); + try { + JDBCsetUp.QueryResult qrBackpack = JDBCsetUp.executeQuery("SELECT backpack_nbt FROM backpack_data WHERE uuid='" + contentsUuid.toString() + "'"); + ResultSet rsBackpack = qrBackpack.resultSet(); + if (rsBackpack.next()) { + String serialized = rsBackpack.getString("backpack_nbt"); + String nbtString = deserializeString(serialized); + CompoundTag backpackNbt = NbtUtils.snbtToStructure(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); + } + rsBackpack.close(); + qrBackpack.connection().close(); + } catch (SQLException e) { + PlayerSync.LOGGER.error("Error restoring backpack data for UUID " + contentsUuid, e); + } catch (CommandSyntaxException e) { + throw new RuntimeException(e); + } + } else { + PlayerSync.LOGGER.warn("Backpack item in slot " + slot + " has no contentsUuid during restore"); + } + }); + return false; + }); + // --- End Backpack Data Restore --- + } } public void onPlayerLeave(Player player) throws SQLException { diff --git a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java index 1381ee3..1774bac 100644 --- a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java +++ b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java @@ -165,41 +165,6 @@ public class VanillaSync { modsSupport.onPlayerJoin(serverPlayer); serverPlayer.addTag("player_synced"); - // --- Begin Backpack Data Restore --- - PlayerSync.LOGGER.info("Restoring backpack data for player " + player_uuid); - net.p3pp3rf1y.sophisticatedbackpacks.util.PlayerInventoryProvider.get().runOnBackpacks(serverPlayer, (ItemStack backpackItem, String handler, String identifier, int slot) -> { - backpackItem.getCapability(net.p3pp3rf1y.sophisticatedbackpacks.api.CapabilityBackpackWrapper.getCapabilityInstance()) - .ifPresent(wrapper -> { - // Retrieve the contents UUID from the backpack's NBT using NBTHelper - Optional uuidOpt = net.p3pp3rf1y.sophisticatedcore.util.NBTHelper.getUniqueId(wrapper.getBackpack(), "contentsUuid"); - if (uuidOpt.isPresent()) { - UUID contentsUuid = uuidOpt.get(); - try { - JDBCsetUp.QueryResult qrBackpack = JDBCsetUp.executeQuery("SELECT backpack_nbt FROM backpack_data WHERE uuid='" + contentsUuid.toString() + "'"); - ResultSet rsBackpack = qrBackpack.resultSet(); - if (rsBackpack.next()) { - String serialized = rsBackpack.getString("backpack_nbt"); - String nbtString = deserializeString(serialized); - CompoundTag backpackNbt = NbtUtils.snbtToStructure(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); - } - rsBackpack.close(); - qrBackpack.connection().close(); - } catch (SQLException e) { - PlayerSync.LOGGER.error("Error restoring backpack data for UUID " + contentsUuid, e); - } catch (CommandSyntaxException e) { - throw new RuntimeException(e); - } - } else { - PlayerSync.LOGGER.warn("Backpack item in slot " + slot + " has no contentsUuid during restore"); - } - }); - return false; - }); - // --- End Backpack Data Restore --- - rs2.close(); }