Minecraft Java Plugin Inhalt eines Schilds auslesen und als Title anzeigen?
Hallo liebe GuteFrage.net Community,
ich bin noch recht unerfahren mit Java und der Spigot API.
Ich habe ein Minecraft Netzwerk, welches mit dem CloudSystem CloudNet betrieben wird.
Nun möchte ich ein Plugin programmieren, welches dem Spieler ein Title anzeigt, wenn er auf ein Schild guckt.
Der Title soll den Inhalt der ersten Zeile des Schildes und der SubTitle die 4. Zeile des Schildes beinhalten.
Wie programmiere ich das?
LG Velentix
2 Antworten
Hey Velentix,
ich habe mal ein kleines Event geschrieben bei dem (wenn man auf das Schild klickt), man den String des titles bekommt und auch den String der letzten Zeile des Schildes.
@EventHandler
public void SignClick(PlayerInteractEvent event){
Player player = (Player) event.getPlayer();
Block block = event.getClickedBlock();
Sign sign = (Sign) block.getState();
if(event.getPlayer() instanceof Player){
if(event.getAction() == Action.RIGHT_CLICK_BLOCK){
String title = sign.getLine(0);
String lastLine = sign.getLine(3);
}
}
}
Hoffe das hilft dir,
LG Schmidi
- Du hast kein Event geschrieben
- Der Zwischenschritt über den Block ist sinnlos
- Die Abfrage, ob der Spieler ein Spieler ist ist sinnlos, da das Event nur von Spielern getriggered werden kann
Kein Problem, bei weiteren Fragen stehe dir zur Verfügung ;)
- Spigot ist keine API, nur so nebenbei
- Du kannst das PlayerMoveEvent verwenden, wobei das bei einer größeren Anzahl von Spielern viel Leistung ziehen wird. Alternativ einen BukkitScheduler / Scheduler aller x Sekunden drüberlaufen lassen. Mit der Methode Player.getTargetBlock(java.util.Set<Material> transparent, int maxDistance) bekommst du den Block, den der Spieler anschaut. Bei dem Set kannst du null angeben, da du keine Blöcke ignorieren willst. Der int maxDistance gibt an, wie viele Blöcke der anvisierte Block höchstens weg sein darf, damit er erfasst werden kann. Das kann z.B. 5 sein. Anschließend castest du den Player.getTargetBlock(null, 5).getState() zu einem Sign; mit Sign.getLine(int line) bekommst du dann den jeweiligen Inhalt der Zeile. Wie du einen Titel sendest, findest du z.B. hier: https://www.spigotmc.org/threads/send-titles-to-players-using-spigot-1-8-1-11-2.48819/.
Ich hoffe, ich konnte dir helfen, Fragen beantworte ich natürlich gerne :)
Seliba
Spigot ist keine API, nur so nebenbei
Natürlich ist Spigot eine API, was soll das denn sonst sein?
Vielen Dank an dich und @SchmidiMC
Kann leider nur eine hilfreichste Antwort auszeichnen...
Beide super Hilfreich!
Vielen Dank! :)