mirror of
https://github.com/Xiao-MoMi/craft-engine.git
synced 2025-12-25 01:49:30 +00:00
Merge pull request #363 from toxicity188/make-resource-pack-cache-event
Make AsyncResourcePackCacheEvent
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package net.momirealms.craftengine.bukkit.api.event;
|
||||
|
||||
import net.momirealms.craftengine.core.pack.PackCacheData;
|
||||
import org.bukkit.event.Event;
|
||||
import org.bukkit.event.HandlerList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
public class AsyncResourcePackCacheEvent extends Event {
|
||||
private static final HandlerList HANDLER_LIST = new HandlerList();
|
||||
private final PackCacheData cacheData;
|
||||
|
||||
public AsyncResourcePackCacheEvent(@NotNull PackCacheData cacheData) {
|
||||
super(true);
|
||||
this.cacheData = cacheData;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public PackCacheData cacheData() {
|
||||
return cacheData;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static HandlerList getHandlerList() {
|
||||
return HANDLER_LIST;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public HandlerList getHandlers() {
|
||||
return getHandlerList();
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package net.momirealms.craftengine.bukkit.pack;
|
||||
|
||||
import net.momirealms.craftengine.bukkit.api.BukkitAdaptors;
|
||||
import net.momirealms.craftengine.bukkit.api.event.AsyncResourcePackCacheEvent;
|
||||
import net.momirealms.craftengine.bukkit.api.event.AsyncResourcePackGenerateEvent;
|
||||
import net.momirealms.craftengine.bukkit.plugin.BukkitCraftEngine;
|
||||
import net.momirealms.craftengine.bukkit.plugin.command.feature.ReloadCommand;
|
||||
@@ -28,10 +29,17 @@ public class BukkitPackManager extends AbstractPackManager implements Listener {
|
||||
private final BukkitCraftEngine plugin;
|
||||
|
||||
public BukkitPackManager(BukkitCraftEngine plugin) {
|
||||
super(plugin, (rf, zp) -> {
|
||||
AsyncResourcePackGenerateEvent endEvent = new AsyncResourcePackGenerateEvent(rf, zp);
|
||||
EventUtils.fireAndForget(endEvent);
|
||||
});
|
||||
super(
|
||||
plugin,
|
||||
(cd) -> {
|
||||
AsyncResourcePackCacheEvent cacheEvent = new AsyncResourcePackCacheEvent(cd);
|
||||
EventUtils.fireAndForget(cacheEvent);
|
||||
},
|
||||
(rf, zp) -> {
|
||||
AsyncResourcePackGenerateEvent endEvent = new AsyncResourcePackGenerateEvent(rf, zp);
|
||||
EventUtils.fireAndForget(endEvent);
|
||||
}
|
||||
);
|
||||
this.plugin = plugin;
|
||||
}
|
||||
|
||||
|
||||
@@ -85,6 +85,7 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
}
|
||||
|
||||
private final CraftEngine plugin;
|
||||
private final Consumer<PackCacheData> cacheEventDispatcher;
|
||||
private final BiConsumer<Path, Path> eventDispatcher;
|
||||
private final Map<String, Pack> loadedPacks = new HashMap<>();
|
||||
private final Map<String, ConfigParser> sectionParsers = new HashMap<>();
|
||||
@@ -94,8 +95,9 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
protected BiConsumer<Path, Path> zipGenerator;
|
||||
protected ResourcePackHost resourcePackHost;
|
||||
|
||||
public AbstractPackManager(CraftEngine plugin, BiConsumer<Path, Path> eventDispatcher) {
|
||||
public AbstractPackManager(CraftEngine plugin, Consumer<PackCacheData> cacheEventDispatcher, BiConsumer<Path, Path> eventDispatcher) {
|
||||
this.plugin = plugin;
|
||||
this.cacheEventDispatcher = cacheEventDispatcher;
|
||||
this.eventDispatcher = eventDispatcher;
|
||||
this.zipGenerator = (p1, p2) -> {};
|
||||
Path resourcesFolder = this.plugin.dataFolderPath().resolve("resources");
|
||||
@@ -267,7 +269,9 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
@Override
|
||||
public void initCachedAssets() {
|
||||
try {
|
||||
this.updateCachedAssets(null);
|
||||
PackCacheData cacheData = new PackCacheData(plugin);
|
||||
this.cacheEventDispatcher.accept(cacheData);
|
||||
this.updateCachedAssets(cacheData, null);
|
||||
} catch (Exception e) {
|
||||
this.plugin.logger().warn("Failed to update cached assets", e);
|
||||
}
|
||||
@@ -658,11 +662,15 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
this.plugin.logger().info("Generating resource pack...");
|
||||
long time1 = System.currentTimeMillis();
|
||||
|
||||
// Create cache data
|
||||
PackCacheData cacheData = new PackCacheData(plugin);
|
||||
this.cacheEventDispatcher.accept(cacheData);
|
||||
|
||||
// get the target location
|
||||
try (FileSystem fs = Jimfs.newFileSystem(Configuration.forCurrentPlatform())) {
|
||||
// firstly merge existing folders
|
||||
Path generatedPackPath = fs.getPath("resource_pack");
|
||||
List<Pair<String, List<Path>>> duplicated = this.updateCachedAssets(fs);
|
||||
List<Pair<String, List<Path>>> duplicated = this.updateCachedAssets(cacheData, fs);
|
||||
if (!duplicated.isEmpty()) {
|
||||
plugin.logger().severe(AdventureHelper.miniMessage().stripTags(TranslationManager.instance().miniMessageTranslation("warning.config.pack.duplicated_files")));
|
||||
int x = 1;
|
||||
@@ -2136,7 +2144,7 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
}
|
||||
}
|
||||
|
||||
private List<Pair<String, List<Path>>> updateCachedAssets(@Nullable FileSystem fs) throws IOException {
|
||||
private List<Pair<String, List<Path>>> updateCachedAssets(@NotNull PackCacheData cacheData, @Nullable FileSystem fs) throws IOException {
|
||||
Map<String, List<Path>> conflictChecker = new Object2ObjectOpenHashMap<>(Math.max(128, this.cachedAssetFiles.size()));
|
||||
Map<Path, CachedAssetFile> previousFiles = this.cachedAssetFiles;
|
||||
this.cachedAssetFiles = new Object2ObjectOpenHashMap<>(Math.max(128, this.cachedAssetFiles.size()));
|
||||
@@ -2146,10 +2154,7 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
.filter(Pack::enabled)
|
||||
.map(Pack::resourcePackFolder)
|
||||
.toList());
|
||||
folders.addAll(Config.foldersToMerge().stream()
|
||||
.map(it -> this.plugin.dataFolderPath().getParent().resolve(it))
|
||||
.filter(Files::exists)
|
||||
.toList());
|
||||
folders.addAll(cacheData.externalFolders());
|
||||
for (Path sourceFolder : folders) {
|
||||
if (Files.exists(sourceFolder)) {
|
||||
Files.walkFileTree(sourceFolder, EnumSet.of(FileVisitOption.FOLLOW_LINKS), Integer.MAX_VALUE, new SimpleFileVisitor<>() {
|
||||
@@ -2161,13 +2166,7 @@ public abstract class AbstractPackManager implements PackManager {
|
||||
});
|
||||
}
|
||||
}
|
||||
List<Path> externalZips = Config.zipsToMerge().stream()
|
||||
.map(it -> this.plugin.dataFolderPath().getParent().resolve(it))
|
||||
.filter(Files::exists)
|
||||
.filter(Files::isRegularFile)
|
||||
.filter(file -> file.getFileName().toString().endsWith(".zip"))
|
||||
.toList();
|
||||
for (Path zip : externalZips) {
|
||||
for (Path zip : cacheData.externalZips()) {
|
||||
processZipFile(zip, zip.getParent(), fs, conflictChecker, previousFiles);
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,39 @@
|
||||
package net.momirealms.craftengine.core.pack;
|
||||
|
||||
import net.momirealms.craftengine.core.plugin.CraftEngine;
|
||||
import net.momirealms.craftengine.core.plugin.config.Config;
|
||||
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<Path> externalZips;
|
||||
private final Set<Path> externalFolders;
|
||||
|
||||
PackCacheData(@NotNull CraftEngine plugin) {
|
||||
externalFolders = Config.foldersToMerge().stream()
|
||||
.map(it -> plugin.dataFolderPath().getParent().resolve(it))
|
||||
.filter(Files::exists)
|
||||
.collect(Collectors.toSet());
|
||||
externalZips = Config.zipsToMerge().stream()
|
||||
.map(it -> plugin.dataFolderPath().getParent().resolve(it))
|
||||
.filter(Files::exists)
|
||||
.filter(Files::isRegularFile)
|
||||
.filter(file -> file.getFileName().toString().endsWith(".zip"))
|
||||
.collect(Collectors.toSet());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<Path> externalFolders() {
|
||||
return externalFolders;
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public Set<Path> externalZips() {
|
||||
return externalZips;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user