Skip to content

Commit

Permalink
fix(legacy): FontRenderer accepting null as text input. (CCBlueX#5655)
Browse files Browse the repository at this point in the history
  • Loading branch information
mems01 authored Feb 18, 2025
1 parent dd07a97 commit 0cba697
Showing 1 changed file with 20 additions and 11 deletions.
31 changes: 20 additions & 11 deletions src/main/java/net/ccbluex/liquidbounce/ui/font/GameFontRenderer.kt
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@ import java.awt.Color
import java.awt.Font

fun FontRenderer.drawCenteredString(
text: String, x: Float, y: Float, color: Int, shadow: Boolean
text: String?, x: Float, y: Float, color: Int, shadow: Boolean
) {
val drawX = x - getStringWidth(text) / 2f
if (shadow) {
Expand All @@ -32,7 +32,7 @@ fun FontRenderer.drawCenteredString(
}

fun FontRenderer.drawCenteredString(
text: String, x: Float, y: Float, color: Int
text: String?, x: Float, y: Float, color: Int
) {
val drawX = x - getStringWidth(text) / 2f
drawString(text, drawX.toInt(), y.toInt(), color)
Expand Down Expand Up @@ -73,7 +73,7 @@ class GameFontRenderer(
* Regular text draw (no shadow).
*/
fun drawString(
text: String, x: Float, y: Float, color: Int
text: String?, x: Float, y: Float, color: Int
): Int = drawString(text, x, y, color, shadow = false)

/**
Expand All @@ -82,7 +82,7 @@ class GameFontRenderer(
* - Main text in [color]
*/
fun drawStringFade(
text: String, x: Float, y: Float, color: Color
text: String?, x: Float, y: Float, color: Color
) {
val blackWithAlpha = Color(0, 0, 0, color.alpha).rgb
drawString(text, x + 0.7f, y + 0.7f, blackWithAlpha, shadow = false)
Expand All @@ -93,11 +93,11 @@ class GameFontRenderer(
* Overrides vanilla's drawStringWithShadow for compatibility.
*/
override fun drawStringWithShadow(
text: String, x: Float, y: Float, color: Int
text: String?, x: Float, y: Float, color: Int
): Int = drawString(text, x, y, color, shadow = true)

fun drawCenteredString(
text: String, x: Float, y: Float, color: Int, shadow: Boolean
text: String?, x: Float, y: Float, color: Int, shadow: Boolean
) {
val drawX = x - getStringWidth(text) / 2f
if (shadow) {
Expand All @@ -108,7 +108,7 @@ class GameFontRenderer(
}

fun drawCenteredString(
text: String, x: Float, y: Float, color: Int
text: String?, x: Float, y: Float, color: Int
) {
val drawX = x - getStringWidth(text) / 2f
drawString(text, drawX, y, color)
Expand All @@ -135,8 +135,12 @@ class GameFontRenderer(
* the text. Then we draw the real text with optional rainbow/gradient.
*/
override fun drawString(
text: String, x: Float, y: Float, color: Int, shadow: Boolean
text: String?, x: Float, y: Float, color: Int, shadow: Boolean
): Int {
if (text == null) {
return 0
}

// Basic blend
glEnable(GL_BLEND)
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA)
Expand Down Expand Up @@ -175,15 +179,15 @@ class GameFontRenderer(
* If [rainbow] or [gradient] is true, we apply the respective shader programs.
*/
private fun drawText(
text: String,
text: String?,
x: Float,
y: Float,
color: Int,
ignoreColor: Boolean,
rainbow: Boolean = false,
gradient: Boolean = false
): Int {
if (text.isEmpty()) return x.toInt()
if (text.isNullOrEmpty()) return x.toInt()

// Potentially enable rainbow or gradient shaders
if (rainbow) glUseProgram(RainbowFontShader.programId)
Expand Down Expand Up @@ -231,6 +235,7 @@ class GameFontRenderer(
randomCase = false; bold = false; italic = false
underline = false; strikeThrough = false
}

16 -> randomCase = true // §k => random
17 -> bold = true // §l => bold
18 -> strikeThrough = true // §m => strikethrough
Expand Down Expand Up @@ -305,7 +310,11 @@ class GameFontRenderer(
return hexColors[getColorIndex(charCode)]
}

override fun getStringWidth(text: String): Int {
override fun getStringWidth(text: String?): Int {
if (text == null) {
return 0
}

// NameProtect transformation
val realText = NameProtect.handleTextMessage(text)
// If color codes => parse for advanced widths
Expand Down

0 comments on commit 0cba697

Please sign in to comment.