fix parsing bug in chat component api

This commit is contained in:
Bixilon 2021-10-24 17:12:57 +02:00
parent 34f15d2baf
commit 2e9e20a5cf
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
5 changed files with 23 additions and 11 deletions

View File

@ -133,11 +133,21 @@ class BaseComponent : ChatComponent {
}
constructor(translator: Translator? = null, parent: TextComponent? = null, json: Map<String, Any>, 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<String>()?.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<String>()?.let {
val with: MutableList<Any> = mutableListOf()

View File

@ -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)

View File

@ -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

View File

@ -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)" }
}

View File

@ -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)" }
}
}