diff --git a/src/main/java/net/rubeta/legacyping/ServerThread.java b/src/main/java/net/rubeta/legacyping/ServerThread.java index e656f33..6825c2c 100644 --- a/src/main/java/net/rubeta/legacyping/ServerThread.java +++ b/src/main/java/net/rubeta/legacyping/ServerThread.java @@ -14,7 +14,7 @@ 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}; // Queries end private final ServerSocket serverSocket; private final AtomicBoolean working = new AtomicBoolean(false); @@ -43,9 +43,9 @@ public class ServerThread extends Thread { final OutputStream outputStream = newConnection.getOutputStream(); if (Arrays.equals(RUBETA_MODDED_CLIENT, query)) { this.responseForRuBetaModdedClient(outputStream); - } else if (false) { - - } + } else if (Arrays.equals(LEGACY_PING_B1_8_TO_R1_2_5, query)) { + this.responseForLegacyPing(outputStream); + } newConnection.close(); } catch (IOException ignore) { } @@ -76,4 +76,17 @@ public class ServerThread extends Thread { clientOutput.writeInt(result.size()); clientOutput.write(result.toByteArray()); } + + private void responseForLegacyPing(final OutputStream outputStream) throws IOException { + final DataOutputStream clientOutput = new DataOutputStream(outputStream); + clientOutput.write(255); // Packet 0xFF (PacketDisconnect) + final String response = 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 + } }