aboutsummaryrefslogtreecommitdiff
path: root/src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt')
-rw-r--r--src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt97
1 files changed, 57 insertions, 40 deletions
diff --git a/src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt b/src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt
index fd337de..0d1d512 100644
--- a/src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt
+++ b/src/main/kotlin/cc/woverflow/chatting/utils/ModCompatHooks.kt
@@ -1,13 +1,22 @@
package cc.woverflow.chatting.utils
+import cc.polyfrost.oneconfig.renderer.TextRenderer
+import cc.polyfrost.oneconfig.utils.dsl.getAlpha
+import cc.polyfrost.oneconfig.utils.dsl.mc
import cc.woverflow.chatting.Chatting.isBetterChat
import cc.woverflow.chatting.Chatting.isPatcher
+import cc.woverflow.chatting.config.ChattingConfig.offsetNonPlayerMessages
+import cc.woverflow.chatting.config.ChattingConfig.showChatHeads
import cc.woverflow.chatting.config.ChattingConfig.textRenderType
+import cc.woverflow.chatting.hook.ChatLineHook
import cc.woverflow.chatting.hook.GuiNewChatHook
import club.sk1er.patcher.config.PatcherConfig
import com.llamalad7.betterchat.BetterChat
import net.minecraft.client.Minecraft
+import net.minecraft.client.gui.ChatLine
import net.minecraft.client.gui.FontRenderer
+import net.minecraft.client.gui.Gui
+import net.minecraft.client.renderer.GlStateManager
// This exists because mixin doesn't like dummy classes
object ModCompatHooks {
@@ -32,48 +41,56 @@ object ModCompatHooks {
get() = Minecraft.getMinecraft().fontRendererObj
@JvmStatic
- fun redirectDrawString(text: String, x: Float, y: Float, color: Int): Int {
+ fun redirectDrawString(text: String, x: Float, y: Float, color: Int, chatLine: ChatLine): Int {
+ var actualX = x
+ if (showChatHeads) {
+ val hook = chatLine as ChatLineHook
+ if (hook.hasDetected() || offsetNonPlayerMessages) {
+ actualX += 10f
+ }
+ val networkPlayerInfo = hook.playerInfo
+ if (networkPlayerInfo != null) {
+ GlStateManager.enableBlend()
+ GlStateManager.enableAlpha()
+ GlStateManager.enableTexture2D()
+ mc.textureManager.bindTexture(networkPlayerInfo.locationSkin)
+ GlStateManager.tryBlendFuncSeparate(770, 771, 1, 0)
+ GlStateManager.color(1.0f, 1.0f, 1.0f, color.getAlpha() / 255f)
+ Gui.drawScaledCustomSizeModalRect(
+ (x).toInt(),
+ (y - 1f).toInt(),
+ 8.0f,
+ 8.0f,
+ 8,
+ 8,
+ 8,
+ 8,
+ 64.0f,
+ 64.0f
+ )
+ Gui.drawScaledCustomSizeModalRect(
+ (x).toInt(),
+ (y - 1f).toInt(),
+ 40.0f,
+ 8.0f,
+ 8,
+ 8,
+ 8,
+ 8,
+ 64.0f,
+ 64.0f
+ )
+ GlStateManager.color(1.0f, 1.0f, 1.0f, 1.0f)
+ }
+ }
return when (textRenderType) {
- 0 -> fontRenderer.drawString(text, x, y, color, false)
- 2 -> fontRenderer.drawBorderedString(
- text,
- x.toInt(),
- y.toInt(),
+ 0 -> fontRenderer.drawString(text, actualX, y, color, false)
+ 2 -> TextRenderer.drawBorderedText(text,
+ actualX,
+ y,
color,
- (Minecraft.getMinecraft().ingameGUI.chatGUI as GuiNewChatHook).textOpacity
- )
-
- else -> fontRenderer.drawString(text, x, y, color, true)
+ (Minecraft.getMinecraft().ingameGUI.chatGUI as GuiNewChatHook).textOpacity)
+ else -> fontRenderer.drawString(text, actualX, y, color, true)
}
}
-
-
- private val regex = Regex("(?i)\\u00A7[0-9a-f]")
- private var bypassNameHighlight = false
- fun FontRenderer.drawBorderedString(
- text: String, x: Int, y: Int, color: Int, opacity: Int
- ): Int {
- val noColors = text.replace(regex, "\u00A7r")
- var yes = 0
- if (opacity > 3) {
- bypassNameHighlight = true
- for (xOff in -2..2) {
- for (yOff in -2..2) {
- if (xOff * xOff != yOff * yOff) {
- yes +=
- drawString(
- noColors, (xOff / 2f) + x, (yOff / 2f) + y, (opacity) shl 24, false
- )
-
- }
- }
- }
- bypassNameHighlight = false
- }
- yes +=
- //#if MODERN==0
- drawString(text, x, y, color)
-
- return yes
- }
}