From 2e9e20a5cf6de9f9e9ca0a80e4da12b2bcb2cf42 Mon Sep 17 00:00:00 2001 From: Bixilon Date: Sun, 24 Oct 2021 17:12:57 +0200 Subject: [PATCH] fix parsing bug in chat component api --- .../minosoft/data/text/BaseComponent.kt | 20 +++++++++++-------- .../minosoft/data/text/TextComponent.kt | 2 +- .../elements/hotbar/HotbarHealthElement.kt | 3 +-- .../packets/s2c/play/HealthSetS2CP.kt | 5 +++++ .../protocol/packets/s2c/play/ParticleS2CP.kt | 4 ++++ 5 files changed, 23 insertions(+), 11 deletions(-) diff --git a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt index e2cee9e63..7b184b52a 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/BaseComponent.kt @@ -133,11 +133,21 @@ class BaseComponent : ChatComponent { } constructor(translator: Translator? = null, parent: TextComponent? = null, json: Map, restrictedMode: Boolean = false) { - val currentParent: TextComponent? + var currentParent: TextComponent? = null var currentText = "" + + fun parseExtra() { + json["extra"]?.listCast()?.let { + for (data in it) { + parts += ChatComponent.of(data, translator, currentParent) + } + } + } + json["text"]?.nullCast()?.let { if (it.indexOf(ProtocolDefinition.TEXT_COMPONENT_SPECIAL_PREFIX_CHAR) != -1) { this += ChatComponent.of(it, translator, parent) + parseExtra() return } currentText = it @@ -170,13 +180,7 @@ class BaseComponent : ChatComponent { } currentParent = textComponent - - json["extra"]?.listCast()?.let { - for (data in it) { - parts += ChatComponent.of(data, translator, currentParent) - } - } - + parseExtra() json["translate"]?.nullCast()?.let { val with: MutableList = mutableListOf() diff --git a/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt index beb46be02..edb7cb8fe 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/TextComponent.kt @@ -37,7 +37,7 @@ open class TextComponent( var clickEvent: ClickEvent? = null, var hoverEvent: HoverEvent? = null, ) : ChatComponent, TextStyle { - override var message: String = message?.toString() ?: "null" + override var message: String = message?.toString()?.replace(ProtocolDefinition.TEXT_COMPONENT_SPECIAL_PREFIX_CHAR, '&') ?: "null" fun obfuscate(): TextComponent { formatting.add(PreChatFormattingCodes.OBFUSCATED) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/hotbar/HotbarHealthElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/hotbar/HotbarHealthElement.kt index 72e6416b7..ff6cf1da3 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/hotbar/HotbarHealthElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/hotbar/HotbarHealthElement.kt @@ -131,7 +131,6 @@ class HotbarHealthElement(hudRenderer: HUDRenderer) : Element(hudRenderer), Poll atlasManager["minecraft:hardcore_half_frozen_heart"], ), ) - private val whiteHeartContainer = atlasManager["minecraft:white_heart_container"]!! private val blackHeartContainer = atlasManager["minecraft:black_heart_container"]!! private var hardcode = false @@ -150,7 +149,7 @@ class HotbarHealthElement(hudRenderer: HUDRenderer) : Element(hudRenderer), Poll private var rows = 0 override fun forceRender(offset: Vec2i, z: Int, consumer: GUIVertexConsumer, options: GUIVertexOptions?): Int { - // ToDo: Damage animation, regeneration, caching, stacking + // ToDo: Damage animation, regeneration, caching, stacking (and eventual text replace) for (heart in 0 until totalMaxHearts) { val row = heart / HEARTS_PER_ROW val column = heart % HEARTS_PER_ROW diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthSetS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthSetS2CP.kt index bc633f7c6..c2b095571 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthSetS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/HealthSetS2CP.kt @@ -44,6 +44,11 @@ class HealthSetS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } } + override fun check(connection: PlayConnection) { + check(hunger in 0..20) + check(saturation in 0.0..20.0) + } + override fun log() { Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "Health set (hp=$hp, hunger=$hunger, saturation=$saturation)" } } diff --git a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt index 94742085f..ed5651b0f 100644 --- a/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt +++ b/src/main/java/de/bixilon/minosoft/protocol/packets/s2c/play/ParticleS2CP.kt @@ -12,6 +12,7 @@ */ package de.bixilon.minosoft.protocol.packets.s2c.play +import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.data.registries.particle.ParticleType import de.bixilon.minosoft.data.registries.particle.data.ParticleData import de.bixilon.minosoft.modding.event.events.ParticleSpawnEvent @@ -54,6 +55,9 @@ class ParticleS2CP(buffer: PlayInByteBuffer) : PlayS2CPacket() { } override fun log() { + if (Minosoft.config.config.general.reduceProtocolLog) { + return + } Log.log(LogMessageType.NETWORK_PACKETS_IN, level = LogLevels.VERBOSE) { "Particle (type=$type, longDistance=$longDistance, position=$position, offset=$offset, speed=$speed, count=$count, data=$data)" } } }