Mit Bukkit alle Spieler von BungeeCord abfragen?

Wenn ihr bei eurem Plugin nicht weiter kommt, könnt ihr hier euer Problem beschreiben und um Hilfe bitten.

Mit Bukkit alle Spieler von BungeeCord abfragen?

Beitragvon Chriis » Sa 28. Mai 2016, 11:07

Hallöchen!

Ich bin derzeit an einem Lobbysystem und bin nun auf folgendes Problem gestoßen.
Ich möchte, dass auf dem Scoreboard die Spieler stehen die auf dem Netzwerk online sind (Alle die auf BungeeCord connecten).
Nun müsste ich gerne wie ich das genau machen sollte.

Ich könnte von jedem Server die Spieler abfangen (writeUTF) und diese dann addieren, das wäre aber bei mehr als 30 Servern ein wenig Arbeit und deshalb frage ich hier ob es denn nicht einfacher geht :D

Für weitere Fragen bin ich gerne offen!

LG
Chriis
Benutzeravatar
Chriis
 
Beiträge: 1
Registriert: Sa 28. Mai 2016, 11:00

Re: Mit Bukkit alle Spieler von BungeeCord abfragen?

Beitragvon monst12 » Sa 28. Mai 2016, 13:02

Hey,

das lässt sich sehr einfach mit den Plugin Messages zwischen eben einem Server und dem BungeeCord lösen. Dafür bräuchtest du einfach in deinem Lobby-System einen Listener, der auf ankommende Nachrichten vom BungeeCord wartet.
So aber auch andersherum ein BungeeCord Plugin, das fähig ist auf eine eigene Abfrage eine Antwort zu schicken. Hier wird ebenfalls ein Listener im BC-Plugin eingesetzt, der auf Nachrichten aus der Lobby wartet und bei ankommender Anfrage diese bearbeitet und ggf. eine Antwort sendet. Dazu gibt es hier ein gutes Tutorial.
Dann kannst du in dem BungeeCord Listener mittels der ProxiedPlayer-Liste alle auf dem Proxy verbundenen Spieler ermitteln und die Zahl als Antwort zurücksenden.
Zudem empfehle ich noch dich mit der Frage zu befassen, wann letztendlich ein Update der Spielerzahlen nötig ist. (Beim Join, Beim Leave, Alle X Sekunden, .?.)
Soweit die Theorie.

MfG
monst12
Benutzeravatar
monst12
 
Beiträge: 239
Registriert: Sa 19. Apr 2014, 22:14

Re: Mit Bukkit alle Spieler von BungeeCord abfragen?

Beitragvon DevToLearn » Di 12. Jul 2016, 09:02

Verwende einfach diese Methode um die maximalen Server-Slots zu bekommen:
Code: Alles auswählen
  1. @SuppressWarnings("resource")
  2.    public static int getMaxServerSlots(String IP, int port) {
  3.       int maxPlayers = -1;
  4.       try {
  5.          Socket sock = new Socket(IP, port);
  6.          
  7.          DataOutputStream out = new DataOutputStream(sock.getOutputStream());
  8.          DataInputStream in = new DataInputStream(sock.getInputStream());
  9.          
  10.          out.write(0xFE);
  11.          
  12.          int b;
  13.          StringBuffer str = new StringBuffer();
  14.          while ((b = in.read()) != -1) {
  15.             if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) {
  16.                str.append((char) b);            
  17.             }
  18.          }
  19.          String[] data = str.toString().split("§");
  20.          
  21.          maxPlayers = Integer.parseInt(data[2]);
  22.       } catch (UnknownHostException e) {
  23.          return -1;
  24.       } catch (IOException e1) {
  25.          return -1;
  26.       }
  27.       return maxPlayers;
  28.    }


Und diese Methode um der online Spieler zu bekommen:
Code: Alles auswählen
  1.    @SuppressWarnings("resource")
  2.    public static int getOnlinePlayers(String IP, int port) {
  3.       int onlinePlayers = -1;
  4.       try {
  5.          Socket sock = new Socket(IP, port);
  6.          
  7.          DataOutputStream out = new DataOutputStream(sock.getOutputStream());
  8.          DataInputStream in = new DataInputStream(sock.getInputStream());
  9.          
  10.          out.write(0xFE);
  11.          
  12.          int b;
  13.          StringBuffer str = new StringBuffer();
  14.          while ((b = in.read()) != -1) {
  15.             if (b != 0 && b > 16 && b != 255 && b != 23 && b != 24) {
  16.                str.append((char) b);
  17.             }
  18.          }
  19.          
  20.          String[] data = str.toString().split("§");         
  21.          
  22.          onlinePlayers = Integer.parseInt(data[1]);
  23.       } catch (UnknownHostException e) {
  24.          return -1;
  25.       } catch (IOException e1) {
  26.          return -1;
  27.       }
  28.       
  29.       return onlinePlayers;
  30.    }
Benutzeravatar
DevToLearn
 
Beiträge: 15
Registriert: So 13. Mär 2016, 10:20


Zurück zu Hilfe und Support

Wer ist online?

Mitglieder in diesem Forum: Majestic-12 [Bot], MSN [Bot] und 22 Gäste