fix storing advancement json on dedicated servers

This commit is contained in:
EoD 2025-04-26 16:04:03 +00:00
parent 94433229b7
commit 37d0eb2931

View File

@ -53,7 +53,7 @@ public class VanillaSync {
ResultSet rs1 = qr1.resultSet(); ResultSet rs1 = qr1.resultSet();
ServerPlayer serverPlayer = (ServerPlayer) event.getEntity(); ServerPlayer serverPlayer = (ServerPlayer) event.getEntity();
if (!rs1.next()){ if (!rs1.next()){
store(event.getEntity(), true, Dist.CLIENT.isDedicatedServer()); store(event.getEntity(), true);
return; return;
} }
boolean online = rs1.getBoolean("online"); boolean online = rs1.getBoolean("online");
@ -233,7 +233,7 @@ public class VanillaSync {
public static void doPlayerSaveToFile(PlayerEvent.SaveToFile event) throws SQLException, IOException { public static void doPlayerSaveToFile(PlayerEvent.SaveToFile event) throws SQLException, IOException {
JDBCsetUp.executeUpdate("UPDATE server_info SET last_update=" + System.currentTimeMillis() + " WHERE id=" + JdbcConfig.SERVER_ID.get()); JDBCsetUp.executeUpdate("UPDATE server_info SET last_update=" + System.currentTimeMillis() + " WHERE id=" + JdbcConfig.SERVER_ID.get());
if (!event.getEntity().getTags().contains("player_synced")) return; if (!event.getEntity().getTags().contains("player_synced")) return;
store(event.getEntity(), false, Dist.CLIENT.isDedicatedServer()); store(event.getEntity(), false);
} }
@SubscribeEvent @SubscribeEvent
@ -255,7 +255,7 @@ public class VanillaSync {
public static void doPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) throws SQLException, IOException { public static void doPlayerLogout(PlayerEvent.PlayerLoggedOutEvent event) throws SQLException, IOException {
String player_uuid = event.getEntity().getUUID().toString(); String player_uuid = event.getEntity().getUUID().toString();
JDBCsetUp.executeUpdate("UPDATE player_data SET online= '0' WHERE uuid='" + player_uuid + "'"); JDBCsetUp.executeUpdate("UPDATE player_data SET online= '0' WHERE uuid='" + player_uuid + "'");
store(event.getEntity(), false, Dist.CLIENT.isDedicatedServer()); store(event.getEntity(), false);
} }
@SubscribeEvent @SubscribeEvent
@ -272,7 +272,7 @@ public class VanillaSync {
}); });
} }
public static void store(Player player, boolean init, boolean isServer) throws SQLException, IOException { public static void store(Player player, boolean init) throws SQLException, IOException {
String player_uuid = player.getUUID().toString(); String player_uuid = player.getUUID().toString();
PlayerSync.LOGGER.info("Storing data for player " + player_uuid + " (init=" + init + ")"); PlayerSync.LOGGER.info("Storing data for player " + player_uuid + " (init=" + init + ")");
@ -319,9 +319,12 @@ public class VanillaSync {
// Advancements // Advancements
File advancements = null; File advancements = null;
File gameDir = Objects.requireNonNull(player.getServer()).getServerDirectory(); File gameDir = Objects.requireNonNull(player.getServer()).getServerDirectory();
if (isServer) { final MinecraftServer server = ServerLifecycleHooks.getCurrentServer();
if (server != null && server.isDedicatedServer() ) {
PlayerSync.LOGGER.trace("Reading dedicated server advancements");
advancements = new File(gameDir, getSyncWorldForServer() + "/advancements" + "/" + player_uuid + ".json"); advancements = new File(gameDir, getSyncWorldForServer() + "/advancements" + "/" + player_uuid + ".json");
} else { } else {
PlayerSync.LOGGER.debug("Reading non-dedicated server advancements");
File[] files = scanAdvancementsFile(player_uuid, gameDir); File[] files = scanAdvancementsFile(player_uuid, gameDir);
long latestModifiedDate = 0; long latestModifiedDate = 0;
for (File file : files) { for (File file : files) {
@ -334,9 +337,13 @@ public class VanillaSync {
} }
byte[] bytes = new byte[0]; byte[] bytes = new byte[0];
if (advancements != null) { if (advancements != null) {
PlayerSync.LOGGER.debug("Storing advancements for " + player_uuid + " from " + advancements.toPath());
bytes = Files.readAllBytes(advancements.toPath()); bytes = Files.readAllBytes(advancements.toPath());
} else {
PlayerSync.LOGGER.error("Unable to save advancements for player " + player_uuid);
} }
String json = new String(bytes, StandardCharsets.UTF_8); String json = new String(bytes, StandardCharsets.UTF_8);
PlayerSync.LOGGER.trace("Storing advancements for player " + player_uuid + ": " + json);
// SQL Operation for player data // SQL Operation for player data
if (init) { if (init) {
@ -408,7 +415,7 @@ public class VanillaSync {
executorService.submit(() -> { executorService.submit(() -> {
try { try {
// Call the same store method used in logout and file save events. // Call the same store method used in logout and file save events.
store(player, false, server.isDedicatedServer()); store(player, false);
} catch (Exception e) { } catch (Exception e) {
PlayerSync.LOGGER.error("Error auto-saving player " + player.getUUID(), e); PlayerSync.LOGGER.error("Error auto-saving player " + player.getUUID(), e);
} }