properly serialize message types in 1.19

This commit is contained in:
Bixilon 2022-11-23 14:17:52 +01:00
parent 2a55f289c0
commit 27f146c317
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4

View File

@ -3,6 +3,7 @@ package de.bixilon.pixlyzer.generator.generators
import de.bixilon.pixlyzer.generator.Generator
import de.bixilon.pixlyzer.util.ReflectionUtil.getClass
import de.bixilon.pixlyzer.util.ReflectionUtil.getField
import de.bixilon.pixlyzer.util.ReflectionUtil.variable
import de.bixilon.pixlyzer.util.RegistryUtil
import de.bixilon.pixlyzer.util.Util
import de.bixilon.pixlyzer.util.Util.JSON_MAP_TYPE
@ -34,18 +35,31 @@ object MessageTypeGenerator : Generator(
val json = compound()
json["id"] = registry.getRawId(type)
getField(messageTypeClass, "chat")?.get(type)?.serializeChat()?.let { json["chat"] = it }
getField(messageTypeClass, "narration")?.get(type)?.nullCast<Any>()?.serializeDecoration()?.let { json["narration"] = it }
getField(messageTypeClass, "chat")?.get(type)?.getOptional()?.getDecoration()?.serializeChat()?.let { json["chat"] = it }
getField(messageTypeClass, "narration")?.get(type)?.getOptional()?.getDecoration()?.serializeDecoration()?.let { json["narration"] = it }
this.data[identifier.toString()] = json
}
}
fun Any.getOptional(): Any? {
if (this is Optional<*>) {
return if (this.isPresent) this.get() else null
}
return this
}
fun Any.getDecoration(): Any? {
this.variable<Any>("decoration")?.let { return it.getOptional() }
return this
}
private fun Any.serializeChat(): Map<String, Any?>? {
if (this::class.java.simpleName == "Decoration") {
return this.serializeDecoration()
}
return getField(this::class.java, "decoration")?.get(this)?.nullCast<Optional<Any>>()?.get()?.serializeDecoration()
var value = this.getOptional() ?: return null
return getField(value::class.java, "decoration")?.get(value)?.nullCast<Optional<Any>>()?.get()?.serializeDecoration()
}
fun Any.serializeDecoration(): Map<String, Any?> {