@Override
    public void populate(World world, Random random, Chunk chunk) {
        if (!isGraveyardSet(chunk) && random.nextInt(4) < 1) {
            Vector<GraveyardStructure> structures = new Vector<>();
            for (Class<? extends GraveyardStructure> clazz : structureClasses) {
                try {
                    GraveyardStructure newGS = clazz.newInstance();
                    Location l = null;
                    if (!newGS.canBeOverlapped()) for (GraveyardStructure gs : structures) {
                        if (!gs.canBeOverlapped() && newGS.getBlockArea().intersectWith(gs.getBlockArea())) {
                            l = new Location(world, 1, 1, 1); // TODO
                        }
                    }
                    structures.add(newGS);
                    newGS.create(world, random, l);
                }
                catch (InstantiationException | IllegalAccessException e) {
                    logger.log(Level.SEVERE, "Error", e);
                }
            }
        }
    }