Bukkit: Wie kann ich den Boden ersetzen?
Hallo,
ich wollte in mein Plugin eine Funktion einfügen, die Blöcke unter einem Spieler ersetzt, wenn man sich auf dem Boden befindet. Also man läuft quasi ganz entspannt durch seine Welt und Diamantblöcke folgen dir auf Schritt und Tritt.
Allerdings sitzte ich jetzt vor meinen Bildschirm und frage mich, wie ich anfange.
So weit bin ich:
public class BlockReplaceGround implements Listener {
@EventHandler
public void onGround(irgendeinEvent e) {
if (e.getPlayer().isOnGround());
}
}
Gerne Rückfragen stellen. Ich bin über jede Antwort und Hilfe dankbar!
Till
3 Antworten
Dein Anfang bringt dir (so hart es klingt) überhaupt nichts. Das PlayerChangedWorldEvent wird einmalig getriggered, wenn ein Spieler die Welt wechselt.
Ich würde einen Scheduler laufen lassen und in diesem immer wieder durch Bukkit.getOnlinePlayers() iterieren. Dort dann mit von Player#getLocation von der Y-Achse 1 abziehen (Location#subtract(x, y, z) ) und den Type der Location auf einen anderen Block setzen (Location#setType(Material) )
Ich würde es so machen:
@EventHandler void onGround(PlayerMoveEvent e) {
Player player = e.getPlayer();
Location playerLocation = player.getLocation();
Location location = playerLocation.add(0, -1, 0);
if (location.getBlock().getType() == Material.AIR) return;
location.setBlock(Material.DIAMOND_BLOCK);
}
"playerLocation.add(0, -1, 0);" erstellt eine Location, die ein Block unter "playerLocation" ist.
Wenn du ein Plugin für eine neuere Version programmierst, ist "player.isOnGround()" deprecated (veraltet).
Deshalb muss man die Location unter dem Spieler getten.
public class BlockReplaceGround implements Listener {
@EventHandler
public void onGround(PlayerMoveEvent e) {
if (e.getPlayer().getLocation().clone().add(0, -1, 0).getBlock().getType() != Material.AIR) {
e.getPlayer().getLocation().clone().add(0, -1, 0).getBlock().setType(Material.DIAMOND_BLOCK);
}
}
}
Das sollte gehen
Vielen Dank für die schnelle Antwort!
Ja das mit dem PlayerChangedWorldEvent wusste ich das es falsch war habe es nur vergessen zu löschen. (Peinlich xD)
Wenn du mir eventuell sagen könntest wie ich so einen Schedular mache wäre ich Happy.
Danke
Till