ForgePatch/patches/common/net/minecraft/server/MinecraftServer.java.patch
Christian 384f795d52 Some more tweaks to the chunkloading code. The world.load event fires slightly later- once the entity watcher is
set up, so entities can actually load into the server world. Also, tickets actually save and load properly
and null entities don't break the server
2012-09-25 19:12:10 -04:00

143 lines
5.1 KiB
Diff

--- ../src_base/common/net/minecraft/server/MinecraftServer.java
+++ ../src_work/common/net/minecraft/server/MinecraftServer.java
@@ -9,6 +9,7 @@
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
+import java.util.Hashtable;
import java.util.Iterator;
import java.util.List;
import java.util.logging.Level;
@@ -58,6 +59,9 @@
import net.minecraft.src.WorldServerMulti;
import net.minecraft.src.WorldSettings;
import net.minecraft.src.WorldType;
+import net.minecraftforge.common.DimensionManager;
+import net.minecraftforge.common.MinecraftForge;
+import net.minecraftforge.event.world.WorldEvent;
public abstract class MinecraftServer implements Runnable, IPlayerUsage, ICommandSender
{
@@ -137,7 +141,9 @@
public final long[] tickTimeArray = new long[100];
/** Stats are [dimension][tick%100] system.nanoTime is stored. */
- public long[][] timeOfLastDimensionTick;
+ //public long[][] timeOfLastDimensionTick;
+ public Hashtable<Integer, long[]> worldTickTimes = new Hashtable<Integer, long[]>();
+ public int spawnProtectionSize = 16;
private KeyPair serverKeyPair;
/** Username of the server owner (for integrated servers) */
@@ -204,8 +210,6 @@
{
this.convertMapIfNeeded(par1Str);
this.setUserMessage("menu.loadingLevel");
- this.worldServers = new WorldServer[3];
- this.timeOfLastDimensionTick = new long[this.worldServers.length][100];
ISaveHandler var6 = this.anvilConverterForAnvilFile.getSaveLoader(par1Str, true);
WorldInfo var8 = var6.loadWorldInfo();
WorldSettings var7;
@@ -224,46 +228,22 @@
var7.enableBonusChest();
}
- for (int var9 = 0; var9 < this.worldServers.length; ++var9)
- {
- byte var10 = 0;
-
- if (var9 == 1)
- {
- var10 = -1;
- }
-
- if (var9 == 2)
- {
- var10 = 1;
- }
-
- if (var9 == 0)
- {
- if (this.isDemo())
- {
- this.worldServers[var9] = new DemoWorldServer(this, var6, par2Str, var10, this.theProfiler);
- }
- else
- {
- this.worldServers[var9] = new WorldServer(this, var6, par2Str, var10, var7, this.theProfiler);
- }
- }
- else
- {
- this.worldServers[var9] = new WorldServerMulti(this, var6, par2Str, var10, var7, this.worldServers[0], this.theProfiler);
- }
-
- this.worldServers[var9].addWorldAccess(new WorldManager(this, this.worldServers[var9]));
+ WorldServer overWorld = (isDemo() ? new DemoWorldServer(this, var6, par2Str, 0, theProfiler) : new WorldServer(this, var6, par2Str, 0, var7, theProfiler));
+ for (int dim : DimensionManager.getIDs())
+ {
+ WorldServer world = (dim == 0 ? overWorld : new WorldServerMulti(this, var6, par2Str, dim, var7, overWorld, theProfiler));
+ world.addWorldAccess(new WorldManager(this, world));
if (!this.isSinglePlayer())
{
- this.worldServers[var9].getWorldInfo().setGameType(this.getGameType());
+ world.getWorldInfo().setGameType(this.getGameType());
}
this.serverConfigManager.setPlayerManager(this.worldServers);
- }
-
+ MinecraftForge.EVENT_BUS.post(new WorldEvent.Load(world));
+ }
+
+ this.serverConfigManager.setPlayerManager(new WorldServer[]{ overWorld });
this.setDifficultyForAllWorlds(this.getDifficulty());
this.initialWorldChunkLoad();
}
@@ -622,13 +602,13 @@
{
this.theProfiler.startSection("levels");
- for (int var1 = 0; var1 < this.worldServers.length; ++var1)
+ for (Integer id : DimensionManager.getIDs())
{
long var2 = System.nanoTime();
- if (var1 == 0 || this.getAllowNether())
- {
- WorldServer var4 = this.worldServers[var1];
+ if (id == 0 || this.getAllowNether())
+ {
+ WorldServer var4 = DimensionManager.getWorld(id);
this.theProfiler.startSection(var4.getWorldInfo().getWorldName());
if (this.tickCounter % 20 == 0)
@@ -659,7 +639,7 @@
}
}
- this.timeOfLastDimensionTick[var1][this.tickCounter % 100] = System.nanoTime() - var2;
+ worldTickTimes.get(id)[this.tickCounter % 100] = System.nanoTime() - var2;
}
this.theProfiler.endStartSection("connection");
@@ -717,7 +697,8 @@
*/
public WorldServer worldServerForDimension(int par1)
{
- return par1 == -1 ? this.worldServers[1] : (par1 == 1 ? this.worldServers[2] : this.worldServers[0]);
+ WorldServer ret = DimensionManager.getWorld(par1);
+ return (ret != null ? ret : DimensionManager.getWorld(0));
}
@SideOnly(Side.SERVER)
@@ -830,7 +811,7 @@
public String getServerModName()
{
- return "vanilla";
+ return "forge,fml";
}
/**