Check for craftbukkit updates along with plugin updates

This commit is contained in:
Dan Mulloy 2018-06-20 19:57:15 -04:00 committed by Alexander Meech
parent e20cae8be9
commit 50b9148c7d
2 changed files with 110 additions and 142 deletions

View File

@ -43,6 +43,8 @@ public class FileUpdater extends MiniPlugin
BVERSION_COMMAND, BVERSION_COMMAND,
} }
private static final FilenameFilter JAR_FILTER = (file, name) -> name.endsWith(".jar");
private Portal _portal; private Portal _portal;
private NautHashMap<String, String> _jarMd5Map = new NautHashMap<String, String>(); private NautHashMap<String, String> _jarMd5Map = new NautHashMap<String, String>();
@ -65,10 +67,12 @@ public class FileUpdater extends MiniPlugin
_region = region; _region = region;
_transferHub = transferHub; _transferHub = transferHub;
GetPluginMd5s(); getJarHashes();
if (new File("IgnoreUpdates.dat").exists()) if (new File("IgnoreUpdates.dat").exists())
{
_enabled = false; _enabled = false;
}
// Register the server command type for future use // Register the server command type for future use
ServerCommandManager.getInstance().registerCommandType("RestartCommand", RestartCommand.class, new RestartHandler(plugin, _serverName, _region)); 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) public void tryToRestart(UpdateEvent event)
{ {
if (event.getType() != UpdateType.SLOWER) if (event.getType() != UpdateType.SLOWER)
{
return; return;
}
if (!_needUpdate || !_enabled || _restartTriggered) if (!_needUpdate || !_enabled || _restartTriggered)
{
return; return;
}
if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.UPDATE)).isCancelled()) if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.UPDATE)).isCancelled())
{ {
@ -159,122 +167,80 @@ public class FileUpdater extends MiniPlugin
} }
@EventHandler @EventHandler
public void CheckForNewFiles(UpdateEvent event) public void checkForUpdates(UpdateEvent event)
{ {
if (event.getType() != UpdateType.MIN_01) if (event.getType() != UpdateType.MIN_01)
{
return; return;
}
if (_needUpdate || !_enabled) if (_needUpdate || !_enabled)
{
return; return;
}
boolean windows = System.getProperty("os.name").startsWith("Windows"); boolean windows = System.getProperty("os.name").startsWith("Windows");
File updateDir = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update"); File updateDir = new File((windows ? "C:" : File.separator + "home" + File.separator + "mineplex") + File.separator + "update");
File[] files = updateDir.listFiles(JAR_FILTER);
updateDir.mkdirs(); if (files == null)
FilenameFilter statsFilter = new FilenameFilter()
{ {
public boolean accept(File paramFile, String paramString) return;
{
if (paramString.endsWith("jar"))
{
return true;
} }
return false; for (File file : files)
}
};
for (File f : updateDir.listFiles(statsFilter))
{ {
FileInputStream fis = null; String hash = _jarMd5Map.get(file.getName());
if (hash != null)
try
{ {
if (_jarMd5Map.containsKey(f.getName())) try (FileInputStream stream = new FileInputStream(file))
{ {
fis = new FileInputStream(f); String newHash = DigestUtils.md5Hex(stream);
String md5 = DigestUtils.md5Hex(fis); if (!hash.equals(newHash))
if (!md5.equals(_jarMd5Map.get(f.getName())))
{ {
System.out.println(f.getName() + " old jar : " + _jarMd5Map.get(f.getName())); System.out.println(file.getName() + " old hash : " + hash);
System.out.println(f.getName() + " new jar : " + md5); System.out.println(file.getName() + " new hash : " + newHash);
_needUpdate = true; _needUpdate = true;
} }
} }
} catch (IOException ex)
catch (Exception ex)
{ {
System.out.println(F.main(getName(), "Error parsing jar md5's")); System.err.println("Failed to parse hash for file: " + file.getName() + ":");
ex.printStackTrace(); ex.printStackTrace();
} }
finally
{
if (fis != null)
{
try
{
fis.close();
}
catch (IOException e)
{
e.printStackTrace();
}
}
} }
} }
} }
private void GetPluginMd5s() private void collectHashes(File[] files)
{ {
File pluginDir = new File("plugins"); if (files == null)
pluginDir.mkdirs();
FilenameFilter statsFilter = new FilenameFilter()
{ {
public boolean accept(File paramFile, String paramString) return;
{
if (paramString.endsWith("jar"))
{
return true;
} }
return false; for (File file : files)
{
try (FileInputStream stream = new FileInputStream(file))
{
_jarMd5Map.put(file.getName(), DigestUtils.md5Hex(stream));
} }
}; catch (IOException ex)
for (File f : pluginDir.listFiles(statsFilter))
{ {
FileInputStream fis = null; System.err.println("Failed to parse hash for file: " + file.getName() + ":");
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(); ex.printStackTrace();
} }
finally }
}
private void getJarHashes()
{ {
if (fis != null) File base = new File(".");
{ collectHashes(base.listFiles(JAR_FILTER));
try
{ File plugins = new File("plugins");
fis.close(); collectHashes(plugins.listFiles(JAR_FILTER));
}
catch (IOException e)
{
e.printStackTrace();
}
}
}
}
} }
private void loadBuildProperties() private void loadBuildProperties()

View File

@ -20,7 +20,7 @@ import mineplex.serverdata.commands.CommandCallback;
import mineplex.serverdata.commands.RestartCommand; import mineplex.serverdata.commands.RestartCommand;
import mineplex.serverdata.commands.ServerCommand; import mineplex.serverdata.commands.ServerCommand;
public class RestartHandler implements CommandCallback, Listener public class RestartHandler implements CommandCallback<RestartCommand>, Listener
{ {
private JavaPlugin _plugin; private JavaPlugin _plugin;
private String _serverName; private String _serverName;
@ -41,18 +41,21 @@ public class RestartHandler implements CommandCallback, Listener
public void reflectMotd(ServerListPingEvent event) public void reflectMotd(ServerListPingEvent event)
{ {
if (_restarting) if (_restarting)
{
event.setMotd("Restarting soon"); event.setMotd("Restarting soon");
} }
}
public void run(ServerCommand command) @Override
public void run(RestartCommand command)
{ {
if (command instanceof RestartCommand) String serverName = command.getServerName();
{ Region region = command.getRegion();
String serverName = ((RestartCommand)command).getServerName();
Region region = ((RestartCommand)command).getRegion();
if (!serverName.equalsIgnoreCase(_serverName) || _region != region) if (!serverName.equalsIgnoreCase(_serverName) || _region != region)
{
return; return;
}
if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.COMMAND)).isCancelled()) if (UtilServer.CallEvent(new RestartTriggerEvent(RestartTriggerEvent.RestartReason.COMMAND)).isCancelled())
{ {
@ -81,5 +84,4 @@ public class RestartHandler implements CommandCallback, Listener
Bukkit.getServer().shutdown(); Bukkit.getServer().shutdown();
}, 100L); }, 100L);
} }
}
} }