Bukkit Server Anpingen... MOTD?!

11/02/2014 17:23 LuisKillergurke#1
Hey Leute,

ich bin dabei ein "JoinSigns"-Plugin für BungeeCord zu Programmieren, welches in einer Config eingestellte Server anpingt und unter anderem das MOTD ausliest.
Auf den einzelnen Servern wird das MOTD mit dem ServerListPingEvent geändert.

Vorweg: Google hat mir gesagt, das der Fehler an meiner Ping-Klasse liege.

Hier die Ping-Klasse:
Code:
public class Ping 
{
	public static String motd;
	public static int playercount;
	public static int maxplayers;
	public static boolean online;
	public static void ping(String address, int port)
	{
        try
        {
           InetSocketAddress isa = new InetSocketAddress(address, port);
           Socket socket = new Socket();
           OutputStream outputStream;
           DataOutputStream dataOutputStream;
           InputStream inputStream;
           InputStreamReader inputStreamReader;
           socket.setSoTimeout(4000);
           socket.connect(isa, 4000);
           outputStream = socket.getOutputStream();
           dataOutputStream = new DataOutputStream(outputStream);
           inputStream = socket.getInputStream();
           inputStreamReader = new InputStreamReader(inputStream,Charset.forName("UTF-16BE"));
           dataOutputStream.write(new byte[]{(byte) 0xFE,(byte) 0x01});
           int packetId = inputStream.read();
           if(packetId == -1)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Premature end of stream.");
           }
           if(packetId != 0xFF)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Invalid packet ID (" + packetId + ").");
           }
           int length = inputStreamReader.read();
           if(length == -1)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Premature end of stream.");
           }
           if(length == 0)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Invalid string length.");
           }
           char[] chars = new char[length];
           if(inputStreamReader.read(chars,0,length) != length)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Premature end of stream.");
           }
           String string = new String(chars);
           if(string.startsWith("§"))
           {
              String[] data = string.split("\0");
              motd = data[3];
              playercount = Integer.parseInt(data[4]);
              maxplayers = Integer.parseInt(data[5]);
           }
           else{
              String[] data = string.split("§");
              motd = data[0];
              playercount = Integer.parseInt(data[1]);
              maxplayers = Integer.parseInt(data[2]);
           }
           online = true;
           dataOutputStream.close();
           outputStream.close();
           inputStreamReader.close();
           inputStream.close();
           socket.close();
        }
        catch (SocketException exception)
        {
            online = false;
        }
        catch (IOException exception)
        {
            online = false;
        }
	 }
}
Ich freue mich über jeden Hinweis :)

Mit freundlichen Grüßen,
LuisKillergurke
11/02/2014 17:34 ComputerBaer#2
Reden wir hier von Minecraft 1.6 und älter oder von 1.7 und neuer? Dann deine Klasse ist für 1.6 und älter, bei 1.7 wurde das komplett verändert und viele Server reagieren nicht mehr auf den alten Ping.
11/02/2014 17:42 LuisKillergurke#3
Oh :O

Tatsächlich sind die Server für 1.7 und älter, bzw. die neueste Spigot Version welche auch das Joinen von 1.8-Clients möglich macht.

Übrigens Danke für die wirklich extrem schnelle Antwort! :D

Mit freundlichen Grüßen,
LuisKillergurke
11/03/2014 18:07 LuisKillergurke#4
Ahh ok ich hab jetzt einen Entsprechenden Ping mit Handshakes. Dieser gibt sämtliche informationen jedoch zwischen zwei "" aus. Diese kann ich aber ja nicht mit

String.replace(""", "");

ersetzten, da er den String dann ja nicht als solchen erkennt...
Auch bei google habe ich nichts entsprechendes gefunden...

Weis jemand wie man das Regelt?
Vielen Dank im Vorraus? :D
Mit freundlichen Grüßen
LuisKillergurke

//Edit:

Bin auch doof, das erste geht ja mit String.substring(1);
Aber am ende weis ich nicht wie ich das hinbekomme :/
11/03/2014 18:43 ComputerBaer#5
String.replace("\"", "");

Das Antwork-Paket sollte eigentlich einen JSON-String liefern und wenn du den "dekodierst" sollten da keine Anführungszeichen mehr sein.
11/03/2014 19:03 LuisKillergurke#6
Ok Danke! :D

Mit dem Decodieren guck ich mal wie ich das hinbekomme xD

Vielen Dank für die Hilfe, kann Jetzt geclosed werden...
Kein Plan wie man das macht aber ich versuche jetzt einfach mal mit
#closerequest
11/03/2014 19:40 ComputerBaer#7
Ein Moderator muss das Thema schließen, also mache ich das hier gleich mal.