Skip to content

Commit c52481d

Browse files
committed
Added packet info HUD element
1 parent 7d37d75 commit c52481d

File tree

3 files changed

+83
-18
lines changed

3 files changed

+83
-18
lines changed

src/main/kotlin/com/lambda/client/gui/hudgui/elements/misc/FPS.kt

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@ import com.lambda.client.event.SafeClientEvent
44
import com.lambda.client.gui.hudgui.LabelHud
55
import com.lambda.client.util.CircularArray
66
import com.lambda.client.util.graphics.AnimationUtils
7-
import kotlin.math.max
8-
import kotlin.math.min
97
import kotlin.math.roundToInt
108

119
internal object FPS : LabelHud(
@@ -14,9 +12,9 @@ internal object FPS : LabelHud(
1412
description = "Frames per second in game"
1513
) {
1614

17-
private val showAverage = setting("Show Average", true)
18-
private val showMin = setting("Show Min", false)
19-
private val showMax = setting("Show Max", false)
15+
private val showAverage by setting("Show Average", true)
16+
private val showMin by setting("Show Min", false)
17+
private val showMax by setting("Show Max", false)
2018

2119
private var updateTime = 0L
2220
private var prevFps = 0
@@ -44,29 +42,22 @@ internal object FPS : LabelHud(
4442
val fps = (prevFps + (currentFps - prevFps) * deltaTime).roundToInt()
4543
val avg = (prevAvgFps + (currentAvgFps - prevAvgFps) * deltaTime).roundToInt()
4644

47-
var min = 6969
48-
var max = 0
49-
for (value in longFps) {
50-
if (value != 0) min = min(value, min)
51-
max = max(value, max)
52-
}
53-
5445
displayText.add("FPS", secondaryColor)
5546
displayText.add(fps.toString(), primaryColor)
5647

57-
if (showAverage.value) {
48+
if (showAverage) {
5849
displayText.add("AVG", secondaryColor)
5950
displayText.add(avg.toString(), primaryColor)
6051
}
6152

62-
if (showMin.value) {
53+
if (showMin) {
6354
displayText.add("MIN", secondaryColor)
64-
displayText.add(min.toString(), primaryColor)
55+
displayText.add(longFps.min().toString(), primaryColor)
6556
}
6657

67-
if (showMax.value) {
58+
if (showMax) {
6859
displayText.add("MAX", secondaryColor)
69-
displayText.add(max.toString(), primaryColor)
60+
displayText.add(longFps.max().toString(), primaryColor)
7061
}
7162
}
7263

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
package com.lambda.client.gui.hudgui.elements.misc
2+
3+
import com.lambda.client.event.SafeClientEvent
4+
import com.lambda.client.gui.hudgui.LabelHud
5+
import com.lambda.client.manager.managers.PacketManager
6+
7+
internal object Packets : LabelHud(
8+
name = "Packets",
9+
category = Category.MISC,
10+
description = "Information about your packet traffic."
11+
) {
12+
private val perSecond by setting("Per second", true)
13+
private val total by setting("Total", true)
14+
private val lastSent by setting("Last sent packet info", true)
15+
private val lastReceived by setting("Last received packet info", true)
16+
17+
override fun SafeClientEvent.updateText() {
18+
if (perSecond) {
19+
displayText.add("Sent/s", secondaryColor)
20+
displayText.add(PacketManager.recentSent.count().toString(), primaryColor)
21+
displayText.add("Received/s", secondaryColor)
22+
displayText.addLine(PacketManager.recentReceived.count().toString(), primaryColor)
23+
}
24+
25+
if (total) {
26+
displayText.add("Total sent", secondaryColor)
27+
displayText.add(PacketManager.totalSent.toString(), primaryColor)
28+
displayText.add("Total received", secondaryColor)
29+
displayText.addLine(PacketManager.totalReceived.toString(), primaryColor)
30+
}
31+
32+
if (lastSent) {
33+
PacketManager.recentSent.lastOrNull()?.let {
34+
displayText.add("Last sent", secondaryColor)
35+
displayText.add(it.first.javaClass.simpleName ?: "None", primaryColor)
36+
displayText.addLine("${System.currentTimeMillis() - it.second}ms", primaryColor)
37+
}
38+
}
39+
40+
if (lastReceived) {
41+
PacketManager.recentReceived.lastOrNull()?.let {
42+
displayText.add("Last received", secondaryColor)
43+
displayText.add(it.first.javaClass.simpleName ?: "None", primaryColor)
44+
displayText.addLine("${System.currentTimeMillis() - it.second}ms", primaryColor)
45+
}
46+
}
47+
}
48+
}

src/main/kotlin/com/lambda/client/manager/managers/PacketManager.kt

Lines changed: 27 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,32 @@ import com.lambda.client.event.events.PacketEvent
55
import com.lambda.client.event.listener.listener
66
import com.lambda.client.manager.Manager
77
import com.lambda.client.util.threads.safeListener
8+
import net.minecraft.network.Packet
89
import net.minecraft.network.play.server.SPacketPlayerPosLook
10+
import net.minecraftforge.fml.common.gameevent.TickEvent
11+
import java.util.concurrent.ConcurrentLinkedDeque
912

1013
object PacketManager : Manager {
14+
private const val maxAge = 1000L
15+
16+
val recentReceived = ConcurrentLinkedDeque<Pair<Packet<*>,Long>>()
17+
var totalReceived = 0
18+
19+
val recentSent = ConcurrentLinkedDeque<Pair<Packet<*>,Long>>()
20+
var totalSent = 0
21+
1122
var lastTeleportId = -1
1223

1324
init {
14-
listener<PacketEvent.Receive> {
25+
listener<PacketEvent.PostSend> {
26+
recentSent.add(Pair(it.packet, System.currentTimeMillis()))
27+
totalSent++
28+
}
29+
30+
listener<PacketEvent.PostReceive> {
31+
recentReceived.add(Pair(it.packet, System.currentTimeMillis()))
32+
totalReceived++
33+
1534
when (it.packet) {
1635
is SPacketPlayerPosLook -> {
1736
lastTeleportId = it.packet.teleportId
@@ -22,5 +41,12 @@ object PacketManager : Manager {
2241
safeListener<ConnectionEvent> {
2342
lastTeleportId = -1
2443
}
44+
45+
safeListener<TickEvent.ClientTickEvent> {
46+
val currentTime = System.currentTimeMillis()
47+
48+
recentReceived.removeIf { currentTime - it.second > maxAge }
49+
recentSent.removeIf { currentTime - it.second > maxAge }
50+
}
2551
}
2652
}

0 commit comments

Comments
 (0)