diff --git a/common/src/main/java/net/william278/husksync/data/UserData.java b/common/src/main/java/net/william278/husksync/data/UserData.java index 33ff08f6..8b19396b 100644 --- a/common/src/main/java/net/william278/husksync/data/UserData.java +++ b/common/src/main/java/net/william278/husksync/data/UserData.java @@ -15,7 +15,7 @@ public class UserData { *
* This value is to be incremented whenever the format changes. */ - private static final int CURRENT_FORMAT_VERSION = 1; + public static final int CURRENT_FORMAT_VERSION = 1; /** * Stores the user's status data, including health, food, etc. @@ -136,4 +136,8 @@ public class UserData { return minecraftVersion; } + public int getFormatVersion() { + return formatVersion; + } + } diff --git a/common/src/main/java/net/william278/husksync/player/OnlineUser.java b/common/src/main/java/net/william278/husksync/player/OnlineUser.java index ce1b712a..f285d5e7 100644 --- a/common/src/main/java/net/william278/husksync/player/OnlineUser.java +++ b/common/src/main/java/net/william278/husksync/player/OnlineUser.java @@ -175,13 +175,22 @@ public abstract class OnlineUser extends User { @NotNull EventCannon eventCannon, @NotNull Logger logger, @NotNull Version serverMinecraftVersion) { return CompletableFuture.supplyAsync(() -> { - // Prevent synchronizing newer versions of Minecraft + // Prevent synchronising user data from newer versions of Minecraft if (Version.minecraftVersion(data.getMinecraftVersion()).compareTo(serverMinecraftVersion) > 0) { - logger.log(Level.SEVERE, "Cannot set data for player " + username + " with Minecraft version \"" - + data.getMinecraftVersion() + "\" because it is newer than the server's version, \"" - + serverMinecraftVersion + "\""); + logger.log(Level.SEVERE, "Cannot set data for " + username + + " because the Minecraft version of their user data (" + data.getMinecraftVersion() + + ") is newer than the server's Minecraft version (" + serverMinecraftVersion + ")."); return false; } + // Prevent synchronising user data from newer versions of the plugin + if (data.getFormatVersion() > UserData.CURRENT_FORMAT_VERSION) { + logger.log(Level.SEVERE, "Cannot set data for " + username + + " because the format version of their user data (v" + data.getFormatVersion() + + ") is newer than the current format version (v" + UserData.CURRENT_FORMAT_VERSION + ")."); + return false; + } + + // Fire the PreSyncEvent final PreSyncEvent preSyncEvent = (PreSyncEvent) eventCannon.firePreSyncEvent(this, data).join(); final UserData finalData = preSyncEvent.getUserData(); final List