close engines using a shutdown hook

This commit is contained in:
Julian Krings 2025-05-25 13:46:02 +02:00 committed by Julian Krings
parent e42317139d
commit 61301ffd4d
3 changed files with 24 additions and 10 deletions

View File

@ -572,18 +572,23 @@ public class Iris extends VolmitPlugin implements Listener {
}
public void onDisable() {
Bukkit.getWorlds()
.parallelStream()
.map(IrisToolbelt::access)
.filter(Objects::nonNull)
.forEach(PlatformChunkGenerator::close);
services.values().forEach(IrisService::onDisable);
Bukkit.getScheduler().cancelTasks(this);
HandlerList.unregisterAll((Plugin) this);
postShutdown.forEach(Runnable::run);
MultiBurst.burst.close();
services.clear();
super.onDisable();
J.attempt(new JarScanner(instance.getJarFile(), "", false)::scan);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
Bukkit.getWorlds()
.stream()
.map(IrisToolbelt::access)
.filter(Objects::nonNull)
.forEach(PlatformChunkGenerator::close);
MultiBurst.burst.close();
services.clear();
}));
}
private void setupPapi() {

View File

@ -301,7 +301,9 @@ public class BukkitChunkGenerator extends ChunkGenerator implements PlatformChun
hotloader.interrupt();
}
getEngine().close();
final Engine engine = getEngine();
if (engine != null && !engine.isClosed())
engine.close();
folder.clear();
populators.clear();

View File

@ -31,16 +31,22 @@ public class JarScanner {
private final KSet<Class<?>> classes;
private final File jar;
private final String superPackage;
private final boolean report;
/**
* Create a scanner
*
* @param jar the path to the jar
*/
public JarScanner(File jar, String superPackage) {
public JarScanner(File jar, String superPackage, boolean report) {
this.jar = jar;
this.classes = new KSet<>();
this.superPackage = superPackage;
this.report = report;
}
public JarScanner(File jar, String superPackage) {
this(jar, superPackage, true);
}
/**
@ -65,7 +71,8 @@ public class JarScanner {
try {
Class<?> clazz = Class.forName(c);
classes.add(clazz);
} catch (ClassNotFoundException e) {
} catch (Throwable e) {
if (!report) continue;
Iris.reportError(e);
e.printStackTrace();
}