Check for craftbukkit updates along with plugin updates
This commit is contained in:
parent
e20cae8be9
commit
50b9148c7d
|
@ -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()
|
||||||
|
|
|
@ -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())
|
||||||
{
|
{
|
||||||
|
@ -82,4 +85,3 @@ public class RestartHandler implements CommandCallback, Listener
|
||||||
}, 100L);
|
}, 100L);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
Loading…
Reference in New Issue