Alle Blöcke diese in der Luft sind bekommen

Dieses Thema im Forum "Programmierung" wurde erstellt von McWizzardDev, 12. März 2016.

  1. McWizzardDev
    Offline

    McWizzardDev

    Registriert seit:
    7. Oktober 2015
    Beiträge:
    58
    Guten Abend,

    ich sitze gerade an meinem JumpDown Plugin und möchte für die LuckyBlocks alle Blöcke in der Luft bekommen, dies habe ich bisher so gemacht:

    Code (Text):
    1.             for(Chunk chunk : world.getLoadedChunks()) {
    2.                 for(int x = 0; x < 16; x++) {
    3.                     for(int y = 0; y < 256; y++) {
    4.                         for(int z = 0; z < 16; z++) {
    5.                             Block b = chunk.getBlock(x, y, z);
    6.                             if(b.getRelative(BlockFace.DOWN).getType().equals(Material.AIR) && b.getRelative(BlockFace.UP).getType().equals(Material.AIR) &&
    7.                                     b.getRelative(BlockFace.SOUTH).getType().equals(Material.AIR) && b.getRelative(BlockFace.NORTH).getType().equals(Material.AIR)
    8.                                     && b.getRelative(BlockFace.WEST).getType().equals(Material.AIR) && b.getRelative(BlockFace.EAST).getType().equals(Material.AIR)) {
    9.                                 if(!(b.getType().equals(Material.AIR))) {
    10.                                     Location loc1 = Locations.getLocation("spawn.1");
    11.                                     Location loc2 = Locations.getLocation("spawn.2");
    12.                                     Location loc3 = Locations.getLocation("spawn.3");
    13.                                     if(!(b.getLocation().getY() == loc1.getY() || b.getLocation().getY() == loc2.getY() || b.getLocation().getY() == loc3.getY())) {
    14.                                         if(loc1.distance(b.getLocation()) < 5000) {
    15.                                 luckyblocks.add(b);
    16.                                         }
    17.                                     }
    18.                                 }
    19.                             }
    20.                        
    21.                         }
    22.                     }
    23.                 }
    24.             }
    Problem: Dies braucht ca. 30 Sekunden, aber das soll max. 1-2 Sekunden dauern, habt ihr eine Idee, wie ich die Blöcke besser herausbekomme. Es würde auch gehen, wenn man das einmal machen muss und dann sich alles in einer config speichert, aber dort weiß ich nicht, wie ich die Blöcke wieder auslese
     
    #1
  2. 可愛い
    Offline

    可愛い

    Registriert seit:
    19. Mai 2014
    Beiträge:
    654
    Wofür brauchst du denn überhaupt die Blöcke in der Luft? Ich würde nämlich fast vermuten, dass es einen viel besseren Ansatz für dein Problem gibt.
     
    #2
  3. McWizzardDev
    Offline

    McWizzardDev

    Registriert seit:
    7. Oktober 2015
    Beiträge:
    58
    Ja für LuckyBlocks, bei JumpDown, da sollen random Blöcke rausgesucht werden
     
    #3
  4. GPSforLEGENDS
    Offline

    GPSforLEGENDS

    Registriert seit:
    21. März 2014
    Beiträge:
    295
    Ort:
    Bürostuhl
    Minecraft:
    GPSforLEGENDS
    Ein paar "boost" Tipps :
    - Alles final machen was nicht mehr geändert wird
    - if(!(b.getType().equals(Material.AIR))) {
    Vor
    if(b.getRelative(BlockFace.DOWN).getType().equals(Material.AIR)....
    Damit überspringst du schon mal massenweise Blöcke
    - Alle chunks die nicht in der Arena liegen unloaden (mir ist kein deutsches Wort dazu eingefallen o_O)
    Oder
    Festlegen in welchem Bereich die Arena liegt und nur die chunks durchgehen
    - if(loc1.distance(b.getLocation()) < 5000)
    Distance macht nur Sinn wenn du die Distanz irgendwo ausgeben willst (mir fällt zumindestens spontan kein anderes Szenario ein), ansonsten distanceSquared nutzen um keine Wurzeln berechnen zu müssen.

    Wäre natürlich am besten.
    https://hub.spigotmc.org/javadocs/b...on/ConfigurationSection.html#getKeys(boolean)
    Das sollte deine Frage klären wie du sie wieder ausliest.
     
    #4