From a4bff4981c89757f3f345f04889a98889ddf78bc Mon Sep 17 00:00:00 2001 From: jhqwqmc <2110242767@qq.com> Date: Thu, 13 Feb 2025 03:25:31 +0800 Subject: [PATCH] =?UTF-8?q?refactor(pack):=20=E5=AE=9E=E7=8E=B0=E5=BC=82?= =?UTF-8?q?=E6=AD=A5=E8=B5=84=E6=BA=90=E5=8C=85=E7=94=9F=E6=88=90=E4=BA=8B?= =?UTF-8?q?=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 GenerateResourcePackEvent 系列事件重命名为 AsyncGenerateResourcePackEvent - 在 CraftEngine 中添加 Platform 接口实现 - 在 PackManagerImpl 中集成 Platform 接口,用于处理异步事件 - 优化资源包生成流程,支持异步事件处理 --- .../AsyncGenerateResourcePackEndEvent.java | 9 ++++++++ ...va => AsyncGenerateResourcePackEvent.java} | 5 +++-- ... AsyncGenerateResourcePackStartEvent.java} | 4 ++-- .../event/GenerateResourcePackEndEvent.java | 9 -------- .../bukkit/platform/BukkitPlatform.java | 22 +++++++++++++++++++ .../bukkit/plugin/BukkitCraftEngine.java | 2 ++ .../core/pack/PackManagerImpl.java | 20 +++++++++++++---- .../craftengine/core/platform/Platform.java | 8 +++++++ .../craftengine/core/plugin/CraftEngine.java | 4 +++- 9 files changed, 65 insertions(+), 18 deletions(-) create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/{GenerateResourcePackEvent.java => AsyncGenerateResourcePackEvent.java} (82%) rename bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/{GenerateResourcePackStartEvent.java => AsyncGenerateResourcePackStartEvent.java} (66%) delete mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java create mode 100644 bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java create mode 100644 core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java new file mode 100644 index 000000000..a348ce22b --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEndEvent.java @@ -0,0 +1,9 @@ +package net.momirealms.craftengine.bukkit.api.event; + +import java.nio.file.Path; + +public class AsyncGenerateResourcePackEndEvent extends AsyncGenerateResourcePackEvent { + public AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { + super(generatedPackPath, zipFile); + } +} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java similarity index 82% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java index ab116afb2..dcfa09b0b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackEvent.java @@ -6,12 +6,13 @@ import org.jetbrains.annotations.NotNull; import java.nio.file.Path; -public class GenerateResourcePackEvent extends Event { +public class AsyncGenerateResourcePackEvent extends Event { private static final HandlerList handlerList = new HandlerList(); private final Path generatedPackPath; private final Path zipFile; - public GenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + public AsyncGenerateResourcePackEvent(Path generatedPackPath, Path zipFile) { + super(true); this.generatedPackPath = generatedPackPath; this.zipFile = zipFile; } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java similarity index 66% rename from bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java rename to bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java index 3a7b9c465..832967a2b 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackStartEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncGenerateResourcePackStartEvent.java @@ -4,10 +4,10 @@ import org.bukkit.event.Cancellable; import java.nio.file.Path; -public class GenerateResourcePackStartEvent extends GenerateResourcePackEvent implements Cancellable { +public class AsyncGenerateResourcePackStartEvent extends AsyncGenerateResourcePackEvent implements Cancellable { private boolean cancelled; - public GenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { + public AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { super(generatedPackPath, zipFile); } diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java deleted file mode 100644 index 18f00411f..000000000 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/GenerateResourcePackEndEvent.java +++ /dev/null @@ -1,9 +0,0 @@ -package net.momirealms.craftengine.bukkit.api.event; - -import java.nio.file.Path; - -public class GenerateResourcePackEndEvent extends GenerateResourcePackEvent { - public GenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { - super(generatedPackPath, zipFile); - } -} diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java new file mode 100644 index 000000000..014745235 --- /dev/null +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/platform/BukkitPlatform.java @@ -0,0 +1,22 @@ +package net.momirealms.craftengine.bukkit.platform; + +import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackEndEvent; +import net.momirealms.craftengine.bukkit.api.event.AsyncGenerateResourcePackStartEvent; +import net.momirealms.craftengine.bukkit.util.EventUtils; +import net.momirealms.craftengine.core.platform.Platform; + +import java.nio.file.Path; + +public class BukkitPlatform implements Platform { + @Override + public boolean AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile) { + AsyncGenerateResourcePackStartEvent startEvent = new AsyncGenerateResourcePackStartEvent(generatedPackPath, zipFile); + return EventUtils.fireAndCheckCancel(startEvent); + } + + @Override + public void AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile) { + AsyncGenerateResourcePackEndEvent endEvent = new AsyncGenerateResourcePackEndEvent(generatedPackPath, zipFile); + EventUtils.fireAndForget(endEvent); + } +} \ No newline at end of file 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..cb5384fff 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 @@ -1,5 +1,6 @@ package net.momirealms.craftengine.bukkit.plugin; +import net.momirealms.craftengine.bukkit.platform.BukkitPlatform; import net.momirealms.craftengine.bukkit.block.BukkitBlockManager; import net.momirealms.craftengine.bukkit.block.behavior.BukkitBlockBehaviors; import net.momirealms.craftengine.bukkit.entity.furniture.BukkitFurnitureManager; @@ -117,6 +118,7 @@ public class BukkitCraftEngine extends CraftEngine { } BukkitBlockBehaviors.init(); BukkitItemBehaviors.init(); + super.platform = new BukkitPlatform(); super.senderFactory = new BukkitSenderFactory(this); super.itemManager = new BukkitItemManager(this); super.recipeManager = new BukkitRecipeManager(this); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java b/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java index eef7018e9..f734be2ec 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/PackManagerImpl.java @@ -11,6 +11,7 @@ import net.momirealms.craftengine.core.font.Font; import net.momirealms.craftengine.core.pack.generator.ModelGeneration; import net.momirealms.craftengine.core.pack.generator.ModelGenerator; import net.momirealms.craftengine.core.pack.model.ItemModel; +import net.momirealms.craftengine.core.platform.Platform; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.PluginProperties; import net.momirealms.craftengine.core.plugin.config.ConfigManager; @@ -35,12 +36,14 @@ public class PackManagerImpl implements PackManager { private static final String LEGACY_TEMPLATES = PluginProperties.getValue("legacy-templates").replace(".", "_"); private static final String LATEST_TEMPLATES = PluginProperties.getValue("latest-templates").replace(".", "_"); private final CraftEngine plugin; + private final Platform platform; private final Map loadedPacks = new HashMap<>(); private final Map sectionParsers = new HashMap<>(); private final TreeMap> cachedConfigs = new TreeMap<>(); - public PackManagerImpl(CraftEngine plugin) { + public PackManagerImpl(CraftEngine plugin, Platform platform) { this.plugin = plugin; + this.platform = platform; } @Override @@ -238,6 +241,16 @@ public class PackManagerImpl implements PackManager { .resolve("generated") .resolve("resource_pack"); + Path zipFile = plugin.dataFolderPath() + .resolve("generated") + .resolve("resource_pack.zip"); + + boolean isCancelled = platform.AsyncGenerateResourcePackStartEvent(generatedPackPath, zipFile); + if (isCancelled) { + plugin.logger().info("Resource pack generation cancelled by event"); + return; + } + try { org.apache.commons.io.FileUtils.deleteDirectory(generatedPackPath.toFile()); } catch (IOException e) { @@ -264,9 +277,6 @@ public class PackManagerImpl implements PackManager { this.generateItemModels(generatedPackPath, plugin.blockManager()); this.generateSounds(generatedPackPath); - Path zipFile = plugin.dataFolderPath() - .resolve("generated") - .resolve("resource_pack.zip"); try { ZipUtils.zipDirectory(generatedPackPath, zipFile); } catch (IOException e) { @@ -275,6 +285,8 @@ public class PackManagerImpl implements PackManager { long end = System.currentTimeMillis(); plugin.logger().info("Finished generating resource pack in " + (end - start) + "ms"); + + platform.AsyncGenerateResourcePackEndEvent(generatedPackPath, zipFile); } private void generateSounds(Path generatedPackPath) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java b/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java new file mode 100644 index 000000000..6344e9cb9 --- /dev/null +++ b/core/src/main/java/net/momirealms/craftengine/core/platform/Platform.java @@ -0,0 +1,8 @@ +package net.momirealms.craftengine.core.platform; + +import java.nio.file.Path; + +public interface Platform { + boolean AsyncGenerateResourcePackStartEvent(Path generatedPackPath, Path zipFile); + void AsyncGenerateResourcePackEndEvent(Path generatedPackPath, Path zipFile); +} 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 03e310dac..68e62018e 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 @@ -8,6 +8,7 @@ import net.momirealms.craftengine.core.item.ItemManager; import net.momirealms.craftengine.core.item.recipe.RecipeManager; import net.momirealms.craftengine.core.pack.PackManager; import net.momirealms.craftengine.core.pack.PackManagerImpl; +import net.momirealms.craftengine.core.platform.Platform; import net.momirealms.craftengine.core.plugin.classpath.ClassPathAppender; import net.momirealms.craftengine.core.plugin.command.CraftEngineCommandManager; import net.momirealms.craftengine.core.plugin.command.sender.SenderFactory; @@ -33,6 +34,7 @@ import java.util.List; public abstract class CraftEngine implements Plugin { public static final String NAMESPACE = "craftengine"; private static CraftEngine instance; + protected Platform platform; protected DependencyManager dependencyManager; protected SchedulerAdapter scheduler; protected NetworkManager networkManager; @@ -90,7 +92,7 @@ public abstract class CraftEngine implements Plugin { @Override public void enable() { this.networkManager.enable(); - this.packManager = new PackManagerImpl(this); + this.packManager = new PackManagerImpl(this, this.platform); this.fontManager = new FontManagerImpl(this); this.templateManager = new TemplateManagerImpl(this); this.commandManager.registerDefaultFeatures();