Seite 6 von 7

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

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

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

BeitragVerfasst: Mo 26. Jan 2015, 17:04
von Admiral_Zott
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");

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

BeitragVerfasst: Mo 26. Jan 2015, 17:42
von BlueZeroHD
Hey Admiral_Zott,

vielen Dank, für eine Antwort.

Jetz bin ich ein Stück schlauer geworden ;)

VG
~BlueZeroHD

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

BeitragVerfasst: Mo 26. Jan 2015, 18:47
von M4x3los
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.    }

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

BeitragVerfasst: Mo 26. Jan 2015, 19:34
von Jofkos
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.    }

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

BeitragVerfasst: Sa 30. Mai 2015, 00:51
von IcySkill
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.

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

BeitragVerfasst: Sa 30. Mai 2015, 09:56
von ilouHD
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.

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

BeitragVerfasst: Sa 30. Mai 2015, 11:08
von IcySkill
@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.

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

BeitragVerfasst: Sa 30. Mai 2015, 12:23
von ilouHD
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.                   }

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

BeitragVerfasst: Sa 30. Mai 2015, 15:52
von IcySkill
@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.