diff --git a/build.gradle b/build.gradle index 4773d130..825dff56 100644 --- a/build.gradle +++ b/build.gradle @@ -73,12 +73,12 @@ dependencies { compileOnly 'com.demonwav.mcdev:annotations:2.0.0' -// modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") { -// exclude group: 'net.fabricmc', module: 'fabric-loader' -// } -// productionRuntimeMods("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") { -// exclude group: 'net.fabricmc', module: 'fabric-loader' -// } + modRuntimeOnly("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") { + exclude group: 'net.fabricmc', module: 'fabric-loader' + } + productionRuntimeMods("me.djtheredstoner:DevAuth-fabric:${project.devauth_version}") { + exclude group: 'net.fabricmc', module: 'fabric-loader' + } include api("net.fabricmc:mapping-io:${project.mapping_io_version}") diff --git a/gradle.properties b/gradle.properties index bb302aa2..08e96a11 100644 --- a/gradle.properties +++ b/gradle.properties @@ -31,7 +31,7 @@ org.gradle.jvmargs=-Xmx2G seedfinding_seed_version=1.171.2 latticg_version=1.07 mapping_io_version=0.7.1 - devauth_version=1.2.1 + devauth_version=1.2.2 checkstyle_version=11.0.0 jazzer_junit_version=0.24.0 diff --git a/src/main/java/net/earthcomputer/clientcommands/command/ListenCommand.java b/src/main/java/net/earthcomputer/clientcommands/command/ListenCommand.java index 75a42afd..fa18fdde 100644 --- a/src/main/java/net/earthcomputer/clientcommands/command/ListenCommand.java +++ b/src/main/java/net/earthcomputer/clientcommands/command/ListenCommand.java @@ -25,6 +25,7 @@ import net.minecraft.resources.Identifier; import net.minecraft.resources.ResourceKey; import net.minecraft.world.level.ChunkPos; +import org.jspecify.annotations.Nullable; import org.slf4j.Logger; import java.io.IOException; @@ -63,7 +64,7 @@ public static void disable() { private static final Set packets = new HashSet<>(); - private static PacketCallback callback; + private static @Nullable PacketCallback callback; public static void register(CommandDispatcher dispatcher) { dispatcher.register(literal("clisten") @@ -171,7 +172,7 @@ private static void checkEnabled() throws CommandSyntaxException { } } - private static Component serialize(Object object, Set seen, int depth) { + private static Component serialize(@Nullable Object object, Set<@Nullable Object> seen, int depth) { try { if (depth <= Configs.maximumPacketFieldDepth && seen.add(object)) { return serializeInner(object, seen, depth); @@ -182,7 +183,7 @@ private static Component serialize(Object object, Set seen, int depth) { } } - private static Component serializeInner(Object object, Set seen, int depth) { + private static Component serializeInner(@Nullable Object object, Set<@Nullable Object> seen, int depth) { return switch (object) { case null -> Component.literal("null"); case Component component -> component; @@ -276,6 +277,7 @@ public static void onPacket(Packet packet, PacketFlow side) { if (!packets.contains(packet.type().id())) { return; } + assert callback != null; callback.apply(packet, side); } diff --git a/src/main/java/net/earthcomputer/clientcommands/util/MappingsHelper.java b/src/main/java/net/earthcomputer/clientcommands/util/MappingsHelper.java index e9d32c57..ec3d9973 100644 --- a/src/main/java/net/earthcomputer/clientcommands/util/MappingsHelper.java +++ b/src/main/java/net/earthcomputer/clientcommands/util/MappingsHelper.java @@ -11,8 +11,8 @@ import net.fabricmc.mappingio.format.MappingFormat; import net.fabricmc.mappingio.tree.MappingTree; import net.fabricmc.mappingio.tree.MemoryMappingTree; -import net.minecraft.DetectedVersion; import net.minecraft.Optionull; +import net.minecraft.SharedConstants; import net.minecraft.util.Util; import org.jspecify.annotations.Nullable; import org.slf4j.Logger; @@ -59,80 +59,82 @@ public static void load() { } private static final CompletableFuture mojmapOfficial = Util.make(() -> { - String version = DetectedVersion.BUILT_IN.name(); + String version = SharedConstants.getCurrentVersion().id(); try (BufferedReader reader = Files.newBufferedReader(MAPPINGS_DIR.resolve(version + ".txt"))) { MemoryMappingTree tree = new MemoryMappingTree(); MappingReader.read(reader, MappingFormat.PROGUARD_FILE, tree); return CompletableFuture.completedFuture(tree); } catch (IOException e) { - try (HttpClient httpClient = HttpClient.newHttpClient()) { - HttpRequest versionsRequest = HttpRequest.newBuilder() - .uri(URI.create("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")) - .GET() - .timeout(Duration.ofSeconds(5)) - .build(); - return httpClient.sendAsync(versionsRequest, HttpResponse.BodyHandlers.ofString()) - .thenApply(HttpResponse::body) - .thenCompose(versionsBody -> { - JsonObject versionsJson = JsonParser.parseString(versionsBody).getAsJsonObject(); - String versionUrl = versionsJson.getAsJsonArray("versions").asList().stream() - .map(JsonElement::getAsJsonObject) - .filter(v -> v.get("id").getAsString().equals(version)) - .map(v -> v.get("url").getAsString()) - .findAny().orElseThrow(); + //noinspection resource async requests do not lend themselves for auto-closure + HttpClient httpClient = HttpClient.newHttpClient(); + HttpRequest versionsRequest = HttpRequest.newBuilder() + .uri(URI.create("https://piston-meta.mojang.com/mc/game/version_manifest_v2.json")) + .GET() + .timeout(Duration.ofSeconds(5)) + .build(); + return httpClient.sendAsync(versionsRequest, HttpResponse.BodyHandlers.ofString()) + .thenApply(HttpResponse::body) + .thenCompose(versionsBody -> { + JsonObject versionsJson = JsonParser.parseString(versionsBody).getAsJsonObject(); + String versionUrl = versionsJson.getAsJsonArray("versions").asList().stream() + .map(JsonElement::getAsJsonObject) + .filter(v -> v.get("id").getAsString().equals(version)) + .map(v -> v.get("url").getAsString()) + .findAny().orElseThrow(); - HttpRequest versionRequest = HttpRequest.newBuilder() - .uri(URI.create(versionUrl)) - .GET() - .timeout(Duration.ofSeconds(5)) - .build(); - return httpClient.sendAsync(versionRequest, HttpResponse.BodyHandlers.ofString()); - }) - .whenComplete((result, exception) -> { - if (exception != null) { - ListenCommand.disable(); - } - }) - .thenApply(HttpResponse::body) - .thenCompose(versionBody -> { - JsonObject versionJson = JsonParser.parseString(versionBody).getAsJsonObject(); - String mappingsUrl = versionJson - .getAsJsonObject("downloads") - .getAsJsonObject("client_mappings") - .get("url").getAsString(); + HttpRequest versionRequest = HttpRequest.newBuilder() + .uri(URI.create(versionUrl)) + .GET() + .timeout(Duration.ofSeconds(5)) + .build(); + return httpClient.sendAsync(versionRequest, HttpResponse.BodyHandlers.ofString()); + }) + .whenComplete((result, exception) -> { + if (exception != null) { + LOGGER.error("An error occurred while fetching mappings file", exception); + ListenCommand.disable(); + } + }) + .thenApply(HttpResponse::body) + .thenCompose(versionBody -> { + JsonObject versionJson = JsonParser.parseString(versionBody).getAsJsonObject(); + String mappingsUrl = versionJson + .getAsJsonObject("downloads") + .getAsJsonObject("client_mappings") + .get("url").getAsString(); - HttpRequest mappingsRequest = HttpRequest.newBuilder() - .uri(URI.create(mappingsUrl)) - .GET() - .timeout(Duration.ofSeconds(5)) - .build(); - return httpClient.sendAsync(mappingsRequest, HttpResponse.BodyHandlers.ofString()); - }) - .thenApply(HttpResponse::body) - .thenApply(body -> { - try (StringReader reader = new StringReader(body)) { - MemoryMappingTree tree = new MemoryMappingTree(); - MappingReader.read(reader, MappingFormat.PROGUARD_FILE, tree); - return tree; + HttpRequest mappingsRequest = HttpRequest.newBuilder() + .uri(URI.create(mappingsUrl)) + .GET() + .timeout(Duration.ofSeconds(5)) + .build(); + return httpClient.sendAsync(mappingsRequest, HttpResponse.BodyHandlers.ofString()); + }) + .thenApply(HttpResponse::body) + .thenApply(body -> { + try (StringReader reader = new StringReader(body)) { + MemoryMappingTree tree = new MemoryMappingTree(); + MappingReader.read(reader, MappingFormat.PROGUARD_FILE, tree); + return tree; + } catch (IOException ex) { + LOGGER.error("Could not read ProGuard mappings file", ex); + ListenCommand.disable(); + throw new UncheckedIOException(ex); + } finally { + try (BufferedWriter writer = Files.newBufferedWriter(MAPPINGS_DIR.resolve(version + ".txt"), StandardOpenOption.CREATE)) { + writer.write(body); } catch (IOException ex) { - LOGGER.error("Could not read ProGuard mappings file", ex); - ListenCommand.disable(); - throw new UncheckedIOException(ex); - } finally { - try (BufferedWriter writer = Files.newBufferedWriter(MAPPINGS_DIR.resolve(version + ".txt"), StandardOpenOption.CREATE)) { - writer.write(body); - } catch (IOException ex) { - LOGGER.error("Could not write ProGuard mappings file", ex); - } + LOGGER.error("Could not write ProGuard mappings file", ex); } - }); - } + } + }); + } }); private static final int SRC_OFFICIAL = 0; private static final int DEST_OFFICIAL = 0; - private static final MemoryMappingTree officialIntermediaryNamed = Util.make(() -> { + private static final @Nullable MemoryMappingTree officialIntermediaryNamed = Util.make(() -> { try (InputStream stream = FabricLoader.class.getClassLoader().getResourceAsStream("mappings/mappings.tiny")) { if (stream == null) { throw new IOException("Could not find mappings.tiny");