From fdfb9b9968c0827712d1b388e9637da9d9a035c1 Mon Sep 17 00:00:00 2001 From: rlf Date: Fri, 26 Dec 2014 22:27:41 +0100 Subject: [PATCH] Version check on /is and /usb --- .../ultimateskyblock/admin/DevCommand.java | 5 ++- .../island/IslandCommand.java | 6 ++- .../talabrek/ultimateskyblock/uSkyBlock.java | 37 ++++++++++++++++++- 3 files changed, 45 insertions(+), 3 deletions(-) diff --git a/src/main/java/us/talabrek/ultimateskyblock/admin/DevCommand.java b/src/main/java/us/talabrek/ultimateskyblock/admin/DevCommand.java index 4a9cb6359..fe9a78597 100644 --- a/src/main/java/us/talabrek/ultimateskyblock/admin/DevCommand.java +++ b/src/main/java/us/talabrek/ultimateskyblock/admin/DevCommand.java @@ -19,6 +19,9 @@ public class DevCommand implements CommandExecutor, TabCompleter { private Map commandMap = new HashMap<>(); public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] split) { + if (!uSkyBlock.getInstance().isRequirementsMet(sender, true)) { + return true; + } final Player player; if (split.length == 0) { if (sender.hasPermission("usb.mod.protect") || sender.hasPermission("usb.mod.protectall") || sender.hasPermission("usb.mod.topten") || sender.hasPermission("usb.mod.orphan") || sender.hasPermission("usb.admin.delete") || sender.hasPermission("usb.admin.remove") || sender.hasPermission("usb.admin.register")) { @@ -117,7 +120,7 @@ public boolean onCommand(final CommandSender sender, final Command command, fina sender.sendMessage(ChatColor.YELLOW + "Marking all islands inactive for more than " + split[1] + " days."); uSkyBlock.getInstance().getServer().getScheduler().runTaskAsynchronously(uSkyBlock.getInstance(), new Runnable() { @SuppressWarnings("deprecation") - @Override + @Override public void run() { final File directoryPlayers = new File(uSkyBlock.getInstance().getDataFolder() + File.separator + "players"); long offlineTime = 0L; diff --git a/src/main/java/us/talabrek/ultimateskyblock/island/IslandCommand.java b/src/main/java/us/talabrek/ultimateskyblock/island/IslandCommand.java index 1e6169592..329290f6f 100644 --- a/src/main/java/us/talabrek/ultimateskyblock/island/IslandCommand.java +++ b/src/main/java/us/talabrek/ultimateskyblock/island/IslandCommand.java @@ -23,11 +23,15 @@ public IslandCommand() { } public boolean onCommand(final CommandSender sender, final Command command, final String label, final String[] split) { + uSkyBlock sky = uSkyBlock.getInstance(); + if (!sky.isRequirementsMet(sender, false)) { + sender.sendMessage(ChatColor.RED + "/is is currently disabled, contact a server-administrator"); + return true; + } if (!(sender instanceof Player)) { return handleConsoleCommand(sender, command, label, split); } final Player player = (Player) sender; - uSkyBlock sky = uSkyBlock.getInstance(); final PlayerInfo pi = sky.getPlayerInfo(player); if (pi == null) { player.sendMessage(ChatColor.RED + "Error: Couldn't read your player data!"); diff --git a/src/main/java/us/talabrek/ultimateskyblock/uSkyBlock.java b/src/main/java/us/talabrek/ultimateskyblock/uSkyBlock.java index 1222158b6..bbc790de9 100644 --- a/src/main/java/us/talabrek/ultimateskyblock/uSkyBlock.java +++ b/src/main/java/us/talabrek/ultimateskyblock/uSkyBlock.java @@ -22,6 +22,7 @@ import org.bukkit.generator.ChunkGenerator; import org.bukkit.inventory.Inventory; import org.bukkit.inventory.ItemStack; +import org.bukkit.plugin.PluginDescriptionFile; import org.bukkit.plugin.PluginManager; import org.bukkit.plugin.java.JavaPlugin; import us.talabrek.ultimateskyblock.admin.DevCommand; @@ -30,7 +31,10 @@ import us.talabrek.ultimateskyblock.event.MobEvents; import us.talabrek.ultimateskyblock.event.PlayerEvents; import us.talabrek.ultimateskyblock.imports.impl.PlayerImporterImpl; -import us.talabrek.ultimateskyblock.island.*; +import us.talabrek.ultimateskyblock.island.IslandCommand; +import us.talabrek.ultimateskyblock.island.IslandInfo; +import us.talabrek.ultimateskyblock.island.IslandLogic; +import us.talabrek.ultimateskyblock.island.LevelLogic; import us.talabrek.ultimateskyblock.player.PlayerInfo; import us.talabrek.ultimateskyblock.player.PlayerNotifier; @@ -43,6 +47,12 @@ import java.util.logging.Level; public class uSkyBlock extends JavaPlugin { + private static final String[][] depends = new String[][]{ + new String[]{"Vault", "1.5"}, + new String[]{"WorldEdit", "6.0"}, + new String[]{"WorldGuard", "6.0"}, + }; + private static String missingRequirements = null; private final Map configFiles = new ConcurrentHashMap<>(); private SkyBlockMenu menu; @@ -151,6 +161,7 @@ public FileConfiguration getConfig() { } public void onEnable() { + missingRequirements = null; instance = this; configFiles.clear(); activePlayers.clear(); @@ -211,6 +222,30 @@ public void run() { }, 0L); } + public synchronized boolean isRequirementsMet(CommandSender sender, boolean isDev) { + if (missingRequirements == null) { + PluginManager pluginManager = getServer().getPluginManager(); + missingRequirements = ""; + for (String[] pluginReq : depends) { + if (pluginManager.isPluginEnabled(pluginReq[0])) { + PluginDescriptionFile desc = pluginManager.getPlugin(pluginReq[0]).getDescription(); + if (pluginReq[1].compareTo(desc.getVersion()) > 0) { + missingRequirements += "\u00a7buSkyBlock\u00a7e depends on \u00a79" + pluginReq[0] + "\u00a7e >= \u00a7av" + pluginReq[1] + "\u00a7e but only \u00a7cv" + desc.getVersion() + "\u00a7e was found!\n"; + } + } else { + missingRequirements += "\u00a7buSkyBlock\u00a7e depends on \u00a79" + pluginReq[0] + "\u00a7e >= \u00a7av" + pluginReq[1]; + } + } + } + if (missingRequirements.isEmpty()) { + return true; + } else if (isDev || sender.isOp()) { + sender.sendMessage(missingRequirements.split("\n")); + return false; + } + return false; + } + private void createFolders() { if (!getDataFolder().exists()) { getDataFolder().mkdirs();