Merge pull request #147 from mlus-asuka/1.20.1-dev
Fix sync order for mod support
This commit is contained in:
commit
dfabb42c6b
|
|
@ -136,8 +136,8 @@ dependencies {
|
||||||
// We add the full version to localRuntime, not runtimeOnly, so that we do not publish a dependency on it
|
// 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}"
|
// modLocalRuntime "mezz.jei:jei-${mc_version}-neoforge:${jei_version}"
|
||||||
compileOnly "curse.maven:curios-309927:5266541"
|
compileOnly "curse.maven:curios-309927:5266541"
|
||||||
compileOnly "curse.maven:sophisticated-backpacks-422301:6303388"
|
compileOnly "curse.maven:sophisticated-backpacks-422301:7169843"
|
||||||
compileOnly "curse.maven:sophisticated-core-618298:6317048"
|
compileOnly "curse.maven:sophisticated-core-618298:7169400"
|
||||||
|
|
||||||
// Example mod dependency using a mod jar from ./libs with a flat dir repository
|
// Example mod dependency using a mod jar from ./libs with a flat dir repository
|
||||||
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
// This maps to ./libs/coolmod-${mc_version}-${coolmod_version}.jar
|
||||||
|
|
|
||||||
|
|
@ -25,7 +25,6 @@ import net.minecraft.world.item.ItemStack;
|
||||||
import net.minecraft.world.item.Items;
|
import net.minecraft.world.item.Items;
|
||||||
import net.minecraft.world.level.Level;
|
import net.minecraft.world.level.Level;
|
||||||
import net.minecraft.world.level.storage.WorldData;
|
import net.minecraft.world.level.storage.WorldData;
|
||||||
import net.minecraftforge.common.util.LazyOptional;
|
|
||||||
import net.minecraftforge.event.OnDatapackSyncEvent;
|
import net.minecraftforge.event.OnDatapackSyncEvent;
|
||||||
import net.minecraftforge.event.TickEvent;
|
import net.minecraftforge.event.TickEvent;
|
||||||
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
import net.minecraftforge.event.entity.living.LivingDeathEvent;
|
||||||
|
|
@ -55,7 +54,6 @@ import java.util.*;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
import java.util.concurrent.ConcurrentHashMap;
|
||||||
import java.util.concurrent.ExecutorService;
|
import java.util.concurrent.ExecutorService;
|
||||||
import java.util.concurrent.Executors;
|
import java.util.concurrent.Executors;
|
||||||
import java.util.concurrent.atomic.AtomicInteger;
|
|
||||||
|
|
||||||
@Mod.EventBusSubscriber
|
@Mod.EventBusSubscriber
|
||||||
public class VanillaSync {
|
public class VanillaSync {
|
||||||
|
|
@ -249,7 +247,7 @@ public class VanillaSync {
|
||||||
|
|
||||||
// Mod support
|
// Mod support
|
||||||
ModsSupport modsSupport = new ModsSupport();
|
ModsSupport modsSupport = new ModsSupport();
|
||||||
modsSupport.onPlayerJoin(serverPlayer);
|
modsSupport.doCuriosRestore(serverPlayer);
|
||||||
|
|
||||||
if (!rs1.next()) {
|
if (!rs1.next()) {
|
||||||
store(event.getEntity(), true);
|
store(event.getEntity(), true);
|
||||||
|
|
@ -328,6 +326,8 @@ public class VanillaSync {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
modsSupport.doBackPackRestore(serverPlayer);
|
||||||
|
|
||||||
serverPlayer.addTag("player_synced");
|
serverPlayer.addTag("player_synced");
|
||||||
|
|
||||||
rs2.close();
|
rs2.close();
|
||||||
|
|
|
||||||
|
|
@ -25,12 +25,50 @@ import java.util.UUID;
|
||||||
|
|
||||||
|
|
||||||
public class ModsSupport {
|
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<UUID> 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.
|
* Restores the Curios inventory for a player.
|
||||||
* The saved data is stored as a flat map with composite keys ("slotType:index").
|
* 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")) {
|
if (ModList.get().isLoaded("curios")) {
|
||||||
// Obtain the handler from the API.
|
// Obtain the handler from the API.
|
||||||
LazyOptional<ICuriosItemHandler> handlerOpt = CuriosApi.getCuriosInventory(player);
|
LazyOptional<ICuriosItemHandler> handlerOpt = CuriosApi.getCuriosInventory(player);
|
||||||
|
|
@ -92,42 +130,6 @@ public class ModsSupport {
|
||||||
StoreCurios(player, true);
|
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<UUID> 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 ---
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user