Work around CoProcesses not being stopped via /stop on servers

This commit is contained in:
Johannes Frohnmeyer 2022-03-25 15:57:55 +01:00
parent 693f3d39ac
commit dcc3dec8f1
Signed by: Johannes
GPG Key ID: E76429612C2929F4
1 changed files with 15 additions and 4 deletions

View File

@ -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();
}
}
}