From e5adaf9665a6723ba1df935285e23eea4291af64 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 13 Feb 2025 03:44:45 +0800 Subject: [PATCH 1/2] 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 From f656e2d6d05a136c2c8f0b3631648e8aaac5590d Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 13 Feb 2025 03:51:11 +0800 Subject: [PATCH 2/2] Make mod class constant --- .../momirealms/craftengine/bukkit/block/BukkitBlockManager.java | 2 +- .../momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java | 2 +- .../net/momirealms/craftengine/core/plugin/CraftEngine.java | 1 + .../craftengine/core/plugin/config/ConfigManager.java | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java index d19079d0c..a82a0dc65 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/block/BukkitBlockManager.java @@ -248,7 +248,7 @@ public class BukkitBlockManager extends AbstractBlockManager { int vanillaStateCount; if (plugin.hasMod()) { try { - Class modClass = ReflectionUtils.getClazz("net.momirealms.craftengine.mod.CraftEnginePlugin"); + Class modClass = ReflectionUtils.getClazz(CraftEngine.MOD_CLASS); Field amountField = ReflectionUtils.getDeclaredField(modClass, "vanillaRegistrySize"); vanillaStateCount = (int) amountField.get(null); } catch (Exception e) { diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java index f180504a6..ee976e3a7 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/plugin/BukkitCraftEngine.java @@ -56,7 +56,7 @@ public class BukkitCraftEngine extends CraftEngine { super.classPathAppender = new ReflectionClassPathAppender(this); super.scheduler = new BukkitSchedulerAdapter(this); super.logger = new JavaPluginLogger(bootstrap.getLogger()); - Class modClass = ReflectionUtils.getClazz("net.momirealms.craftengine.mod.CraftEnginePlugin"); + Class modClass = ReflectionUtils.getClazz(MOD_CLASS); if (modClass != null) { Field isSuccessfullyRegistered = ReflectionUtils.getDeclaredField(modClass, "isSuccessfullyRegistered"); try { 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 856070fc5..9344d6257 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 @@ -31,6 +31,7 @@ import java.util.ArrayList; import java.util.List; public abstract class CraftEngine implements Plugin { + public static final String MOD_CLASS = "net.momirealms.craftengine.mod.CraftEnginePlugin"; public static final String NAMESPACE = "craftengine"; private static CraftEngine instance; protected DependencyManager dependencyManager; diff --git a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/ConfigManager.java b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/ConfigManager.java index 3bfb15575..ea4b5e507 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/plugin/config/ConfigManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/plugin/config/ConfigManager.java @@ -125,7 +125,7 @@ public class ConfigManager implements Reloadable { // recipe enableRecipeSystem = config.getBoolean("recipe.enable", true); - Class modClazz = ReflectionUtils.getClazz("net.momirealms.craftengine.mod.CraftEnginePlugin"); + Class modClazz = ReflectionUtils.getClazz(CraftEngine.MOD_CLASS); if (modClazz != null) { Method setMaxChainMethod = ReflectionUtils.getStaticMethod(modClazz, new String[] {"setMaxChainUpdate"}, void.class, int.class); try {