diff --git a/EpicHomes.iml b/EpicHomes.iml
index a589521..ad42100 100644
--- a/EpicHomes.iml
+++ b/EpicHomes.iml
@@ -5,6 +5,7 @@
SPIGOT
+ ADVENTURE
1
diff --git a/pom.xml b/pom.xml
index 6984501..3f32824 100644
--- a/pom.xml
+++ b/pom.xml
@@ -6,7 +6,7 @@
me.loving11ish
EpicHomes
- 1.1.3
+ 1.1.4-BETA-04
jar
EpicHomes
@@ -129,6 +129,10 @@
papermc
https://papermc.io/repo/repository/maven-public/
+
+ paper-mc
+ https://repo.papermc.io/repository/maven-public/
+
spigotmc-repo
https://hub.spigotmc.org/nexus/content/repositories/snapshots/
diff --git a/src/main/java/me/loving11ish/epichomes/EpicHomes.java b/src/main/java/me/loving11ish/epichomes/EpicHomes.java
index 62bef6e..6aa8af1 100644
--- a/src/main/java/me/loving11ish/epichomes/EpicHomes.java
+++ b/src/main/java/me/loving11ish/epichomes/EpicHomes.java
@@ -15,10 +15,7 @@
import me.loving11ish.epichomes.menusystem.PlayerMenuUtility;
import me.loving11ish.epichomes.updatesystem.JoinEvent;
import me.loving11ish.epichomes.updatesystem.UpdateChecker;
-import me.loving11ish.epichomes.utils.AutoSaveTaskUtils;
-import me.loving11ish.epichomes.utils.MessageUtils;
-import me.loving11ish.epichomes.utils.UsermapStorageUtil;
-import me.loving11ish.epichomes.utils.VersionCheckerUtils;
+import me.loving11ish.epichomes.utils.*;
import me.loving11ish.epichomes.versionsystems.ServerVersion;
import net.kyori.adventure.platform.bukkit.BukkitAudiences;
import org.bukkit.Bukkit;
@@ -58,7 +55,7 @@ public final class EpicHomes extends JavaPlugin {
private TeleportationManager teleportationManager;
private final List pluginCommands = new ArrayList<>();
- private static final HashMap playerMenuUtilityMap = new HashMap<>();
+ private final HashMap playerMenuUtilityMap = new HashMap<>();
@Override
public void onLoad() {
@@ -90,23 +87,30 @@ public void onLoad() {
versionCheckerUtils.getServerVersion();
versionCheckerUtils.setVersion();
+ ServerVersion detectedServerVersion = getServerVersion();
+
// Server version compatibility check
- if (versionCheckerUtils.getVersion() < 16 || versionCheckerUtils.getVersion() > 21
- || !versionCheckerUtils.isVersionCheckedSuccessfully()
- && !serverVersion.serverVersionEqual(ServerVersion.Other)) {
+ boolean versionDetectionFailed = !versionCheckerUtils.isVersionCheckedSuccessfully()
+ || detectedServerVersion == null
+ || detectedServerVersion.serverVersionEqual(ServerVersion.Other);
+
+ boolean unsupportedLegacyVersion = !versionDetectionFailed
+ && detectedServerVersion.isLegacyVersionScheme()
+ && detectedServerVersion.serverVersionLessThan(ServerVersion.v1_16_R3);
+
+ if (versionDetectionFailed || unsupportedLegacyVersion) {
MessageUtils.sendConsole("&4-------------------------------------------");
MessageUtils.sendConsole("&4Your server version is: &d" + Bukkit.getVersion());
- MessageUtils.sendConsole("&4This plugin is only supported on the Minecraft versions listed below:");
+ MessageUtils.sendConsole("&4This plugin is only tested on the Minecraft versions listed below:");
MessageUtils.sendConsole("&41.16.x");
MessageUtils.sendConsole("&41.17.x");
MessageUtils.sendConsole("&41.18.x");
MessageUtils.sendConsole("&41.19.x");
MessageUtils.sendConsole("&41.20.x");
MessageUtils.sendConsole("&41.21.x");
- MessageUtils.sendConsole("&4Is now disabling!");
+ MessageUtils.sendConsole("&426.x.x");
+ MessageUtils.sendConsole("&4NO SUPPORT OR DEVELOPMENT HELP IS GUARANTEED FOR OTHER VERSIONS!");
MessageUtils.sendConsole("&4-------------------------------------------");
- setPluginEnabled(false);
- return;
} else {
MessageUtils.sendConsole("&a-------------------------------------------");
MessageUtils.sendConsole("&aA supported Minecraft version has been detected");
@@ -279,6 +283,12 @@ public void onEnable() {
AutoSaveTaskUtils.runAutoSaveTask();
MessageUtils.sendConsole(getMessagesManager().getAutoSaveStart());
}, 5L, TimeUnit.SECONDS);
+
+ // Start auto cleanup task
+ getFoliaLib().getScheduler().runLaterAsync(() -> {
+ AutoCleanupTaskUtils.runAutoCleanupTask();
+ MessageUtils.sendDebugConsole("Auto cleanup task started successfully");
+ }, 6L, TimeUnit.SECONDS);
}
@Override
@@ -369,7 +379,7 @@ public void onDisable() {
plugin = null;
}
- public static PlayerMenuUtility getPlayerMenuUtility(Player player) {
+ public PlayerMenuUtility getPlayerMenuUtility(Player player) {
PlayerMenuUtility playerMenuUtility;
if (!(playerMenuUtilityMap.containsKey(player))) {
playerMenuUtility = new PlayerMenuUtility(player);
@@ -483,4 +493,8 @@ public TeleportationManager getTeleportationManager() {
public void setTeleportationManager(TeleportationManager teleportationManager) {
this.teleportationManager = teleportationManager;
}
+
+ public HashMap getRawPlayerMenuUtilityMap() {
+ return playerMenuUtilityMap;
+ }
}
diff --git a/src/main/java/me/loving11ish/epichomes/api/EpicHomesAPI.java b/src/main/java/me/loving11ish/epichomes/api/EpicHomesAPI.java
index 7780d92..43adb3b 100644
--- a/src/main/java/me/loving11ish/epichomes/api/EpicHomesAPI.java
+++ b/src/main/java/me/loving11ish/epichomes/api/EpicHomesAPI.java
@@ -7,15 +7,14 @@
import me.loving11ish.epichomes.models.User;
import me.loving11ish.epichomes.utils.MessageUtils;
import me.loving11ish.epichomes.utils.TeleportationUtils;
+import me.loving11ish.epichomes.versionsystems.ServerVersion;
import org.bukkit.Bukkit;
import org.bukkit.Location;
import org.bukkit.OfflinePlayer;
import org.bukkit.entity.Player;
import java.io.IOException;
-import java.util.HashMap;
-import java.util.List;
-import java.util.UUID;
+import java.util.*;
/**
* EpicHomesAPI is a class that provides a set of methods for developers to use when interacting with EpicHomes.
@@ -65,6 +64,62 @@ public static int getMajorServerVersion() {
return EpicHomes.getPlugin().getVersionCheckerUtils().getVersion();
}
+ /**
+ * @return Returns an integer that is the first version number in the version enum.
+ */
+ public static int getFirstVersionNumber() {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().getFirstVersionNumber();
+ }
+
+ /**
+ * @return Returns an integer that is the second version number in the version enum
+ */
+ public static int getSecondVersionNumber() {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().getSecondVersionNumber();
+ }
+
+ /**
+ * @return Returns an integer that is the current patch version of the current version enum.
+ * For old versions like 1.21.4, this returns 4. For new versions like 26.1, this returns 0.
+ */
+ public static int getPatchVersionNumber() {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().getPatchVersionNumber();
+ }
+
+ /**
+ * @return Returns `true` if the server is running an old server version like `1.21.11`.
+ * Returns `false` if the server is running a new server version like `26.1.x`.
+ */
+ public static boolean isLegacyVersionScheme() {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().isLegacyVersionScheme();
+ }
+
+ /**
+ * @return Returns `true` if the server is running a new server version like `26.1.x`.
+ * Returns `false` if the server is running an old server version like `1.21.11`.
+ */
+ public static boolean isNewVersionScheme() {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().isNewVersionScheme();
+ }
+
+ /**
+ * This is very useful if you need a quick way to check that the server is at `1.21.0 or higher`,
+ * without needing to do a version check yourself.
+ * @return Returns `true` if the current server version is at least `1.21.0`+.
+ */
+ public static boolean isAtLeastMinecraft1_21() {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().isAtLeastMinecraft1_21();
+ }
+
+ /**
+ * Generic helper if you want to compare the current version against a specific enum version.
+ * @param requiredVersion Version enum to compare the current server version against.
+ * @return Returns `true` if the provided enum equals or is higher than the current server version.
+ */
+ public static boolean isAtLeast(ServerVersion requiredVersion) {
+ return EpicHomes.getPlugin().getVersionCheckerUtils().isAtLeast(requiredVersion);
+ }
+
/**
* @return Returns `true` if the server or network is able to connect to the Mojang auth servers. Otherwise, returns `false`.
*/
@@ -141,6 +196,22 @@ public static Location getPlayerHomeLocationByHomeName(User user, String homeNam
return EpicHomes.getPlugin().getUsermapStorageUtil().getHomeLocationByHomeName(user, homeName);
}
+ /**
+ * @param player The Bukkit Player object to get the home locations from.
+ * @return Returns a Set of Map Entries containing the home name and location for the provided player.
+ */
+ public static Set> getHomeLocationsListByPlayer(Player player) {
+ return EpicHomes.getPlugin().getUsermapStorageUtil().getHomeLocationsListByPlayer(player);
+ }
+
+ /**
+ * @param offlinePlayer The Bukkit OfflinePlayer object to get the home locations from.
+ * @return Returns a Set of Map Entries containing the home name and location for the provided offline player.
+ */
+ public static Set> getHomeLocationsListByOfflinePlayer(OfflinePlayer offlinePlayer) {
+ return EpicHomes.getPlugin().getUsermapStorageUtil().getHomeLocationsListByOfflinePlayer(offlinePlayer);
+ }
+
/**
* @param uuid The UUID object of the player to get.
* @return Returns a WrappedTask object of the players pending teleport, or null if none found.
diff --git a/src/main/java/me/loving11ish/epichomes/commands/DeleteHomeCommand.java b/src/main/java/me/loving11ish/epichomes/commands/DeleteHomeCommand.java
index 9df947a..71f3f57 100644
--- a/src/main/java/me/loving11ish/epichomes/commands/DeleteHomeCommand.java
+++ b/src/main/java/me/loving11ish/epichomes/commands/DeleteHomeCommand.java
@@ -34,7 +34,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
if (args.length < 1) {
if (EpicHomes.getPlugin().isGUIEnabled()) {
- new DeleteHomesListGUI(EpicHomes.getPlayerMenuUtility(player)).open();
+ new DeleteHomesListGUI(EpicHomes.getPlugin().getPlayerMenuUtility(player)).open();
}
else {
@@ -47,7 +47,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
if (args[0] != null) {
if (EpicHomes.getPlugin().isGUIEnabled()) {
- PlayerMenuUtility playerMenuUtility = EpicHomes.getPlayerMenuUtility(player);
+ PlayerMenuUtility playerMenuUtility = EpicHomes.getPlugin().getPlayerMenuUtility(player);
playerMenuUtility.setUser(user);
playerMenuUtility.setHomeName(args[0]);
Location location = usermapStorageUtil.getHomeLocationByHomeName(user, args[0]);
diff --git a/src/main/java/me/loving11ish/epichomes/commands/HomeCommand.java b/src/main/java/me/loving11ish/epichomes/commands/HomeCommand.java
index ddd4226..a95c672 100644
--- a/src/main/java/me/loving11ish/epichomes/commands/HomeCommand.java
+++ b/src/main/java/me/loving11ish/epichomes/commands/HomeCommand.java
@@ -45,7 +45,7 @@ public boolean onCommand(@NotNull CommandSender sender, @NotNull Command command
if (args.length < 1) {
if (EpicHomes.getPlugin().isGUIEnabled()) {
- new HomeListGUI(EpicHomes.getPlayerMenuUtility(player)).open();
+ new HomeListGUI(EpicHomes.getPlugin().getPlayerMenuUtility(player)).open();
}
else {
@@ -83,7 +83,7 @@ else if (args[0].equalsIgnoreCase("set")
if (args[1] != null) {
if (EpicHomes.getPlugin().isGUIEnabled()) {
- PlayerMenuUtility playerMenuUtility = EpicHomes.getPlayerMenuUtility(player);
+ PlayerMenuUtility playerMenuUtility = EpicHomes.getPlugin().getPlayerMenuUtility(player);
playerMenuUtility.setUser(user);
playerMenuUtility.setHomeName(args[1]);
playerMenuUtility.setHomeLocation(usermapStorageUtil.getHomeLocationByHomeName(user, args[1]));
diff --git a/src/main/java/me/loving11ish/epichomes/commands/subcommands/ReloadSubCommand.java b/src/main/java/me/loving11ish/epichomes/commands/subcommands/ReloadSubCommand.java
index d6d8494..ebe6bef 100644
--- a/src/main/java/me/loving11ish/epichomes/commands/subcommands/ReloadSubCommand.java
+++ b/src/main/java/me/loving11ish/epichomes/commands/subcommands/ReloadSubCommand.java
@@ -9,6 +9,7 @@
import me.loving11ish.epichomes.managers.filemanagers.ConfigManager;
import me.loving11ish.epichomes.managers.filemanagers.MessagesManager;
import me.loving11ish.epichomes.updatesystem.UpdateChecker;
+import me.loving11ish.epichomes.utils.AutoCleanupTaskUtils;
import me.loving11ish.epichomes.utils.AutoSaveTaskUtils;
import me.loving11ish.epichomes.utils.MessageUtils;
import org.bukkit.Bukkit;
@@ -87,6 +88,11 @@ private void handleReload() {
MessageUtils.sendDebugConsole( "&aAuto save timed task canceled successfully");
AutoSaveTaskUtils.getAutoSaveTask().cancel();
}
+ if (!AutoCleanupTaskUtils.getAutoCleanupTask().isCancelled()) {
+ MessageUtils.sendDebugConsole( "&aWrapped task: " + AutoCleanupTaskUtils.getAutoCleanupTask().toString());
+ MessageUtils.sendDebugConsole( "&aAuto cleanup timed task canceled successfully");
+ AutoCleanupTaskUtils.getAutoCleanupTask().cancel();
+ }
foliaLib.getScheduler().cancelAllTasks();
if (foliaLib.isUnsupported()) {
Bukkit.getScheduler().cancelTasks(EpicHomes.getPlugin());
@@ -147,6 +153,12 @@ private void handleReload() {
AutoSaveTaskUtils.runAutoSaveTask();
MessageUtils.sendConsole(EpicHomes.getPlugin().getMessagesManager().getAutoSaveStart());
}, 5L, TimeUnit.SECONDS);
+
+ // Restart auto cleanup task
+ foliaLib.getScheduler().runLaterAsync(() -> {
+ AutoCleanupTaskUtils.runAutoCleanupTask();
+ MessageUtils.sendDebugConsole("Auto cleanup task started successfully");
+ }, 6L, TimeUnit.SECONDS);
}, 6L, TimeUnit.SECONDS);
}
}
diff --git a/src/main/java/me/loving11ish/epichomes/listeners/PlayerDisconnectionEvent.java b/src/main/java/me/loving11ish/epichomes/listeners/PlayerDisconnectionEvent.java
index 1668b02..b8cdf87 100644
--- a/src/main/java/me/loving11ish/epichomes/listeners/PlayerDisconnectionEvent.java
+++ b/src/main/java/me/loving11ish/epichomes/listeners/PlayerDisconnectionEvent.java
@@ -21,5 +21,7 @@ public void onPlayerDisconnect(PlayerQuitEvent event) {
MessageUtils.sendConsole("error", "Failed to remove timed teleport for player " + player.getName() + "!");
}
}
+
+ EpicHomes.getPlugin().getRawPlayerMenuUtilityMap().remove(player);
}
}
diff --git a/src/main/java/me/loving11ish/epichomes/utils/AutoCleanupTaskUtils.java b/src/main/java/me/loving11ish/epichomes/utils/AutoCleanupTaskUtils.java
new file mode 100644
index 0000000..083c72b
--- /dev/null
+++ b/src/main/java/me/loving11ish/epichomes/utils/AutoCleanupTaskUtils.java
@@ -0,0 +1,25 @@
+package me.loving11ish.epichomes.utils;
+
+import com.tcoded.folialib.FoliaLib;
+import com.tcoded.folialib.wrapper.task.WrappedTask;
+import me.loving11ish.epichomes.EpicHomes;
+
+import java.util.concurrent.TimeUnit;
+
+public class AutoCleanupTaskUtils {
+
+ private static final FoliaLib foliaLib = EpicHomes.getFoliaLib();
+
+ public static WrappedTask autoCleanupTask;
+
+ public static void runAutoCleanupTask() {
+ autoCleanupTask = foliaLib.getScheduler().runTimerAsync(() -> {
+ EpicHomes.getPlugin().getRawPlayerMenuUtilityMap().clear();
+ MessageUtils.sendDebugConsole("Player menu utility map cleared by auto-cleanup task.");
+ }, 1L, 3600L, TimeUnit.SECONDS); // Runs every hour
+ }
+
+ public static WrappedTask getAutoCleanupTask() {
+ return autoCleanupTask;
+ }
+}
diff --git a/src/main/java/me/loving11ish/epichomes/utils/VersionCheckerUtils.java b/src/main/java/me/loving11ish/epichomes/utils/VersionCheckerUtils.java
index cf0bdd5..fa0e2bb 100644
--- a/src/main/java/me/loving11ish/epichomes/utils/VersionCheckerUtils.java
+++ b/src/main/java/me/loving11ish/epichomes/utils/VersionCheckerUtils.java
@@ -4,12 +4,13 @@
import me.loving11ish.epichomes.versionsystems.ServerVersion;
import org.bukkit.Bukkit;
-import java.util.regex.PatternSyntaxException;
-
public class VersionCheckerUtils {
private String serverPackage;
private int version;
+ private int firstVersionNumber;
+ private int secondVersionNumber;
+ private int patchVersionNumber;
private boolean versionCheckedSuccessfully = false;
public VersionCheckerUtils() {
@@ -22,17 +23,24 @@ public VersionCheckerUtils() {
public void setVersion() {
try {
- version = EpicHomes.getPlugin().getServerVersion().getServerMajorVersionNumber();
- versionCheckedSuccessfully = true;
- } catch (NumberFormatException | PatternSyntaxException e) {
+ ServerVersion detectedVersion = EpicHomes.getPlugin().getServerVersion();
+
+ version = detectedVersion.getServerMajorVersionNumber();
+ firstVersionNumber = detectedVersion.getFirstVersionNumber();
+ secondVersionNumber = detectedVersion.getSecondVersionNumber();
+ patchVersionNumber = detectedVersion.getPatchVersionNumber();
+
+ versionCheckedSuccessfully = detectedVersion != ServerVersion.Other;
+ } catch (Exception e) {
versionCheckedSuccessfully = false;
+
MessageUtils.sendConsole("&c-------------------------------------------");
MessageUtils.sendConsole("&4Unable to process server version!");
MessageUtils.sendConsole("&4Some features may break unexpectedly!");
MessageUtils.sendConsole("&4Report any issues to the developer!");
MessageUtils.sendDebugConsole("error", "&4-------------------------------------------");
MessageUtils.sendDebugConsole("error", "Cause: " + e.getCause());
- MessageUtils.sendDebugConsole("error", "Message: " +e.getMessage());
+ MessageUtils.sendDebugConsole("error", "Message: " + e.getMessage());
MessageUtils.sendDebugConsole("error", "&4-------------------------------------------");
MessageUtils.sendConsole("&c-------------------------------------------");
}
@@ -41,67 +49,37 @@ public void setVersion() {
public void getServerVersion() {
try {
String bukkitVersion = Bukkit.getServer().getBukkitVersion();
- String normalizedVersion = bukkitVersion.split("-")[0]; // Extract base version
+ String normalizedVersion = bukkitVersion.split("-")[0].trim();
MessageUtils.sendDebugConsole("-----------------------------------------");
MessageUtils.sendDebugConsole("Detected Bukkit version: " + bukkitVersion);
MessageUtils.sendDebugConsole("Normalized version: " + normalizedVersion);
- switch (normalizedVersion) {
- case "1.20.5":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_20_R4);
- break;
- case "1.20.6":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_20_R5);
- break;
- case "1.21":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R1);
- break;
- case "1.21.1":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R2);
- break;
- case "1.21.2":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R3);
- break;
- case "1.21.3":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R4);
- break;
- case "1.21.4":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R5);
- break;
- case "1.21.5":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R6);
- break;
- case "1.21.6":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R7);
- break;
- case "1.21.7":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R8);
- break;
- case "1.21.8":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R9);
- break;
- case "1.21.9":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R10);
- break;
- case "1.21.10":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R11);
- break;
- case "1.21.11":
- EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R12);
- break;
-
-
- default:
+ ServerVersion detectedVersion = ServerVersion.fromMinecraftVersion(normalizedVersion);
+
+
+ // Fallback for older CraftBukkit-style package versions such as v1_16_R3
+ // if Bukkit version string matching fails for some reason.
+ if (detectedVersion == ServerVersion.Other) {
+ try {
String packageName = Bukkit.getServer().getClass().getPackage().getName();
- EpicHomes.getPlugin().setServerVersion(ServerVersion.valueOf(packageName.replace("org.bukkit.craftbukkit.", "")));
- break;
+ String packageVersion = packageName.replace("org.bukkit.craftbukkit.", "");
+ detectedVersion = ServerVersion.valueOf(packageVersion);
+
+ MessageUtils.sendDebugConsole("Fell back to package version detection: " + packageVersion);
+ } catch (Exception ignored) {
+ // Keep as Other
+ }
}
+ EpicHomes.getPlugin().setServerVersion(detectedVersion);
+
} catch (Exception e) {
EpicHomes.getPlugin().setServerVersion(ServerVersion.Other);
MessageUtils.sendDebugConsole("Failed to detect server version, defaulting to: " + EpicHomes.getPlugin().getServerVersion());
+ MessageUtils.sendDebugConsole("Version detection error message: " + e.getMessage());
}
+
MessageUtils.sendDebugConsole("Set server version: " + EpicHomes.getPlugin().getServerVersion());
}
@@ -109,11 +87,190 @@ public String getServerPackage() {
return serverPackage != null ? serverPackage : "Unknown";
}
+ /**
+ * Backwards-compatible with your old code.
+ * Old scheme examples:
+ * `1.21.4 - returns 21`
+ * New scheme examples:
+ * `26.1 - returns 26`
+ * @return The major version number, which is the first number in the Minecraft version (e.g. 1.21.4 returns 1, 26.1 returns 26)
+ */
public int getVersion() {
return version;
}
+ public int getFirstVersionNumber() {
+ return firstVersionNumber;
+ }
+
+ public int getSecondVersionNumber() {
+ return secondVersionNumber;
+ }
+
+ public int getPatchVersionNumber() {
+ return patchVersionNumber;
+ }
+
public boolean isVersionCheckedSuccessfully() {
return versionCheckedSuccessfully;
}
+
+ public boolean isLegacyVersionScheme() {
+ return firstVersionNumber == 1;
+ }
+
+ public boolean isNewVersionScheme() {
+ return firstVersionNumber >= 25;
+ }
+
+ /**
+ * Useful helper for checks like:
+ * - all 26.x versions should count as newer than 1.21
+ * @return True if the server is running Minecraft 1.21 or newer, false otherwise
+ */
+ public boolean isAtLeastMinecraft1_21() {
+ ServerVersion serverVersion = EpicHomes.getPlugin().getServerVersion();
+
+ if (serverVersion == null || serverVersion == ServerVersion.Other) {
+ return false;
+ }
+
+ if (serverVersion.isNewVersionScheme()) {
+ return true;
+ }
+
+ return serverVersion.serverVersionGreaterThanOrEqual(ServerVersion.v1_21_R1);
+ }
+
+ /**
+ * Generic helper if you want to compare against a specific enum version.
+ * @param requiredVersion The ServerVersion enum constant you want to compare against (e.g. ServerVersion.v1_21_R1 or ServerVersion.v1_20_R4)
+ * @return True if the server version is greater than or equal to the required version, false otherwise
+ */
+ public boolean isAtLeast(ServerVersion requiredVersion) {
+ ServerVersion serverVersion = EpicHomes.getPlugin().getServerVersion();
+
+ if (serverVersion == null || serverVersion == ServerVersion.Other || requiredVersion == null) {
+ return false;
+ }
+
+ return serverVersion.serverVersionGreaterThanOrEqual(requiredVersion);
+ }
}
+//import me.loving11ish.epichomes.EpicHomes;
+//import me.loving11ish.epichomes.versionsystems.ServerVersion;
+//import org.bukkit.Bukkit;
+//
+//import java.util.regex.PatternSyntaxException;
+//
+//public class VersionCheckerUtils {
+//
+// private String serverPackage;
+// private int version;
+// private boolean versionCheckedSuccessfully = false;
+//
+// public VersionCheckerUtils() {
+// try {
+// serverPackage = Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
+// } catch (ArrayIndexOutOfBoundsException e) {
+// serverPackage = null;
+// }
+// }
+//
+// public void setVersion() {
+// try {
+// version = EpicHomes.getPlugin().getServerVersion().getServerMajorVersionNumber();
+// versionCheckedSuccessfully = true;
+// } catch (NumberFormatException | PatternSyntaxException e) {
+// versionCheckedSuccessfully = false;
+// MessageUtils.sendConsole("&c-------------------------------------------");
+// MessageUtils.sendConsole("&4Unable to process server version!");
+// MessageUtils.sendConsole("&4Some features may break unexpectedly!");
+// MessageUtils.sendConsole("&4Report any issues to the developer!");
+// MessageUtils.sendDebugConsole("error", "&4-------------------------------------------");
+// MessageUtils.sendDebugConsole("error", "Cause: " + e.getCause());
+// MessageUtils.sendDebugConsole("error", "Message: " +e.getMessage());
+// MessageUtils.sendDebugConsole("error", "&4-------------------------------------------");
+// MessageUtils.sendConsole("&c-------------------------------------------");
+// }
+// }
+//
+// public void getServerVersion() {
+// try {
+// String bukkitVersion = Bukkit.getServer().getBukkitVersion();
+// String normalizedVersion = bukkitVersion.split("-")[0]; // Extract base version
+//
+// MessageUtils.sendDebugConsole("-----------------------------------------");
+// MessageUtils.sendDebugConsole("Detected Bukkit version: " + bukkitVersion);
+// MessageUtils.sendDebugConsole("Normalized version: " + normalizedVersion);
+//
+// switch (normalizedVersion) {
+// case "1.20.5":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_20_R4);
+// break;
+// case "1.20.6":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_20_R5);
+// break;
+// case "1.21":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R1);
+// break;
+// case "1.21.1":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R2);
+// break;
+// case "1.21.2":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R3);
+// break;
+// case "1.21.3":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R4);
+// break;
+// case "1.21.4":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R5);
+// break;
+// case "1.21.5":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R6);
+// break;
+// case "1.21.6":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R7);
+// break;
+// case "1.21.7":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R8);
+// break;
+// case "1.21.8":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R9);
+// break;
+// case "1.21.9":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R10);
+// break;
+// case "1.21.10":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R11);
+// break;
+// case "1.21.11":
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.v1_21_R12);
+// break;
+//
+//
+// default:
+// String packageName = Bukkit.getServer().getClass().getPackage().getName();
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.valueOf(packageName.replace("org.bukkit.craftbukkit.", "")));
+// break;
+// }
+//
+// } catch (Exception e) {
+// EpicHomes.getPlugin().setServerVersion(ServerVersion.Other);
+// MessageUtils.sendDebugConsole("Failed to detect server version, defaulting to: " + EpicHomes.getPlugin().getServerVersion());
+// }
+// MessageUtils.sendDebugConsole("Set server version: " + EpicHomes.getPlugin().getServerVersion());
+// }
+//
+// public String getServerPackage() {
+// return serverPackage != null ? serverPackage : "Unknown";
+// }
+//
+// public int getVersion() {
+// return version;
+// }
+//
+// public boolean isVersionCheckedSuccessfully() {
+// return versionCheckedSuccessfully;
+// }
+//}
diff --git a/src/main/java/me/loving11ish/epichomes/versionsystems/ServerVersion.java b/src/main/java/me/loving11ish/epichomes/versionsystems/ServerVersion.java
index 11d98aa..696cf38 100644
--- a/src/main/java/me/loving11ish/epichomes/versionsystems/ServerVersion.java
+++ b/src/main/java/me/loving11ish/epichomes/versionsystems/ServerVersion.java
@@ -2,72 +2,237 @@
public enum ServerVersion {
- v1_8_R1,
- v1_8_R2,
- v1_8_R3,
- v1_9_R1,
- v1_9_R2,
- v1_10_R1,
- v1_11_R1,
- v1_12_R1,
- v1_13_R1,
- v1_13_R2,
- v1_14_R1,
- v1_15_R1,
- v1_16_R1,
- v1_16_R2,
- v1_16_R3,
- v1_17_R1,
- v1_18_R1,
- v1_18_R2,
- v1_19_R1,
- v1_19_R2,
- v1_19_R3,
- v1_20_R1,
- v1_20_R2,
- v1_20_R3,
- v1_20_R4,
- v1_20_R5,
- v1_21_R1,
- v1_21_R2,
- v1_21_R3,
- v1_21_R4,
- v1_21_R5,
- v1_21_R6,
- v1_21_R7,
- v1_21_R8,
- v1_21_R9,
- v1_21_R10,
- v1_21_R11,
- v1_21_R12,
- Other;
+ v1_8_R1("1.8", 1, 8, 0),
+ v1_8_R2("1.8.3", 1, 8, 3),
+ v1_8_R3("1.8.8", 1, 8, 8),
+
+ v1_9_R1("1.9", 1, 9, 0),
+ v1_9_R2("1.9.4", 1, 9, 4),
+
+ v1_10_R1("1.10", 1, 10, 0),
+ v1_11_R1("1.11", 1, 11, 0),
+ v1_12_R1("1.12", 1, 12, 0),
+
+ v1_13_R1("1.13", 1, 13, 0),
+ v1_13_R2("1.13.2", 1, 13, 2),
+
+ v1_14_R1("1.14", 1, 14, 0),
+ v1_15_R1("1.15", 1, 15, 0),
+
+ v1_16_R1("1.16", 1, 16, 0),
+ v1_16_R2("1.16.2", 1, 16, 2),
+ v1_16_R3("1.16.5", 1, 16, 5),
+
+ v1_17_R1("1.17", 1, 17, 0),
+
+ v1_18_R1("1.18", 1, 18, 0),
+ v1_18_R2("1.18.2", 1, 18, 2),
+
+ v1_19_R1("1.19", 1, 19, 0),
+ v1_19_R2("1.19.3", 1, 19, 3),
+ v1_19_R3("1.19.4", 1, 19, 4),
+
+ v1_20_R1("1.20", 1, 20, 0),
+ v1_20_R2("1.20.2", 1, 20, 2),
+ v1_20_R3("1.20.3", 1, 20, 3),
+ v1_20_R4("1.20.5", 1, 20, 5),
+ v1_20_R5("1.20.6", 1, 20, 6),
+
+ v1_21_R1("1.21", 1, 21, 0),
+ v1_21_R2("1.21.1", 1, 21, 1),
+ v1_21_R3("1.21.2", 1, 21, 2),
+ v1_21_R4("1.21.3", 1, 21, 3),
+ v1_21_R5("1.21.4", 1, 21, 4),
+ v1_21_R6("1.21.5", 1, 21, 5),
+ v1_21_R7("1.21.6", 1, 21, 6),
+ v1_21_R8("1.21.7", 1, 21, 7),
+ v1_21_R9("1.21.8", 1, 21, 8),
+ v1_21_R10("1.21.9", 1, 21, 9),
+ v1_21_R11("1.21.10", 1, 21, 10),
+ v1_21_R12("1.21.11", 1, 21, 11),
+
+ v26_1_R1("26.1", 26, 1, 0),
+ v26_1_R2("26.1.1", 26, 1, 1),
+
+ Other("Other", -1, -1, -1);
+
+ private final String minecraftVersion;
+ private final int firstVersionNumber;
+ private final int secondVersionNumber;
+ private final int patchVersionNumber;
+
+ ServerVersion(String minecraftVersion, int firstVersionNumber, int secondVersionNumber, int patchVersionNumber) {
+ this.minecraftVersion = minecraftVersion;
+ this.firstVersionNumber = firstVersionNumber;
+ this.secondVersionNumber = secondVersionNumber;
+ this.patchVersionNumber = patchVersionNumber;
+ }
public boolean serverVersionEqual(ServerVersion version) {
- return this.equals(version);
+ return this == version;
}
public boolean serverVersionGreaterThanOrEqual(ServerVersion version) {
- return this.ordinal() >= version.ordinal();
+ return compareVersions(this, version) >= 0;
}
+ public boolean serverVersionGreaterThan(ServerVersion version) {
+ return compareVersions(this, version) > 0;
+ }
+
+ public boolean serverVersionLessThan(ServerVersion version) {
+ return compareVersions(this, version) < 0;
+ }
public boolean serverVersionGreaterThan(ServerVersion version1, ServerVersion version2) {
- return version1.ordinal() > version2.ordinal();
+ return compareVersions(version1, version2) > 0;
}
public boolean serverVersionLessThan(ServerVersion version1, ServerVersion version2) {
- return version1.ordinal() < version2.ordinal();
+ return compareVersions(version1, version2) < 0;
+ }
+
+ private static int compareVersions(ServerVersion version1, ServerVersion version2) {
+ if (version1.firstVersionNumber != version2.firstVersionNumber) {
+ return Integer.compare(version1.firstVersionNumber, version2.firstVersionNumber);
+ }
+
+ if (version1.secondVersionNumber != version2.secondVersionNumber) {
+ return Integer.compare(version1.secondVersionNumber, version2.secondVersionNumber);
+ }
+
+ return Integer.compare(version1.patchVersionNumber, version2.patchVersionNumber);
}
public String getServerVersionName() {
return this.name();
}
+ public String getMinecraftVersion() {
+ return minecraftVersion;
+ }
+
public int getOrdinalServerVersionNumber() {
return this.ordinal();
}
+ /**
+ * Backwards-compatible with your old system.
+ * For old versions like 1.21.4, this returns 21.
+ * For new versions like 26.1, this returns 26.
+ * @return The major version number of the server, which is the first version number in the version scheme.
+ */
public int getServerMajorVersionNumber() {
- return Integer.parseInt(this.name().split("_")[1]);
+ return firstVersionNumber;
+ }
+
+ public int getFirstVersionNumber() {
+ return firstVersionNumber;
+ }
+
+ public int getSecondVersionNumber() {
+ return secondVersionNumber;
+ }
+
+ public int getPatchVersionNumber() {
+ return patchVersionNumber;
+ }
+
+ public boolean isLegacyVersionScheme() {
+ return firstVersionNumber == 1;
+ }
+
+ public boolean isNewVersionScheme() {
+ return firstVersionNumber >= 25;
+ }
+
+ public static ServerVersion fromMinecraftVersion(String versionString) {
+ if (versionString == null || versionString.trim().isEmpty()) {
+ return Other;
+ }
+
+ String normalizedVersion = versionString.trim();
+
+ for (ServerVersion serverVersion : values()) {
+ if (serverVersion == Other) {
+ continue;
+ }
+
+ if (serverVersion.getMinecraftVersion().equalsIgnoreCase(normalizedVersion)) {
+ return serverVersion;
+ }
+ }
+
+ return Other;
}
}
+//public enum ServerVersion {
+//
+// v1_8_R1,
+// v1_8_R2,
+// v1_8_R3,
+// v1_9_R1,
+// v1_9_R2,
+// v1_10_R1,
+// v1_11_R1,
+// v1_12_R1,
+// v1_13_R1,
+// v1_13_R2,
+// v1_14_R1,
+// v1_15_R1,
+// v1_16_R1,
+// v1_16_R2,
+// v1_16_R3,
+// v1_17_R1,
+// v1_18_R1,
+// v1_18_R2,
+// v1_19_R1,
+// v1_19_R2,
+// v1_19_R3,
+// v1_20_R1,
+// v1_20_R2,
+// v1_20_R3,
+// v1_20_R4,
+// v1_20_R5,
+// v1_21_R1,
+// v1_21_R2,
+// v1_21_R3,
+// v1_21_R4,
+// v1_21_R5,
+// v1_21_R6,
+// v1_21_R7,
+// v1_21_R8,
+// v1_21_R9,
+// v1_21_R10,
+// v1_21_R11,
+// v1_21_R12,
+// Other;
+//
+// public boolean serverVersionEqual(ServerVersion version) {
+// return this.equals(version);
+// }
+//
+// public boolean serverVersionGreaterThanOrEqual(ServerVersion version) {
+// return this.ordinal() >= version.ordinal();
+// }
+//
+// public boolean serverVersionGreaterThan(ServerVersion version1, ServerVersion version2) {
+// return version1.ordinal() > version2.ordinal();
+// }
+//
+// public boolean serverVersionLessThan(ServerVersion version1, ServerVersion version2) {
+// return version1.ordinal() < version2.ordinal();
+// }
+//
+// public String getServerVersionName() {
+// return this.name();
+// }
+//
+// public int getOrdinalServerVersionNumber() {
+// return this.ordinal();
+// }
+//
+// public int getServerMajorVersionNumber() {
+// return Integer.parseInt(this.name().split("_")[1]);
+// }
+//}