diff --git a/src/main/java/fr/themode/demo/Main.java b/src/main/java/fr/themode/demo/Main.java index e3918d23c..c8319ba5d 100644 --- a/src/main/java/fr/themode/demo/Main.java +++ b/src/main/java/fr/themode/demo/Main.java @@ -36,6 +36,7 @@ public class Main { commandManager.register(new SimpleCommand()); commandManager.register(new GamemodeCommand()); commandManager.register(new DimensionCommand()); + commandManager.register(new ShutdownCommand()); /*RecipeManager recipeManager = MinecraftServer.getRecipeManager(); ShapelessRecipe shapelessRecipe = new ShapelessRecipe("test", "groupname") { diff --git a/src/main/java/fr/themode/demo/commands/ShutdownCommand.java b/src/main/java/fr/themode/demo/commands/ShutdownCommand.java new file mode 100644 index 000000000..612dcf7df --- /dev/null +++ b/src/main/java/fr/themode/demo/commands/ShutdownCommand.java @@ -0,0 +1,33 @@ +package fr.themode.demo.commands; + +import net.minestom.server.MinecraftServer; +import net.minestom.server.command.CommandProcessor; +import net.minestom.server.command.CommandSender; +import net.minestom.server.entity.Player; + +/** + * A simple shutdown command + */ +public class ShutdownCommand implements CommandProcessor { + + @Override + public String getCommandName() { + return "shutdown"; + } + + @Override + public String[] getAliases() { + return new String[0]; + } + + @Override + public boolean process(CommandSender sender, String command, String[] args) { + MinecraftServer.stopCleanly(); + return true; + } + + @Override + public boolean hasAccess(Player player) { + return player.getPermissionLevel() >= 4; + } +} diff --git a/src/main/java/net/minestom/server/timer/SchedulerManager.java b/src/main/java/net/minestom/server/timer/SchedulerManager.java index ef1ccf6c5..c8bdad954 100644 --- a/src/main/java/net/minestom/server/timer/SchedulerManager.java +++ b/src/main/java/net/minestom/server/timer/SchedulerManager.java @@ -80,10 +80,13 @@ public class SchedulerManager { * Shutdowns all normal tasks and call the registered shutdown tasks */ public void shutdown() { - for (Task shutdownTask : this.getShutdownTasks()) { - shutdownTask.schedule(); + MinecraftServer.getLOGGER().info("Executing all shutdown tasks.."); + for (Task task : this.getShutdownTasks()) { + task.schedule(); } - batchesPool.shutdown(); + MinecraftServer.getLOGGER().info("Shutting down the scheduled execution service and batches pool."); + this.timerExecutionService.shutdown(); + this.batchesPool.shutdown(); try { batchesPool.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS); } catch (InterruptedException e) {