ForgePatch/patches/common/net/minecraft/server/MinecraftServer.java.patch

173 lines
6.1 KiB
Diff
Raw Normal View History

--- ../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;
@@ -71,6 +72,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
{
@@ -150,7 +154,8 @@
public final long[] tickTimeArray = new long[100];
/** Stats are [dimension][tick%100] system.nanoTime is stored. */
- public long[][] timeOfLastDimensionTick;
+ //public long[][] timeOfLastDimensionTick;
2012-08-11 03:30:59 +00:00
+ public Hashtable<Integer, long[]> worldTickTimes = new Hashtable<Integer, long[]>();
private KeyPair serverKeyPair;
/** Username of the server owner (for integrated servers) */
@@ -238,8 +243,6 @@
{
this.convertMapIfNeeded(par1Str);
this.setUserMessage("menu.loadingLevel");
- this.worldServers = new WorldServer[3];
- this.timeOfLastDimensionTick = new long[this.worldServers.length][100];
ISaveHandler var7 = this.anvilConverterForAnvilFile.getSaveLoader(par1Str, true);
WorldInfo var9 = var7.loadWorldInfo();
WorldSettings var8;
@@ -259,46 +262,23 @@
var8.enableBonusChest();
}
- for (int var10 = 0; var10 < this.worldServers.length; ++var10)
- {
- byte var11 = 0;
-
- if (var10 == 1)
- {
- var11 = -1;
- }
-
- if (var10 == 2)
- {
- var11 = 1;
- }
-
- if (var10 == 0)
- {
- if (this.isDemo())
- {
- this.worldServers[var10] = new DemoWorldServer(this, var7, par2Str, var11, this.theProfiler);
- }
- else
- {
- this.worldServers[var10] = new WorldServer(this, var7, par2Str, var11, var8, this.theProfiler);
- }
- }
- else
- {
- this.worldServers[var10] = new WorldServerMulti(this, var7, par2Str, var11, var8, this.worldServers[0], this.theProfiler);
- }
-
- this.worldServers[var10].addWorldAccess(new WorldManager(this, this.worldServers[var10]));
+ WorldServer overWorld = (isDemo() ? new DemoWorldServer(this, var7, par2Str, 0, theProfiler) : new WorldServer(this, var7, par2Str, 0, var8, theProfiler));
+ for (int dim : DimensionManager.getStaticDimensionIDs())
+ {
+ WorldServer world = (dim == 0 ? overWorld : new WorldServerMulti(this, var7, par2Str, dim, var8, overWorld, theProfiler));
+ world.addWorldAccess(new WorldManager(this, world));
if (!this.isSinglePlayer())
{
- this.worldServers[var10].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();
}
@@ -429,7 +409,9 @@
for (int var3 = 0; var3 < var2; ++var3)
{
WorldServer var4 = var1[var3];
+ MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(var4));
var4.flush();
+ DimensionManager.setWorld(var4.provider.dimensionId, null);
}
if (this.usageSnooper != null && this.usageSnooper.isSnooperRunning())
@@ -642,13 +624,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());
this.theProfiler.startSection("pools");
var4.func_82732_R().clear();
@@ -673,9 +655,11 @@
this.theProfiler.endSection();
}
- this.timeOfLastDimensionTick[var1][this.tickCounter % 100] = System.nanoTime() - var2;
- }
-
+ worldTickTimes.get(id)[this.tickCounter % 100] = System.nanoTime() - var2;
+ }
+
+ this.theProfiler.endStartSection("dim_unloading");
+ DimensionManager.unloadWorlds(worldTickTimes);
this.theProfiler.endStartSection("connection");
this.getNetworkThread().networkTick();
this.theProfiler.endStartSection("players");
@@ -731,7 +715,13 @@
*/
public WorldServer worldServerForDimension(int par1)
{
- return par1 == -1 ? this.worldServers[1] : (par1 == 1 ? this.worldServers[2] : this.worldServers[0]);
+ WorldServer ret = DimensionManager.getWorld(par1);
+ if (ret == null)
+ {
+ DimensionManager.initDimension(par1);
+ ret = DimensionManager.getWorld(par1);
+ }
+ return ret;
}
@SideOnly(Side.SERVER)
@@ -840,7 +830,7 @@
public String getServerModName()
{
- return "vanilla";
+ return "forge,fml";
}
/**
@@ -1119,6 +1109,7 @@
if (var2 != null)
{
+ MinecraftForge.EVENT_BUS.post(new WorldEvent.Unload(var2));
var2.flush();
}
}