221 lines
8.7 KiB
Diff
221 lines
8.7 KiB
Diff
--- ../src_base/minecraft_server/net/minecraft/server/MinecraftServer.java 0000-00-00 00:00:00.000000000 -0000
|
|
+++ ../src_work/minecraft_server/net/minecraft/server/MinecraftServer.java 0000-00-00 00:00:00.000000000 -0000
|
|
@@ -8,6 +8,7 @@
|
|
import java.util.ArrayList;
|
|
import java.util.Collections;
|
|
import java.util.HashMap;
|
|
+import java.util.Hashtable;
|
|
import java.util.Iterator;
|
|
import java.util.List;
|
|
import java.util.Random;
|
|
@@ -43,11 +44,13 @@
|
|
import net.minecraft.src.ThreadServerApplication;
|
|
import net.minecraft.src.ThreadServerSleep;
|
|
import net.minecraft.src.Vec3D;
|
|
+import net.minecraft.src.World;
|
|
import net.minecraft.src.WorldManager;
|
|
import net.minecraft.src.WorldServer;
|
|
import net.minecraft.src.WorldServerMulti;
|
|
import net.minecraft.src.WorldSettings;
|
|
import net.minecraft.src.WorldType;
|
|
+import net.minecraft.src.forge.DimensionManager;
|
|
|
|
public class MinecraftServer implements Runnable, ICommandListener, IServer
|
|
{
|
|
@@ -68,9 +71,10 @@
|
|
public PropertyManager propertyManagerObj;
|
|
|
|
/** The server world manager. */
|
|
- public WorldServer[] worldMngr;
|
|
+ //public WorldServer[] worldMngr;
|
|
public long[] field_40027_f = new long[100];
|
|
- public long[][] field_40028_g;
|
|
+ //public long[][] field_40028_g;
|
|
+ public Hashtable<Integer, long[]> worldTickTimes = new Hashtable<Integer, long[]>();
|
|
|
|
/** the server config manager for this server */
|
|
public ServerConfigurationManager configManager;
|
|
@@ -98,7 +102,7 @@
|
|
|
|
/** A list containing all the commands entered. */
|
|
private List commands = Collections.synchronizedList(new ArrayList());
|
|
- public EntityTracker[] entityTracker = new EntityTracker[3];
|
|
+ //public EntityTracker[] entityTracker = new EntityTracker[3];
|
|
|
|
/** True if the server is in online mode. */
|
|
public boolean onlineMode;
|
|
@@ -193,9 +197,11 @@
|
|
}
|
|
|
|
this.configManager = new ServerConfigurationManager(this);
|
|
+ /*
|
|
this.entityTracker[0] = new EntityTracker(this, 0);
|
|
this.entityTracker[1] = new EntityTracker(this, -1);
|
|
this.entityTracker[2] = new EntityTracker(this, 1);
|
|
+ */
|
|
long var3 = System.nanoTime();
|
|
String var5 = this.propertyManagerObj.getStringProperty("level-name", "world");
|
|
String var6 = this.propertyManagerObj.getStringProperty("level-seed", "");
|
|
@@ -261,53 +267,36 @@
|
|
logger.info("Converting map!");
|
|
par1ISaveFormat.convertMapFormat(par2Str, new ConvertProgressUpdater(this));
|
|
}
|
|
-
|
|
+ /*
|
|
this.worldMngr = new WorldServer[3];
|
|
this.field_40028_g = new long[this.worldMngr.length][100];
|
|
+ */
|
|
int var6 = this.propertyManagerObj.getIntProperty("gamemode", 0);
|
|
var6 = WorldSettings.validGameType(var6);
|
|
logger.info("Default game type: " + var6);
|
|
boolean var7 = this.propertyManagerObj.getBooleanProperty("generate-structures", true);
|
|
WorldSettings var8 = new WorldSettings(par3, var6, var7, false, par5WorldType);
|
|
AnvilSaveHandler var9 = new AnvilSaveHandler(new File("."), par2Str, true);
|
|
-
|
|
- for (int var10 = 0; var10 < this.worldMngr.length; ++var10)
|
|
- {
|
|
- byte var11 = 0;
|
|
-
|
|
- if (var10 == 1)
|
|
- {
|
|
- var11 = -1;
|
|
- }
|
|
-
|
|
- if (var10 == 2)
|
|
- {
|
|
- var11 = 1;
|
|
- }
|
|
-
|
|
- if (var10 == 0)
|
|
- {
|
|
- this.worldMngr[var10] = new WorldServer(this, var9, par2Str, var11, var8);
|
|
- }
|
|
- else
|
|
- {
|
|
- this.worldMngr[var10] = new WorldServerMulti(this, var9, par2Str, var11, var8, this.worldMngr[0]);
|
|
- }
|
|
-
|
|
- this.worldMngr[var10].addWorldAccess(new WorldManager(this, this.worldMngr[var10]));
|
|
- this.worldMngr[var10].difficultySetting = this.propertyManagerObj.getIntProperty("difficulty", 1);
|
|
- this.worldMngr[var10].setAllowedSpawnTypes(this.propertyManagerObj.getBooleanProperty("spawn-monsters", true), this.spawnPeacefulMobs);
|
|
- this.worldMngr[var10].getWorldInfo().setGameType(var6);
|
|
- this.configManager.setPlayerManager(this.worldMngr);
|
|
+
|
|
+ WorldServer overWorld = new WorldServer(this, var9, par2Str, 0, var8);
|
|
+ for (Integer id : DimensionManager.getIDs())
|
|
+ {
|
|
+ WorldServer world = (id == 0 ? overWorld : new WorldServerMulti(this, var9, par2Str, id, var8, overWorld));
|
|
+ world.addWorldAccess(new WorldManager(this, world));
|
|
+ world.difficultySetting = propertyManagerObj.getIntProperty("difficulty", 1);
|
|
+ world.setAllowedSpawnTypes(propertyManagerObj.getBooleanProperty("spawn-monsters", true), spawnPeacefulMobs);
|
|
+ world.getWorldInfo().setGameType(var6);
|
|
+ worldTickTimes.put(id, new long[100]);
|
|
}
|
|
+ configManager.setPlayerManager(new WorldServer[]{ overWorld });
|
|
|
|
short var22 = 196;
|
|
long var23 = System.currentTimeMillis();
|
|
|
|
- for (int var13 = 0; var13 < 1; ++var13)
|
|
+ for (Integer id : DimensionManager.getIDs())
|
|
{
|
|
- logger.info("Preparing start region for level " + var13);
|
|
- WorldServer var14 = this.worldMngr[var13];
|
|
+ logger.info("Preparing start region for level " + id);
|
|
+ WorldServer var14 = (WorldServer)DimensionManager.getWorld(id);
|
|
ChunkCoordinates var15 = var14.getSpawnPoint();
|
|
|
|
for (int var16 = -var22; var16 <= var22 && this.serverRunning; var16 += 16)
|
|
@@ -368,9 +357,9 @@
|
|
{
|
|
logger.info("Saving chunks");
|
|
|
|
- for (int var1 = 0; var1 < this.worldMngr.length; ++var1)
|
|
+ for (World world : DimensionManager.getWorlds())
|
|
{
|
|
- WorldServer var2 = this.worldMngr[var1];
|
|
+ WorldServer var2 = (WorldServer)world;
|
|
var2.saveWorld(true, (IProgressUpdate)null);
|
|
var2.func_30006_w();
|
|
}
|
|
@@ -388,13 +377,14 @@
|
|
this.configManager.savePlayerStates();
|
|
}
|
|
|
|
- for (int var1 = 0; var1 < this.worldMngr.length; ++var1)
|
|
+ for (World world : DimensionManager.getWorlds())
|
|
{
|
|
- WorldServer var2 = this.worldMngr[var1];
|
|
+ WorldServer var2 = (WorldServer)world;
|
|
|
|
if (var2 != null)
|
|
{
|
|
this.saveServerWorld();
|
|
+ break; //Added because saveServerWorld() loops through all worlds anyways.
|
|
}
|
|
}
|
|
}
|
|
@@ -436,7 +426,7 @@
|
|
var3 += var7;
|
|
var1 = var5;
|
|
|
|
- if (this.worldMngr[0].isAllPlayersFullyAsleep())
|
|
+ if (((WorldServer)DimensionManager.getWorld(0)).isAllPlayersFullyAsleep())
|
|
{
|
|
this.doTick();
|
|
var3 = 0L;
|
|
@@ -537,13 +527,13 @@
|
|
Vec3D.initialize();
|
|
++this.deathTime;
|
|
|
|
- for (var9 = 0; var9 < this.worldMngr.length; ++var9)
|
|
+ for (Integer id : DimensionManager.getIDs())
|
|
{
|
|
long var10 = System.nanoTime();
|
|
|
|
- if (var9 == 0 || this.propertyManagerObj.getBooleanProperty("allow-nether", true))
|
|
+ if (id == 0 || this.propertyManagerObj.getBooleanProperty("allow-nether", true))
|
|
{
|
|
- WorldServer var7 = this.worldMngr[var9];
|
|
+ WorldServer var7 = (WorldServer)DimensionManager.getWorld(id);
|
|
|
|
if (this.deathTime % 20 == 0)
|
|
{
|
|
@@ -562,15 +552,15 @@
|
|
}
|
|
}
|
|
|
|
- this.field_40028_g[var9][this.deathTime % 100] = System.nanoTime() - var10;
|
|
+ worldTickTimes.get(id)[this.deathTime % 100] = System.nanoTime() - var10;
|
|
}
|
|
|
|
this.networkServer.handleNetworkListenThread();
|
|
this.configManager.onTick();
|
|
|
|
- for (var9 = 0; var9 < this.entityTracker.length; ++var9)
|
|
+ for (World world : DimensionManager.getWorlds())
|
|
{
|
|
- this.entityTracker[var9].updateTrackedEntities();
|
|
+ ((WorldServer)world).entityTracker.updateTrackedEntities();
|
|
}
|
|
|
|
for (var9 = 0; var9 < this.playersOnline.size(); ++var9)
|
|
@@ -684,7 +674,8 @@
|
|
*/
|
|
public WorldServer getWorldManager(int par1)
|
|
{
|
|
- return par1 == -1 ? this.worldMngr[1] : (par1 == 1 ? this.worldMngr[2] : this.worldMngr[0]);
|
|
+ WorldServer ret = (WorldServer)DimensionManager.getWorld(par1);
|
|
+ return (ret != null ? ret : (WorldServer)DimensionManager.getWorld(0));
|
|
}
|
|
|
|
/**
|
|
@@ -692,7 +683,7 @@
|
|
*/
|
|
public EntityTracker getEntityTracker(int par1)
|
|
{
|
|
- return par1 == -1 ? this.entityTracker[1] : (par1 == 1 ? this.entityTracker[2] : this.entityTracker[0]);
|
|
+ return getWorldManager(par1).entityTracker;
|
|
}
|
|
|
|
/**
|