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]); +// } +//}