summaryrefslogtreecommitdiffstats
path: root/src/main/java/net/minecraft/server/MinecraftServer.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/net/minecraft/server/MinecraftServer.java')
-rw-r--r--src/main/java/net/minecraft/server/MinecraftServer.java154
1 files changed, 92 insertions, 62 deletions
diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java
index 97fe2505..5223328f 100644
--- a/src/main/java/net/minecraft/server/MinecraftServer.java
+++ b/src/main/java/net/minecraft/server/MinecraftServer.java
@@ -18,6 +18,7 @@ import java.io.PrintStream;
import java.net.UnknownHostException;
import jline.ConsoleReader;
import joptsimple.OptionSet;
+import org.bukkit.World.Environment;
import org.bukkit.craftbukkit.CraftServer;
import org.bukkit.craftbukkit.LoggerOutputStream;
import org.bukkit.craftbukkit.command.ColouredConsoleSender;
@@ -32,7 +33,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
public static HashMap b = new HashMap();
public NetworkListenThread networkListenThread;
public PropertyManager propertyManager;
- // public WorldServer worldServer; // CraftBukkit - removed
+ // public WorldServer[] worldServer; // Craftbukkit - removed!
public ServerConfigurationManager serverConfigurationManager;
public ConsoleCommandHandler consoleCommandHandler; // CraftBukkit - made public
private boolean isRunning = true;
@@ -42,7 +43,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
public int j;
private List r = new ArrayList();
private List s = Collections.synchronizedList(new ArrayList());
- public EntityTracker tracker;
+ // public EntityTracker[] tracker = new EntityTracker[2]; // Craftbukkit - removed!
public boolean onlineMode;
public boolean spawnAnimals;
public boolean pvpMode;
@@ -50,7 +51,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
// CraftBukkit start
public int spawnProtection;
- public List<WorldServer> worlds = new ArrayList<WorldServer>();
+ public List<WorldServer> worlds = new ArrayList<WorldServer>(); // TODO - REPLACE ABOVE
public CraftServer server;
public OptionSet options;
public ColouredConsoleSender console;
@@ -85,7 +86,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
System.setErr(new PrintStream(new LoggerOutputStream(log, Level.SEVERE), true));
// CraftBukkit end
- log.info("Starting minecraft server version Beta 1.5_02");
+ log.info("Starting minecraft server version Beta 1.6.2");
if (Runtime.getRuntime().maxMemory() / 1024L / 1024L < 512L) {
log.warning("**** NOT ENOUGH RAM!");
log.warning("To start the server with more ram, launch it as \"java -Xmx1024M -Xms1024M -jar minecraft_server.jar\"");
@@ -127,7 +128,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
}
this.serverConfigurationManager = new ServerConfigurationManager(this);
- this.tracker = new EntityTracker(this);
+ // Craftbukkit - removed trackers
long j = System.nanoTime();
String s1 = this.propertyManager.getString("level-name", "world");
String s2 = this.propertyManager.getString("level-seed", "");
@@ -159,46 +160,56 @@ public class MinecraftServer implements Runnable, ICommandListener {
convertable.convert(s, new ConvertProgressUpdater(this));
}
- log.info("Preparing start region");
+ // Craftbukkit start
+ for (int j = 0; j < (this.propertyManager.getBoolean("allow-nether", true) ? 2 : 1); ++j) {
+ WorldServer world;
+ int dimension = j == 0 ? 0 : -1;
- // CraftBukkit start
- WorldServer world = new WorldServer(this, new ServerNBTManager(new File("."), s, true), s, this.propertyManager.getBoolean("hellworld", false) ? -1 : 0, i);
- world.addIWorldAccess((IWorldAccess)new WorldManager(this, world));
- world.spawnMonsters = this.propertyManager.getBoolean("spawn-monsters", true) ? 1 : 0;
- world.setSpawnFlags(this.propertyManager.getBoolean("spawn-monsters", true), this.spawnAnimals);
- this.serverConfigurationManager.setPlayerFileData(world);
- worlds.add(world);
- // CraftBukkit end
+ if (j == 0) {
+ world = new WorldServer(this, new ServerNBTManager(new File("."), s, true), s, dimension, i);
+ } else {
+ String name = s + "_" + Environment.getEnvironment(dimension).toString().toLowerCase();
+ world = new SecondaryWorldServer(this, new ServerNBTManager(new File("."), name, true), name, dimension, i, worlds.get(0));
+ }
+
+ world.tracker = new EntityTracker(this, dimension);
+ world.addIWorldAccess(new WorldManager(this, world));
+ world.spawnMonsters = this.propertyManager.getBoolean("spawn-monsters", true) ? 1 : 0;
+ world.setSpawnFlags(this.propertyManager.getBoolean("spawn-monsters", true), this.spawnAnimals);
+ worlds.add(world);
+ this.serverConfigurationManager.setPlayerFileData(worlds.toArray(new WorldServer[0]));
+ }
short short1 = 196;
- long j = System.currentTimeMillis();
- ChunkCoordinates chunkcoordinates = world.getSpawn(); // CraftBukkit
+ long k = System.currentTimeMillis();
- for (int k = -short1; k <= short1 && this.isRunning; k += 16) {
- for (int l = -short1; l <= short1 && this.isRunning; l += 16) {
- long i1 = System.currentTimeMillis();
+ for (int l = 0; l < this.worlds.size(); ++l) { // Craftbukkit
+ log.info("Preparing start region for level " + l);
+ WorldServer worldserver = this.worlds.get(l); // Craftbukkit
+ ChunkCoordinates chunkcoordinates = worldserver.getSpawn();
- if (i1 < j) {
- j = i1;
- }
+ for (int i1 = -short1; i1 <= short1 && this.isRunning; i1 += 16) {
+ for (int j1 = -short1; j1 <= short1 && this.isRunning; j1 += 16) {
+ long k1 = System.currentTimeMillis();
+
+ if (k1 < k) {
+ k = k1;
+ }
- if (i1 > j + 1000L) {
- int j1 = (short1 * 2 + 1) * (short1 * 2 + 1);
- int k1 = (k + short1) * (short1 * 2 + 1) + l + 1;
+ if (k1 > k + 1000L) {
+ int l1 = (short1 * 2 + 1) * (short1 * 2 + 1);
+ int i2 = (i1 + short1) * (short1 * 2 + 1) + j1 + 1;
- this.a("Preparing spawn area", k1 * 100 / j1);
- j = i1;
- }
+ this.a("Preparing spawn area", i2 * 100 / l1);
+ k = k1;
+ }
- // CraftBukkit start
- for (WorldServer worldserver: worlds) {
- world.chunkProviderServer.getChunkAt(chunkcoordinates.x + k >> 4, chunkcoordinates.z + l >> 4);
+ worldserver.chunkProviderServer.getChunkAt(chunkcoordinates.x + i1 >> 4, chunkcoordinates.z + j1 >> 4);
- while (world.doLighting() && this.isRunning) {
+ while (worldserver.doLighting() && this.isRunning) {
;
}
}
- // CraftBukkit end
}
}
@@ -221,19 +232,19 @@ public class MinecraftServer implements Runnable, ICommandListener {
void saveChunks() { // CraftBukkit - private -> default
log.info("Saving chunks");
- // CraftBukkit start
- for (WorldServer world: worlds) {
- world.save(true, (IProgressUpdate) null);
- world.saveLevel();
+ // Craftbukkit start
+ for (int i = 0; i < this.worlds.size(); ++i) {
+ WorldServer worldserver = this.worlds.get(i);
- WorldSaveEvent event = new WorldSaveEvent(world.getWorld());
+ worldserver.save(true, (IProgressUpdate) null);
+ worldserver.saveLevel();
+
+ WorldSaveEvent event = new WorldSaveEvent(worldserver.getWorld());
server.getPluginManager().callEvent(event);
}
- // CraftBukkit end
-
- // CraftBukkit start - player data should be saved whenever a save happens and ONLY if saving is enabled.
- WorldServer wserver = this.worlds.get(0);
- if (!wserver.y) {
+
+ WorldServer world = this.worlds.get(0);
+ if (!world.E) {
this.serverConfigurationManager.savePlayers();
}
// CraftBukkit end
@@ -251,9 +262,15 @@ public class MinecraftServer implements Runnable, ICommandListener {
this.serverConfigurationManager.savePlayers();
}
- if (this.worlds.size() > 0) { // CraftBukkit
- this.saveChunks();
+ // CraftBukkit start
+ for (int i = 0; i < this.worlds.size(); ++i) {
+ WorldServer worldserver = this.worlds.get(i);
+
+ if (worldserver != null) {
+ this.saveChunks();
+ }
}
+ // CraftBukkit end
}
public void a() {
@@ -281,8 +298,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
j += l;
i = k;
- // CraftBukkit - TODO - Replace with loop?
- if (this.worlds.size() > 0 && this.worlds.get(0).everyoneDeeplySleeping()) {
+ if (this.worlds.get(0).everyoneDeeplySleeping()) { // Craftbukkit
this.h();
j = 0L;
} else {
@@ -354,29 +370,35 @@ public class MinecraftServer implements Runnable, ICommandListener {
Vec3D.a();
++this.ticks;
- // CraftBukkit start
- if (this.ticks % 20 == 0) {
- for (int i = 0; i < this.serverConfigurationManager.players.size(); ++i) {
- EntityPlayer entityplayer = (EntityPlayer) this.serverConfigurationManager.players.get(i);
- entityplayer.netServerHandler.sendPacket(new Packet4UpdateTime(entityplayer.world.getTime()));
- }
- }
+ for (j = 0; j < this.worlds.size(); ++j) { // Craftbukkit
+ WorldServer worldserver = this.worlds.get(j); // Craftbukkit
- ((CraftScheduler) server.getScheduler()).mainThreadHeartbeat(this.ticks);
+ if (this.ticks % 20 == 0) {
+ // Craftbukkit start
+ for (int i = 0; i < this.serverConfigurationManager.players.size(); ++i) {
+ EntityPlayer entityplayer = (EntityPlayer) this.serverConfigurationManager.players.get(i);
+ entityplayer.netServerHandler.sendPacket(new Packet4UpdateTime(entityplayer.world.getTime()));
+ }
+ // Craftbukkit end
+ }
- for (WorldServer world: worlds) {
- world.doTick();
+ worldserver.doTick();
- while (world.doLighting()) {
+ while (worldserver.doLighting()) {
;
}
- world.cleanUp();
+ worldserver.cleanUp();
}
- // CraftBukkit end
+
this.networkListenThread.a();
this.serverConfigurationManager.b();
- this.tracker.a();
+
+ // Craftbukkit start
+ for (j = 0; j < this.worlds.size(); ++j) {
+ this.worlds.get(j).tracker.a();
+ }
+ // Craftbukkit end
for (j = 0; j < this.r.size(); ++j) {
((IUpdatePlayerListBox) this.r.get(j)).a();
@@ -410,7 +432,7 @@ public class MinecraftServer implements Runnable, ICommandListener {
StatisticList.a();
try {
- MinecraftServer minecraftserver = new MinecraftServer(options);
+ MinecraftServer minecraftserver = new MinecraftServer(options); // CraftBukkit pass in the options
// CraftBukkit - remove gui
@@ -436,6 +458,14 @@ public class MinecraftServer implements Runnable, ICommandListener {
return "CONSOLE";
}
+ public WorldServer a(int i) {
+ return i == -1 ? this.worlds.get(1) : this.worlds.get(0); // Craftbukkit
+ }
+
+ public EntityTracker b(int i) {
+ return a(i).tracker; // Craftbukkit
+ }
+
public static boolean isRunning(MinecraftServer minecraftserver) {
return minecraftserver.isRunning;
}