[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 BlueZeroHD » Mo 26. Jan 2015, 16:27

Hey,

ich habe eine Frage:

Wenn ich auf einem Server das ServerListPingEvent ausführe, wird in der Lobby der Motd nicht auf dem Schild angezeigt. Nur, wenn man den Motd in den server.properties umändert. Funktioniert es nicht mehr?

VG
~BlueZeroHD
Benutzeravatar
BlueZeroHD
 
Beiträge: 78
Registriert: Mi 26. Feb 2014, 00:02

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

Beitragvon Admiral_Zott » Mo 26. Jan 2015, 17:04

BlueZeroHD hat geschrieben:Hey,

ich habe eine Frage:

Wenn ich auf einem Server das ServerListPingEvent ausführe, wird in der Lobby der Motd nicht auf dem Schild angezeigt. Nur, wenn man den Motd in den server.properties umändert. Funktioniert es nicht mehr?

VG
~BlueZeroHD

Du musst die MOTD bisschen anders setzten:
Code: Alles auswählen
  1. ((CraftServer)Bukkit.getServer()).getServer().setMotd("DEINE MOTD");
Benutzeravatar
Admiral_Zott
 
Beiträge: 220
Registriert: Do 10. Apr 2014, 11:56
Wohnort: Zu Hause

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

Beitragvon BlueZeroHD » Mo 26. Jan 2015, 17:42

Hey Admiral_Zott,

vielen Dank, für eine Antwort.

Jetz bin ich ein Stück schlauer geworden ;)

VG
~BlueZeroHD
Benutzeravatar
BlueZeroHD
 
Beiträge: 78
Registriert: Mi 26. Feb 2014, 00:02

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

Beitragvon M4x3los » Mo 26. Jan 2015, 18:47

Code: Alles auswählen
  1. public void setMotd(String s) {
  2.       try {
  3.          Class<?> nms = Class.forName("net.minecraft.server."
  4.                + getServerVersion() + ".MinecraftServer");
  5.          Field f1 = nms.getDeclaredField("motd");
  6.          f1.setAccessible(true);
  7.          Field server = Class.forName(
  8.                "org.bukkit.craftbukkit." + getServerVersion()
  9.                      + ".CraftServer").getDeclaredField("console");
  10.          server.setAccessible(true);
  11.          f1.set(server.get(Bukkit.getServer()), s);
  12.       } catch (Exception e) {
  13.       }



Update sicher ^^


getServerVersion() :
Code: Alles auswählen
  1.    public static String getServerVersion() {
  2.       Pattern brand = Pattern.compile("(v|)[0-9][_.][0-9][_.][R0-9]*");
  3.       String pkg = Bukkit.getServer().getClass().getPackage().getName();
  4.       String version = pkg.substring(pkg.lastIndexOf('.') + 1);
  5.       if (!brand.matcher(version).matches()) {
  6.          version = "";
  7.       }
  8.       return version;
  9.    }
Benutzeravatar
M4x3los
 
Beiträge: 33
Registriert: Mo 30. Jun 2014, 14:34

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

Beitragvon Jofkos » Mo 26. Jan 2015, 19:34

MaxBukkit hat geschrieben:getServerVersion() :
Code: Alles auswählen
  1.    public static String getServerVersion() {
  2.       Pattern brand = Pattern.compile("(v|)[0-9][_.][0-9][_.][R0-9]*");
  3.       String pkg = Bukkit.getServer().getClass().getPackage().getName();
  4.       String version = pkg.substring(pkg.lastIndexOf('.') + 1);
  5.       if (!brand.matcher(version).matches()) {
  6.          version = "";
  7.       }
  8.       return version;
  9.    }
so würde es auch schon gehen:
Code: Alles auswählen
  1.    public static String getServerVersion() {
  2.       return Bukkit.getServer().getClass().getPackage().getName().split("\\.")[3];
  3.    }
Jofkos

...........

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

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

Beitragvon IcySkill » Sa 30. Mai 2015, 00:51

Hey,

nachdem es jetzt schon mehrmals angesprochen wurde, würde es mich schon interessieren, wie ich diese ganze Klasse für mehrere Server umprogrammiere. Ich hatte das schon in einer älteren Version eines Server-Signs Plugins, welches ich auch hier im Forum gefunden hatte. Ich habe schon versucht, das selbst zu programmieren, aber ich scheitere immer daran, herauszufinden, welcher Server zu welchem Schild gehört. Ich hatte die Server vorher in eine Config eingetragen und beim erstellen eines Schildes wurde der Name auf dem Schild mit dem namen in der Config verglichen und somit die Koordinaten des Schildes ermittelt. Diese wurden dann auch in diese Config zu dem dazugehörigen Server eingespeichert. Und dann kommt der Teil mit dem Updaten und ja ... weiter komme ich einfach nicht. :/

Hier ein Beispiel wie die Config aussieht:

Code: Alles auswählen
  1. Server:
  2.     server1: //(Servername) manuell eingetragen
  3.         address: 127.0.0.1 //(Server Adresse) manuell eingetragen
  4.         port: "25565" //(Server Port) manuell eingetragen
  5.             location:
  6.                 locX: 100 //(Koordinate X des dazugehörigen Schildes) eingetragen durch das Erstellen des Schildes
  7.                 locY: 100 //(Koordinate Y des dazugehörigen Schildes) eingetragen durch das Erstellen des Schildes
  8.                 locZ: 50 //(Koordinate Z des dazugehörigen Schildes) eingetragen durch das Erstellen des Schildes
  9.     server2:
  10.         address: .... // Und so weiter ...


Es würde mich sehr freuen und weiterbringen, wenn jemand von euch das mal zeigen könnte.

Vielen Dank schon mal im Voraus.
Mit freundlichen Grüßen

- IcySkill
Benutzeravatar
IcySkill
 
Beiträge: 153
Registriert: Do 12. Feb 2015, 15:23
Wohnort: Baden-Württemberg

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

Beitragvon ilouHD » Sa 30. Mai 2015, 09:56

Wir brauchen das ja nicht mehr privat regeln ^^

Was ist denn der große Vorteil an Java? Richtig: OOP (Objekt Orientiertes Programmieren)
Ich weis gerade nicht, wie deine Klasse aussieht, bzw. die Klasse des Tutorials. Ich zeige es aber mal an meiner Klasse.

Zu aller erst habe ich eine Klasse die StatusSign heißt. Danach habe ich in der Main eine ArrayList erstellt:
Bild
In der StatusSign-Klasse sieht das ganze so aus:
Bild

Der Konstruktor enthält für das Sign alle nötigen Informationen. Ein neues StatusSign kannst du dann so der ArrayList hinzufügen:
Code: Alles auswählen
  1. signs.add(new Statussign(location, name, ip, port));

Das ganze speichern wir in MySQL. Du kannst das ja nach deinem Format speichern.

Dann folgt die ping-Methode in der SstatusSign-Class, die auf jeden Fall auf der 1. Seite steht
Das updaten geht dann einfach per forEach:
Bild
Das auslesen der Schilder aus einer config könntest du dann mit einer ConfigurationSection machen. Ich empfehle aber dennoch den Weg über MySQL.
Bild
Benutzeravatar
ilouHD
 
Beiträge: 1733
Registriert: Do 9. Jan 2014, 14:49

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

Beitragvon IcySkill » Sa 30. Mai 2015, 11:08

@ilouHD

Erstmal Dank das du dich so schnell zurück gemeldet hast. über MySQL willich es derzeicht nicht machen, da meine MySQL Datenbank sehr langsam ist und ich sie nicht noch weiter belasten möchte. Jedoch kapiere/weiß ich immer noch nicht, wie ich ich das alles aus der Config getten, in die ArrayList einfügen und updaten soll. Wie man merkt, habe ich mich sowas noch nie befasst.

Habe den Code jetzt raus genommen, weil hier ja niemand einfach copy/paste machen, sondern das auch verstehen soll.
Zuletzt geändert von IcySkill am Fr 12. Jun 2015, 16:36, insgesamt 1-mal geändert.
Mit freundlichen Grüßen

- IcySkill
Benutzeravatar
IcySkill
 
Beiträge: 153
Registriert: Do 12. Feb 2015, 15:23
Wohnort: Baden-Württemberg

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

Beitragvon ilouHD » Sa 30. Mai 2015, 12:23

Dein PingServer ist eigentlich meine StatusSign-Class nur mit dem Unterschied, dass ich die Location des Signs mit übergebe.

Das Problem wäre jetzt, wenn ich die StatusSign-Class schicken würde, dass es manche im Team gibt, die die nicht verbreiten wollen. Ich müsste dir dann eine eigene schreiben und diese Zeit habe ich gerade nicht.

Die Schilder könntest du aus der config in etwa so auslesen:
(aus nem älteren Plugin, wo ich das getestet habe (path und so muss angepasst werden)):
Code: Alles auswählen
  1. for(String str : cfg.getKeys(false)) {
  2.                   ConfigurationSection s = cfg.getConfigurationSection( str );
  3.                   
  4.                   ConfigurationSection l = s.getConfigurationSection("location");
  5.                   World w = Bukkit.getWorld(l.getString("world"));
  6.                   double x = l.getDouble("x"), y = l.getDouble("y"), z = l.getDouble("z");
  7.                   
  8.                   Location location = new Location( w, x, y, z );
  9.                   
  10.                   if(location.getBlock() != null) {
  11.                      signs.add(new StatusSign(location, s.getString("name"), s.getString("ip"), s.getInt("port") ) );
  12.                }
  13.                   }
Bild
Benutzeravatar
ilouHD
 
Beiträge: 1733
Registriert: Do 9. Jan 2014, 14:49

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

Beitragvon IcySkill » Sa 30. Mai 2015, 15:52

@ilouHD

Danke mal wieder für deine Antwort. Das du diese Methode nicht öffentlich stellen willst und kannst - ist mir völlig klar (würde ich auch nicht wollen). Ich versuche das jetzt erst nochmal selbst.
Mit freundlichen Grüßen

- IcySkill
Benutzeravatar
IcySkill
 
Beiträge: 153
Registriert: Do 12. Feb 2015, 15:23
Wohnort: Baden-Württemberg

VorherigeNächste

Zurück zu Anleitungen

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot] und 1 Gast