• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

Alle Blöcke diese in der Luft sind bekommen

McWizzardDev

Kuhfänger
Registriert
7 Oktober 2015
Beiträge
56
Alter
30
Diamanten
300
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:
            for(Chunk chunk : world.getLoadedChunks()) {
                for(int x = 0; x < 16; x++) {
                    for(int y = 0; y < 256; y++) {
                        for(int z = 0; z < 16; z++) {
                            Block b = chunk.getBlock(x, y, z);
                            if(b.getRelative(BlockFace.DOWN).getType().equals(Material.AIR) && b.getRelative(BlockFace.UP).getType().equals(Material.AIR) &&
                                    b.getRelative(BlockFace.SOUTH).getType().equals(Material.AIR) && b.getRelative(BlockFace.NORTH).getType().equals(Material.AIR)
                                    && b.getRelative(BlockFace.WEST).getType().equals(Material.AIR) && b.getRelative(BlockFace.EAST).getType().equals(Material.AIR)) {
                                if(!(b.getType().equals(Material.AIR))) {
                                    Location loc1 = Locations.getLocation("spawn.1");
                                    Location loc2 = Locations.getLocation("spawn.2");
                                    Location loc3 = Locations.getLocation("spawn.3");
                                    if(!(b.getLocation().getY() == loc1.getY() || b.getLocation().getY() == loc2.getY() || b.getLocation().getY() == loc3.getY())) {
                                        if(loc1.distance(b.getLocation()) < 5000) {
                                luckyblocks.add(b);
                                        }
                                    }
                                }
                            }
                       
                        }
                    }
                }
            }

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
 

GPSforLEGENDS

Vorarbeiter
Registriert
21 März 2014
Beiträge
289
Alter
85
Diamanten
300
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.

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
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.
 
Zuletzt bearbeitet:
Oben