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.
 
 
 
 
openrs2/asm/src/main/kotlin/org/openrs2/asm/io/PackClassLibraryReader.kt

36 lines
1.1 KiB

package org.openrs2.asm.io
import io.netty.buffer.ByteBufAllocator
import jakarta.inject.Inject
import jakarta.inject.Singleton
import org.objectweb.asm.tree.ClassNode
import org.openrs2.asm.packclass.ConstantPool
import org.openrs2.asm.packclass.PackClass
import org.openrs2.buffer.use
import org.openrs2.cache.Js5Pack
import java.io.InputStream
@Singleton
public class PackClassLibraryReader @Inject constructor(
private val alloc: ByteBufAllocator
) : LibraryReader {
override fun read(input: InputStream): Iterable<ClassNode> {
Js5Pack.read(input, alloc).use { pack ->
// read constant pool
val constantPool = pack.read(PackClass.CONSTANT_POOL_GROUP, PackClass.CONSTANT_POOL_FILE).use { buf ->
ConstantPool.read(buf)
}
// read classes
val classes = mutableListOf<ClassNode>()
for (entry in pack.list(PackClass.CLASS_GROUP)) {
pack.read(PackClass.CLASS_GROUP, entry.id).use { buf ->
classes += PackClass.read(buf, constantPool)
}
}
return classes
}
}
}