aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricClientSparkPlugin.java11
-rw-r--r--spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricServerSparkPlugin.java11
-rw-r--r--spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java21
-rw-r--r--spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeClientSparkPlugin.java6
-rw-r--r--spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeServerSparkPlugin.java14
-rw-r--r--spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java19
6 files changed, 66 insertions, 16 deletions
diff --git a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricClientSparkPlugin.java b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricClientSparkPlugin.java
index 21e92dc..5b63904 100644
--- a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricClientSparkPlugin.java
+++ b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricClientSparkPlugin.java
@@ -36,6 +36,7 @@ import me.lucko.spark.fabric.FabricSparkGameHooks;
import me.lucko.spark.fabric.FabricSparkMod;
import me.lucko.spark.fabric.FabricTickHook;
import me.lucko.spark.fabric.FabricTickReporter;
+import net.fabricmc.fabric.api.client.event.lifecycle.v1.ClientLifecycleEvents;
import net.minecraft.client.MinecraftClient;
import net.minecraft.client.network.ClientPlayNetworkHandler;
import net.minecraft.command.CommandSource;
@@ -51,7 +52,17 @@ public class FabricClientSparkPlugin extends FabricSparkPlugin implements Sugges
public static void register(FabricSparkMod mod, MinecraftClient client) {
FabricClientSparkPlugin plugin = new FabricClientSparkPlugin(mod, client);
+ plugin.enable();
+
+ // ensure commands are registered
plugin.scheduler.scheduleWithFixedDelay(plugin::checkCommandRegistered, 10, 10, TimeUnit.SECONDS);
+
+ // register shutdown hook
+ ClientLifecycleEvents.CLIENT_STOPPING.register(stoppingClient -> {
+ if (stoppingClient == plugin.minecraft) {
+ plugin.disable();
+ }
+ });
}
private final MinecraftClient minecraft;
diff --git a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricServerSparkPlugin.java b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricServerSparkPlugin.java
index 9375668..3293853 100644
--- a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricServerSparkPlugin.java
+++ b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricServerSparkPlugin.java
@@ -35,6 +35,7 @@ import me.lucko.spark.fabric.FabricSparkMod;
import me.lucko.spark.fabric.FabricTickHook;
import me.lucko.spark.fabric.FabricTickReporter;
import net.fabricmc.fabric.api.command.v1.CommandRegistrationCallback;
+import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents;
import net.minecraft.entity.player.PlayerEntity;
import net.minecraft.server.MinecraftServer;
import net.minecraft.server.command.CommandOutput;
@@ -49,8 +50,18 @@ public class FabricServerSparkPlugin extends FabricSparkPlugin implements Comman
public static void register(FabricSparkMod mod, MinecraftServer server) {
FabricServerSparkPlugin plugin = new FabricServerSparkPlugin(mod, server);
+ plugin.enable();
+
+ // register commands
registerCommands(server.getCommandManager().getDispatcher(), plugin, plugin, "spark");
CommandRegistrationCallback.EVENT.register((dispatcher, isDedicated) -> registerCommands(dispatcher, plugin, plugin, "spark"));
+
+ // register shutdown hook
+ ServerLifecycleEvents.SERVER_STOPPING.register(stoppingServer -> {
+ if (stoppingServer == plugin.server) {
+ plugin.disable();
+ }
+ });
}
private final MinecraftServer server;
diff --git a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java
index 3cc125e..70078c7 100644
--- a/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java
+++ b/spark-fabric/src/main/java/me/lucko/spark/fabric/plugin/FabricSparkPlugin.java
@@ -20,7 +20,6 @@
package me.lucko.spark.fabric.plugin;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
@@ -46,13 +45,25 @@ public abstract class FabricSparkPlugin implements SparkPlugin {
protected FabricSparkPlugin(FabricSparkMod mod) {
this.mod = mod;
- this.scheduler = Executors.newSingleThreadScheduledExecutor(
- new ThreadFactoryBuilder().setNameFormat("spark-fabric-async-worker").build()
- );
+ this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> {
+ Thread thread = Executors.defaultThreadFactory().newThread(r);
+ thread.setName("spark-fabric-async-worker");
+ thread.setDaemon(true);
+ return thread;
+ });
this.platform = new SparkPlatform(this);
this.platform.enable();
}
+ public void enable() {
+ this.platform.enable();
+ }
+
+ public void disable() {
+ this.platform.disable();
+ this.scheduler.shutdown();
+ }
+
public abstract boolean hasPermission(CommandOutput sender, String permission);
@Override
@@ -75,7 +86,7 @@ public abstract class FabricSparkPlugin implements SparkPlugin {
return new ThreadDumper.Specific(new long[]{Thread.currentThread().getId()});
}
- public static <T> void registerCommands(CommandDispatcher<T> dispatcher, Command<T> executor, SuggestionProvider<T> suggestor, String... aliases) {
+ protected static <T> void registerCommands(CommandDispatcher<T> dispatcher, Command<T> executor, SuggestionProvider<T> suggestor, String... aliases) {
if (aliases.length == 0) {
return;
}
diff --git a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeClientSparkPlugin.java b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeClientSparkPlugin.java
index 66fd3ab..7b32f5b 100644
--- a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeClientSparkPlugin.java
+++ b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeClientSparkPlugin.java
@@ -54,11 +54,13 @@ import java.util.stream.Stream;
public class ForgeClientSparkPlugin extends ForgeSparkPlugin implements SuggestionProvider<ISuggestionProvider> {
public static void register(ForgeSparkMod mod, FMLClientSetupEvent event) {
- Minecraft minecraft = event.getMinecraftSupplier().get();
+ ForgeClientSparkPlugin plugin = new ForgeClientSparkPlugin(mod, event.getMinecraftSupplier().get());
+ plugin.enable();
- ForgeClientSparkPlugin plugin = new ForgeClientSparkPlugin(mod, minecraft);
+ // register listeners
MinecraftForge.EVENT_BUS.register(plugin);
+ // ensure commands are registered
plugin.scheduler.scheduleWithFixedDelay(plugin::checkCommandRegistered, 10, 10, TimeUnit.SECONDS);
}
diff --git a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeServerSparkPlugin.java b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeServerSparkPlugin.java
index 3433e3b..42309c1 100644
--- a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeServerSparkPlugin.java
+++ b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeServerSparkPlugin.java
@@ -58,18 +58,17 @@ public class ForgeServerSparkPlugin extends ForgeSparkPlugin implements Command<
public static void register(ForgeSparkMod mod, RegisterCommandsEvent event) {
ForgeServerSparkPlugin plugin = new ForgeServerSparkPlugin(mod, ServerLifecycleHooks::getCurrentServer);
+ plugin.enable();
+
+ // register listeners
MinecraftForge.EVENT_BUS.register(plugin);
+ // register commands & permissions
CommandDispatcher<CommandSource> dispatcher = event.getDispatcher();
registerCommands(dispatcher, plugin, plugin, "spark");
PermissionAPI.registerNode("spark", DefaultPermissionLevel.OP, "Access to the spark command");
}
- @SubscribeEvent
- public void onDisable(FMLServerStoppingEvent event) {
- this.platform.disable();
- }
-
private final Supplier<MinecraftServer> server;
public ForgeServerSparkPlugin(ForgeSparkMod mod, Supplier<MinecraftServer> server) {
@@ -77,6 +76,11 @@ public class ForgeServerSparkPlugin extends ForgeSparkPlugin implements Command<
this.server = server;
}
+ @SubscribeEvent
+ public void onDisable(FMLServerStoppingEvent event) {
+ disable();
+ }
+
@Override
public int run(CommandContext<CommandSource> context) throws CommandSyntaxException {
String[] args = processArgs(context);
diff --git a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java
index 920ca24..17bc3e1 100644
--- a/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java
+++ b/spark-forge/src/main/java/me/lucko/spark/forge/plugin/ForgeSparkPlugin.java
@@ -20,7 +20,6 @@
package me.lucko.spark.forge.plugin;
-import com.google.common.util.concurrent.ThreadFactoryBuilder;
import com.mojang.brigadier.Command;
import com.mojang.brigadier.CommandDispatcher;
import com.mojang.brigadier.arguments.StringArgumentType;
@@ -65,13 +64,25 @@ public abstract class ForgeSparkPlugin implements SparkPlugin {
protected ForgeSparkPlugin(ForgeSparkMod mod) {
this.mod = mod;
- this.scheduler = Executors.newSingleThreadScheduledExecutor(
- new ThreadFactoryBuilder().setNameFormat("spark-forge-async-worker").build()
- );
+ this.scheduler = Executors.newSingleThreadScheduledExecutor(r -> {
+ Thread thread = Executors.defaultThreadFactory().newThread(r);
+ thread.setName("spark-forge-async-worker");
+ thread.setDaemon(true);
+ return thread;
+ });
this.platform = new SparkPlatform(this);
this.platform.enable();
}
+ public void enable() {
+ this.platform.enable();
+ }
+
+ public void disable() {
+ this.platform.disable();
+ this.scheduler.shutdown();
+ }
+
public abstract boolean hasPermission(ICommandSource sender, String permission);
@Override