fix storing advancement json on dedicated servers
This commit is contained in:
parent
94433229b7
commit
37d0eb2931
|
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user