From e5adaf9665a6723ba1df935285e23eea4291af64 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 13 Feb 2025 03:44:45 +0800 Subject: [PATCH] Improved the safety of reload --- .../craftengine/core/plugin/CraftEngine.java | 38 ++++++++++++------- 1 file changed, 24 insertions(+), 14 deletions(-) diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java index 2a19dc656..856070fc5 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/CraftEngine.java @@ -50,6 +50,7 @@ public abstract class CraftEngine implements Plugin { protected SenderFactory senderFactory; protected TemplateManager templateManager; protected PluginLogger logger; + private boolean isReloading; protected CraftEngine() { instance = this; @@ -69,20 +70,29 @@ public abstract class CraftEngine implements Plugin { @Override public void reload() { - this.translationManager.reload(); - this.configManager.reload(); - this.templateManager.reload(); - this.furnitureManager.reload(); - this.fontManager.reload(); - this.itemManager.reload(); - this.recipeManager.reload(); - this.blockManager.reload(); - this.worldManager.reload(); - this.packManager.reload(); - this.blockManager.delayedLoad(); - this.recipeManager.delayedLoad().thenRunAsync(() -> { - this.packManager.generateResourcePack(); - }, this.scheduler.async()); + if (this.isReloading) return; + this.isReloading = true; + try { + this.translationManager.reload(); + this.configManager.reload(); + this.templateManager.reload(); + this.furnitureManager.reload(); + this.fontManager.reload(); + this.itemManager.reload(); + this.recipeManager.reload(); + this.blockManager.reload(); + this.worldManager.reload(); + this.packManager.reload(); + this.blockManager.delayedLoad(); + } finally { + this.recipeManager.delayedLoad().thenRunAsync(() -> { + try { + this.packManager.generateResourcePack(); + } finally { + this.isReloading = false; + } + }, this.scheduler.async()); + } } @Override