Advertisement
Guest User

Use custom block populators with default chunk generator

a guest
Oct 26th, 2012
730
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 3.80 KB | None | 0 0
  1. // this is a clone of CraftServer.createWorld, amended to accept extra block populators
  2. public World createWorldWithPopulators(WorldCreator creator, Collection<BlockPopulator> extraPopulators)
  3. {
  4.     if (creator == null) {
  5.         throw new IllegalArgumentException("Creator may not be null");
  6.     }
  7.  
  8.     CraftServer craftServer = (CraftServer)plugin.getServer();
  9.     MinecraftServer console = craftServer.getServer();
  10.    
  11.     String name = creator.name();
  12.     ChunkGenerator generator = creator.generator();
  13.     File folder = new File(craftServer.getWorldContainer(), name);
  14.     World world = craftServer.getWorld(name);
  15.     WorldType type = WorldType.getType(creator.type().getName());
  16.     boolean generateStructures = creator.generateStructures();
  17.  
  18.     if (world != null) {
  19.         return world;
  20.     }
  21.  
  22.     if ((folder.exists()) && (!folder.isDirectory())) {
  23.         throw new IllegalArgumentException("File exists with the name '" + name + "' and isn't a folder");
  24.     }
  25.  
  26.     if (generator == null) {
  27.         generator = craftServer.getGenerator(name);
  28.     }
  29.  
  30.     Convertable converter = new WorldLoaderServer(craftServer.getWorldContainer());
  31.     if (converter.isConvertable(name)) {
  32.         craftServer.getLogger().info("Converting world '" + name + "'");
  33.         converter.convert(name, new ConvertProgressUpdater(console));
  34.     }
  35.  
  36.     int dimension = 10 + console.worlds.size();
  37.     boolean used = false;
  38.     do {
  39.         for (WorldServer server : console.worlds) {
  40.             used = server.dimension == dimension;
  41.             if (used) {
  42.                 dimension++;
  43.                 break;
  44.             }
  45.         }
  46.     } while(used);
  47.     boolean hardcore = false;
  48.  
  49.     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);
  50.  
  51.     if (craftServer.getWorld(name) == null) {
  52.         return null;
  53.     }
  54.  
  55.     internal.worldMaps = console.worlds.get(0).worldMaps;
  56.  
  57.     internal.tracker = new EntityTracker(internal); // CraftBukkit
  58.     internal.addIWorldAccess((IWorldAccess) new net.minecraft.server.WorldManager(console, internal));
  59.     internal.difficulty = 1;
  60.     internal.setSpawnFlags(true, true);
  61.     console.worlds.add(internal);
  62.  
  63.     if (generator != null) {
  64.         internal.getWorld().getPopulators().addAll(generator.getDefaultPopulators(internal.getWorld()));
  65.     }
  66.     internal.getWorld().getPopulators().addAll(extraPopulators); // use the extra block populators!
  67.  
  68.     craftServer.getPluginManager().callEvent(new WorldInitEvent(internal.getWorld()));
  69.     System.out.print("Preparing start region for level " + (console.worlds.size() - 1) + " (Seed: " + internal.getSeed() + ")");
  70.  
  71.     if (internal.getWorld().getKeepSpawnInMemory()) {
  72.         short short1 = 196;
  73.         long i = System.currentTimeMillis();
  74.         for (int j = -short1; j <= short1; j += 16) {
  75.             for (int k = -short1; k <= short1; k += 16) {
  76.                 long l = System.currentTimeMillis();
  77.  
  78.                 if (l < i) {
  79.                     i = l;
  80.                 }
  81.  
  82.                 if (l > i + 1000L) {
  83.                     int i1 = (short1 * 2 + 1) * (short1 * 2 + 1);
  84.                     int j1 = (j + short1) * (short1 * 2 + 1) + k + 1;
  85.  
  86.                     System.out.println("Preparing spawn area for " + name + ", " + (j1 * 100 / i1) + "%");
  87.                     i = l;
  88.                 }
  89.  
  90.                 ChunkCoordinates chunkcoordinates = internal.getSpawn();
  91.                 internal.chunkProviderServer.getChunkAt(chunkcoordinates.x + j >> 4, chunkcoordinates.z + k >> 4);
  92.  
  93.                 while (internal.updateLights()) {
  94.                     ;
  95.                 }
  96.             }
  97.         }
  98.     }
  99.     craftServer.getPluginManager().callEvent(new WorldLoadEvent(internal.getWorld()));
  100.     return internal.getWorld();
  101. }
  102.  
  103. public World createWorldWithPopulator(WorldCreator creator, BlockPopulator extraPopulator)
  104. {
  105.     ArrayList<BlockPopulator> extraPopulators = new ArrayList<BlockPopulator>();
  106.     extraPopulators.add(extraPopulator);
  107.     return createWorldWithPopulators(creator, extraPopulators);
  108. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement