384f795d52
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
143 lines
5.1 KiB
Diff
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";
|
|
}
|
|
|
|
/**
|