Skip to content

Commit 2130ed8

Browse files
committed
Fix mcp descriptors
1 parent b1e9ce2 commit 2130ed8

File tree

5 files changed

+30
-44
lines changed

5 files changed

+30
-44
lines changed

src/main/kotlin/me/shedaniel/linkie/Mappings.kt

+3-26
Original file line numberDiff line numberDiff line change
@@ -133,13 +133,11 @@ suspend inline fun buildMappings(
133133
name: String,
134134
fillFieldDesc: Boolean = true,
135135
fillMethodDesc: Boolean = true,
136-
expendIntermediaryToMapped: Boolean = false,
137136
crossinline builder: suspend MappingsBuilder.() -> Unit,
138137
): MappingsContainer =
139138
MappingsBuilder(
140139
fillFieldDesc,
141140
fillMethodDesc,
142-
expendIntermediaryToMapped,
143141
container = MappingsContainer(version, name = name)
144142
).also {
145143
builder(it)
@@ -148,15 +146,11 @@ suspend inline fun buildMappings(
148146
class MappingsBuilder(
149147
val fillFieldDesc: Boolean,
150148
val fillMethodDesc: Boolean,
151-
val expendIntermediaryToMapped: Boolean,
152-
var doNotFill: Boolean = false,
153149
var container: MappingsContainer,
154150
) {
155151
val pool = StringPool()
156152

157153
fun build(): MappingsContainer = container.also {
158-
fill()
159-
160154
fun clean(entry: MappingsEntry) {
161155
entry.intermediaryName = pool[entry.intermediaryName]
162156
entry.mappedName = pool[entry.mappedName]
@@ -178,22 +172,6 @@ class MappingsBuilder(
178172
}
179173
}
180174

181-
fun fill() {
182-
if (doNotFill) return
183-
184-
if (expendIntermediaryToMapped) {
185-
container.classes.forEach { (_, clazz) ->
186-
clazz.mappedName = clazz.mappedName ?: clazz.intermediaryName
187-
clazz.fields.forEach { field ->
188-
field.mappedName = field.mappedName ?: field.intermediaryName
189-
}
190-
clazz.methods.forEach { method ->
191-
method.mappedName = method.mappedName ?: method.intermediaryName
192-
}
193-
}
194-
}
195-
}
196-
197175
fun source(mappingSource: MappingSource?) {
198176
container.mappingSource = mappingSource
199177
}
@@ -206,10 +184,6 @@ class MappingsBuilder(
206184
container = operator(container)
207185
}
208186

209-
fun doNotFill(doNotFill: Boolean = true) {
210-
this.doNotFill = doNotFill
211-
}
212-
213187
fun clazz(
214188
intermediaryName: String,
215189
obfName: String? = null,
@@ -238,11 +212,13 @@ fun MappingsContainer.rewireIntermediaryFrom(obf2intermediary: MappingsContainer
238212
classes.values.removeIf { clazz ->
239213
val replacement = classO2I[clazz.obfName.merged]
240214
if (replacement != null) {
215+
clazz.mappedName = clazz.intermediaryName
241216
clazz.intermediaryName = replacement.intermediaryName
242217

243218
clazz.methods.removeIf { method ->
244219
val replacementMethod = replacement.getMethodByObf(obf2intermediary, method.obfMergedName!!, method.getObfMergedDesc(this))
245220
if (replacementMethod != null) {
221+
method.mappedName = method.intermediaryName
246222
method.intermediaryName = replacementMethod.intermediaryName
247223
method.intermediaryDesc = replacementMethod.intermediaryDesc
248224
}
@@ -251,6 +227,7 @@ fun MappingsContainer.rewireIntermediaryFrom(obf2intermediary: MappingsContainer
251227
clazz.fields.removeIf { field ->
252228
val replacementField = replacement.getFieldByObfName(field.obfMergedName!!)
253229
if (replacementField != null) {
230+
field.mappedName = field.intermediaryName
254231
field.intermediaryName = replacementField.intermediaryName
255232
field.intermediaryDesc = replacementField.intermediaryDesc
256233
}

src/main/kotlin/me/shedaniel/linkie/Namespace.kt

+1-2
Original file line numberDiff line numberDiff line change
@@ -269,10 +269,9 @@ abstract class Namespace(val id: String) {
269269
name: String,
270270
fillFieldDesc: Boolean = true,
271271
fillMethodDesc: Boolean = true,
272-
expendIntermediaryToMapped: Boolean = false,
273272
crossinline builder: suspend MappingsBuilder.() -> Unit,
274273
) {
275-
mappings(me.shedaniel.linkie.buildMappings(version, name, fillFieldDesc, fillMethodDesc, expendIntermediaryToMapped, builder))
274+
mappings(me.shedaniel.linkie.buildMappings(version, name, fillFieldDesc, fillMethodDesc, builder))
276275
}
277276

278277
fun version(version: String) {

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

+19-7
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,21 @@ import kotlinx.serialization.json.jsonArray
77
import kotlinx.serialization.json.jsonObject
88
import kotlinx.serialization.json.jsonPrimitive
99
import me.shedaniel.linkie.MappingsContainer
10+
import me.shedaniel.linkie.Method
1011
import me.shedaniel.linkie.Namespace
12+
import me.shedaniel.linkie.obfMergedName
1113
import me.shedaniel.linkie.utils.Version
1214
import me.shedaniel.linkie.utils.filterNotBlank
1315
import me.shedaniel.linkie.utils.lines
1416
import me.shedaniel.linkie.utils.readText
17+
import me.shedaniel.linkie.utils.remapDescriptor
1518
import me.shedaniel.linkie.utils.toAsyncZip
1619
import me.shedaniel.linkie.utils.toVersion
1720
import me.shedaniel.linkie.utils.tryToVersion
1821
import java.net.URL
1922

2023
object MCPNamespace : Namespace("mcp") {
21-
const val tmpMcpVersionsUrl = "https://gist.githubusercontent.com/shedaniel/afc2748c6d5dd827d4cde161a49687ec/raw/037c5ac977da967e0aab8766b78ea425bec1e8f6/mcp_versions.json"
24+
const val tmpMcpVersionsUrl = "https://gist.githubusercontent.com/shedaniel/afc2748c6d5dd827d4cde161a49687ec/raw/mcp_versions.json"
2225
private val mcpConfigSnapshots = mutableMapOf<Version, MutableList<String>>()
2326
private val newMcpVersions = mutableMapOf<Version, MCPVersion>()
2427

@@ -134,21 +137,25 @@ object MCPNamespace : Namespace("mcp") {
134137
val namedDesc = split[3]
135138
getClass(namedClass)?.apply {
136139
getOrCreateMethod(intermediary, namedDesc).also { method ->
137-
method.obfName.merged = obf
140+
method.obfMergedName = obf
138141
}
139142
}
140143
}
141144
}
142145

143146
private fun MappingsContainer.loadTsrgFromInputStream(lines: Sequence<String>) {
147+
val toMap = mutableMapOf<Method, String>()
148+
val obfMap = mutableMapOf<String, String>()
149+
var i = 0
144150
var lastClass: String? = null
145151
lines.filterNotBlank().forEach {
146152
val split = it.trimIndent().split(" ")
147153
if (!it.startsWith('\t')) {
148154
val obf = split[0]
149155
val named = split[1]
150156
getOrCreateClass(named).apply {
151-
obfName.merged = obf
157+
obfMergedName = obf
158+
obfMap[obf] = named
152159
}
153160
lastClass = named
154161
} else {
@@ -158,23 +165,28 @@ object MCPNamespace : Namespace("mcp") {
158165
val obf = split[0]
159166
val tsrg = split[1]
160167
clazz.apply {
161-
getOrCreateField(tsrg, "").apply {
162-
obfName.merged = obf
168+
getOrCreateField(tsrg, "").also { field ->
169+
field.obfMergedName = obf
163170
}
164171
}
165172
}
166173
3 -> {
167174
val obf = split[0]
175+
val obfDesc = split[1]
168176
val tsrg = split[2]
169177
clazz.apply {
170-
getOrCreateMethod(tsrg, "").also { method ->
171-
method.obfName.merged = obf
178+
getOrCreateMethod(tsrg, (i++).toString()).also { method ->
179+
toMap[method] = obfDesc
180+
method.obfMergedName = obf
172181
}
173182
}
174183
}
175184
}
176185
}
177186
}
187+
toMap.forEach { (method, obfDesc) ->
188+
method.intermediaryDesc = obfDesc.remapDescriptor { obfClassName -> obfMap[obfClassName] ?: obfClassName }
189+
}
178190
}
179191

180192
suspend fun MappingsContainer.loadMCPFromURLZip(url: URL) {

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

+2-6
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ object MojangNamespace : Namespace("mojang") {
2626
suspend fun getName(version: String): String = if (YarnNamespace.getProvider(version).isEmpty()) "Mojang" else "Mojang (via Intermediary)"
2727

2828
registerSupplier(simpleCachedSupplier("1.14.4") {
29-
buildMappings(it, getName(it), expendIntermediaryToMapped = true) {
29+
buildMappings(it, getName(it)) {
3030
readMojangMappings(
3131
client = "https://launcher.mojang.com/v1/objects/c0c8ef5131b7beef2317e6ad80ebcd68c4fb60fa/client.txt",
3232
server = "https://launcher.mojang.com/v1/objects/448ccb7b455f156bb5cb9cdadd7f96cd68134dbd/server.txt"
@@ -35,18 +35,16 @@ object MojangNamespace : Namespace("mojang") {
3535

3636
val yarn = YarnNamespace.getProvider(it)
3737
if (!yarn.isEmpty()) {
38-
fill()
3938
edit {
4039
rewireIntermediaryFrom(yarn.get())
4140
}
42-
doNotFill()
4341
}
4442
}
4543
})
4644
registerSupplier(multipleCachedSupplier({ versionJsonMap.keys }, {
4745
if (!YarnNamespace.getProvider(it).isEmpty()) "$it-intermediary" else it
4846
}) {
49-
buildMappings(it, getName(it), expendIntermediaryToMapped = true) {
47+
buildMappings(it, getName(it)) {
5048
val url = URL(versionJsonMap[it]!!)
5149
val versionJson = json.parseToJsonElement(url.readText()).jsonObject
5250
val downloads = versionJson["downloads"]!!.jsonObject
@@ -58,11 +56,9 @@ object MojangNamespace : Namespace("mojang") {
5856

5957
val yarn = YarnNamespace.getProvider(it)
6058
if (!yarn.isEmpty()) {
61-
fill()
6259
edit {
6360
rewireIntermediaryFrom(yarn.get())
6461
}
65-
doNotFill()
6662
}
6763
}
6864
})

src/test/kotlin/me/shedaniel/linkie/core/tests/LinkieTest.kt

+5-3
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,9 @@ class LinkieTest {
6060
Namespaces.init(LinkieConfig.DEFAULT.copy(namespaces = listOf(MCPNamespace)))
6161
delay(2000)
6262
while (MCPNamespace.reloading) delay(100)
63-
assertEquals("1.16.3", MCPNamespace.getDefaultVersion())
64-
MCPNamespace.getDefaultProvider().get()
63+
assertEquals("1.16.5", MCPNamespace.getDefaultVersion())
64+
val container = MCPNamespace.getDefaultProvider().get()
65+
container
6566
}
6667
}
6768

@@ -72,7 +73,8 @@ class LinkieTest {
7273
delay(2000)
7374
while (MojangNamespace.reloading) delay(100)
7475
assertEquals("1.16.5", MojangNamespace.getDefaultVersion())
75-
MojangNamespace.getDefaultProvider().get()
76+
val container = MojangNamespace.getDefaultProvider().get()
77+
container
7678
}
7779
}
7880

0 commit comments

Comments
 (0)