summaryrefslogtreecommitdiff
path: root/src/main/java/at/hannibal2/skyhanni/utils
diff options
context:
space:
mode:
authorhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-02-18 22:54:58 +0100
committerhannibal2 <24389977+hannibal00212@users.noreply.github.com>2023-02-18 22:54:58 +0100
commitcfa9dff0c90be83ab219db10ef08abb8c6aabca0 (patch)
tree9a726d9e8cb937c5f9f867f8f78f5aaa27e002da /src/main/java/at/hannibal2/skyhanni/utils
parent8e57a5b1a7ea98a086fae0883e42cd34558b0a58 (diff)
downloadskyhanni-cfa9dff0c90be83ab219db10ef08abb8c6aabca0.tar.gz
skyhanni-cfa9dff0c90be83ab219db10ef08abb8c6aabca0.tar.bz2
skyhanni-cfa9dff0c90be83ab219db10ef08abb8c6aabca0.zip
Added Visitor Timer.
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt117
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TabListUtils.kt41
-rw-r--r--src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt28
3 files changed, 145 insertions, 41 deletions
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt b/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt
new file mode 100644
index 000000000..760e40450
--- /dev/null
+++ b/src/main/java/at/hannibal2/skyhanni/utils/TabListData.kt
@@ -0,0 +1,117 @@
+package at.hannibal2.skyhanni.utils
+
+import at.hannibal2.skyhanni.events.PacketEvent
+import at.hannibal2.skyhanni.events.TabListUpdateEvent
+import at.hannibal2.skyhanni.utils.LorenzUtils.sorted
+import net.minecraft.network.play.server.S38PacketPlayerListItem
+import net.minecraftforge.fml.common.eventhandler.SubscribeEvent
+import java.util.*
+
+class TabListData {
+
+ private val uuidMap = mutableMapOf<UUID, TabListPlayer>()
+ private val tabListMap = mutableMapOf<TabListPlayer, String>()
+
+ class TabListPlayer(var displayName: String, var internalName: String)
+
+ @SubscribeEvent
+ fun onChatPacket(event: PacketEvent.ReceiveEvent) {
+ val packet = event.packet
+ if (packet is S38PacketPlayerListItem) {
+ val action = packet.action
+ if (action == S38PacketPlayerListItem.Action.UPDATE_LATENCY) return
+
+ val entries = packet.entries
+ if (action == S38PacketPlayerListItem.Action.REMOVE_PLAYER) {
+// println("REMOVE_PLAYER")
+// println("old: " + uuidMap.size)
+ for (entry in entries) {
+ val profile = entry.profile
+ val id = profile.id
+ val key = uuidMap.remove(id)
+ tabListMap.remove(key)
+ }
+// println("new: " + uuidMap.size)
+ update()
+ return
+ }
+
+ val size = entries.size
+ if (size != 1) {
+ println("wrong size: $size")
+ return
+ }
+ val entry = entries[0]
+ val profile = entry.profile
+ val id = profile.id
+ val name = profile.name
+ if (name != null) {
+ if (!name.contains("-")) {
+ return
+ }
+ }
+
+ val text = entry?.displayName?.formattedText ?: ""
+ val formattedName = LorenzUtils.stripVanillaMessage(text)
+ if (action == S38PacketPlayerListItem.Action.ADD_PLAYER) {
+// println("ADD_PLAYER")
+ val tabList = TabListPlayer(formattedName, name)
+
+ if (uuidMap.contains(id)) {
+ val key = uuidMap.remove(id)
+ val internalName = key!!.internalName
+ val displayName = key.displayName
+// println("")
+// println("internalName: $internalName")
+// println("displayName: $displayName")
+ tabListMap.remove(key)
+ }
+
+// println("new name: $name")
+// println("new formattedName: $formattedName")
+
+ uuidMap[id] = tabList
+ tabListMap[tabList] = name
+ update()
+ return
+ }
+
+ if (action == S38PacketPlayerListItem.Action.UPDATE_DISPLAY_NAME) {
+// println("UPDATE_DISPLAY_NAME")
+ val listPlayer = uuidMap[id]!!
+// println("old: '" + listPlayer.displayName + "'")
+// println("new: '$formattedName'")
+
+ listPlayer.displayName = formattedName
+ update()
+ return
+ }
+ }
+ }
+
+ private fun update() {
+ val result = mutableListOf<String>()
+ if (uuidMap.size == 80) {
+ var i = 0
+ for (tabList in tabListMap.sorted().keys) {
+ val contains = uuidMap.values.contains(tabList)
+ if (contains) {
+ val displayName = tabList.displayName
+ result.add(displayName)
+ i++
+ }
+ }
+ } else if (uuidMap.isNotEmpty()) return
+ val list = result.toList()
+ cache = list
+ TabListUpdateEvent(list).postAndCatch()
+
+ }
+
+ companion object {
+ private var cache = listOf<String>()
+
+ // TODO replace with TabListUpdateEvent
+ fun getTabList() = cache
+ }
+} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TabListUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/TabListUtils.kt
deleted file mode 100644
index a81675f74..000000000
--- a/src/main/java/at/hannibal2/skyhanni/utils/TabListUtils.kt
+++ /dev/null
@@ -1,41 +0,0 @@
-package at.hannibal2.skyhanni.utils
-
-import com.google.common.collect.ComparisonChain
-import com.google.common.collect.Ordering
-import net.minecraft.client.Minecraft
-import net.minecraft.client.network.NetworkPlayerInfo
-import net.minecraft.world.WorldSettings
-import net.minecraftforge.fml.relauncher.Side
-import net.minecraftforge.fml.relauncher.SideOnly
-
-object TabListUtils {
-
- private val playerOrdering = Ordering.from(PlayerComparator())
-
- @SideOnly(Side.CLIENT)
- internal class PlayerComparator : Comparator<NetworkPlayerInfo> {
- override fun compare(o1: NetworkPlayerInfo, o2: NetworkPlayerInfo): Int {
- val team1 = o1.playerTeam
- val team2 = o2.playerTeam
- return ComparisonChain.start().compareTrueFirst(
- o1.gameType != WorldSettings.GameType.SPECTATOR,
- o2.gameType != WorldSettings.GameType.SPECTATOR
- )
- .compare(
- if (team1 != null) team1.registeredName else "",
- if (team2 != null) team2.registeredName else ""
- )
- .compare(o1.gameProfile.name, o2.gameProfile.name).result()
- }
- }
-
- fun getTabList(): List<String> {
- val players = playerOrdering.sortedCopy(Minecraft.getMinecraft().thePlayer.sendQueue.playerInfoMap)
- val result: MutableList<String> = ArrayList()
- for (info in players) {
- val name = Minecraft.getMinecraft().ingameGUI.tabList.getPlayerName(info)
- result.add(LorenzUtils.stripVanillaMessage(name))
- }
- return result
- }
-} \ No newline at end of file
diff --git a/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt b/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt
index 107395886..f7a684630 100644
--- a/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt
+++ b/src/main/java/at/hannibal2/skyhanni/utils/TimeUtils.kt
@@ -1,6 +1,12 @@
package at.hannibal2.skyhanni.utils
+import java.util.regex.Pattern
+
object TimeUtils {
+
+ private val pattern =
+ Pattern.compile("(?:(?<y>\\d+)y(?:\\w* ?)?)?(?:(?<d>\\d+)d(?:\\w* ?)?)?(?:(?<h>\\d+)h(?:\\w* ?)?)?(?:(?<m>\\d+)m(?:\\w* ?)?)?(?:(?<s>\\d+)s(?:\\w* ?)?)?")
+
fun formatDuration(
millis: Long,
biggestUnit: TimeUnit = TimeUnit.YEAR,
@@ -41,6 +47,28 @@ object TimeUtils {
}
return builder.toString()
}
+
+ fun getMillis(string: String): Long {
+ val matcher = pattern.matcher(string.lowercase().trim())
+ if (!matcher.matches()) {
+ throw RuntimeException("Matcher is null for '$string'")
+ }
+
+ val years = matcher.group("y")?.toLong() ?: 0L
+ val days = matcher.group("d")?.toLong() ?: 0L
+ val hours = matcher.group("h")?.toLong() ?: 0L
+ val minutes = matcher.group("m")?.toLong() ?: 0L
+ val seconds = matcher.group("s")?.toLong() ?: 0L
+
+ var millis = 0L
+ millis += seconds * 1000
+ millis += minutes * 60 * 1000
+ millis += hours * 60 * 60 * 1000
+ millis += days * 24 * 60 * 60 * 1000
+ millis += (years * 365.25 * 24 * 60 * 60 * 1000).toLong()
+
+ return millis
+ }
}
private const val FACTOR_SECONDS = 1000L