Bukkit: Wie kann ich den Boden ersetzen?

3 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

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) )

Woher ich das weiß:Hobby – Ich spiele Minecraft seit >5 Jahren

Firstmine 
Fragesteller
 04.11.2020, 13:48

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

0

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.

Woher ich das weiß:Hobby – Habe ich in 2015-2022 gezockt aber ark ist besser

Brockdish  05.11.2020, 11:25

Wenn du ein Plugin für eine neuere Version programmierst, ist "player.isOnGround()" deprecated (veraltet).

Deshalb muss man die Location unter dem Spieler getten.

0
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