Skip to content

Commit dc73b9b

Browse files
committed
Fixes
- ping hud delay
1 parent 72c227a commit dc73b9b

File tree

6 files changed

+103
-69
lines changed

6 files changed

+103
-69
lines changed

src/main/java/io/github/axolotlclient/AxolotlClient.java

Lines changed: 0 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -134,12 +134,6 @@ public static void tickClient(){
134134
modules.forEach((identifier, abstractModule) -> abstractModule.tick());
135135
Color.tickChroma();
136136

137-
if(tickTime % 20 == 0){
138-
if(MinecraftClient.getInstance().getCurrentServerEntry() != null){
139-
Util.getRealTimeServerPing(MinecraftClient.getInstance().getCurrentServerEntry());
140-
}
141-
}
142-
143137
if (tickTime >=6000){
144138

145139
//System.out.println("Cleared Cache of Other Players!");

src/main/java/io/github/axolotlclient/config/ConfigManager.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,8 @@ private static JsonObject getConfig(JsonObject object, OptionCategory category){
6161

6262
public static void load() {
6363

64+
loadDefaults();
65+
6466
try {
6567
JsonObject config = new JsonParser().parse(new FileReader(confPath.toString())).getAsJsonObject();
6668

@@ -70,9 +72,7 @@ public static void load() {
7072
} catch (Exception e){
7173
AxolotlClient.LOGGER.error("Failed to load config! Using default values... \nError: ");
7274
e.printStackTrace();
73-
loadDefaults();
7475
}
75-
//save();
7676
}
7777

7878
private static void setOptions(JsonObject config, OptionCategory category){
@@ -93,15 +93,15 @@ private static void setOptions(JsonObject config, OptionCategory category){
9393
}
9494

9595
private static void loadDefaults(){
96-
AxolotlClient.CONFIG.config.forEach(OptionCategory -> {
97-
OptionCategory.getOptions().forEach(Option::setDefaults);
98-
if(!OptionCategory.getSubCategories().isEmpty()){
99-
for(OptionCategory category : OptionCategory.getSubCategories()){
100-
category.getOptions().forEach(Option::setDefaults);
101-
}
102-
}
103-
});
96+
AxolotlClient.CONFIG.config.forEach(ConfigManager::setOptionDefaults);
10497
}
10598

106-
99+
private static void setOptionDefaults(OptionCategory category){
100+
category.getOptions().forEach(Option::setDefaults);
101+
if(!category.getSubCategories().isEmpty()){
102+
for (OptionCategory sub: category.getSubCategories()) {
103+
setOptionDefaults(sub);
104+
}
105+
}
106+
}
107107
}

src/main/java/io/github/axolotlclient/modules/hud/gui/hud/PingHud.java

Lines changed: 86 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,25 @@
11
package io.github.axolotlclient.modules.hud.gui.hud;
22

3-
import io.github.axolotlclient.util.Util;
3+
import io.github.axolotlclient.config.options.IntegerOption;
4+
import io.github.axolotlclient.config.options.OptionBase;
5+
import io.github.axolotlclient.util.ThreadExecuter;
6+
import net.minecraft.client.MinecraftClient;
7+
import net.minecraft.client.network.ServerInfo;
8+
import net.minecraft.network.ClientConnection;
9+
import net.minecraft.network.NetworkState;
10+
import net.minecraft.network.ServerAddress;
11+
import net.minecraft.network.listener.ClientQueryPacketListener;
12+
import net.minecraft.network.packet.c2s.handshake.HandshakeC2SPacket;
13+
import net.minecraft.network.packet.c2s.query.QueryPingC2SPacket;
14+
import net.minecraft.network.packet.c2s.query.QueryRequestC2SPacket;
15+
import net.minecraft.network.packet.s2c.query.QueryPongS2CPacket;
16+
import net.minecraft.network.packet.s2c.query.QueryResponseS2CPacket;
17+
import net.minecraft.text.Text;
418
import net.minecraft.util.Identifier;
519

20+
import java.net.InetAddress;
21+
import java.util.List;
22+
623
/**
724
* This implementation of Hud modules is based on KronHUD.
825
* https://github.com/DarkKronicle/KronHUD
@@ -11,16 +28,17 @@
1128

1229
public class PingHud extends CleanHudEntry {
1330
public static final Identifier ID = new Identifier("kronhud", "pinghud");
31+
private int currentServerPing;
32+
33+
private final IntegerOption refreshDelay = new IntegerOption("refreshTime", 4, 1, 15);
1434

1535
public PingHud() {
16-
// super(x, y, scale);
1736
super();
1837
}
1938

2039
@Override
2140
public String getValue() {
22-
23-
return Util.currentServerPing + " ms";
41+
return currentServerPing + " ms";
2442
}
2543

2644
@Override
@@ -32,4 +50,68 @@ public String getPlaceholder() {
3250
public Identifier getId() {
3351
return ID;
3452
}
53+
54+
@Override
55+
public boolean tickable() {
56+
return true;
57+
}
58+
59+
private int second;
60+
@Override
61+
public void tick() {
62+
if(second>=refreshDelay.get()*20){
63+
if(MinecraftClient.getInstance().getCurrentServerEntry() != null) {
64+
getRealTimeServerPing(MinecraftClient.getInstance().getCurrentServerEntry());
65+
}
66+
second=0;
67+
} else second++;
68+
}
69+
70+
@Override
71+
public void addConfigOptions(List<OptionBase<?>> options) {
72+
super.addConfigOptions(options);
73+
options.add(refreshDelay);
74+
}
75+
76+
//Indicatia removed this feature...
77+
//We still need it :(
78+
private void getRealTimeServerPing(ServerInfo server)
79+
{
80+
ThreadExecuter.submit(() -> {
81+
try {
82+
ServerAddress address = ServerAddress.parse(server.address);
83+
84+
ClientConnection manager = ClientConnection.connect(InetAddress.getByName(address.getAddress()), address.getPort(), false);
85+
manager.setPacketListener(new ClientQueryPacketListener() {
86+
87+
@Override
88+
public void onResponse(QueryResponseS2CPacket packet) {
89+
this.currentSystemTime = net.minecraft.util.Util.getMeasuringTimeMs();
90+
manager.send(new QueryPingC2SPacket(this.currentSystemTime));
91+
}
92+
93+
@Override
94+
public void onPong(QueryPongS2CPacket packet) {
95+
long time = this.currentSystemTime;
96+
long latency = net.minecraft.util.Util.getMeasuringTimeMs();
97+
currentServerPing = (int) (latency - time);
98+
manager.disconnect(Text.of(""));
99+
}
100+
101+
private long currentSystemTime = 0L;
102+
103+
@Override
104+
public void onDisconnected(Text reason) {}
105+
106+
@Override
107+
public ClientConnection getConnection()
108+
{
109+
return manager;
110+
}
111+
});
112+
manager.send(new HandshakeC2SPacket(address.getAddress(), address.getPort(), NetworkState.STATUS));
113+
manager.send(new QueryRequestC2SPacket());
114+
} catch (Exception ignored){}
115+
});
116+
}
35117
}

src/main/java/io/github/axolotlclient/util/ThreadExecuter.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,4 +18,8 @@ public static void scheduleTask(Runnable runnable, long delay, TimeUnit timeUnit
1818
EXECUTER_SERVICE.schedule(runnable, delay, timeUnit);
1919
}
2020

21+
public static void submit(Runnable runnable){
22+
EXECUTER_SERVICE.submit(runnable);
23+
}
24+
2125
}

src/main/java/io/github/axolotlclient/util/Util.java

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -44,8 +44,7 @@
4444

4545
public class Util {
4646

47-
private static final ThreadPoolExecutor REALTIME_PINGER = new ScheduledThreadPoolExecutor(3, new ThreadFactoryBuilder().setNameFormat("Real Time Server Pinger #%d").setDaemon(true).build());
48-
public static int currentServerPing;
47+
4948

5049
public static String lastgame;
5150
public static String game;
@@ -193,52 +192,6 @@ public static List<String> getSidebar() {
193192
return lines;
194193
}
195194

196-
197-
198-
//Indicatia removed this feature...
199-
//We still need it :(
200-
public static void getRealTimeServerPing(ServerInfo server)
201-
{
202-
REALTIME_PINGER.submit(() ->
203-
{
204-
try
205-
{
206-
ServerAddress address = ServerAddress.parse(server.address);
207-
208-
ClientConnection manager = ClientConnection.connect(InetAddress.getByName(address.getAddress()), address.getPort(), false);
209-
manager.setPacketListener(new ClientQueryPacketListener() {
210-
211-
@Override
212-
public void onResponse(QueryResponseS2CPacket packet) {
213-
this.currentSystemTime = net.minecraft.util.Util.getMeasuringTimeMs();
214-
manager.send(new QueryPingC2SPacket(this.currentSystemTime));
215-
}
216-
217-
@Override
218-
public void onPong(QueryPongS2CPacket packet) {
219-
long time = this.currentSystemTime;
220-
long latency = net.minecraft.util.Util.getMeasuringTimeMs();
221-
Util.currentServerPing = (int) (latency - time);
222-
manager.disconnect(Text.of(""));
223-
}
224-
225-
private long currentSystemTime = 0L;
226-
227-
@Override
228-
public void onDisconnected(Text reason) {}
229-
230-
@Override
231-
public ClientConnection getConnection()
232-
{
233-
return manager;
234-
}
235-
});
236-
manager.send(new HandshakeC2SPacket(address.getAddress(), address.getPort(), NetworkState.STATUS));
237-
manager.send(new QueryRequestC2SPacket());
238-
} catch (Exception ignored){}
239-
});
240-
}
241-
242195
public static void applyScissor(Rectangle scissor){
243196
GL11.glEnable(GL11.GL_SCISSOR_TEST);
244197
Window window = MinecraftClient.getInstance().getWindow();

src/main/resources/assets/axolotlclient/lang/en_us.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -108,6 +108,7 @@
108108

109109
"hud": "Hud Options",
110110
"pinghud": "Ping HUD",
111+
"refreshTime": "Refresh Delay",
111112
"cpshud": "CPS HUD",
112113
"cpskeybind": "CPS from Keybinds",
113114
"rightcps": "Show Rightclick Cps",

0 commit comments

Comments
 (0)