diff options
| author | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-02-18 22:54:58 +0100 |
|---|---|---|
| committer | hannibal2 <24389977+hannibal00212@users.noreply.github.com> | 2023-02-18 22:54:58 +0100 |
| commit | cfa9dff0c90be83ab219db10ef08abb8c6aabca0 (patch) | |
| tree | 9a726d9e8cb937c5f9f867f8f78f5aaa27e002da /src/main/java/at/hannibal2/skyhanni/utils | |
| parent | 8e57a5b1a7ea98a086fae0883e42cd34558b0a58 (diff) | |
| download | skyhanni-cfa9dff0c90be83ab219db10ef08abb8c6aabca0.tar.gz skyhanni-cfa9dff0c90be83ab219db10ef08abb8c6aabca0.tar.bz2 skyhanni-cfa9dff0c90be83ab219db10ef08abb8c6aabca0.zip | |
Added Visitor Timer.
Diffstat (limited to 'src/main/java/at/hannibal2/skyhanni/utils')
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 |
