diff options
author | hannibal2 <24389977+hannibal002@users.noreply.github.com> | 2024-04-19 11:24:36 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2024-04-19 11:24:36 +0200 |
commit | f8efe9effd27bee18bced64385fc1ad9b05b68bd (patch) | |
tree | 1429920226fc79af8bae814bb7596b9e65e0cf7e /src/main/java/at/hannibal2/skyhanni/features/misc | |
parent | 7feb5c67fbc1c9f63118952f1bea649ada1dccd6 (diff) | |
download | skyhanni-f8efe9effd27bee18bced64385fc1ad9b05b68bd.tar.gz skyhanni-f8efe9effd27bee18bced64385fc1ad9b05b68bd.tar.bz2 skyhanni-f8efe9effd27bee18bced64385fc1ad9b05b68bd.zip |
Feature + Fix: Player Chat Rework (#1483)
Co-authored-by: CalMWolfs <94038482+CalMWolfs@users.noreply.github.com>
Co-authored-by: hannibal2 <24389977+hannibal00212@users.noreply.github.com>
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/features/misc')
4 files changed, 71 insertions, 157 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt index 0adf1d5ec..5edabcbb1 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt @@ -80,6 +80,17 @@ class MarkedPlayerManager { private fun isEnabled() = (LorenzUtils.inSkyBlock || OutsideSbFeature.MARKED_PLAYERS.isSelected()) && config.highlightInWorld + + fun replaceInChat(string: String): String { + if (!config.highlightInChat) return string + + val color = config.chatColor.getChatColor() + var text = string + for (markedPlayer in playerNamesToMark) { + text = text.replace(markedPlayer, "$color$markedPlayer§r") + } + return text + } } @SubscribeEvent diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt deleted file mode 100644 index 56c6b8bfe..000000000 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt +++ /dev/null @@ -1,107 +0,0 @@ -package at.hannibal2.skyhanni.features.misc - -import at.hannibal2.skyhanni.SkyHanniMod -import at.hannibal2.skyhanni.config.ConfigUpdaterMigrator -import at.hannibal2.skyhanni.config.features.chat.ChatSymbols.SymbolLocationEntry -import at.hannibal2.skyhanni.events.LorenzChatEvent -import at.hannibal2.skyhanni.features.misc.compacttablist.TabStringType -import at.hannibal2.skyhanni.mixins.transformers.AccessorChatComponentText -import at.hannibal2.skyhanni.utils.ConfigUtils -import at.hannibal2.skyhanni.utils.LorenzUtils -import at.hannibal2.skyhanni.utils.StringUtils -import at.hannibal2.skyhanni.utils.StringUtils.getPlayerNameAndRankFromChatMessage -import at.hannibal2.skyhanni.utils.StringUtils.getPlayerNameFromChatMessage -import at.hannibal2.skyhanni.utils.StringUtils.removeResets -import at.hannibal2.skyhanni.utils.TabListData -import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern -import net.minecraft.util.ChatComponentText -import net.minecraft.util.IChatComponent -import net.minecraftforge.fml.common.eventhandler.SubscribeEvent - -// code inspired by SBA but heavily modified to be more functional and actually work -class PlayerChatSymbols { - - private val config get() = SkyHanniMod.feature.chat.chatSymbols - private val nameSymbols = mutableMapOf<String, String>() - - private val patternGroup = RepoPattern.group("misc.chatsymbols") - private val symbolsPattern by patternGroup.pattern( - "symbols", - "^(?<symbols>(?:(?:§\\w)+\\S)+) " - ) - private val symbolPattern by patternGroup.pattern( - "symbol", - "(?:§.)+(\\S)" - ) - - @SubscribeEvent - fun onChat(event: LorenzChatEvent) { - if (!LorenzUtils.inSkyBlock) return - if (!config.enabled) return - - val username = event.message.getPlayerNameFromChatMessage() ?: return - - var usernameWithSymbols = TabListData.getTabList() - .find { playerName -> TabStringType.usernameFromLine(playerName) == username } - - if (usernameWithSymbols != null) { - nameSymbols[username] = usernameWithSymbols - } - - usernameWithSymbols = nameSymbols[username] ?: return - - val split = usernameWithSymbols.split("$username ") - var emblemText = if (split.size > 1) split[1].removeResets() else "" - - var matcher = symbolsPattern.matcher("$emblemText ") - emblemText = if (matcher.find()) { - matcher.group("symbols") - } else "" - - if (emblemText == "") { - return - } - - val emblems = mutableListOf<String>() - matcher = symbolPattern.matcher(emblemText) - while (matcher.find()) { - emblems.add(matcher.group(1)) - } - - for (emblem in emblems) { - event.chatComponent = StringUtils.replaceFirstChatText(event.chatComponent, "$emblem ", "") - } - - val rankAndName = event.message.getPlayerNameAndRankFromChatMessage() ?: return - - StringUtils.modifyFirstChatComponent(event.chatComponent) { component -> - modify(component, emblemText, rankAndName) - } - } - - private fun modify(component: IChatComponent, emblemText: String, rankAndName: String): Boolean { - if (component !is ChatComponentText) return false - component as AccessorChatComponentText - if (!component.text_skyhanni().contains(rankAndName)) return false - val oldText = component.text_skyhanni() - - val newText = getNewText(emblemText, oldText, rankAndName) - component.setText_skyhanni(component.text_skyhanni().replace(oldText, newText)) - return true - } - - private fun getNewText(emblemText: String, oldText: String, rankAndName: String): String = - when (config.symbolLocation) { - SymbolLocationEntry.LEFT -> oldText.replace(rankAndName, "$emblemText $rankAndName") - SymbolLocationEntry.RIGHT -> oldText.replace(rankAndName, "$rankAndName $emblemText ") - SymbolLocationEntry.HIDDEN -> oldText - else -> oldText - } - - @SubscribeEvent - fun onConfigFix(event: ConfigUpdaterMigrator.ConfigFixEvent) { - event.transform(15, "chat.chatSymbols.symbolLocation") { element -> - ConfigUtils.migrateIntToEnum(element, SymbolLocationEntry::class.java) - } - } -} diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt index f5bd15750..273942287 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt @@ -23,11 +23,14 @@ import at.hannibal2.skyhanni.utils.StringUtils.removeColor import at.hannibal2.skyhanni.utils.TimeLimitedCache import at.hannibal2.skyhanni.utils.repopatterns.RepoPattern import net.minecraftforge.fml.common.eventhandler.SubscribeEvent +import java.util.regex.Matcher import kotlin.random.Random import kotlin.time.Duration.Companion.minutes object AdvancedPlayerList { + val tabPlayerData = mutableMapOf<String, PlayerData>() + private val config get() = SkyHanniMod.feature.gui.compactTabList.advancedPlayerList private val levelPattern by RepoPattern.pattern( @@ -62,48 +65,12 @@ object AdvancedPlayerList { extraTitles++ continue } - levelPattern.matchMatcher(line) { + val playerData: PlayerData? = levelPattern.matchMatcher(line) { val levelText = group("level") val removeColor = levelText.removeColor() try { - val playerData = PlayerData(removeColor.toInt()) - currentData[line] = playerData - - var index = 0 - val fullName = group("name") - if (fullName.contains("[")) index++ - val name = fullName.split(" ") - val coloredName = name[index] - if (index == 1) { - playerData.coloredName = name[0] + " " + coloredName - } else { - playerData.coloredName = coloredName - } - playerData.name = coloredName.removeColor() - playerData.levelText = levelText - index++ - if (name.size > index) { - var nameSuffix = name.drop(index).joinToString(" ") - if (nameSuffix.contains("♲")) { - playerData.ironman = true - } else { - playerData.bingoLevel = BingoAPI.getRank(line) - } - if (IslandType.CRIMSON_ISLE.isInIsland()) { - playerData.faction = if (line.contains("§c⚒")) { - nameSuffix = nameSuffix.replace("§c⚒", "") - CrimsonIsleFaction.BARBARIAN - } else if (line.contains("§5ቾ")) { - nameSuffix = nameSuffix.replace("§5ቾ", "") - CrimsonIsleFaction.MAGE - } else { - CrimsonIsleFaction.NONE - } - } - playerData.nameSuffix = nameSuffix - } else { - playerData.nameSuffix = "" - } + val sbLevel = removeColor.toInt() + readPlayerData(sbLevel, levelText, line) } catch (e: NumberFormatException) { ErrorManager.logErrorWithData( e, "Advanced Player List failed to parse user name", @@ -111,7 +78,15 @@ object AdvancedPlayerList { "i" to i, "original" to original, ) + null + } + } + playerData?.let { + val name = it.name + if (name != "?") { + tabPlayerData[name] = it } + currentData[line] = it } } playerDatas = currentData @@ -156,6 +131,50 @@ object AdvancedPlayerList { return newList } + private fun Matcher.readPlayerData( + sbLevel: Int, + levelText: String, + line: String, + ): PlayerData { + val playerData = PlayerData(sbLevel) + var index = 0 + val fullName = group("name") + if (fullName.contains("[")) index++ + val name = fullName.split(" ") + val coloredName = name[index] + if (index == 1) { + playerData.coloredName = name[0] + " " + coloredName + } else { + playerData.coloredName = coloredName + } + playerData.name = coloredName.removeColor() + playerData.levelText = levelText + index++ + if (name.size > index) { + var nameSuffix = name.drop(index).joinToString(" ") + if (nameSuffix.contains("♲")) { + playerData.ironman = true + } else { + playerData.bingoLevel = BingoAPI.getRank(line) + } + if (IslandType.CRIMSON_ISLE.isInIsland()) { + playerData.faction = if (line.contains("§c⚒")) { + nameSuffix = nameSuffix.replace("§c⚒", "") + CrimsonIsleFaction.BARBARIAN + } else if (line.contains("§5ቾ")) { + nameSuffix = nameSuffix.replace("§5ቾ", "") + CrimsonIsleFaction.MAGE + } else { + CrimsonIsleFaction.NONE + } + } + playerData.nameSuffix = nameSuffix + } else { + playerData.nameSuffix = "" + } + return playerData + } + fun ignoreCustomTabList(): Boolean { val denyKeyPressed = SkyHanniMod.feature.dev.debug.bypassAdvancedPlayerTabList.isKeyHeld() return denyKeyPressed || !SkyHanniDebugsAndTests.globalRender @@ -169,6 +188,7 @@ object AdvancedPlayerList { } private fun createCustomName(data: PlayerData): String { + val playerName = if (config.useLevelColorForName) { val c = data.levelText[3] "§$c" + data.name @@ -179,7 +199,7 @@ object AdvancedPlayerList { } else "" var suffix = if (config.hideEmblem) { - if (data.ironman) "§7♲" else data.bingoLevel?.let { getBingoIcon(it) } ?: "" + if (data.ironman) "§7♲" else data.bingoLevel?.let { BingoAPI.getBingoIcon(it) } ?: "" } else data.nameSuffix if (config.markSpecialPersons) { @@ -230,15 +250,6 @@ object AdvancedPlayerList { else -> "" } - private fun getBingoIcon(rank: Int): String { - val rankIcon = BingoAPI.getIcon(rank) ?: "" - return if (config.showBingoRankNumber && rank != -1) { - "$rankIcon $rank" - } else { - rankIcon - } - } - class PlayerData(val sbLevel: Int) { var name: String = "?" diff --git a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt index 9d21c7421..18bdede44 100644 --- a/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt +++ b/src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt @@ -59,7 +59,6 @@ object TabListReader { private fun updateTablistData(tablist: List<String>? = null) { if (!LorenzUtils.inSkyBlock) return - if (!config.enabled.get()) return var tabLines = tablist ?: TabListData.getTabList() |