From e4262abfd71f9397094bab9577bb3fccbfea2c18 Mon Sep 17 00:00:00 2001
From: William
Date: Thu, 14 Jul 2022 10:30:10 +0100
Subject: [PATCH] Prevent synchronisation of newer user data formats, tweak
error messages
---
.../net/william278/husksync/data/UserData.java | 6 +++++-
.../william278/husksync/player/OnlineUser.java | 17 +++++++++++++----
2 files changed, 18 insertions(+), 5 deletions(-)
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> dataSetOperations = new ArrayList<>() {{