aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/features/misc
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal002@users.noreply.github.com>2024-04-19 11:24:36 +0200
committerGitHub <noreply@github.com>2024-04-19 11:24:36 +0200
commitf8efe9effd27bee18bced64385fc1ad9b05b68bd (patch)
tree1429920226fc79af8bae814bb7596b9e65e0cf7e /src/main/java/at/hannibal2/skyhanni/features/misc
parent7feb5c67fbc1c9f63118952f1bea649ada1dccd6 (diff)
downloadskyhanni-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')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/MarkedPlayerManager.kt11
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/PlayerChatSymbols.kt107
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/AdvancedPlayerList.kt109
-rw-r--r--src/main/java/at/hannibal2/skyhanni/features/misc/compacttablist/TabListReader.kt1
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()