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,
|
||||
}
|
||||
|
||||
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");
|
||||
|
||||
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()
|
||||
|
|
|
@ -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,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);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue