aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/chat/playerchat/PlayerChatModifier.kt24
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/ReplaceRomanNumerals.kt64
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
+}