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() { public void onDisable() {
Bukkit.getWorlds()
.parallelStream()
.map(IrisToolbelt::access)
.filter(Objects::nonNull)
.forEach(PlatformChunkGenerator::close);
services.values().forEach(IrisService::onDisable); services.values().forEach(IrisService::onDisable);
Bukkit.getScheduler().cancelTasks(this); Bukkit.getScheduler().cancelTasks(this);
HandlerList.unregisterAll((Plugin) this); HandlerList.unregisterAll((Plugin) this);
postShutdown.forEach(Runnable::run); postShutdown.forEach(Runnable::run);
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(); MultiBurst.burst.close();
services.clear(); services.clear();
super.onDisable(); }));
} }
private void setupPapi() { private void setupPapi() {

View File

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

View File

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