From 31d777f6691f0ed0e8be43ae9dda9056b6ba07ba Mon Sep 17 00:00:00 2001 From: Dereku Date: Fri, 10 Mar 2023 05:55:57 +0700 Subject: [PATCH] Ping 1.4-1.5.2 --- .../net/rubeta/legacyping/ServerThread.java | 24 ++++++++++++++++--- 1 file changed, 21 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/rubeta/legacyping/ServerThread.java b/src/main/java/net/rubeta/legacyping/ServerThread.java index 6825c2c..de778c1 100644 --- a/src/main/java/net/rubeta/legacyping/ServerThread.java +++ b/src/main/java/net/rubeta/legacyping/ServerThread.java @@ -14,7 +14,8 @@ public class ServerThread extends Thread { // Queries start private static final byte[] RUBETA_MODDED_CLIENT = new byte[]{0, 0, 0, 1, (byte) 254}; - private static final byte[] LEGACY_PING_B1_8_TO_R1_2_5 = new byte[]{(byte) 254}; + private static final byte[] LEGACY_PING_B1_8_TO_R1_3 = new byte[]{(byte) 254}; + private static final byte[] PING_R1_4_TO_R1_5 = new byte[]{(byte) 254, 1}; // Queries end private final ServerSocket serverSocket; private final AtomicBoolean working = new AtomicBoolean(false); @@ -43,9 +44,11 @@ public class ServerThread extends Thread { final OutputStream outputStream = newConnection.getOutputStream(); if (Arrays.equals(RUBETA_MODDED_CLIENT, query)) { this.responseForRuBetaModdedClient(outputStream); - } else if (Arrays.equals(LEGACY_PING_B1_8_TO_R1_2_5, query)) { + } else if (Arrays.equals(LEGACY_PING_B1_8_TO_R1_3, query)) { this.responseForLegacyPing(outputStream); - } + } else if (Arrays.equals(PING_R1_4_TO_R1_5, query)) { + this.responseForR14Ping(outputStream); + } newConnection.close(); } catch (IOException ignore) { } @@ -89,4 +92,19 @@ public class ServerThread extends Thread { } // Packet data end } + + private void responseForR14Ping(final OutputStream outputStream) throws IOException { + final DataOutputStream clientOutput = new DataOutputStream(outputStream); + clientOutput.write(255); // Packet 0xFF (PacketDisconnect) + final String response = 'ยง' + 1 + + '\u0000' + "b1.7.3m" + '\u0000' + 17 // Protocol version + + '\u0000' + this.minecraftServer.getMotd() + + '\u0000' + this.minecraftServer.getOnlinePlayers().size() + + '\u0000' + this.minecraftServer.getMaxPlayers(); + clientOutput.writeShort(response.length()); + for (char c : response.toCharArray()) { + clientOutput.writeChar(c); + } + // Packet data end + } }