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,
}
private static final FilenameFilter JAR_FILTER = (file, name) -> name.endsWith(".jar");
private Portal _portal;
private NautHashMap<String, String> _jarMd5Map = new NautHashMap<String, String>();
@ -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");
File[] files = updateDir.listFiles(JAR_FILTER);
updateDir.mkdirs();
FilenameFilter statsFilter = new FilenameFilter()
if (files == null)
{
public boolean accept(File paramFile, String paramString)
{
if (paramString.endsWith("jar"))
{
return true;
return;
}
return false;
}
};
for (File f : updateDir.listFiles(statsFilter))
for (File file : files)
{
FileInputStream fis = null;
try
String hash = _jarMd5Map.get(file.getName());
if (hash != null)
{
if (_jarMd5Map.containsKey(f.getName()))
try (FileInputStream stream = new FileInputStream(file))
{
fis = new FileInputStream(f);
String md5 = DigestUtils.md5Hex(fis);
if (!md5.equals(_jarMd5Map.get(f.getName())))
String newHash = DigestUtils.md5Hex(stream);
if (!hash.equals(newHash))
{
System.out.println(f.getName() + " old jar : " + _jarMd5Map.get(f.getName()));
System.out.println(f.getName() + " new jar : " + md5);
System.out.println(file.getName() + " old hash : " + hash);
System.out.println(file.getName() + " new hash : " + newHash);
_needUpdate = true;
}
}
}
catch (Exception ex)
catch (IOException 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();
}
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");
pluginDir.mkdirs();
FilenameFilter statsFilter = new FilenameFilter()
if (files == null)
{
public boolean accept(File paramFile, String paramString)
{
if (paramString.endsWith("jar"))
{
return true;
return;
}
return false;
for (File file : files)
{
try (FileInputStream stream = new FileInputStream(file))
{
_jarMd5Map.put(file.getName(), DigestUtils.md5Hex(stream));
}
};
for (File f : pluginDir.listFiles(statsFilter))
catch (IOException ex)
{
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"));
System.err.println("Failed to parse hash for file: " + file.getName() + ":");
ex.printStackTrace();
}
finally
}
}
private void getJarHashes()
{
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()

View File

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