Skip to content

Commit 3d30b13

Browse files
committed
Add support for MCP params
1 parent 486b978 commit 3d30b13

File tree

1 file changed

+36
-9
lines changed

1 file changed

+36
-9
lines changed

src/main/kotlin/me/shedaniel/linkie/namespaces/MCPNamespace.kt

+36-9
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import kotlinx.serialization.json.jsonObject
88
import kotlinx.serialization.json.jsonPrimitive
99
import me.shedaniel.linkie.MappingsBuilder
1010
import me.shedaniel.linkie.MappingsSource
11+
import me.shedaniel.linkie.MethodArg
1112
import me.shedaniel.linkie.Namespace
1213
import me.shedaniel.linkie.parser.apply
1314
import me.shedaniel.linkie.parser.srg
@@ -29,13 +30,15 @@ object MCPNamespace : Namespace("mcp") {
2930

3031
buildMappings(name = "MCP") {
3132
val latestSnapshot = mcpConfigSnapshots[it.toVersion()]?.maxOrNull()!!
32-
source(if (it.toVersion() >= Version(1, 13)) {
33-
loadTsrgFromURLZip(URL("https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_config/$it/mcp_config-$it.zip"))
34-
MappingsSource.MCP_TSRG
35-
} else {
36-
loadSrgFromURLZip(URL("https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp/$it/mcp-$it-srg.zip"))
37-
MappingsSource.MCP_SRG
38-
})
33+
source(
34+
if (it.toVersion() >= Version(1, 13)) {
35+
loadTsrgFromURLZip(URL("https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_config/$it/mcp_config-$it.zip"))
36+
MappingsSource.MCP_TSRG
37+
} else {
38+
loadSrgFromURLZip(URL("https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp/$it/mcp-$it-srg.zip"))
39+
MappingsSource.MCP_SRG
40+
}
41+
)
3942
loadMCPFromURLZip(URL("https://maven.minecraftforge.net/de/oceanlabs/mcp/mcp_snapshot/$latestSnapshot-$it/mcp_snapshot-$latestSnapshot-$it.zip"))
4043
}
4144
}
@@ -95,14 +98,16 @@ object MCPNamespace : Namespace("mcp") {
9598
}
9699

97100
private fun MappingsBuilder.loadSrgFromInputStream(content: String) {
98-
apply(srg(content),
101+
apply(
102+
srg(content),
99103
obfMerged = "obf",
100104
intermediary = "srg",
101105
)
102106
}
103107

104108
private fun MappingsBuilder.loadTsrgFromInputStream(content: String) {
105-
apply(tsrg(content),
109+
apply(
110+
tsrg(content),
106111
obfMerged = "obf",
107112
intermediary = "srg",
108113
)
@@ -114,6 +119,7 @@ object MCPNamespace : Namespace("mcp") {
114119
when (path.split("/").lastOrNull()) {
115120
"fields.csv" -> loadMCPFieldsCSVFromInputStream(entry.bytes.lines())
116121
"methods.csv" -> loadMCPMethodsCSVFromInputStream(entry.bytes.lines())
122+
"params.csv" -> loadMCPParamsCSVFromInputStream(entry.bytes.lines())
117123
}
118124
}
119125
}
@@ -149,6 +155,27 @@ object MCPNamespace : Namespace("mcp") {
149155
}
150156
}
151157

158+
private fun MappingsBuilder.loadMCPParamsCSVFromInputStream(lines: Sequence<String>) {
159+
val map = mutableMapOf<String, MutableList<MethodArg>>()
160+
val paramRegex = """p_(\d+)_(\d+)_?""".toRegex()
161+
val funcRegex = """func_(\d+)_([^_]+)_?""".toRegex()
162+
lines.filterNotBlank().forEach {
163+
val split = it.split(',')
164+
val match = paramRegex.matchEntire(split[0]) ?: return@forEach
165+
map.getOrPut(match.groups[1]!!.value) { mutableListOf() }
166+
.add(MethodArg(match.groups[2]!!.value.toInt(), split[1]))
167+
}
168+
container.classes.forEach { (_, it) ->
169+
it.methods.forEach inner@{ method ->
170+
val match = funcRegex.matchEntire(method.intermediaryName) ?: return@inner
171+
map[match.groups[1]!!.value]?.apply {
172+
if (method.args == null) method.args = mutableListOf()
173+
method.args!!.addAll(this)
174+
}
175+
}
176+
}
177+
}
178+
152179
@Serializable
153180
data class MCPVersion(
154181
val name: String,

0 commit comments

Comments
 (0)