Minecraft Client: Server-TPS abfragen?
Wie macht man das?
Hab mal gelesen dass der Server jeden Tick ein SPacketTimeUpdate-Packet schickt, und man daraus die TPS ableiten könnte. Aber wie? Wie sehe ich wann ich so ein Packet empfangen habe, und wie kann ich daraus die TPS ableiten? Oder gehts auch anders? Per getTotalWorldTime oder so? Weiß wer wie mans machen könnte?
1 Antwort
Das SPacketTimeUpdate hat zwei Felder:
- Alter der Welt in Ticks
- Tageszeit in Ticks
Ich denke mal, das 1. wäre passender. Die Methode, um die TPS daraus abzuleiten, ist ganz einfach, habe ich aber nicht getestet.
private long lastTime;
private long lastAge = -1L;
@PacketReceive
public void onTimeUpdate(SPacketTimeUpdate packet) {
long age = packet.worldAge;
long time = System.currentTimeMillis();
if (lastAge == -1L) {
lastTime = time;
lastAge = age;
return;
}
long diffAge = age - lastAge;
long diffTime = time - lastTime;
lastAge = age;
lastTime = time;
long tps = diffAge / (diffTime / 1000.0);
long tpsRounded = Math.round(tps * 100) / 100.0;
System.out.println("TPS: " + tpsRounded);
}
Die Methode und Annotations habe ich mir selbst ausgedacht, die Implementierung ist ganz dir überlassen. Noch genauer könnte man das evtl. machen, wenn man den Ping mit einbezieht.
Wie schon geschrieben:
Die Methode und Annotations habe ich mir selbst ausgedacht, die Implementierung ist ganz dir überlassen.
Hab etwas gebraucht um zu checken, wie ich ein EventSystem mit Annotations und co. in meinen Client implementieren kann, aber jetzt hab ichs. TimeUpdate zu benutzen war eine super Idee. Danke dir :D
Das @PacketReceive wird rot angestrichen. Gibt's nicht.
SPacketTimeUpdate ebenfalls nicht. :/
(1.8, MCP)