Пример #1
0
  public void a(EnumDifficulty enumdifficulty) {
    // CraftBukkit start - Use worlds list for iteration
    for (int j = 0; j < this.worlds.size(); ++j) {
      WorldServer worldserver = this.worlds.get(j);
      // CraftBukkit end

      if (worldserver != null) {
        if (worldserver.getWorldData().isHardcore()) {
          worldserver.difficulty = EnumDifficulty.HARD;
          worldserver.setSpawnFlags(true, true);
        } else if (this.N()) {
          worldserver.difficulty = enumdifficulty;
          worldserver.setSpawnFlags(worldserver.difficulty != EnumDifficulty.PEACEFUL, true);
        } else {
          worldserver.difficulty = enumdifficulty;
          worldserver.setSpawnFlags(this.getSpawnMonsters(), this.spawnAnimals);
        }
      }
    }
  }
  private void a(Convertable convertable, String s, long i, WorldType worldtype) {
    if (convertable.isConvertable(s)) {
      log.info("Converting map!");
      convertable.convert(s, new ConvertProgressUpdater(this));
    }

    // CraftBukkit - removed world and ticktime arrays
    int j = this.propertyManager.getInt("gamemode", 0);

    j = WorldSettings.a(j);
    log.info("Default game type: " + j);
    // CraftBukkit start (+ removed worldsettings and servernbtmanager)
    boolean generateStructures = this.propertyManager.getBoolean("generate-structures", true);
    int worldCount = 3;

    for (int k = 0; k < worldCount; ++k) {
      WorldServer world;
      int dimension = 0;

      if (k == 1) {
        if (this.propertyManager.getBoolean("allow-nether", true)) {
          dimension = -1;
        } else {
          continue;
        }
      }

      if (k == 2) {
        // CraftBukkit - (+ don't do this in server.properties, do it in bukkit.yml)
        if (this.server.getAllowEnd()) {
          dimension = 1;
        } else {
          continue;
        }
      }

      String worldType = Environment.getEnvironment(dimension).toString().toLowerCase();
      String name = (dimension == 0) ? s : s + "_" + worldType;

      org.bukkit.generator.ChunkGenerator gen = this.server.getGenerator(name);
      WorldSettings settings = new WorldSettings(i, j, generateStructures, false, worldtype);

      if (k == 0) {
        world =
            new WorldServer(
                this,
                new ServerNBTManager(server.getWorldContainer(), s, true),
                s,
                dimension,
                settings,
                org.bukkit.World.Environment.getEnvironment(dimension),
                gen); // CraftBukkit
      } else {
        String dim = "DIM" + dimension;

        File newWorld = new File(new File(name), dim);
        File oldWorld = new File(new File(s), dim);

        if ((!newWorld.isDirectory()) && (oldWorld.isDirectory())) {
          log.info("---- Migration of old " + worldType + " folder required ----");
          log.info(
              "Unfortunately due to the way that Minecraft implemented multiworld support in 1.6, Bukkit requires that you move your "
                  + worldType
                  + " folder to a new location in order to operate correctly.");
          log.info(
              "We will move this folder for you, but it will mean that you need to move it back should you wish to stop using Bukkit in the future.");
          log.info("Attempting to move " + oldWorld + " to " + newWorld + "...");

          if (newWorld.exists()) {
            log.severe("A file or folder already exists at " + newWorld + "!");
            log.info("---- Migration of old " + worldType + " folder failed ----");
          } else if (newWorld.getParentFile().mkdirs()) {
            if (oldWorld.renameTo(newWorld)) {
              log.info(
                  "Success! To restore "
                      + worldType
                      + " in the future, simply move "
                      + newWorld
                      + " to "
                      + oldWorld);
              log.info("---- Migration of old " + worldType + " folder complete ----");
            } else {
              log.severe("Could not move folder " + oldWorld + " to " + newWorld + "!");
              log.info("---- Migration of old " + worldType + " folder failed ----");
            }
          } else {
            log.severe("Could not create path for " + newWorld + "!");
            log.info("---- Migration of old " + worldType + " folder failed ----");
          }
        }

        if (convertable.isConvertable(name)) {
          log.info("Converting map!");
          convertable.convert(name, new ConvertProgressUpdater(this));
        }

        world =
            new SecondaryWorldServer(
                this,
                new ServerNBTManager(server.getWorldContainer(), name, true),
                name,
                dimension,
                settings,
                this.worlds.get(0),
                org.bukkit.World.Environment.getEnvironment(dimension),
                gen); // CraftBukkit
      }

      if (gen != null) {
        world.getWorld().getPopulators().addAll(gen.getDefaultPopulators(world.getWorld()));
      }

      this.server
          .getPluginManager()
          .callEvent(new org.bukkit.event.world.WorldInitEvent(world.getWorld()));

      world.tracker = new EntityTracker(this, world); // CraftBukkit
      world.addIWorldAccess(new WorldManager(this, world));
      world.difficulty = this.propertyManager.getInt("difficulty", 1);
      world.setSpawnFlags(
          this.propertyManager.getBoolean("spawn-monsters", true), this.spawnAnimals);
      world.getWorldData().setGameType(j);
      this.worlds.add(world);
      this.serverConfigurationManager.setPlayerFileData(this.worlds.toArray(new WorldServer[0]));
    }
    // CraftBukkit end

    short short1 = 196;
    long l = System.currentTimeMillis();

    // CraftBukkit start
    for (int i1 = 0; i1 < this.worlds.size(); ++i1) {
      WorldServer worldserver = this.worlds.get(i1);
      log.info("Preparing start region for level " + i1 + " (Seed: " + worldserver.getSeed() + ")");
      if (!worldserver.getWorld().getKeepSpawnInMemory()) {
        continue;
      }
      // CraftBukkit end
      ChunkCoordinates chunkcoordinates = worldserver.getSpawn();

      for (int j1 = -short1; j1 <= short1 && this.isRunning; j1 += 16) {
        for (int k1 = -short1; k1 <= short1 && this.isRunning; k1 += 16) {
          long l1 = System.currentTimeMillis();

          if (l1 < l) {
            l = l1;
          }

          if (l1 > l + 1000L) {
            int i2 = (short1 * 2 + 1) * (short1 * 2 + 1);
            int j2 = (j1 + short1) * (short1 * 2 + 1) + k1 + 1;

            this.b("Preparing spawn area", j2 * 100 / i2);
            l = l1;
          }

          worldserver.chunkProviderServer.getChunkAt(
              chunkcoordinates.x + j1 >> 4, chunkcoordinates.z + k1 >> 4);

          while (worldserver.updateLights() && this.isRunning) {;
          }
        }
      }
    }

    // CraftBukkit start
    for (World world : this.worlds) {
      this.server
          .getPluginManager()
          .callEvent(new org.bukkit.event.world.WorldLoadEvent(world.getWorld()));
    }
    // CraftBukkit end

    this.t();
  }