Search in sources :

Example 1 with LevelInitEvent

use of cn.nukkit.event.level.LevelInitEvent in project Nukkit by Nukkit.

the class Server method generateLevel.

public boolean generateLevel(String name, long seed, Class<? extends Generator> generator, Map<String, Object> options, Class<? extends LevelProvider> provider) {
    if (Objects.equals(name.trim(), "") || this.isLevelGenerated(name)) {
        return false;
    }
    if (!options.containsKey("preset")) {
        options.put("preset", this.getPropertyString("generator-settings", ""));
    }
    if (generator == null) {
        generator = Generator.getGenerator(this.getLevelType());
    }
    if (provider == null) {
        if ((provider = LevelProviderManager.getProviderByName((String) this.getConfig("level-settings.default-format", "anvil"))) == null) {
            provider = LevelProviderManager.getProviderByName("anvil");
        }
    }
    String path;
    if (name.contains("/") || name.contains("\\")) {
        path = name;
    } else {
        path = this.getDataPath() + "worlds/" + name + "/";
    }
    Level level;
    try {
        provider.getMethod("generate", String.class, String.class, long.class, Class.class, Map.class).invoke(null, path, name, seed, generator, options);
        level = new Level(this, name, path, provider);
        this.levels.put(level.getId(), level);
        level.initLevel();
        level.setTickRate(this.baseTickRate);
    } catch (Exception e) {
        this.logger.error(this.getLanguage().translateString("nukkit.level.generationError", new String[] { name, e.getMessage() }));
        this.logger.logException(e);
        return false;
    }
    this.getPluginManager().callEvent(new LevelInitEvent(level));
    this.getPluginManager().callEvent(new LevelLoadEvent(level));
    /*this.getLogger().notice(this.getLanguage().translateString("nukkit.level.backgroundGeneration", name));

        int centerX = (int) level.getSpawnLocation().getX() >> 4;
        int centerZ = (int) level.getSpawnLocation().getZ() >> 4;

        TreeMap<String, Integer> order = new TreeMap<>();

        for (int X = -3; X <= 3; ++X) {
            for (int Z = -3; Z <= 3; ++Z) {
                int distance = X * X + Z * Z;
                int chunkX = X + centerX;
                int chunkZ = Z + centerZ;
                order.put(Level.chunkHash(chunkX, chunkZ), distance);
            }
        }

        List<Map.Entry<String, Integer>> sortList = new ArrayList<>(order.entrySet());

        Collections.sort(sortList, new Comparator<Map.Entry<String, Integer>>() {
            @Override
            public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
                return o2.getValue() - o1.getValue();
            }
        });

        for (String index : order.keySet()) {
            Chunk.Entry entry = Level.getChunkXZ(index);
            level.populateChunk(entry.chunkX, entry.chunkZ, true);
        }*/
    return true;
}
Also used : LevelLoadEvent(cn.nukkit.event.level.LevelLoadEvent) Level(cn.nukkit.level.Level) LevelInitEvent(cn.nukkit.event.level.LevelInitEvent)

Aggregations

LevelInitEvent (cn.nukkit.event.level.LevelInitEvent)1 LevelLoadEvent (cn.nukkit.event.level.LevelLoadEvent)1 Level (cn.nukkit.level.Level)1