diff --git a/build.gradle b/build.gradle index 2757bde..74bc302 100644 --- a/build.gradle +++ b/build.gradle @@ -136,8 +136,8 @@ dependencies { // We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it // modLocalRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}" compileOnly "curse.maven:curios-309927:5266541" - compileOnly "curse.maven:sophisticated-backpacks-422301:6303388" - compileOnly "curse.maven:sophisticated-core-618298:6317048" + compileOnly "curse.maven:sophisticated-backpacks-422301:7169843" + compileOnly "curse.maven:sophisticated-core-618298:7169400" // Example mod dependency using a mod jar from ./libs with a flat dir repository // This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar diff --git a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java index 27ef1c4..c5acb9d 100644 --- a/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java +++ b/src/main/java/vip/fubuki/playersync/sync/VanillaSync.java @@ -25,7 +25,6 @@ import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.Items; import net.minecraft.world.level.Level; import net.minecraft.world.level.storage.WorldData; -import net.minecraftforge.common.util.LazyOptional; import net.minecraftforge.event.OnDatapackSyncEvent; import net.minecraftforge.event.TickEvent; import net.minecraftforge.event.entity.living.LivingDeathEvent; @@ -55,7 +54,6 @@ import java.util.*; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import java.util.concurrent.atomic.AtomicInteger; @Mod.EventBusSubscriber public class VanillaSync { @@ -249,7 +247,7 @@ public class VanillaSync { // Mod support ModsSupport modsSupport = new ModsSupport(); - modsSupport.onPlayerJoin(serverPlayer); + modsSupport.doCuriosRestore(serverPlayer); if (!rs1.next()) { store(event.getEntity(), true); @@ -328,6 +326,8 @@ public class VanillaSync { } } + modsSupport.doBackPackRestore(serverPlayer); + serverPlayer.addTag("player_synced"); rs2.close(); 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 3b35db7..4558273 100644 --- a/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java +++ b/src/main/java/vip/fubuki/playersync/sync/addons/ModsSupport.java @@ -25,12 +25,50 @@ import java.util.UUID; public class ModsSupport { + public void doBackPackRestore(Player player) { + 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 + "'"); + ResultSet rsBackpack = qrBackpack.resultSet(); + if (rsBackpack.next()) { + String serialized = rsBackpack.getString("backpack_nbt"); + String nbtString = VanillaSync.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 --- + } + } /** * Restores the Curios inventory for a player. * The saved data is stored as a flat map with composite keys ("slotType:index"). */ - public void onPlayerJoin(net.minecraft.world.entity.player.Player player) throws SQLException { + public void doCuriosRestore(Player player) throws SQLException { if (ModList.get().isLoaded("curios")) { // Obtain the handler from the API. LazyOptional handlerOpt = CuriosApi.getCuriosInventory(player); @@ -92,42 +130,6 @@ 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 + "'"); - ResultSet rsBackpack = qrBackpack.resultSet(); - if (rsBackpack.next()) { - String serialized = rsBackpack.getString("backpack_nbt"); - String nbtString = VanillaSync.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 --- - } } /**