From e26d02af2b5a96d07c79439c04be0c0d6cf9a70c Mon Sep 17 00:00:00 2001 From: Hileb <107909747+Ecdcaeb@users.noreply.github.com> Date: Sun, 2 Aug 2026 20:54:15 +0800 Subject: [PATCH 1/2] Add getIds method to MetadataCollection --- .../net/minecraftforge/fml/common/MetadataCollection.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/main/java/net/minecraftforge/fml/common/MetadataCollection.java b/src/main/java/net/minecraftforge/fml/common/MetadataCollection.java index c2a03cb38..333901a66 100644 --- a/src/main/java/net/minecraftforge/fml/common/MetadataCollection.java +++ b/src/main/java/net/minecraftforge/fml/common/MetadataCollection.java @@ -24,6 +24,7 @@ import java.io.InputStreamReader; import java.nio.charset.StandardCharsets; import java.util.Map; +import java.util.Set; import net.minecraftforge.fml.common.versioning.ArtifactVersion; import net.minecraftforge.fml.common.versioning.VersionParser; @@ -106,6 +107,10 @@ public ModMetadata getMetadataForId(String modId, Map extraData) return metadatas.get(modId); } + public Set getIds() { + return metadatas.keySet(); + } + public static class ArtifactVersionAdapter extends TypeAdapter { From 888d936957fae864388d738660d0ce7a2a33955f Mon Sep 17 00:00:00 2001 From: Hileb <107909747+Ecdcaeb@users.noreply.github.com> Date: Sun, 2 Aug 2026 20:59:49 +0800 Subject: [PATCH 2/2] Simplify mcmod.info parsing logic Refactored parseMcmodInfo to use MetadataCollection for ID extraction. --- .../discovery/CleanroomModDiscoverer.java | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/src/main/java/com/cleanroommc/discovery/CleanroomModDiscoverer.java b/src/main/java/com/cleanroommc/discovery/CleanroomModDiscoverer.java index 44802811f..056838c11 100644 --- a/src/main/java/com/cleanroommc/discovery/CleanroomModDiscoverer.java +++ b/src/main/java/com/cleanroommc/discovery/CleanroomModDiscoverer.java @@ -593,22 +593,7 @@ private boolean recordMod(String modId, File source) { private List parseMcmodInfo(File file, Gson gson, InputStream stream) { try { - List ids = new ArrayList<>(); - JsonElement root = gson.fromJson(new InputStreamReader(stream, StandardCharsets.UTF_8), JsonElement.class); - if (root instanceof JsonArray rootArray) { - for (JsonElement element : rootArray) { - if (element instanceof JsonObject mod && mod.has("modid")) { - ids.add(mod.get("modid").getAsString()); - } - } - } else if (root instanceof JsonObject rootObject && rootObject.get("modList") instanceof JsonArray modList) { - for (JsonElement element : modList) { - if (element instanceof JsonObject mod && mod.has("modid")) { - ids.add(mod.get("modid").getAsString()); - } - } - } - return ids; + return new ArrayList<>(MetadataCollection.from(stream, file.getName()).getIds()); } catch (Throwable t) { CleanroomLog.get().error("Failed to parse mcmod.info for {}", file.getName(), t); } finally {