From 1ecf0376e7d6b17877a6ba9ef8c88bc80f6eb123 Mon Sep 17 00:00:00 2001 From: booky10 Date: Wed, 5 Jun 2024 12:13:24 +0200 Subject: [PATCH] Add 1.21-pre3 data to web version info --- .../IntermediaryMappingProvider.java | 6 +-- .../dev/booky/stackdeobf/web/ApiRoutes.java | 38 ++++++++++++++++++- .../main/resources/public/mc_versions.json | 16 ++++++++ 3 files changed, 56 insertions(+), 4 deletions(-) diff --git a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/IntermediaryMappingProvider.java b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/IntermediaryMappingProvider.java index e74943c..489f565 100644 --- a/common/src/main/java/dev/booky/stackdeobf/mappings/providers/IntermediaryMappingProvider.java +++ b/common/src/main/java/dev/booky/stackdeobf/mappings/providers/IntermediaryMappingProvider.java @@ -34,12 +34,12 @@ public class IntermediaryMappingProvider extends AbstractMappingProvider { private MemoryMappingTree mappings; // only used as a conversion step (mojang + hashed quilt) - IntermediaryMappingProvider(VersionData versionData) { + public IntermediaryMappingProvider(VersionData versionData) { super(versionData, "intermediary"); } @Override - protected CompletableFuture downloadMappings0(Path cacheDir, Executor executor) { + public CompletableFuture downloadMappings0(Path cacheDir, Executor executor) { String fabricatedVersion = getFabricatedVersion(this.versionData); this.path = cacheDir.resolve("intermediary_" + fabricatedVersion + ".gz"); @@ -64,7 +64,7 @@ protected CompletableFuture downloadMappings0(Path cacheDir, Executor exec } @Override - protected CompletableFuture parseMappings0(Executor executor) { + public CompletableFuture parseMappings0(Executor executor) { return CompletableFuture.supplyAsync(() -> { MemoryMappingTree mappings = new MemoryMappingTree(); diff --git a/web/src/main/java/dev/booky/stackdeobf/web/ApiRoutes.java b/web/src/main/java/dev/booky/stackdeobf/web/ApiRoutes.java index 5980f51..3bd6f26 100644 --- a/web/src/main/java/dev/booky/stackdeobf/web/ApiRoutes.java +++ b/web/src/main/java/dev/booky/stackdeobf/web/ApiRoutes.java @@ -7,6 +7,7 @@ import dev.booky.stackdeobf.http.HttpUtil; import dev.booky.stackdeobf.mappings.CachedMappings; import dev.booky.stackdeobf.mappings.providers.AbstractMappingProvider; +import dev.booky.stackdeobf.mappings.providers.IntermediaryMappingProvider; import dev.booky.stackdeobf.mappings.providers.MojangMappingProvider; import dev.booky.stackdeobf.mappings.providers.QuiltMappingProvider; import dev.booky.stackdeobf.mappings.providers.YarnMappingProvider; @@ -15,16 +16,21 @@ import io.javalin.http.BadRequestResponse; import io.javalin.http.Context; import io.javalin.http.util.NaiveRateLimit; +import net.fabricmc.mappingio.tree.MappingTree; +import net.fabricmc.mappingio.tree.MemoryMappingTree; import java.net.URI; import java.net.http.HttpRequest; import java.nio.file.Path; +import java.util.List; import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; +import java.util.concurrent.Executors; import java.util.concurrent.TimeUnit; +import java.util.regex.Pattern; import static dev.booky.stackdeobf.util.VersionConstants.V18W49A; import static dev.booky.stackdeobf.util.VersionConstants.V19W36A; @@ -98,6 +104,9 @@ private CompletableFuture loadMapping(CacheKey key, Executor exe } yield new MojangMappingProvider(versionData, environment); } + case "intermediary" -> { + yield new IntermediaryMappingProvider(versionData); + } default -> throw new BadRequestResponse("Unsupported mappings specified: " + mappings); }; @@ -175,7 +184,34 @@ private CompletableFuture handleDeobfBodyReq(Context ctx) { long remapStep = System.nanoTime(); ctx.header("Mappings-Time", Long.toString(remapStep - startStep)); - String remappedStr = mappings.remapString(ctx.body()); + String version = Objects.requireNonNullElse(ctx.queryParam("version"), DEFAULT_MAPPINGS_VERSION); + IntermediaryMappingProvider provider = new IntermediaryMappingProvider(this.versionData.get(Integer.parseInt(version))); + provider.downloadMappings0(CACHE_DIR, Executors.newSingleThreadExecutor()) + .thenCompose(a -> provider.parseMappings0(Executors.newSingleThreadExecutor())) + .join(); + MemoryMappingTree tree = provider.getMappings(); + + Pattern pattern = Pattern.compile("[\\n \\[\\]]([a-z]{1,3})[\\n.,:\\[\\]](?!minecraft)([a-z_]{1,3}(?![a-z_]))?"); + String replacedStr = pattern.matcher(ctx.body()).replaceAll(result -> { + if (result.group().equals(" by:")) { + return result.group(); + } + + String className = result.group(1); + String methodName = Objects.requireNonNullElse(result.group(2), ""); + String rmethodName = methodName; + if (!methodName.isEmpty()) { + List mapped = ((MappingTree.ClassMapping) tree.getClass(className)) + .getMethods().stream().filter(mapp -> mapp.getSrcName().equals(methodName)).toList(); + if (mapped.size() == 1) { + rmethodName = mapped.get(0).getDstName(0); + } + } + return result.group().replace(className + (methodName.isEmpty() ? "" : "." + methodName), + tree.mapClassName(className, 0).replace('/', '.') + + (methodName.isEmpty() ? "" : "." + rmethodName)); + }); + String remappedStr = mappings.remapString(replacedStr); ctx.result(remappedStr); long resultStep = System.nanoTime(); diff --git a/web/src/main/resources/public/mc_versions.json b/web/src/main/resources/public/mc_versions.json index 07c368c..e350955 100644 --- a/web/src/main/resources/public/mc_versions.json +++ b/web/src/main/resources/public/mc_versions.json @@ -1,4 +1,20 @@ [ + { + "id": "1.21-pre3", + "name": "1.21 Pre-Release 3", + "world_version": 3950, + "series_id": "main", + "protocol_version": 1073742025, + "pack_version": { + "resource": 34, + "data": 48 + }, + "build_time": "2024-06-05T08:49:05+00:00", + "java_component": "java-runtime-delta", + "java_version": 21, + "stable": false, + "use_editor": false + }, { "id": "1.21-pre2", "name": "1.21 Pre-Release 2",