Coding mit Java | Java-basierten APIs

  • Ersteller Ersteller ij9F_i0FaF-d9lrDSDDpDbfo
  • Erstellt am Erstellt am
Status
Für weitere Antworten geschlossen.
Das hier ist der Code:

Code:
Player player = e.getPlayer();


if(player.getWorld().getBlockAt(1, 1, 1).equals(Material.QUARTZ_BLOCK)) {

player.getWorld().getBlockAt(1, 1, 1).setType(Material.CHEST);

}



Ich möchte aber, dass er die ganze Welt nach Quartz Blöcken überprüft, nicht nur einzelne Locations.
Hilfe pls
 
Das hier ist der Code:

Code:
Player player = e.getPlayer();


if(player.getWorld().getBlockAt(1, 1, 1).equals(Material.QUARTZ_BLOCK)) {

player.getWorld().getBlockAt(1, 1, 1).setType(Material.CHEST);

}



Ich möchte aber, dass er die ganze Welt nach Quartz Blöcken überprüft, nicht nur einzelne Locations.
Hilfe pls
 
Hey Leute,

ich bin dabei ein "JoinSigns"-Plugin für BungeeCord zu Programmieren, welches in einer Config eingestellte Server anpingt und unter anderem das MOTD ausliest.
Auf den einzelnen Servern wird das MOTD mit dem ServerListPingEvent geändert.
Ich beckomme dan aber nur die MOTD die in der Server Properties-Datei gespeichert wird.
Also meine frage wie beckomme ich die MOTD die mit dem ServerListPingEvent auf dem anderen Server geändert wird?

Hier ist mein ping code:

Code:
    public void ping(){
        try
        {
           InetSocketAddress isa = new InetSocketAddress(ip, port);
           Socket socket = new Socket();
           OutputStream outputStream;
           DataOutputStream dataOutputStream;
           InputStream inputStream;
           InputStreamReader inputStreamReader;
           socket.setSoTimeout(4000);
           socket.connect(isa, 4000);
           outputStream = socket.getOutputStream();
           dataOutputStream = new DataOutputStream(outputStream);
           inputStream = socket.getInputStream();
           inputStreamReader = new InputStreamReader(inputStream,Charset.forName("UTF-16BE"));
           dataOutputStream.write(new byte[]{(byte) 0xFE,(byte) 0x01});
           int packetId = inputStream.read();
           if(packetId == -1)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Premature end of stream.");
           }
           if(packetId != 0xFF)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Invalid packet ID (" + packetId + ").");
           }
           int length = inputStreamReader.read();
           if(length == -1)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Premature end of stream.");
           }
           if(length == 0)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Invalid string length.");
           }
           char[] chars = new char[length];
           if(inputStreamReader.read(chars,0,length) != length)
           {
              dataOutputStream.close();
              outputStream.close();
              inputStreamReader.close();
              inputStream.close();
              socket.close();
              throw new IOException("Premature end of stream.");
           }
           String string = new String(chars);
           if(string.startsWith("§"))
           {
              String[] data = string.split("\0");
              motd = data[3];
              playercount = Integer.parseInt(data[4]);
              maxplayers = Integer.parseInt(data[5]);
           }
           else{
              String[] data = string.split("§");
              motd = data[0];
              playercount = Integer.parseInt(data[1]);
              maxplayers = Integer.parseInt(data[2]);
           }
           online = true;
           dataOutputStream.close();
           outputStream.close();
           inputStreamReader.close();
           inputStream.close();
           socket.close();
        }
        catch (SocketException exception)
        {
            online = false;
        }
        catch (IOException exception)
        {
            online = false;
        }
     }

MFG
Pandada
 
Das hier ist der Code:

Code:
Player player = e.getPlayer();


if(player.getWorld().getBlockAt(1, 1, 1).equals(Material.QUARTZ_BLOCK)) {

player.getWorld().getBlockAt(1, 1, 1).setType(Material.CHEST);

}



Ich möchte aber, dass er die ganze Welt nach Quartz Blöcken überprüft, nicht nur einzelne Locations.
Hilfe pls


Du könntest das ChunkLoadEvent nutzen und durch die Blöcke des Chunks iterieren. Das wird nur leider sehr Resourcenlastig sein, weshalb du nur schon früher geladene Chunks mutzen solltest, welche ja beim laden einer Welt geladen werden, also beim Start des Servers und im weiteren Verlauf nicht weiter stören. Ich selber habe das noch nicht ausprobiert und garantiere für nichts, aber logisch klingt es auf jeden Fall! :)
 
Hey, ich habe mal eine Frage, wie ich Spieler auf andere Server teleportieren kann? Ich möchte jemandem vom Server "SG" auf den Server "LOBBY" teleportieren.

MfG Pecho
 
Pecho, die Vorrausetzung die du für soetwas brauchst ist BungeeCord. Das ist ein Proxy, auf den sich die Spieler verbinden und von dort aus, werden die Spieler auf die jeweiligen Spigot Server verbunden.

Also richte erstmal BungeeCord ein :)
 
In deinen Befehl oder Event:

ByteArrayOutputStream b = new ByteArrayOutputStream();

DataOutputStream out = new DataOutputStream(b);

try {

out.writeUTF("Connect");

out.writeUTF("SERVERNAME");

}

catch(IOException ex) {

ex.printStackTrace();

}

p.sendMessage("Verbinden...");

p.sendPluginMessage(plugin, "BungeeCord", b.toByteArray());



Das hier kommt in onEnable():

Bukkit.getMessenger().registerOutgoingPluginChannel(this, "BungeeCord");

Bin am Handy, es können Fehler drin sein!
 
Hallo @Pecho,

Wie @Digot schon erwähnte solltest du dir, sofern du dies noch nicht getan hast, einen BungeeCord Server einrichten. Dieser dient dann als Verbindungsstück zwischen deinen verschiedenen Server. Wie du diesen einrichtest werde ich dir hier jetzt nicht schreiben, da das ganze dann zu unfangreich wird. Du solltest jedoch massenweise Tutorials im Internet und explizit auf YouTube bezogen finden können.

Kommen wir jetzt zum Programmieren dieser Funktion, also Spieler auf verschiedene Server zu senden.

Als erstes solltest du den Messaging Channel 'BungeeCord' registrieren. Das machst du am besten in deiner onEnable() Methode mit folgender Zeile:

Code:
Bukkit.getServer().getMessenger().registerOutgoingPluginChannel(<Instanz der Hauptklasse>, "BungeeCord");

Damit hättest du schon einmal die Grundvoraussetzung geschaffen, BungeeCord zu nutzen.

Mit folgender Methode kannst du Spieler dann auf einen anderen Server senden. Diese Methode kannst du in irgendeine Klasse schreiben und dann aus dieser auch wieder aufrufen.

Code:
public static void connect(Player player, String server) {
     try {
          ByteArrayOutputStream b = new ByteArrayOutputStream();
          DataOutputStream out = new DataOutputStream(b);
         
          out.writeUTF("Connect");
          out.writeUTF(server);

          player.sendPluginMessage(<Instanz der Hauptklasse>, "BungeeCord", b.toByteArray());

          System.out.println("Spieler " + player.getName () + " wurde auf den Server " + server + " verbunden");
     } catch (IOException e) {
          System.out.println("Spieler " + player.getName() + " konnte nicht zu dem Server " + server + " verbunden werden");
     }
}

Nun musst du an der Stelle, an der du den Spieler auf den Server senden möchtest, nurnoch diese Methode aufrufen und den Spieler und den Servernamen übergeben, welcher in der Konfigurationsdatei des BungeeCord Servers eingetragen ist.

Mit freundlichen Grüßen,
~ CBPlugins
 
3636eb1d96.png

Pls wat.


ICH HASSE GENERICS (und wildcards).
 
Hallo,
ich haba folgenes Problem. Wenn ich den Namen eines Spielers ändere und dieser (mit Farbcodes) länger als 16 ist wird der Spieler gekickt.
Nun ist mir aber aufgefallen, das auf dem GommeHD Netzwerk es möglich ist einen Clan beizutreten. Nehmen wir nun einer Spieler (Namenslänge: 12). Dieser Spielt BW in Team Rot. weitere 2 Zeichen. Er ist auch in einen Clan. Hier haben wir weitere 9 Zeichen. (2 stelliger ClanTag). Das sind dann insgesammt 23 Zeichen.

Nun möchte ich gerne wissen, wie soetwas möglich ist. Ich habe mich bereits im Internet umgeschau, aber nichts dazu passendes Gefunden. Mir schwebt die Idee eines Prefix zu einem Scoreboard Teams im Kopf. Stimmt das?

Mit freundlichen Grüßen Lars
 
Hallo,
ich haba folgenes Problem. Wenn ich den Namen eines Spielers ändere und dieser (mit Farbcodes) länger als 16 ist wird der Spieler gekickt.
Nun ist mir aber aufgefallen, das auf dem GommeHD Netzwerk es möglich ist einen Clan beizutreten. Nehmen wir nun einer Spieler (Namenslänge: 12). Dieser Spielt BW in Team Rot. weitere 2 Zeichen. Er ist auch in einen Clan. Hier haben wir weitere 9 Zeichen. (2 stelliger ClanTag). Das sind dann insgesammt 23 Zeichen.

Nun möchte ich gerne wissen, wie soetwas möglich ist. Ich habe mich bereits im Internet umgeschau, aber nichts dazu passendes Gefunden. Mir schwebt die Idee eines Prefix zu einem Scoreboard Teams im Kopf. Stimmt das?

Mit freundlichen Grüßen Lars
Richtig. Du erstellt ein Scoreboard und erstellt dort Teams und setzt dem Team ein Präfix bzw. Suffix (Kann beides 16 Zeichen lang sein.). Addest alle und setzt dem jeweiligen Spieler das scoreboard.

- Rico #mobile
 
Hey,

meine Frage bezieht sich auf alle Java Projekte, egal ob Bukkit oder nicht. Ich habe ein paar Methoden die ich im ganzen Projekt brauche und ziemlich allgemein sind. Das Problem ist, dass diese Methoden nicht einer speziellen Funktion des Projekt angehören. Deshalb habe wollte ich jetzt eine Klasse erstellen inder ich alle diese Methoden ablegen kann. Nun meine Frage: Wie soll ich die Klasse nennen?

mfg
 
Hey,

meine Frage bezieht sich auf alle Java Projekte, egal ob Bukkit oder nicht. Ich habe ein paar Methoden die ich im ganzen Projekt brauche und ziemlich allgemein sind. Das Problem ist, dass diese Methoden nicht einer speziellen Funktion des Projekt angehören. Deshalb habe wollte ich jetzt eine Klasse erstellen inder ich alle diese Methoden ablegen kann. Nun meine Frage: Wie soll ich die Klasse nennen?

mfg
Ist eigentlich egal, bei sowas würde ich sie einfach "Main" oder "Methods" nennen.
Main und Methods nennt man schonmal garnichts in Java xD Nenn es Utils oder <PluginName>Utils
 
  • Like
Reaktionen: Lebender_Zombie
Status
Für weitere Antworten geschlossen.

Soziale Medien

  • X
  • TikTok

Über uns

  • GommeHD.net ist einer der größten Minecraft-Server der Welt. Dir gefällt unser Server? Dann unterstütze uns durch einen Kauf im Shop!
  • Shop