Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // this is a clone of CraftServer.createWorld, amended to accept extra block populators
- public World createWorldWithPopulators(WorldCreator creator, Collection<BlockPopulator> extraPopulators)
- {
- if (creator == null) {
- throw new IllegalArgumentException("Creator may not be null");
- }
- CraftServer craftServer = (CraftServer)plugin.getServer();
- MinecraftServer console = craftServer.getServer();
- String name = creator.name();
- ChunkGenerator generator = creator.generator();
- File folder = new File(craftServer.getWorldContainer(), name);
- World world = craftServer.getWorld(name);
- WorldType type = WorldType.getType(creator.type().getName());
- boolean generateStructures = creator.generateStructures();
- if (world != null) {
- return world;
- }
- if ((folder.exists()) && (!folder.isDirectory())) {
- throw new IllegalArgumentException("File exists with the name '" + name + "' and isn't a folder");
- }
- if (generator == null) {
- generator = craftServer.getGenerator(name);
- }
- Convertable converter = new WorldLoaderServer(craftServer.getWorldContainer());
- if (converter.isConvertable(name)) {
- craftServer.getLogger().info("Converting world '" + name + "'");
- converter.convert(name, new ConvertProgressUpdater(console));
- }
- int dimension = 10 + console.worlds.size();
- boolean used = false;
- do {
- for (WorldServer server : console.worlds) {
- used = server.dimension == dimension;
- if (used) {
- dimension++;
- break;
- }
- }
- } while(used);
- boolean hardcore = false;
- WorldServer internal = new WorldServer(console, new ServerNBTManager(craftServer.getWorldContainer(), name, true), name, dimension, new WorldSettings(creator.seed(), EnumGamemode.a(craftServer.getDefaultGameMode().getValue()), generateStructures, hardcore, type), console.methodProfiler, creator.environment(), generator);
- if (craftServer.getWorld(name) == null) {
- return null;
- }
- internal.worldMaps = console.worlds.get(0).worldMaps;
- internal.tracker = new EntityTracker(internal); // CraftBukkit
- internal.addIWorldAccess((IWorldAccess) new net.minecraft.server.WorldManager(console, internal));
- internal.difficulty = 1;
- internal.setSpawnFlags(true, true);
- console.worlds.add(internal);
- if (generator != null) {
- internal.getWorld().getPopulators().addAll(generator.getDefaultPopulators(internal.getWorld()));
- }
- internal.getWorld().getPopulators().addAll(extraPopulators); // use the extra block populators!
- craftServer.getPluginManager().callEvent(new WorldInitEvent(internal.getWorld()));
- System.out.print("Preparing start region for level " + (console.worlds.size() - 1) + " (Seed: " + internal.getSeed() + ")");
- if (internal.getWorld().getKeepSpawnInMemory()) {
- short short1 = 196;
- long i = System.currentTimeMillis();
- for (int j = -short1; j <= short1; j += 16) {
- for (int k = -short1; k <= short1; k += 16) {
- long l = System.currentTimeMillis();
- if (l < i) {
- i = l;
- }
- if (l > i + 1000L) {
- int i1 = (short1 * 2 + 1) * (short1 * 2 + 1);
- int j1 = (j + short1) * (short1 * 2 + 1) + k + 1;
- System.out.println("Preparing spawn area for " + name + ", " + (j1 * 100 / i1) + "%");
- i = l;
- }
- ChunkCoordinates chunkcoordinates = internal.getSpawn();
- internal.chunkProviderServer.getChunkAt(chunkcoordinates.x + j >> 4, chunkcoordinates.z + k >> 4);
- while (internal.updateLights()) {
- ;
- }
- }
- }
- }
- craftServer.getPluginManager().callEvent(new WorldLoadEvent(internal.getWorld()));
- return internal.getWorld();
- }
- public World createWorldWithPopulator(WorldCreator creator, BlockPopulator extraPopulator)
- {
- ArrayList<BlockPopulator> extraPopulators = new ArrayList<BlockPopulator>();
- extraPopulators.add(extraPopulator);
- return createWorldWithPopulators(creator, extraPopulators);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement