diff --git a/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt index 9d7d91046..f65049404 100644 --- a/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt +++ b/src/main/java/de/bixilon/minosoft/data/text/ChatComponent.kt @@ -81,7 +81,7 @@ interface ChatComponent { fun cut(length: Int) companion object { - val EMPTY = TextComponent("") + val EMPTY = EmptyComponent @JvmOverloads fun of(raw: Any? = null, translator: Translator? = null, parent: TextComponent? = null, ignoreJson: Boolean = false, restrictedMode: Boolean = false): ChatComponent { diff --git a/src/main/java/de/bixilon/minosoft/data/text/EmptyComponent.kt b/src/main/java/de/bixilon/minosoft/data/text/EmptyComponent.kt new file mode 100644 index 000000000..ee33d7616 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/data/text/EmptyComponent.kt @@ -0,0 +1,33 @@ +/* + * Minosoft + * Copyright (C) 2020-2022 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.data.text + +import javafx.collections.ObservableList +import javafx.scene.Node + +object EmptyComponent : ChatComponent { + override val ansiColoredMessage: String = "" + override val legacyText: String = "" + override val message: String = "" + + override fun getJavaFXText(nodes: ObservableList): ObservableList = nodes + + override fun applyDefaultColor(color: RGBColor) = Unit + + override fun getTextAt(pointer: Int): TextComponent = throw IllegalArgumentException() + + override val length: Int get() = 0 + + override fun cut(length: Int) = Unit +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt index 278b45b38..ff24cdc0d 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/elements/text/TextElement.kt @@ -18,6 +18,7 @@ import de.bixilon.kutil.cast.CastUtil.unsafeNull import de.bixilon.kutil.primitive.BooleanUtil.decide import de.bixilon.minosoft.Minosoft import de.bixilon.minosoft.data.text.ChatComponent +import de.bixilon.minosoft.data.text.EmptyComponent import de.bixilon.minosoft.data.text.RGBColor import de.bixilon.minosoft.data.text.TextComponent import de.bixilon.minosoft.gui.rendering.RenderConstants @@ -111,7 +112,7 @@ open class TextElement( return } field = value - emptyMessage = value.message.isEmpty() + emptyMessage = value is EmptyComponent || value.message.isEmpty() val prefSize = Vec2i.EMPTY if (!emptyMessage) { val renderInfo = TextRenderInfo( diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt index 990268393..86251f050 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/gui/hud/elements/other/BreakProgressHUDElement.kt @@ -32,6 +32,7 @@ import de.bixilon.minosoft.util.KUtil.toResourceLocation class BreakProgressHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), LayoutedElement, Drawable { private val textElement = TextElement(guiRenderer, "").apply { parent = this@BreakProgressHUDElement } private val breakInteractionHandler = guiRenderer.renderWindow.inputHandler.interactionManager.`break` + private val previousProgress = -1.0 override val layoutOffset: Vec2i get() = Vec2i((guiRenderer.scaledSize.x / 2) + CrosshairHUDElement.CROSSHAIR_SIZE / 2 + 5, (guiRenderer.scaledSize.y - textElement.size.y) / 2) @@ -41,6 +42,9 @@ class BreakProgressHUDElement(guiRenderer: GUIRenderer) : Element(guiRenderer), override fun draw() { val breakProgress = breakInteractionHandler.breakProgress + if (this.previousProgress == breakProgress) { + return + } if (breakProgress <= 0 || breakProgress >= 1.0) { textElement.text = ChatComponent.EMPTY this.percent = -1