Höhe eines Spielers bekommen

Dieses Thema im Forum "Programmierung" wurde erstellt von Yellowphoenix18, 12. Oktober 2014.

  1. Yellowphoenix18
    Offline

    Yellowphoenix18

    Registriert seit:
    26. März 2013
    Beiträge:
    267
    Ort:
    Niedersachsen
    Minecraft:
    YellowPhoenix18
    Hallo,ich suche heute nach einem CodeSchnipsel um zu gucken,wie viele Blöcke ein Spieler über dem Boden schwebt/fliegt.
    Ich freue mich auf eure Antworten.

    mfg YellowPhoenix18
     
    #1
  2. man nehme die Höhe des spielers, minus den höchsten Block. Ziemlich simple:

    player.getLocation().getY() - World.getHighestBlockAt(int x, int z);

    Bei World.getHighestBlockAt(int x, int z) solltest du nur vorher überprüfen, ob der Chunk geladen ist.
     
    #2
  3. Yellowphoenix18
    Offline

    Yellowphoenix18

    Registriert seit:
    26. März 2013
    Beiträge:
    267
    Ort:
    Niedersachsen
    Minecraft:
    YellowPhoenix18
    Ich habe das ganze mal eingebunden,doch leider meldet Eclipse Fehler:

    public void FlyCheck() {

    this.CheckTask = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() {

    @Override
    public void run() {
    CheckTime --;

    if(CheckTime == 0) {
    for(Player all : Bukkit.getOnlinePlayers()) {
    if(!all.isOnGround()) {


    double x = all.getLocation().getX();
    double z = all.getLocation().getZ();

    if((all.getLocation().getY() - Bukkit.getWorld("world").getHighestBlockYAt(x, z)) >= 2) {
    if(!all.hasPermission("balandrianum.fly")) {
    if(flyer.contains(all)) {
    flyer.remove(all);
    try {
    Warns.setWarns(all.getUniqueId().toString(), Warns.getWarns(all.getUniqueId().toString()) + 2);
    } catch (SQLException e1) {
    e1.printStackTrace();
    }
    all.kickPlayer(name + "Du hast nun zwei Warn-Punkte erhalten!");
    } else {
    flyer.add(all);
    all.sendMessage(name + "Du wurdest detected,höre auf zu fliegen!");
    }
    }
    }
    } else {
    flyer.remove(all);
    }
    }
    CheckTime = 5;
    }

    }

    }, 20, 15);

    }
     
    #3
  4. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Hallo,
    mit for(Player p : Bukkit.getOnlinePlayers()) { } fragst du ALLE Spieler die Online sind ab und nicht jeden einzeln sondern alle gleichzeitig.
    mit dem if(!(all.isOnGround)) fragst du ebend ob alle Spieler in der Luft sind gleichzeitig.
    Probiere mal:
    Code (Text):
    1.  
    2. Player[] all = Bukkit.getOnlinePlayers();
    3. for(int i = 0; i < Bukkit.getOnlinePlayers().length(); i++) {
    4. if(all[i].isOnGround) {
    5. //tue was
    6. }
    7.  
    Und wo zeigt den Eclipse den Fehler an?
     
    #4
  5. Yellowphoenix18
    Offline

    Yellowphoenix18

    Registriert seit:
    26. März 2013
    Beiträge:
    267
    Ort:
    Niedersachsen
    Minecraft:
    YellowPhoenix18
    Eclipse zeigt den Fehler bie "getHighestBlockYAt"
     
    #5
  6. combo
    Offline

    combo

    Registriert seit:
    16. Juli 2012
    Beiträge:
    160
    Minecraft:
    combo5
    Was gibts sie dir als Fehler meldung?
     
    #6
  7. Yellowphoenix18
    Offline

    Yellowphoenix18

    Registriert seit:
    26. März 2013
    Beiträge:
    267
    Ort:
    Niedersachsen
    Minecraft:
    YellowPhoenix18
    Er bietet mir an Change to getHighestBlockAT(funktioniert aber auch nicht) und Rename in file
     
    #7
  8. MiCrJonas
    Offline

    MiCrJonas

    Registriert seit:
    29. Oktober 2012
    Beiträge:
    1.069
    GetHighestBlockAt gibt einen Block zurück. Deshalb musst du, um zu schauen, ob der Abstand größer als 2 ist, die Höhe des Blocks vergleihen. Block#getLocation ().getY ().
    Wenn der Spieler noch Blöcke über sich hat, ergibt das ganze aber keinen Sinn, da der Abstand zum Block unter dem Spieler dann negativ und falsch ist.
     
    #8