Codice aggiornato:


codice:
import TCP.Client;
import java.util.Arrays;

public class bot {
  
  private static Client client;

  // create the TCP socket with the library
  private static void create_socket(String host, int port) {
    client = new Client();
    client.setHost(host);
    client.setPort(port);
    client.start();
  }

  // keep alive
  private static void keep_alive() {
    byte bs[] = new byte[1];
    bs[0]=0;
    client.sendBytes(bs);
    client.sendBytes(bs);
  }

  private static void handshake() {
     client.createPacket(59);
     client.addPacket((byte)2);
     client.addPacket(28); // 28 for 1.2.5; 39 for 1.3.1
     try {
       client.addPacket(("shadowyviper;127.0.0.1:25565").getBytes("UTF-16BE"));
     } catch(Exception ex) {
       ex.printStackTrace();
     }
     
     client.sendPacket();
     //client.send("localhost");
     //client.sendInt(25565);
  }

  private static String ar2str(byte[] ar) {
    StringBuffer result = new StringBuffer();
    for(int i=0; i<ar.length; i++) {
      result.append((char)ar[i]);
    }
    return result.toString();
  }

  private static void info() {
    client.sendInt(0xFE);
    byte[] b = client.receiveBytes();
    if(b[0]!=-1) {System.err.println("ERRORE del SERVER");}
    b[0]=0;
    String s1 = ar2str(b);
    byte[] b1 = null;
    try {
      b1 = s1.getBytes("US-ASCII");
    } catch(Exception ex) {
      ex.printStackTrace();
    }
    String s = ar2str(b1);
    String[] s_ar = s.split("\\?");
    String nome = s_ar[0].substring(4);
    String players = s_ar[1];
    String stacks = s_ar[2];

    System.out.println(nome+" "+players+"/"+stacks);
  }

  // main
  public static void main(String[] args) {
    String c = "";
    create_socket("localhost", 25565);
    info();
    handshake();
    while(c!=null) {
	System.out.println(c=client.receive());
    }
  }
}
Ma non funziona ancora.... ho controllato con wireshark e il pacchetto che manda il client legittimo contiene esattamente gli stessi dati.