From 37b8b06a587d9c6e508e72062011a09d783a52d9 Mon Sep 17 00:00:00 2001 From: XiaoMoMi Date: Thu, 18 Dec 2025 04:41:32 +0800 Subject: [PATCH] =?UTF-8?q?=E6=89=93=E5=80=92=E4=BA=86atlas=E6=81=B6?= =?UTF-8?q?=E9=AD=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bukkit/paper-loader/build.gradle.kts | 17 ++-------- common-files/src/main/resources/config.yml | 3 +- .../core/pack/AbstractPackManager.java | 32 +++++++++++++++---- .../resolution/ResolutionMergePackMcMeta.java | 15 +++++---- .../core/pack/mcmeta/PackVersion.java | 1 + 5 files changed, 39 insertions(+), 29 deletions(-) diff --git a/bukkit/paper-loader/build.gradle.kts b/bukkit/paper-loader/build.gradle.kts index 44379691f..aea13160d 100644 --- a/bukkit/paper-loader/build.gradle.kts +++ b/bukkit/paper-loader/build.gradle.kts @@ -203,10 +203,9 @@ fun registerPaperTask( version: String, dirName: String = version, javaVersion : Int = 21, - serverJar: File? = null, - downloadPlugins: Action? = null + serverJar: File? = null ) { - listOf(version, "${version}-with-viaversion").forEach { taskName -> + listOf(version).forEach { taskName -> tasks.register(taskName, RunServer::class) { group = "run dev server" minecraftVersion(version) @@ -224,18 +223,6 @@ fun registerPaperTask( jvmArgs("-Ddisable.watchdog=true") jvmArgs("-Xlog:redefine+class*=info") jvmArgs("-XX:+AllowEnhancedClassRedefinition") - if (taskName.contains("viaversion")) { - downloadPlugins { - url("https://ci.viaversion.com/job/ViaVersion/lastBuild/artifact/build/libs/${getJenkinsArtifactFileName("https://ci.viaversion.com/job/ViaVersion/lastSuccessfulBuild/api/json?tree=artifacts[*]")}") - url("https://ci.viaversion.com/view/ViaBackwards/job/ViaBackwards/662/artifact/build/libs/${getJenkinsArtifactFileName("https://ci.viaversion.com/job/ViaBackwards/lastSuccessfulBuild/api/json?tree=artifacts[*]")}") - } - } } } -} - -fun getJenkinsArtifactFileName(url: String): String { - val response = URI.create(url).toURL().readText() - val regex = """"fileName":"([^"]+)"""".toRegex() - return regex.find(response)?.groupValues?.get(1) ?: throw Exception("fileName not found") } \ No newline at end of file diff --git a/common-files/src/main/resources/config.yml b/common-files/src/main/resources/config.yml index 498128677..4e33699a4 100644 --- a/common-files/src/main/resources/config.yml +++ b/common-files/src/main/resources/config.yml @@ -16,8 +16,9 @@ resource-pack: # This option determines the location of the generated resource pack # You can use either an absolute path or a relative path here path: "./generated/resource_pack.zip" + # The minimum client version supported by CraftEngine is 1.20. If you need to provide support for lower client versions, please modify the resource pack yourself. # Allowed values: - # - 1.20.1, 1.21, 1.21.8, etc. + # - 1.20.2, 1.21, 1.21.8, etc. # - latest: the latest client version # - server: the current server version supported-version: 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 0112ecf87..1f69ce39f 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 @@ -865,9 +865,8 @@ public abstract class AbstractPackManager implements PackManager { } for (Revision revision : revisions) { JsonObject entry = new JsonObject(); - JsonObject formats = new JsonObject(); - entry.add("formats", formats); JsonArray formatsArray = new JsonArray(); + entry.add("formats", formatsArray); formatsArray.add(revision.minPackVersion().major()); formatsArray.add(revision.maxPackVersion().major()); entry.add("min_format", revision.minPackVersion().getAsJsonArray()); @@ -1188,8 +1187,10 @@ public abstract class AbstractPackManager implements PackManager { private void validateResourcePack(Path path) { Path packMcMetaPath = path.resolve("pack.mcmeta"); PackMcMeta packMeta; + JsonObject packMetaJson; try { - packMeta = new PackMcMeta(GsonHelper.readJsonFile(packMcMetaPath).getAsJsonObject()); + packMetaJson = GsonHelper.readJsonFile(packMcMetaPath).getAsJsonObject(); + packMeta = new PackMcMeta(packMetaJson); } catch (IOException e) { this.plugin.logger().warn("Failed to read pack.mcmeta " + packMcMetaPath.toAbsolutePath(), e); return; @@ -1256,7 +1257,7 @@ public abstract class AbstractPackManager implements PackManager { this.plugin.logger().info(TranslationManager.instance().translateLog("info.resource_pack.validate.start", String.valueOf(i + 1), String.valueOf(size), String.valueOf(segment.min()), String.valueOf(segment.max()), overlayInOrder.stream().map(Overlay::directory).toList().toString())); ValidationResult result = validateOverlayedResourcePack(rootPathList.toArray(new Path[0]), segment.max() >= MinecraftVersion.V1_21_11.packFormat().major()); - if (Config.fixTextureAtlas()) { + if (Config.fixTextureAtlas() && !Config.enableObfuscation()) { // 有修复物品 if (result.fixedItemAtlas != null) { itemFixer.addEntry(segment.min(), segment.max(), result.fixedItemAtlas); @@ -1272,7 +1273,7 @@ public abstract class AbstractPackManager implements PackManager { } // 尝试修复atlas - if (Config.fixTextureAtlas()) { + if (Config.fixTextureAtlas() && !Config.enableObfuscation()) { Map atlasToAdd = new LinkedHashMap<>(); // 物品 for (AtlasFixer.Entry entry : itemFixer.entries()) { @@ -1296,7 +1297,7 @@ public abstract class AbstractPackManager implements PackManager { } } // 方块 - for (AtlasFixer.Entry entry : itemFixer.entries()) { + for (AtlasFixer.Entry entry : blockFixer.entries()) { int min = entry.min(); int max = entry.max(); String directoryName = Config.createOverlayFolderName(min + "-" + max); @@ -1330,6 +1331,25 @@ public abstract class AbstractPackManager implements PackManager { } } } + + JsonObject overlaysJson = packMetaJson.getAsJsonObject("overlays"); + if (overlaysJson == null) { + overlaysJson = new JsonObject(); + packMetaJson.add("overlays", overlaysJson); + } + JsonArray overlayEntries = overlaysJson.getAsJsonArray("entries"); + if (overlayEntries == null) { + overlayEntries = new JsonArray(); + overlaysJson.add("entries", overlayEntries); + } + for (JsonElement entry : atlasToAdd.values()) { + overlayEntries.add(entry); + } + try { + GsonHelper.writeJsonFile(packMetaJson, packMcMetaPath); + } catch (IOException e) { + this.plugin.logger().warn("Failed to write pack.mcmeta", e); + } } } diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergePackMcMeta.java b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergePackMcMeta.java index c524ecebe..65e5ee5d2 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergePackMcMeta.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/conflict/resolution/ResolutionMergePackMcMeta.java @@ -8,6 +8,7 @@ import com.google.gson.JsonPrimitive; import net.momirealms.craftengine.core.pack.conflict.PathContext; import net.momirealms.craftengine.core.pack.mcmeta.PackVersion; import net.momirealms.craftengine.core.plugin.CraftEngine; +import net.momirealms.craftengine.core.plugin.config.Config; import net.momirealms.craftengine.core.util.AdventureHelper; import net.momirealms.craftengine.core.util.GsonHelper; import net.momirealms.craftengine.core.util.Key; @@ -162,12 +163,12 @@ public class ResolutionMergePackMcMeta implements Resolution { JsonObject entryJson = entry.getAsJsonObject(); if (entryJson == null) continue; Pair supportedVersions = getSupportedVersions(entryJson); - PackVersion min = supportedVersions.left(); - PackVersion max = supportedVersions.right(); + PackVersion min = PackVersion.getHigher(supportedVersions.left(), PackVersion.MIN_OVERLAY_VERSION); + PackVersion max = PackVersion.getHigher(supportedVersions.right(), PackVersion.MIN_OVERLAY_VERSION); // 旧版格式支持 - JsonObject supportedFormats = new JsonObject(); - supportedFormats.addProperty("min_inclusive", min.major()); - supportedFormats.addProperty("max_inclusive", max.major()); + JsonArray supportedFormats = new JsonArray(); + supportedFormats.add(min.major()); + supportedFormats.add(max.major()); entryJson.add("formats", supportedFormats); // 新版格式支持 JsonArray minFormat = new JsonArray(); @@ -186,8 +187,8 @@ public class ResolutionMergePackMcMeta implements Resolution { public static void mergePack(JsonObject merged, JsonObject pack1, JsonObject pack2) { Pair pack1Version = getSupportedVersions(pack1); Pair pack2Version = getSupportedVersions(pack2); - PackVersion min = PackVersion.getLower(pack1Version.left(), pack2Version.left()); - PackVersion max = PackVersion.getHigher(pack1Version.right(), pack2Version.right()); + PackVersion min = Config.packMinVersion().packFormat(); + PackVersion max = PackVersion.getHigher(PackVersion.getHigher(pack1Version.right(), pack2Version.right()), Config.packMaxVersion().packFormat()); // 旧版格式支持 JsonObject supportedFormats = new JsonObject(); supportedFormats.addProperty("min_inclusive", min.major()); diff --git a/core/src/main/java/net/momirealms/craftengine/core/pack/mcmeta/PackVersion.java b/core/src/main/java/net/momirealms/craftengine/core/pack/mcmeta/PackVersion.java index 6e3bf1780..2e321e26f 100644 --- a/core/src/main/java/net/momirealms/craftengine/core/pack/mcmeta/PackVersion.java +++ b/core/src/main/java/net/momirealms/craftengine/core/pack/mcmeta/PackVersion.java @@ -7,6 +7,7 @@ import java.util.List; public record PackVersion(int major, int minor) implements Comparable { public static final PackVersion MIN_PACK_VERSION = new PackVersion(15, 0); // 1.20 + public static final PackVersion MIN_OVERLAY_VERSION = new PackVersion(18, 0); // 1.20 public static final PackVersion MAX_PACK_VERSION = new PackVersion(1000, 0); // future public PackVersion(int major) {