[Komplett] Join-Schilder mit Java-Network und BungeeCord

Hier könnt ihr anderen Leuten helfen, indem ihr Anleitungen oder praktische Codesegmente zur Verfügung stellt.

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon ilouHD » Do 24. Apr 2014, 22:25

TheBuffXY99 hat geschrieben:Wie kann man jetzt mehrere Server anpingen ohne dass Plugin mehrere male zu instalieren?
Freue mich auf euere antwort


Indem du dieses Ding das in deinem Kopf (hoffentlich) drin ist und mal selber überlegst...

Von mir bekommst du NULL Code. Habe ja schon ne ganze Anleitung (für dich) geschrieben
Bild
Benutzeravatar
ilouHD
 
Beiträge: 1733
Registriert: Do 9. Jan 2014, 14:49

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon b4cteria » Fr 25. Apr 2014, 08:37

Hi,
Also müsste man eine Config erstellen in der man mehrere server eintragen kann!? So wie bei dem BungeeCord Schilder PL dass tut man ja auch direct in den plugins ordner des servers??
Benutzeravatar
b4cteria
 
Beiträge: 207
Registriert: Mo 21. Apr 2014, 15:46

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon PostCrafter » Fr 25. Apr 2014, 08:46

Man MUSS gar keine Config verwenden, wer Lust dazu hat könnte auch seine Daten hardcoden oder sonstwo her beziehen. Außerdem denke ich, dass es selbstverständlich ist dass Plugins im plugins-Ordner liegen müssen.
TeamSpeak-Server zur freien Nutzung: postcrafter.de
Benutzeravatar
PostCrafter
Administrator
 
Beiträge: 1443
Registriert: Do 6. Jun 2013, 19:16
Wohnort: Ebersberg

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon Summerfeeling » Sa 26. Apr 2014, 01:29

Hier mal die Pingmethode, die nur 1x ausgeführt werden muss, um alle Daten zu bekommen. Anscheind ist sie ja nicht im Tutorial, obwohl sie es laut marcsven's Beitrag sein sollte.^^

Code: Alles auswählen
  1.    @SuppressWarnings("resource")
  2.    public String[] ping() {
  3.       try{
  4.          Socket socket = new Socket();
  5.          OutputStream os;
  6.          DataOutputStream dos;
  7.          InputStream is;
  8.          InputStreamReader isr;
  9.          
  10.          socket.setSoTimeout(2500);
  11.          socket.connect(new InetSocketAddress(host, port));
  12.          
  13.          os = socket.getOutputStream();
  14.          dos = new DataOutputStream(os);
  15.          
  16.          is = socket.getInputStream();
  17.          isr = new InputStreamReader(is, Charset.forName("UTF-16BE"));
  18.          
  19.          dos.write(new byte[]{
  20.                (byte) 0xFE,
  21.                (byte) 0x01
  22.          });
  23.          
  24.          int packetID = is.read();
  25.          
  26.          if(packetID == -1) {
  27.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cInvalid packet ID! (End of Stream)");
  28.          }
  29.          
  30.          if(packetID != 0xFF) {
  31.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cInvalid packet ID! (" + packetID + ")");
  32.          }
  33.          
  34.          int length = isr.read();
  35.          
  36.          if(length == -1) {
  37.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cEnd of stream.");
  38.          }
  39.          
  40.          if(length == 0) {
  41.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cInvalid length");
  42.          }
  43.          
  44.          char[] chars = new char[length];
  45.          
  46.          if(isr.read(chars, 0, length) != length) {
  47.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cEnd of Stream");
  48.          }
  49.          
  50.          String string = new String(chars);
  51.          String[] data = string.split("\0");
  52.          
  53.          return new String[] { data[3], data[4], data[5] };
  54.          
  55.       }catch(Exception e) { }
  56.       return null;
  57.    }


Verwendung:
Code: Alles auswählen
  1. String[] datas = new Ping("127.0.0.1", 25565).ping();
  2. String motd = datas[0];
  3. int on = Integer.valueOf(datas[1]);
  4. int max = Integer.valueOf(datas[2]);
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon PostCrafter » Sa 26. Apr 2014, 10:32

Auch wenn das so natürlich funktioniert würde ich es doch eher so gestalten:
PostCrafter hat geschrieben:Ping den Server einfach einmal mithilfe einer ping-Methode an, lies die Daten aus der Antwort aus und setze sie in Felder. Danach kannst du mithilfe von weiteren Methoden die Daten aus den Feldern auslesen.
Um die Daten zu aktualisieren muss einfach nur die ping-Methode erneut (einmal) ausgeführt werden.
TeamSpeak-Server zur freien Nutzung: postcrafter.de
Benutzeravatar
PostCrafter
Administrator
 
Beiträge: 1443
Registriert: Do 6. Jun 2013, 19:16
Wohnort: Ebersberg

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon Summerfeeling » Sa 26. Apr 2014, 11:05

PostCrafter hat geschrieben:Auch wenn das so natürlich funktioniert würde ich es doch eher so gestalten:
PostCrafter hat geschrieben:Ping den Server einfach einmal mithilfe einer ping-Methode an, lies die Daten aus der Antwort aus und setze sie in Felder. Danach kannst du mithilfe von weiteren Methoden die Daten aus den Feldern auslesen.
Um die Daten zu aktualisieren muss einfach nur die ping-Methode erneut (einmal) ausgeführt werden.


Code: Alles auswählen
  1. package de.Summerfeeling.CreepySigns;
  2. import java.io.DataOutputStream;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.io.OutputStream;
  6. import java.net.InetSocketAddress;
  7. import java.net.Socket;
  8. import java.nio.charset.Charset;
  9. import org.bukkit.Bukkit;
  10. public class CreepyPing {
  11.    
  12.    private String host;
  13.    private int port;
  14.    
  15.    private boolean online;
  16.    private String motd;
  17.    private int onlinePlayers;
  18.    private int maxPlayers;
  19.    
  20.    public CreepyPing() {
  21.       this.host = "localhost";
  22.       this.port = 25565;
  23.    }
  24.    
  25.    public CreepyPing(String host) {
  26.       this.host = host;
  27.       this.port = 25565;
  28.    }
  29.    
  30.    public CreepyPing(String host, int port) {
  31.       this.host = host;
  32.       this.port = port;
  33.    }
  34.    
  35.    public String getHost() {
  36.       return this.host;
  37.    }
  38.    
  39.    public void setHost(String arg0) {
  40.       this.host = arg0;
  41.    }
  42.    
  43.    public int getPort() {
  44.       return this.port;
  45.    }
  46.    
  47.    public void setPort(int arg0) {
  48.       this.port = arg0;
  49.    }
  50.    
  51.    public String getMOTD() {
  52.       return this.motd;
  53.    }
  54.    
  55.    public boolean isOnline() {
  56.       return this.online;
  57.    }
  58.    
  59.    public int getOnlinePlayers() {
  60.       return this.onlinePlayers;
  61.    }
  62.    
  63.    public int getMaxPlayers() {
  64.       return this.maxPlayers;
  65.    }
  66.    
  67.    public void setMOTD(String motd) {
  68.       this.motd = motd;
  69.    }
  70.    
  71.    public void setOnline(boolean online) {
  72.       this.online = online;
  73.    }
  74.    
  75.    public void setOnlinePlayers(int players) {
  76.       this.onlinePlayers = players;
  77.    }
  78.    
  79.    public void setMaxPlayers(int players) {
  80.       this.maxPlayers = players;
  81.    }
  82.    
  83.    @SuppressWarnings("resource")
  84.    public void ping() {
  85.       try{
  86.          Socket socket = new Socket();
  87.          OutputStream os;
  88.          DataOutputStream dos;
  89.          InputStream is;
  90.          InputStreamReader isr;
  91.          
  92.          socket.setSoTimeout(2500);
  93.          socket.connect(new InetSocketAddress(host, port));
  94.          
  95.          os = socket.getOutputStream();
  96.          dos = new DataOutputStream(os);
  97.          
  98.          is = socket.getInputStream();
  99.          isr = new InputStreamReader(is, Charset.forName("UTF-16BE"));
  100.          
  101.          dos.write(new byte[]{
  102.                (byte) 0xFE,
  103.                (byte) 0x01
  104.          });
  105.          
  106.          int packetID = is.read();
  107.          
  108.          if(packetID == -1) {
  109.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cInvalid packet ID! (End of Stream)");
  110.          }
  111.          
  112.          if(packetID != 0xFF) {
  113.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cInvalid packet ID! (" + packetID + ")");
  114.          }
  115.          
  116.          int length = isr.read();
  117.          
  118.          if(length == -1) {
  119.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cEnd of stream.");
  120.          }
  121.          
  122.          if(length == 0) {
  123.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cInvalid length");
  124.          }
  125.          
  126.          char[] chars = new char[length];
  127.          
  128.          if(isr.read(chars, 0, length) != length) {
  129.             Bukkit.getConsoleSender().sendMessage("§a§l[CreepyGames] §cEnd of Stream");
  130.          }
  131.          
  132.          String string = new String(chars);
  133.          String[] data = string.split("\0");
  134.          
  135.          try{
  136.             this.setMOTD(data[3]);
  137.             this.setOnline(this.getMOTD() != null);
  138.             this.setOnlinePlayers(Integer.valueOf(data[4]));
  139.             this.setMaxPlayers(Integer.valueOf(data[5]));
  140.          }catch(Exception ce) {
  141.             this.setMOTD(null);
  142.             this.setOnline(false);
  143.             this.setOnlinePlayers(0);
  144.             this.setMaxPlayers(0);
  145.          }
  146.          
  147.       }catch(Exception e) {
  148.          this.setMOTD(null);
  149.          this.setOnline(false);
  150.          this.setOnlinePlayers(0);
  151.          this.setMaxPlayers(0);
  152.       }
  153.    }
  154.    
  155. }

So besser? :D
Grüße
Summerfeeling | Timo
Benutzeravatar
Summerfeeling
 
Beiträge: 1300
Registriert: Sa 15. Jun 2013, 18:43
Wohnort: Viersen

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon Sep2703 » Do 1. Mai 2014, 15:06

Wir haben hier ja nun die Motd, Max-Players und Online-Players herausbekommen.
Es wird ja ein Array zurückgegeben, wo die Felder 3,4 und 5 diese Daten enthalten.

Kann man noch weitere Informationen von einem Server bekommen?
Also beispielweise (wird wahrscheinlich nicht funktionieren), welche Plugins installiert sind?

Also einfach noch weitere Informationen.

Würde mich einmal interessieren.
Du möchtest programmieren lernen oder dein Bukkit-/Spigot-Wissen erweitern?
Hier habe ich für dich kostenlose Tutorials: https://youtube.com/janhektor
Benutzeravatar
Sep2703
 
Beiträge: 677
Registriert: Mi 8. Jan 2014, 15:13
Wohnort: 127.0.0.1

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon ilouHD » So 18. Mai 2014, 13:58

Sep2703 hat geschrieben:Wir haben hier ja nun die Motd, Max-Players und Online-Players herausbekommen.
Es wird ja ein Array zurückgegeben, wo die Felder 3,4 und 5 diese Daten enthalten.

Kann man noch weitere Informationen von einem Server bekommen?
Also beispielweise (wird wahrscheinlich nicht funktionieren), welche Plugins installiert sind?

Also einfach noch weitere Informationen.

Würde mich einmal interessieren.


Meinen test nach, wird folgendes ausgegeben:
Code: Alles auswählen
  1. data1 = Unknown
  2. data2: Version
  3. data3: motd
  4. data4: online
  5. data5: max


bisher konnte ich es nur mit 5 datas testen sobald ich data[6] nehme, gibt es nullpointerexception
Bild
Benutzeravatar
ilouHD
 
Beiträge: 1733
Registriert: Do 9. Jan 2014, 14:49

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon Jofkos » So 18. Mai 2014, 14:44

Wenn man enable-query in der server.properties an hat, kann man auch Plugins und Spieler (Liste der Spielernamen) herauskriegen.
Hier wird die Antwort auf das Query gesendet (markierte Zeilen): Github RemoteStatusListener.java
Gesendet wird: (Link immer zur Zeile wo es in die Antwort geschrieben wird)
Ob das hier benutze Skript die Query-Funktion nutzt, oder ob es "nur" den Server anspricht als wäre es ein Minecraft-Client weiss ich nicht.
Mit der Query-Funktion könnte man jedensfalls viel infos vom Server bekommen
Jofkos

...........

..Bild
Benutzeravatar
Jofkos
 
Beiträge: 1537
Registriert: So 16. Jun 2013, 22:45

Re: [Komplett] Join-Schilder mit Java-Network und BungeeCord

Beitragvon Admiral_Zott » Do 24. Jul 2014, 15:02

Wie könnte mann den dann diese QuerryFunktion nutzen? Muss mann sich da auch die ausgegebenen bytes holen? zb byte[7] oder so?
MFG
Benutzeravatar
Admiral_Zott
 
Beiträge: 220
Registriert: Do 10. Apr 2014, 11:56
Wohnort: Zu Hause

VorherigeNächste

Zurück zu Anleitungen

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 3 Gäste

cron