private void decorateChunks() {
        //there has to be a better way to check neighbors...
        for (World world : hostedWorlds) {
            Queue<Chunk> decorateChunks = world.getDecorateChunks();
            for (Chunk chunk : decorateChunks) {
                Vec3i nLoc = chunk.getLocation();
                nLoc.x++;
                ChunkTable chunks = world.getChunks();
                if (chunks.getChunk(nLoc) != null) {
                    nLoc.x -= 2;
                    if (chunks.getChunk(nLoc) != null) {
                        nLoc.x++;
                        nLoc.y++;
                        if (chunks.getChunk(nLoc) != null) {
                            nLoc.y -= 2;
                            if (chunks.getChunk(nLoc) != null) {
                                nLoc.y++;
                                nLoc.z++;
                                if (chunks.getChunk(nLoc) != null) {
                                    nLoc.z -= 2;
                                    if (chunks.getChunk(nLoc) != null) {
                                        decorateChunks.remove(chunk);
                                        world.getGenerator().generateDecorations(chunk);
                                        chunk.setModifiedFromLoad(true);
                                        chunk.markDecorated();
                                        chunk.setNeedsRebuild(true);
                                        chunk.setModifiedFromLoad(true);
                                        SaveManager.saveChunkDelayed(chunk);
                                    }
                                }
                            }
                        }
                    }
                }
                VecPool.free(nLoc);
            }
        }
    }