fix sophisticated backpack integration for 1.20.4

This commit is contained in:
EoD 2025-05-04 16:42:44 +00:00
parent 9eb8bdc4a0
commit 22b628bdcb

View File

@ -99,34 +99,35 @@ public class ModsSupport {
// --- Begin Backpack Data Restore --- // --- Begin Backpack Data Restore ---
PlayerSync.LOGGER.info("Restoring backpack data for player " + player.getUUID()); 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) -> { net.p3pp3rf1y.sophisticatedbackpacks.util.PlayerInventoryProvider.get().runOnBackpacks(player, (ItemStack backpackItem, String handler, String identifier, int slot) -> {
backpackItem.getCapability(net.p3pp3rf1y.sophisticatedbackpacks.api.CapabilityBackpackWrapper.getCapabilityInstance()) net.p3pp3rf1y.sophisticatedbackpacks.backpack.wrapper.IBackpackWrapper backpackWrapper = net.p3pp3rf1y.sophisticatedbackpacks.backpack.wrapper.BackpackWrapper
.ifPresent(wrapper -> { .fromData(backpackItem);
// Retrieve the contents UUID from the backpack's NBT using NBTHelper
Optional<UUID> uuidOpt = net.p3pp3rf1y.sophisticatedcore.util.NBTHelper.getUniqueId(wrapper.getBackpack(), "contentsUuid"); // Retrieve the contents UUID from the backpack's NBT using NBTHelper
if (uuidOpt.isPresent()) { Optional<UUID> uuidOpt = net.p3pp3rf1y.sophisticatedcore.util.NBTHelper
UUID contentsUuid = uuidOpt.get(); .getUniqueId(backpackWrapper.getBackpack(), "contentsUuid");
try { if (uuidOpt.isPresent()) {
JDBCsetUp.QueryResult qrBackpack = JDBCsetUp.executeQuery("SELECT backpack_nbt FROM backpack_data WHERE uuid='" + contentsUuid + "'"); UUID contentsUuid = uuidOpt.get();
ResultSet rsBackpack = qrBackpack.resultSet(); try {
if (rsBackpack.next()) { JDBCsetUp.QueryResult qrBackpack = JDBCsetUp.executeQuery("SELECT backpack_nbt FROM backpack_data WHERE uuid='" + contentsUuid + "'");
String serialized = rsBackpack.getString("backpack_nbt"); ResultSet rsBackpack = qrBackpack.resultSet();
String nbtString = deserializeString(serialized); if (rsBackpack.next()) {
CompoundTag backpackNbt = NbtUtils.snbtToStructure(nbtString); String serialized = rsBackpack.getString("backpack_nbt");
// Update BackpackStorage with the retrieved NBT String nbtString = deserializeString(serialized);
net.p3pp3rf1y.sophisticatedbackpacks.backpack.BackpackStorage.get().setBackpackContents(contentsUuid, backpackNbt); CompoundTag backpackNbt = NbtUtils.snbtToStructure(nbtString);
PlayerSync.LOGGER.info("Restored backpack data for UUID " + contentsUuid); // Update BackpackStorage with the retrieved NBT
} net.p3pp3rf1y.sophisticatedbackpacks.backpack.BackpackStorage.get().setBackpackContents(contentsUuid, backpackNbt);
rsBackpack.close(); PlayerSync.LOGGER.info("Restored backpack data for UUID " + contentsUuid);
qrBackpack.connection().close(); }
} catch (SQLException e) { rsBackpack.close();
PlayerSync.LOGGER.error("Error restoring backpack data for UUID " + contentsUuid, e); qrBackpack.connection().close();
} catch (CommandSyntaxException e) { } catch (SQLException e) {
throw new RuntimeException(e); PlayerSync.LOGGER.error("Error restoring backpack data for UUID " + contentsUuid, e);
} } catch (CommandSyntaxException e) {
} else { throw new RuntimeException(e);
PlayerSync.LOGGER.warn("Backpack item in slot " + slot + " has no contentsUuid during restore"); }
} } else {
}); PlayerSync.LOGGER.warn("Backpack item in slot " + slot + " has no contentsUuid during restore");
}
return false; return false;
}); });
// --- End Backpack Data Restore --- // --- End Backpack Data Restore ---
@ -172,26 +173,27 @@ public class ModsSupport {
public static void storeSophisticatedBackpacks(Player player) { public static void storeSophisticatedBackpacks(Player player) {
PlayerSync.LOGGER.info("Storing backpack data for player " + player.getUUID()); PlayerSync.LOGGER.info("Storing backpack data for player " + player.getUUID());
net.p3pp3rf1y.sophisticatedbackpacks.util.PlayerInventoryProvider.get().runOnBackpacks(player, (ItemStack backpackItem, String handler, String identifier, int slot) -> { net.p3pp3rf1y.sophisticatedbackpacks.util.PlayerInventoryProvider.get().runOnBackpacks(player, (ItemStack backpackItem, String handler, String identifier, int slot) -> {
backpackItem.getCapability(net.p3pp3rf1y.sophisticatedbackpacks.api.CapabilityBackpackWrapper.getCapabilityInstance()) net.p3pp3rf1y.sophisticatedbackpacks.backpack.wrapper.IBackpackWrapper backpackWrapper = net.p3pp3rf1y.sophisticatedbackpacks.backpack.wrapper.BackpackWrapper
.ifPresent(wrapper -> { .fromData(backpackItem);
// Retrieve the contents UUID from the backpack's NBT using NBTHelper
Optional<UUID> uuidOpt = net.p3pp3rf1y.sophisticatedcore.util.NBTHelper.getUniqueId(wrapper.getBackpack(), "contentsUuid"); // Retrieve the contents UUID from the backpack's NBT using NBTHelper
if (uuidOpt.isPresent()) { Optional<UUID> uuidOpt = net.p3pp3rf1y.sophisticatedcore.util.NBTHelper
UUID contentsUuid = uuidOpt.get(); .getUniqueId(backpackWrapper.getBackpack(), "contentsUuid");
// Get internal backpack data from BackpackStorage (creates it if missing) if (uuidOpt.isPresent()) {
CompoundTag backpackNbt = net.p3pp3rf1y.sophisticatedbackpacks.backpack.BackpackStorage.get().getOrCreateBackpackContents(contentsUuid); UUID contentsUuid = uuidOpt.get();
String serialized = VanillaSync.serialize(backpackNbt.toString()); // Get internal backpack data from BackpackStorage (creates it if missing)
try { CompoundTag backpackNbt = net.p3pp3rf1y.sophisticatedbackpacks.backpack.BackpackStorage.get().getOrCreateBackpackContents(contentsUuid);
// Use REPLACE INTO so existing records are updated String serialized = VanillaSync.serialize(backpackNbt.toString());
JDBCsetUp.executeUpdate("REPLACE INTO backpack_data (uuid, backpack_nbt) VALUES ('" + contentsUuid + "', '" + serialized + "')"); try {
PlayerSync.LOGGER.info("Saved backpack data for UUID " + contentsUuid); // Use REPLACE INTO so existing records are updated
} catch (SQLException e) { JDBCsetUp.executeUpdate("REPLACE INTO backpack_data (uuid, backpack_nbt) VALUES ('" + contentsUuid + "', '" + serialized + "')");
PlayerSync.LOGGER.error("Error saving backpack data for UUID " + contentsUuid, e); PlayerSync.LOGGER.info("Saved backpack data for UUID " + contentsUuid);
} } catch (SQLException e) {
} else { PlayerSync.LOGGER.error("Error saving backpack data for UUID " + contentsUuid, e);
PlayerSync.LOGGER.warn("Backpack item in slot " + slot + " has no contentsUuid"); }
} } else {
}); PlayerSync.LOGGER.warn("Backpack item in slot " + slot + " has no contentsUuid");
}
return false; // Continue processing all backpack items. return false; // Continue processing all backpack items.
}); });
} }