Open-source multiplayer game server compatible with the RuneScape client
https://www.openrs2.org/
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
44 lines
1.3 KiB
44 lines
1.3 KiB
package dev.openrs2.deob.remap
|
|
|
|
import dev.openrs2.asm.classpath.ExtendedRemapper
|
|
import dev.openrs2.asm.classpath.Library
|
|
|
|
private val BOUNDARY_CHARS = charArrayOf('/', '!')
|
|
|
|
fun String.splitAtLibraryBoundary(): Pair<String, String> {
|
|
val index = indexOf('!')
|
|
return Pair(substring(0, index), substring(index + 1))
|
|
}
|
|
|
|
fun String.getLibraryAndPackageName(): String {
|
|
return substring(0, lastIndexOfAny(BOUNDARY_CHARS) + 1)
|
|
}
|
|
|
|
fun String.getClassName(): String {
|
|
return substring(lastIndexOfAny(BOUNDARY_CHARS) + 1)
|
|
}
|
|
|
|
class ClassNamePrefixRemapper(vararg libraries: Library) : ExtendedRemapper() {
|
|
private val mapping = mutableMapOf<String, String>()
|
|
|
|
init {
|
|
for (library in libraries) {
|
|
for (clazz in library) {
|
|
require(!clazz.name.contains('!')) {
|
|
"Input class name contains !, which conflicts with library separator"
|
|
}
|
|
mapping.putIfAbsent(clazz.name, "${library.name}!${clazz.name}")
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun map(internalName: String): String {
|
|
return mapping.getOrDefault(internalName, internalName)
|
|
}
|
|
}
|
|
|
|
object StripClassNamePrefixRemapper : ExtendedRemapper() {
|
|
override fun map(internalName: String): String {
|
|
return internalName.substring(internalName.indexOf('!') + 1)
|
|
}
|
|
}
|
|
|