-
-
Notifications
You must be signed in to change notification settings - Fork 44
/
TPSCommand.java
106 lines (95 loc) · 3.36 KB
/
TPSCommand.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
package me.nallar.tickthreading.minecraft.commands;
import java.util.List;
import com.google.common.base.Strings;
import me.nallar.tickthreading.minecraft.TickManager;
import me.nallar.tickthreading.minecraft.TickThreading;
import me.nallar.tickthreading.util.ChatFormat;
import me.nallar.tickthreading.util.TableFormatter;
import me.nallar.tickthreading.util.VersionUtil;
import net.minecraft.command.ICommandSender;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.server.MinecraftServer;
public class TPSCommand extends Command {
public static String name = "tps";
@Override
public String getCommandName() {
return name;
}
@Override
public boolean canCommandSenderUseCommand(ICommandSender par1ICommandSender) {
return true;
}
@Override
public void processCommand(ICommandSender commandSender, List<String> arguments) {
StatsHolder statsHolder = new StatsHolder();
TableFormatter tf = new TableFormatter(commandSender);
tf.sb.append(VersionUtil.TTVersionString()).append('\n');
tf
.heading("")
.heading("Entities")
.heading("Tiles")
.heading("Chunks")
.heading("Players")
.heading("Load");
for (TickManager tickManager : TickThreading.instance.getManagers()) {
tickManager.writeStats(tf, statsHolder);
}
if (TickThreading.instance.concurrentNetworkTicks) {
tf
.row("Network")
.row("")
.row("")
.row("")
.row("")
.row(TableFormatter.formatDoubleWithPrecision((MinecraftServer.getNetworkTickTime() * 100) / MinecraftServer.getNetworkTargetTickTime(), 2) + '%');
}
tf
.row("Overall")
.row(statsHolder.entities)
.row(statsHolder.tileEntities)
.row(statsHolder.chunks)
.row(MinecraftServer.getServerConfigurationManager(MinecraftServer.getServer()).getCurrentPlayerCount())
.row(TableFormatter.formatDoubleWithPrecision((MinecraftServer.getTickTime() * 100) / MinecraftServer.getTargetTickTime(), 2) + '%');
tf.finishTable();
tf.sb.append('\n').append(getTPSString(commandSender instanceof EntityPlayer));
sendChat(commandSender, tf.toString());
}
private static final int tpsWidth = 40;
private static String getTPSString(boolean withColour) {
double tps = MinecraftServer.getTPS();
double targetTPS = MinecraftServer.getTargetTPS();
double difference = Math.abs(targetTPS - tps);
int charsFirst = (int) ((tps / targetTPS) * tpsWidth);
int charsAfter = tpsWidth - charsFirst;
StringBuilder sb = new StringBuilder();
sb
.append(' ')
.append(tps)
.append(" TPS [ ")
.append(withColour ? getColourForDifference(difference, targetTPS) : "")
.append(Strings.repeat("#", charsFirst))
.append(Strings.repeat("~", charsAfter))
.append(withColour ? ChatFormat.RESET : "")
.append(" ] ");
return sb.toString();
}
private static String getColourForDifference(double difference, double targetTPS) {
switch ((int) (difference / (targetTPS / 4))) {
case 0:
return ChatFormat.GREEN.toString();
case 1:
return ChatFormat.YELLOW.toString();
case 2:
return ChatFormat.RED.toString();
case 3:
return ChatFormat.RED.toString() + ChatFormat.BOLD;
default:
return ChatFormat.MAGIC.toString();
}
}
public static class StatsHolder {
public int chunks;
public int entities;
public int tileEntities;
}
}