9
0
mirror of https://github.com/Xiao-MoMi/craft-engine.git synced 2025-12-27 19:09:08 +00:00

fix(core): 修复资源包生成速度过慢的问题

This commit is contained in:
jhqwqmc
2025-05-05 09:50:40 +08:00
parent 82d809ff5a
commit add7fecd34

View File

@@ -44,6 +44,7 @@ import java.util.*;
import java.util.function.BiConsumer;
import java.util.function.Consumer;
import java.util.function.Predicate;
import java.util.stream.Stream;
import static net.momirealms.craftengine.core.util.MiscUtils.castToMap;
@@ -142,6 +143,7 @@ public abstract class AbstractPackManager implements PackManager {
@Override
public void load() {
initFileSystemProvider();
List<Map<?, ?>> list = Config.instance().settings().getMapList("resource-pack.delivery.hosting");
if (list == null || list.isEmpty()) {
this.resourcePackHost = NoneHost.INSTANCE;
@@ -485,6 +487,36 @@ public abstract class AbstractPackManager implements PackManager {
}
}
private static void initFileSystemProvider() {
String osName = System.getProperty("os.name").toLowerCase();
String providerClass = null;
if (osName.contains("win")) {
providerClass = "sun.nio.fs.WindowsFileSystemProvider";
} else if (osName.contains("nix") || osName.contains("nux") || osName.contains("aix")) {
providerClass = "sun.nio.fs.LinuxFileSystemProvider";
} else if (osName.contains("mac")) {
providerClass = "sun.nio.fs.MacOSXFileSystemProvider";
}
if (providerClass != null) {
try {
System.setProperty("java.nio.file.spi.DefaultFileSystemProvider", providerClass);
} catch (Exception ignored) {}
}
}
private static void deleteDirectory(Path folder) throws IOException {
if (!Files.exists(folder)) return;
try (Stream<Path> walk = Files.walk(folder)) {
walk.sorted(Comparator.reverseOrder())
.parallel()
.forEach(path -> {
try {
Files.delete(path);
} catch (IOException ignored) {}
});
}
}
@Override
public void generateResourcePack() {
if (this.generateResourcePack) {
@@ -499,7 +531,7 @@ public abstract class AbstractPackManager implements PackManager {
.resolve("resource_pack");
try {
org.apache.commons.io.FileUtils.deleteDirectory(generatedPackPath.toFile());
deleteDirectory(generatedPackPath);
} catch (IOException e) {
this.plugin.logger().severe("Error deleting previous resource pack", e);
}