Add {Enum,Param,Struct,Varbit,Varp}Type implementations for 550

Signed-off-by: Graham <gpe@openrs2.org>
pull/132/head
Graham 3 years ago
parent 21cf2526c5
commit 849b083400
  1. 28
      cache-550/build.gradle.kts
  2. 100
      cache-550/src/main/kotlin/org/openrs2/cache/config/enum/EnumType.kt
  3. 15
      cache-550/src/main/kotlin/org/openrs2/cache/config/enum/EnumTypeList.kt
  4. 42
      cache-550/src/main/kotlin/org/openrs2/cache/config/param/ParamType.kt
  5. 16
      cache-550/src/main/kotlin/org/openrs2/cache/config/param/ParamTypeList.kt
  6. 57
      cache-550/src/main/kotlin/org/openrs2/cache/config/struct/StructType.kt
  7. 16
      cache-550/src/main/kotlin/org/openrs2/cache/config/struct/StructTypeList.kt
  8. 32
      cache-550/src/main/kotlin/org/openrs2/cache/config/varbit/VarbitType.kt
  9. 15
      cache-550/src/main/kotlin/org/openrs2/cache/config/varbit/VarbitTypeList.kt
  10. 24
      cache-550/src/main/kotlin/org/openrs2/cache/config/varp/VarpType.kt
  11. 16
      cache-550/src/main/kotlin/org/openrs2/cache/config/varp/VarpTypeList.kt
  12. 1
      settings.gradle.kts

@ -0,0 +1,28 @@
plugins {
`maven-publish`
kotlin("jvm")
}
dependencies {
api(projects.cache)
implementation(projects.buffer)
implementation(projects.util)
}
publishing {
publications.create<MavenPublication>("maven") {
from(components["java"])
pom {
packaging = "jar"
name.set("OpenRS2 Cache (Build 550)")
description.set(
"""
A library for encoding and decoding files contained within the
RuneScape cache. It is only compatible with build 550.
""".trimIndent()
)
}
}
}

@ -0,0 +1,100 @@
package org.openrs2.cache.config.enum
import io.netty.buffer.ByteBuf
import it.unimi.dsi.fastutil.ints.Int2IntMap
import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap
import it.unimi.dsi.fastutil.ints.Int2ObjectMap
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import org.openrs2.buffer.readString
import org.openrs2.buffer.writeString
import org.openrs2.cache.config.ConfigType
import org.openrs2.util.charset.Cp1252Charset
public class EnumType(id: Int) : ConfigType(id) {
public var keyType: Char = 0.toChar()
public var valueType: Char = 0.toChar()
public var defaultString: String = "null"
public var defaultInt: Int = 0
// TODO(gpe): methods for manipulating the maps
private var strings: Int2ObjectMap<String>? = null
private var ints: Int2IntMap? = null
override fun read(buf: ByteBuf, code: Int) {
when (code) {
1 -> keyType = Cp1252Charset.decode(buf.readByte())
2 -> valueType = Cp1252Charset.decode(buf.readByte())
3 -> defaultString = buf.readString()
4 -> defaultInt = buf.readInt()
5 -> {
val size = buf.readUnsignedShort()
val strings = Int2ObjectOpenHashMap<String>()
for (i in 0 until size) {
val key = buf.readInt()
strings[key] = buf.readString()
}
this.strings = strings
}
6 -> {
val size = buf.readUnsignedShort()
val ints = Int2IntOpenHashMap()
for (i in 0 until size) {
val key = buf.readInt()
ints[key] = buf.readInt()
}
this.ints = ints
}
else -> throw IllegalArgumentException("Unsupported config code: $code")
}
}
override fun write(buf: ByteBuf) {
if (keyType.code != 0) {
buf.writeByte(1)
buf.writeByte(Cp1252Charset.encode(keyType).toInt())
}
if (valueType.code != 0) {
buf.writeByte(2)
buf.writeByte(Cp1252Charset.encode(valueType).toInt())
}
if (defaultString != "null") {
buf.writeByte(3)
buf.writeString(defaultString)
}
if (defaultInt != 0) {
buf.writeByte(4)
buf.writeInt(defaultInt)
}
val strings = strings
if (strings != null && strings.isNotEmpty()) {
buf.writeByte(5)
buf.writeShort(strings.size)
for ((key, value) in strings.int2ObjectEntrySet()) {
buf.writeInt(key)
buf.writeString(value)
}
}
val ints = ints
if (ints != null && ints.isNotEmpty()) {
buf.writeByte(6)
buf.writeShort(ints.size)
for ((key, value) in ints.int2IntEntrySet()) {
buf.writeInt(key)
buf.writeInt(value)
}
}
buf.writeByte(0)
}
}

@ -0,0 +1,15 @@
package org.openrs2.cache.config.enum
import org.openrs2.cache.Cache
import org.openrs2.cache.Js5Archive
import org.openrs2.cache.config.ArchiveConfigTypeList
public class EnumTypeList(cache: Cache) : ArchiveConfigTypeList<EnumType>(
cache,
archive = Js5Archive.CONFIG_ENUM,
fileBits = 8
) {
override fun allocate(id: Int): EnumType {
return EnumType(id)
}
}

@ -0,0 +1,42 @@
package org.openrs2.cache.config.param
import io.netty.buffer.ByteBuf
import org.openrs2.buffer.readString
import org.openrs2.buffer.writeString
import org.openrs2.cache.config.ConfigType
import org.openrs2.util.charset.Cp1252Charset
public class ParamType(id: Int) : ConfigType(id) {
public var type: Char = 0.toChar()
public var defaultInt: Int = 0
public var defaultString: String? = null
override fun read(buf: ByteBuf, code: Int) {
when (code) {
1 -> type = Cp1252Charset.decode(buf.readByte())
2 -> defaultInt = buf.readInt()
5 -> defaultString = buf.readString()
else -> throw IllegalArgumentException("Unsupported config code: $code")
}
}
override fun write(buf: ByteBuf) {
if (type.code != 0) {
buf.writeByte(1)
buf.writeByte(Cp1252Charset.encode(type).toInt())
}
if (defaultInt != 0) {
buf.writeByte(2)
buf.writeInt(defaultInt)
}
val defaultString = defaultString
if (defaultString != null) {
buf.writeByte(5)
buf.writeString(defaultString)
}
buf.writeByte(0)
}
}

@ -0,0 +1,16 @@
package org.openrs2.cache.config.param
import org.openrs2.cache.Cache
import org.openrs2.cache.Js5Archive
import org.openrs2.cache.Js5ConfigGroup
import org.openrs2.cache.config.GroupConfigTypeList
public class ParamTypeList(cache: Cache) : GroupConfigTypeList<ParamType>(
cache,
archive = Js5Archive.CONFIG,
group = Js5ConfigGroup.PARAMTYPE
) {
override fun allocate(id: Int): ParamType {
return ParamType(id)
}
}

@ -0,0 +1,57 @@
package org.openrs2.cache.config.struct
import io.netty.buffer.ByteBuf
import it.unimi.dsi.fastutil.ints.Int2ObjectMap
import it.unimi.dsi.fastutil.ints.Int2ObjectOpenHashMap
import org.openrs2.buffer.readString
import org.openrs2.buffer.writeString
import org.openrs2.cache.config.ConfigType
public class StructType(id: Int) : ConfigType(id) {
// TODO(gpe): methods for manipulating the map
private val params: Int2ObjectMap<Any> = Int2ObjectOpenHashMap()
override fun read(buf: ByteBuf, code: Int) {
when (code) {
249 -> {
val size = buf.readUnsignedByte().toInt()
for (i in 0 until size) {
val string = buf.readBoolean()
val id = buf.readUnsignedMedium()
if (string) {
params[id] = buf.readString()
} else {
params[id] = buf.readInt()
}
}
}
else -> throw IllegalArgumentException("Unsupported config code: $code")
}
}
override fun write(buf: ByteBuf) {
if (params.isNotEmpty()) {
buf.writeByte(249)
buf.writeByte(params.size)
for ((id, value) in params.int2ObjectEntrySet()) {
when (value) {
is String -> {
buf.writeBoolean(true)
buf.writeMedium(id)
buf.writeString(value)
}
is Int -> {
buf.writeBoolean(false)
buf.writeMedium(id)
buf.writeInt(value)
}
else -> throw IllegalStateException()
}
}
}
buf.writeByte(0)
}
}

@ -0,0 +1,16 @@
package org.openrs2.cache.config.struct
import org.openrs2.cache.Cache
import org.openrs2.cache.Js5Archive
import org.openrs2.cache.Js5ConfigGroup
import org.openrs2.cache.config.GroupConfigTypeList
public class StructTypeList(cache: Cache) : GroupConfigTypeList<StructType>(
cache,
archive = Js5Archive.CONFIG,
group = Js5ConfigGroup.STRUCTTYPE
) {
override fun allocate(id: Int): StructType {
return StructType(id)
}
}

@ -0,0 +1,32 @@
package org.openrs2.cache.config.varbit
import io.netty.buffer.ByteBuf
import org.openrs2.cache.config.ConfigType
public class VarbitType(id: Int) : ConfigType(id) {
public var baseVar: Int = 0
public var startBit: Int = 0
public var endBit: Int = 0
override fun read(buf: ByteBuf, code: Int) {
when (code) {
1 -> {
baseVar = buf.readUnsignedShort()
startBit = buf.readUnsignedByte().toInt()
endBit = buf.readUnsignedByte().toInt()
}
else -> throw IllegalArgumentException("Unsupported config code: $code")
}
}
override fun write(buf: ByteBuf) {
if (baseVar != 0 || startBit != 0 || endBit != 0) {
buf.writeByte(1)
buf.writeShort(baseVar)
buf.writeByte(startBit)
buf.writeByte(endBit)
}
buf.writeByte(0)
}
}

@ -0,0 +1,15 @@
package org.openrs2.cache.config.varbit
import org.openrs2.cache.Cache
import org.openrs2.cache.Js5Archive
import org.openrs2.cache.config.ArchiveConfigTypeList
public class VarbitTypeList(cache: Cache) : ArchiveConfigTypeList<VarbitType>(
cache,
archive = Js5Archive.CONFIG_VAR_BIT,
fileBits = 10
) {
override fun allocate(id: Int): VarbitType {
return VarbitType(id)
}
}

@ -0,0 +1,24 @@
package org.openrs2.cache.config.varp
import io.netty.buffer.ByteBuf
import org.openrs2.cache.config.ConfigType
public class VarpType(id: Int) : ConfigType(id) {
public var clientCode: Int = 0
override fun read(buf: ByteBuf, code: Int) {
when (code) {
5 -> clientCode = buf.readUnsignedShort()
else -> throw IllegalArgumentException("Unsupported config code: $code")
}
}
override fun write(buf: ByteBuf) {
if (clientCode != 0) {
buf.writeByte(5)
buf.writeShort(clientCode)
}
buf.writeByte(0)
}
}

@ -0,0 +1,16 @@
package org.openrs2.cache.config.varp
import org.openrs2.cache.Cache
import org.openrs2.cache.Js5Archive
import org.openrs2.cache.Js5ConfigGroup
import org.openrs2.cache.config.GroupConfigTypeList
public class VarpTypeList(cache: Cache) : GroupConfigTypeList<VarpType>(
cache,
archive = Js5Archive.CONFIG,
group = Js5ConfigGroup.VAR_PLAYER
) {
override fun allocate(id: Int): VarpType {
return VarpType(id)
}
}

@ -31,6 +31,7 @@ include(
"buffer",
"buffer-generator",
"cache",
"cache-550",
"cli",
"compress",
"compress-cli",

Loading…
Cancel
Save