diff options
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt | 24 | ||||
-rw-r--r-- | src/main/java/at/hannibal2/skyhanni/features/misc/ReplaceRomanNumerals.kt | 64 |
2 files changed, 66 insertions, 22 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt index e2a4f779c..52e95b3a1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt @@ -4,6 +4,7 @@ import at.hannibal2.skyhanni.SkyHanniMod import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator import at.hannibal2.skyhanni.data.hypixel.chat.event.SystemMessageEvent import at.hannibal2.skyhanni.features.misc.MarkedPlayerManager +import at.hannibal2.skyhanni.utils.StringUtils.applyIfPossible import net.minecraft.event.ClickEvent import net.minecraft.event.HoverEvent import net.minecraft.util.ChatComponentText @@ -22,28 +23,7 @@ class PlayerChatModifier { @SubscribeEvent fun onChat(event: SystemMessageEvent) { - val original = event.chatComponent.formattedText - val new = cutMessage(original) - if (new == original) return - - val clickEvents = mutableListOf<ClickEvent>() - val hoverEvents = mutableListOf<HoverEvent>() - findClickableTexts(event.chatComponent, clickEvents) - findHoverTexts(event.chatComponent, hoverEvents) - val clickSize = clickEvents.size - val hoverSize = hoverEvents.size - - // do not change the message if more than one hover or click is found - if (clickSize > 1 || hoverSize > 1) return - - val text = ChatComponentText(new) - if (clickSize == 1) { - text.chatStyle.chatClickEvent = clickEvents.first() - } - if (hoverSize == 1) { - text.chatStyle.chatHoverEvent = hoverEvents.first() - } - event.chatComponent = text + event.applyIfPossible { cutMessage(it) } } private fun findClickableTexts(chatComponent: IChatComponent, clickEvents: MutableList<ClickEvent>) { diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/ReplaceRomanNumerals.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/ReplaceRomanNumerals.kt new file mode 100644 index 000000000..3a93588b6 --- /dev/null +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/ReplaceRomanNumerals.kt @@ -0,0 +1,64 @@ +package at.hannibal2.skyhanni.features.misc + +import at.hannibal2.skyhanni.SkyHanniMod +import at.hannibal2.skyhanni.data.hypixel.chat.event.SystemMessageEvent +import at.hannibal2.skyhanni.events.ChatHoverEvent +import at.hannibal2.skyhanni.events.LorenzToolTipEvent +import at.hannibal2.skyhanni.mixins.hooks.GuiChatHook +import at.hannibal2.skyhanni.utils.LorenzUtils +import at.hannibal2.skyhanni.utils.NumberUtil.romanToDecimal +import at.hannibal2.skyhanni.utils.StringUtils.applyIfPossible +import at.hannibal2.skyhanni.utils.StringUtils.isRoman +import at.hannibal2.skyhanni.utils.StringUtils.removeColor +import net.minecraft.event.ClickEvent +import net.minecraft.event.HoverEvent +import net.minecraft.util.ChatComponentText +import net.minecraft.util.IChatComponent +import net.minecraftforge.fml.common.eventhandler.EventPriority +import net.minecraftforge.fml.common.eventhandler.SubscribeEvent + +class ReplaceRomanNumerals { + // Using toRegex here since toPattern doesn't seem to provide the necessary functionality + private val splitRegex = "((ยง\\w)|(\\s+)|(\\W))+|(\\w*)".toRegex() + + @SubscribeEvent(priority = EventPriority.LOWEST) + fun onTooltip(event: LorenzToolTipEvent) { + if (!isEnabled()) return + + event.toolTip.replaceAll { it.transformLine() } + } + + @SubscribeEvent(priority = EventPriority.LOWEST) + fun onChatHover(event: ChatHoverEvent) { + if (event.getHoverEvent().action != HoverEvent.Action.SHOW_TEXT) return + if (!isEnabled()) return + + val lore = event.getHoverEvent().value.formattedText.split("\n").toMutableList() + lore.replaceAll { it.transformLine() } + + val chatComponentText = ChatComponentText(lore.joinToString("\n")) + val hoverEvent = HoverEvent(event.component.chatStyle.chatHoverEvent.action, chatComponentText) + + GuiChatHook.replaceOnlyHoverEvent(hoverEvent) + } + + @SubscribeEvent + fun onSystemMessage(event: SystemMessageEvent) { + if (!isEnabled()) return + event.applyIfPossible { it.transformLine() } + } + + private fun String.transformLine() = splitRegex.findAll(this).map { it.value }.joinToString("") { + it.takeIf { it.isValidRomanNumeral() }?.coloredRomanToDecimal() ?: it + } + + private fun String.removeFormatting() = removeColor().replace(",", "") + + private fun String.isValidRomanNumeral() = removeFormatting() + .let { it.isRoman() && it.isNotEmpty() } + + private fun String.coloredRomanToDecimal() = removeFormatting() + .let { replace(it, it.romanToDecimal().toString()) } + + private fun isEnabled() = LorenzUtils.inSkyBlock && SkyHanniMod.feature.misc.replaceRomanNumerals +} |