diff --git a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MessageTypeGenerator.kt b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MessageTypeGenerator.kt index e9186dc..1da0be3 100644 --- a/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MessageTypeGenerator.kt +++ b/src/main/kotlin/de/bixilon/pixlyzer/generator/generators/MessageTypeGenerator.kt @@ -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()?.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("decoration")?.let { return it.getOptional() } + return this + } + private fun Any.serializeChat(): Map? { if (this::class.java.simpleName == "Decoration") { return this.serializeDecoration() } - return getField(this::class.java, "decoration")?.get(this)?.nullCast>()?.get()?.serializeDecoration() + var value = this.getOptional() ?: return null + return getField(value::class.java, "decoration")?.get(value)?.nullCast>()?.get()?.serializeDecoration() } fun Any.serializeDecoration(): Map {