Work around CoProcesses not being stopped via /stop on servers
This commit is contained in:
parent
693f3d39ac
commit
dcc3dec8f1
|
@ -1,7 +1,9 @@
|
|||
package io.gitlab.jfronny.libjf.coprocess;
|
||||
|
||||
import io.gitlab.jfronny.libjf.LibJf;
|
||||
import net.fabricmc.api.EnvType;
|
||||
import net.fabricmc.api.ModInitializer;
|
||||
import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
|
||||
import net.fabricmc.loader.api.FabricLoader;
|
||||
|
||||
import java.io.Closeable;
|
||||
|
@ -14,7 +16,19 @@ public class CoProcessManager implements ModInitializer {
|
|||
@Override
|
||||
public void onInitialize() {
|
||||
coProcesses.addAll(FabricLoader.getInstance().getEntrypoints(LibJf.MOD_ID + ":coprocess", CoProcess.class));
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(() -> coProcesses.forEach(coProcess -> {
|
||||
Runtime.getRuntime().addShutdownHook(new Thread(this::stop));
|
||||
if (FabricLoader.getInstance().getEnvironmentType() == EnvType.SERVER) ServerLifecycleEvents.SERVER_STOPPED.register(server -> this.stop());
|
||||
start();
|
||||
}
|
||||
|
||||
private void start() {
|
||||
for (CoProcess coProcess : coProcesses) {
|
||||
coProcess.start();
|
||||
}
|
||||
}
|
||||
|
||||
private void stop() {
|
||||
for (CoProcess coProcess : coProcesses) {
|
||||
coProcess.stop();
|
||||
if (coProcess instanceof Closeable cl) {
|
||||
try {
|
||||
|
@ -23,9 +37,6 @@ public class CoProcessManager implements ModInitializer {
|
|||
LibJf.LOGGER.error("Could not close co-process", e);
|
||||
}
|
||||
}
|
||||
})));
|
||||
for (CoProcess coProcess : coProcesses) {
|
||||
coProcess.start();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue