diff --git a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncResourcePackCacheEvent.java b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncResourcePackCacheEvent.java index 56776f611..35f1cdd4f 100644 --- a/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncResourcePackCacheEvent.java +++ b/bukkit/src/main/java/net/momirealms/craftengine/bukkit/api/event/AsyncResourcePackCacheEvent.java @@ -5,6 +5,22 @@ import org.bukkit.event.Event; import org.bukkit.event.HandlerList; import org.jetbrains.annotations.NotNull; +import java.nio.file.Files; +import java.nio.file.Path; + +/** + * This event is triggered when a user executes the "/ce reload pack" command. + *
+ * The event initiates a process that caches all resource content into a virtual file system + * to ensure optimal build performance. To add your resource pack through this event, + * you must use the {@link #registerExternalResourcePack(Path)} method every time this event is called. + *
+ *+ * Important: The caching system will not update your resource pack if its file size or + * last modification time remains unchanged between reloads. Ensure these attributes change + * if you need the cache to recognize updates. + *
+ */ public class AsyncResourcePackCacheEvent extends Event { private static final HandlerList HANDLER_LIST = new HandlerList(); private final PackCacheData cacheData; @@ -16,7 +32,7 @@ public class AsyncResourcePackCacheEvent extends Event { @NotNull public PackCacheData cacheData() { - return cacheData; + return this.cacheData; } @NotNull @@ -28,4 +44,24 @@ public class AsyncResourcePackCacheEvent extends Event { public HandlerList getHandlers() { return getHandlerList(); } + + /** + * Adds an external resource pack to the cache. + *+ * This method accepts either a .zip file or a directory path representing a resource pack. + * The resource pack will be added to the appropriate cache collection based on its type. + *
+ * + * @param path the file system path to the resource pack. Must be either a .zip file or a directory. + * @throws IllegalArgumentException if the provided path is neither a .zip file nor a directory. + */ + public void registerExternalResourcePack(@NotNull final Path path) { + if (Files.isRegularFile(path) && path.getFileName().endsWith(".zip")) { + this.cacheData.externalZips().add(path); + } else if (Files.isDirectory(path)) { + this.cacheData.externalFolders().add(path); + } else { + throw new IllegalArgumentException("Illegal resource pack path: " + path); + } + } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java index 18da08797..f053a6102 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/AbstractPackManager.java @@ -273,7 +273,7 @@ public abstract class AbstractPackManager implements PackManager { @Override public void initCachedAssets() { try { - PackCacheData cacheData = new PackCacheData(plugin); + PackCacheData cacheData = new PackCacheData(this.plugin); this.cacheEventDispatcher.accept(cacheData); this.updateCachedAssets(cacheData, null); } catch (Exception e) { diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/PackCacheData.java b/core/src/main/java/net/momirealms/craftengine/core/pack/PackCacheData.java index 702bf2163..1b4d1f23e 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/PackCacheData.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/PackCacheData.java @@ -1,6 +1,5 @@ package net.momirealms.craftengine.core.pack; -import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import net.momirealms.craftengine.core.plugin.CraftEngine; import net.momirealms.craftengine.core.plugin.config.Config; import org.jetbrains.annotations.NotNull; @@ -8,6 +7,7 @@ import org.jetbrains.annotations.NotNull; import java.nio.file.Files; import java.nio.file.Path; import java.util.Set; +import java.util.stream.Collectors; public class PackCacheData { private final Set