diff --git a/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java b/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java index e55619a95..42bf7ac1c 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/updater/FileUpdater.java @@ -43,6 +43,8 @@ public class FileUpdater extends MiniPlugin BVERSION_COMMAND, } + private static final FilenameFilter JAR_FILTER = (file, name) -> name.endsWith(".jar"); + private Portal _portal; private NautHashMap _jarMd5Map = new NautHashMap(); @@ -65,10 +67,12 @@ public class FileUpdater extends MiniPlugin _region = region; _transferHub = transferHub; - GetPluginMd5s(); + getJarHashes(); if (new File("IgnoreUpdates.dat").exists()) + { _enabled = false; + } // Register the server command type for future use ServerCommandManager.getInstance().registerCommandType("RestartCommand", RestartCommand.class, new RestartHandler(plugin, _serverName, _region)); @@ -114,10 +118,14 @@ public class FileUpdater extends MiniPlugin public void tryToRestart(UpdateEvent event) { if (event.getType() != UpdateType.SLOWER) + { return; + } if (!_needUpdate || !_enabled || _restartTriggered) + { return; + } if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.UPDATE)).isCancelled()) { @@ -159,122 +167,80 @@ public class FileUpdater extends MiniPlugin } @EventHandler - public void CheckForNewFiles(UpdateEvent event) + public void checkForUpdates(UpdateEvent event) { if (event.getType() != UpdateType.MIN_01) + { return; + } if (_needUpdate || !_enabled) + { return; + } boolean windows = System.getProperty("os.name").startsWith("Windows"); File updateDir = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update"); - - updateDir.mkdirs(); - - FilenameFilter statsFilter = new FilenameFilter() - { - public boolean accept(File paramFile, String paramString) - { - if (paramString.endsWith("jar")) - { - return true; - } - - return false; - } - }; - - for (File f : updateDir.listFiles(statsFilter)) - { - FileInputStream fis = null; - - try - { - if (_jarMd5Map.containsKey(f.getName())) - { - fis = new FileInputStream(f); - String md5 = DigestUtils.md5Hex(fis); - - if (!md5.equals(_jarMd5Map.get(f.getName()))) - { - System.out.println(f.getName() + " old jar : " + _jarMd5Map.get(f.getName())); - System.out.println(f.getName() + " new jar : " + md5); - _needUpdate = true; - } - } - } - catch (Exception ex) - { - System.out.println(F.main(getName(), "Error parsing jar md5's")); - ex.printStackTrace(); - } - finally - { - if (fis != null) - { - try + File[] files = updateDir.listFiles(JAR_FILTER); + + if (files == null) + { + return; + } + + for (File file : files) + { + String hash = _jarMd5Map.get(file.getName()); + if (hash != null) + { + try (FileInputStream stream = new FileInputStream(file)) + { + String newHash = DigestUtils.md5Hex(stream); + if (!hash.equals(newHash)) { - fis.close(); - } - catch (IOException e) - { - e.printStackTrace(); - } - } - } - } + System.out.println(file.getName() + " old hash : " + hash); + System.out.println(file.getName() + " new hash : " + newHash); + _needUpdate = true; + } + } + catch (IOException ex) + { + System.err.println("Failed to parse hash for file: " + file.getName() + ":"); + ex.printStackTrace(); + } + } + } + } + + private void collectHashes(File[] files) + { + if (files == null) + { + return; + } + + for (File file : files) + { + try (FileInputStream stream = new FileInputStream(file)) + { + _jarMd5Map.put(file.getName(), DigestUtils.md5Hex(stream)); + } + catch (IOException ex) + { + System.err.println("Failed to parse hash for file: " + file.getName() + ":"); + ex.printStackTrace(); + } + } } - private void GetPluginMd5s() + private void getJarHashes() { - File pluginDir = new File("plugins"); - - pluginDir.mkdirs(); - - FilenameFilter statsFilter = new FilenameFilter() - { - public boolean accept(File paramFile, String paramString) - { - if (paramString.endsWith("jar")) - { - return true; - } - - return false; - } - }; - - for (File f : pluginDir.listFiles(statsFilter)) - { - FileInputStream fis = null; - - try - { - fis = new FileInputStream(f); - _jarMd5Map.put(f.getName(), DigestUtils.md5Hex(fis)); - } - catch (Exception ex) - { - System.out.println(F.main(getName(), "Error parsing jar md5's")); - ex.printStackTrace(); - } - finally - { - if (fis != null) - { - try - { - fis.close(); - } - catch (IOException e) - { - e.printStackTrace(); - } - } - } - } + File base = new File("."); + collectHashes(base.listFiles(JAR_FILTER)); + + File plugins = new File("plugins"); + collectHashes(plugins.listFiles(JAR_FILTER)); } private void loadBuildProperties() diff --git a/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java b/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java index 9001426f6..332704c12 100644 --- a/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java +++ b/Plugins/Mineplex.Core/src/mineplex/core/updater/RestartHandler.java @@ -20,7 +20,7 @@ import mineplex.serverdata.commands.CommandCallback; import mineplex.serverdata.commands.RestartCommand; import mineplex.serverdata.commands.ServerCommand; -public class RestartHandler implements CommandCallback, Listener +public class RestartHandler implements CommandCallback, Listener { private JavaPlugin _plugin; private String _serverName; @@ -41,45 +41,47 @@ public class RestartHandler implements CommandCallback, Listener public void reflectMotd(ServerListPingEvent event) { if (_restarting) - event.setMotd("Restarting soon"); - } - - public void run(ServerCommand command) - { - if (command instanceof RestartCommand) { - String serverName = ((RestartCommand)command).getServerName(); - Region region = ((RestartCommand)command).getRegion(); - - if (!serverName.equalsIgnoreCase(_serverName) || _region != region) - return; - - if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.COMMAND)).isCancelled()) - { - return; - } - - if (UtilServer.CallEvent(new RestartServerEvent(RestartServerEvent.RestartReason.COMMAND)).isCancelled()) - { - return; - } - - _restarting = true; - - for (Player player : Bukkit.getOnlinePlayers()) - { - player.sendMessage(F.main("Restart", "Server is restarting, you're being sent to a lobby.")); - } - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(UtilServer.getPlugin(), () -> - { - Portal.getInstance().sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); - }, 60L); - - Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(UtilServer.getPlugin(), () -> - { - Bukkit.getServer().shutdown(); - }, 100L); + event.setMotd("Restarting soon"); } } + + @Override + public void run(RestartCommand command) + { + String serverName = command.getServerName(); + Region region = command.getRegion(); + + if (!serverName.equalsIgnoreCase(_serverName) || _region != region) + { + return; + } + + if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.COMMAND)).isCancelled()) + { + return; + } + + if (UtilServer.CallEvent(new RestartServerEvent(RestartServerEvent.RestartReason.COMMAND)).isCancelled()) + { + return; + } + + _restarting = true; + + for (Player player : Bukkit.getOnlinePlayers()) + { + player.sendMessage(F.main("Restart", "Server is restarting, you're being sent to a lobby.")); + } + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(UtilServer.getPlugin(), () -> + { + Portal.getInstance().sendAllPlayersToGenericServer(GenericServer.HUB, Intent.KICK); + }, 60L); + + Bukkit.getServer().getScheduler().scheduleSyncDelayedTask(UtilServer.getPlugin(), () -> + { + Bukkit.getServer().shutdown(); + }, 100L); + } } \ No newline at end of file