Added a per-world MapStorage feature that provides a method to store data files associated with a specific world, as well as fixes the issue with villagers loosing there village. {Where villagers wouldn't go inside at night}
This commit is contained in:
parent
efcda1a946
commit
c689a982b5
|
@ -82,4 +82,5 @@ default id.e # ChunkProviderServer/field_73247_e
|
|||
# PlayerManager
|
||||
default ib.a(IIZ)Lic; # PlayerManager/func_72690_a getOrCreateChunkWatcher
|
||||
# World
|
||||
public-f xe.C # net/minecraft/src/World/field_72982_D villageCollectionObj
|
||||
public-f xe.C # World/field_72982_D villageCollectionObj
|
||||
public xe.H # World/field_72993_I activeChunkSet
|
|
@ -0,0 +1,45 @@
|
|||
package net.minecraftforge.common;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
import net.minecraft.src.IChunkLoader;
|
||||
import net.minecraft.src.IPlayerFileData;
|
||||
import net.minecraft.src.ISaveHandler;
|
||||
import net.minecraft.src.MinecraftException;
|
||||
import net.minecraft.src.NBTTagCompound;
|
||||
import net.minecraft.src.WorldInfo;
|
||||
import net.minecraft.src.WorldProvider;
|
||||
import net.minecraft.src.WorldServer;
|
||||
|
||||
//Class used internally to provide the world specific data directories.
|
||||
|
||||
public class WorldSpecificSaveHandler implements ISaveHandler
|
||||
{
|
||||
private WorldServer world;
|
||||
private ISaveHandler parent;
|
||||
private File dataDir;
|
||||
|
||||
public WorldSpecificSaveHandler(WorldServer world, ISaveHandler parent)
|
||||
{
|
||||
this.world = world;
|
||||
this.parent = parent;
|
||||
dataDir = new File(world.getChunkSaveLocation(), "data");
|
||||
dataDir.mkdirs();
|
||||
}
|
||||
|
||||
@Override public WorldInfo loadWorldInfo() { return parent.loadWorldInfo(); }
|
||||
@Override public void checkSessionLock() throws MinecraftException { parent.checkSessionLock(); }
|
||||
@Override public IChunkLoader getChunkLoader(WorldProvider var1) { return parent.getChunkLoader(var1); }
|
||||
@Override public void saveWorldInfoWithPlayer(WorldInfo var1, NBTTagCompound var2) { parent.saveWorldInfoWithPlayer(var1, var2); }
|
||||
@Override public void saveWorldInfo(WorldInfo var1){ parent.saveWorldInfo(var1); }
|
||||
@Override public IPlayerFileData getSaveHandler() { return parent.getSaveHandler(); }
|
||||
@Override public void flush() { parent.flush(); }
|
||||
@Override public String getSaveDirectoryName() { return parent.getSaveDirectoryName(); }
|
||||
|
||||
@Override
|
||||
public File getMapFileFromName(String name)
|
||||
{
|
||||
System.out.println(new File(dataDir, name + ".dat"));
|
||||
return new File(dataDir, name + ".dat");
|
||||
}
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
--- ../src_base/common/net/minecraft/src/World.java
|
||||
+++ ../src_work/common/net/minecraft/src/World.java
|
||||
@@ -11,8 +11,27 @@
|
||||
@@ -11,8 +11,30 @@
|
||||
import java.util.Random;
|
||||
import java.util.Set;
|
||||
|
||||
|
@ -11,6 +11,7 @@
|
|||
+import net.minecraftforge.common.ForgeHooks;
|
||||
+import net.minecraftforge.common.MinecraftForge;
|
||||
+import net.minecraftforge.common.ForgeDirection;
|
||||
+import net.minecraftforge.common.WorldSpecificSaveHandler;
|
||||
+import net.minecraftforge.event.entity.EntityEvent;
|
||||
+import net.minecraftforge.event.entity.EntityJoinWorldEvent;
|
||||
+import net.minecraftforge.event.world.WorldEvent;
|
||||
|
@ -24,11 +25,13 @@
|
|||
+ * of one of there entities.
|
||||
+ */
|
||||
+ public static double MAX_ENTITY_RADIUS = 2.0D;
|
||||
+
|
||||
+ public final MapStorage perWorldStorage;
|
||||
+
|
||||
/**
|
||||
* boolean; if true updates scheduled by scheduleBlockUpdate happen immediately
|
||||
*/
|
||||
@@ -136,6 +155,11 @@
|
||||
@@ -136,6 +158,11 @@
|
||||
*/
|
||||
public BiomeGenBase getBiomeGenForCoords(int par1, int par2)
|
||||
{
|
||||
|
@ -40,11 +43,12 @@
|
|||
if (this.blockExists(par1, 0, par2))
|
||||
{
|
||||
Chunk var3 = this.getChunkFromBlockCoords(par1, par2);
|
||||
@@ -165,7 +189,12 @@
|
||||
@@ -165,7 +192,13 @@
|
||||
this.theProfiler = par5Profiler;
|
||||
this.worldInfo = new WorldInfo(par4WorldSettings, par2Str);
|
||||
this.provider = par3WorldProvider;
|
||||
- this.mapStorage = new MapStorage(par1ISaveHandler);
|
||||
+ perWorldStorage = new MapStorage((ISaveHandler)null);
|
||||
+ }
|
||||
+
|
||||
+ // Broken up so that the WorldClient gets the chance to set the mapstorage object before the dimension initializes
|
||||
|
@ -54,7 +58,7 @@
|
|||
VillageCollection var6 = (VillageCollection)this.mapStorage.loadData(VillageCollection.class, "villages");
|
||||
|
||||
if (var6 == null)
|
||||
@@ -179,7 +208,7 @@
|
||||
@@ -179,7 +212,7 @@
|
||||
this.villageCollectionObj.func_82566_a(this);
|
||||
}
|
||||
|
||||
|
@ -63,7 +67,7 @@
|
|||
this.chunkProvider = this.createChunkProvider();
|
||||
this.calculateInitialSkylight();
|
||||
this.calculateInitialWeather();
|
||||
@@ -193,7 +222,7 @@
|
||||
@@ -193,7 +226,7 @@
|
||||
this.isRemote = false;
|
||||
this.saveHandler = par1ISaveHandler;
|
||||
this.theProfiler = par5Profiler;
|
||||
|
@ -72,7 +76,23 @@
|
|||
this.worldInfo = par1ISaveHandler.loadWorldInfo();
|
||||
|
||||
if (par4WorldProvider != null)
|
||||
@@ -244,6 +273,19 @@
|
||||
@@ -227,12 +260,13 @@
|
||||
this.worldInfo.setServerInitialized(true);
|
||||
}
|
||||
|
||||
- VillageCollection var6 = (VillageCollection)this.mapStorage.loadData(VillageCollection.class, "villages");
|
||||
+ this.perWorldStorage = new MapStorage(new WorldSpecificSaveHandler((WorldServer)this, par1ISaveHandler));
|
||||
+ VillageCollection var6 = (VillageCollection)perWorldStorage.loadData(VillageCollection.class, "villages");
|
||||
|
||||
if (var6 == null)
|
||||
{
|
||||
this.villageCollectionObj = new VillageCollection(this);
|
||||
- this.mapStorage.setData("villages", this.villageCollectionObj);
|
||||
+ this.perWorldStorage.setData("villages", this.villageCollectionObj);
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -244,6 +278,19 @@
|
||||
this.calculateInitialWeather();
|
||||
}
|
||||
|
||||
|
@ -92,7 +112,7 @@
|
|||
/**
|
||||
* Creates the chunk provider for this world. Called in the constructor. Retrieves provider from worldProvider?
|
||||
*/
|
||||
@@ -298,7 +340,8 @@
|
||||
@@ -298,7 +345,8 @@
|
||||
*/
|
||||
public boolean isAirBlock(int par1, int par2, int par3)
|
||||
{
|
||||
|
@ -102,7 +122,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -307,7 +350,8 @@
|
||||
@@ -307,7 +355,8 @@
|
||||
public boolean blockHasTileEntity(int par1, int par2, int par3)
|
||||
{
|
||||
int var4 = this.getBlockId(par1, par2, par3);
|
||||
|
@ -112,7 +132,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -1029,7 +1073,7 @@
|
||||
@@ -1029,7 +1078,7 @@
|
||||
*/
|
||||
public boolean isDaytime()
|
||||
{
|
||||
|
@ -121,7 +141,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -1061,7 +1105,7 @@
|
||||
@@ -1061,7 +1110,7 @@
|
||||
int var12 = this.getBlockMetadata(var8, var9, var10);
|
||||
Block var13 = Block.blocksList[var11];
|
||||
|
||||
|
@ -130,7 +150,7 @@
|
|||
{
|
||||
MovingObjectPosition var14 = var13.collisionRayTrace(this, var8, var9, var10, par1Vec3, par2Vec3);
|
||||
|
||||
@@ -1261,6 +1305,12 @@
|
||||
@@ -1261,6 +1310,12 @@
|
||||
*/
|
||||
public void playSoundAtEntity(Entity par1Entity, String par2Str, float par3, float par4)
|
||||
{
|
||||
|
@ -143,7 +163,7 @@
|
|||
if (par1Entity != null && par2Str != null)
|
||||
{
|
||||
Iterator var5 = this.worldAccesses.iterator();
|
||||
@@ -1359,6 +1409,11 @@
|
||||
@@ -1359,6 +1414,11 @@
|
||||
EntityPlayer var5 = (EntityPlayer)par1Entity;
|
||||
this.playerEntities.add(var5);
|
||||
this.updateAllPlayersSleepingFlag();
|
||||
|
@ -155,7 +175,7 @@
|
|||
}
|
||||
|
||||
this.getChunkFromChunkCoords(var2, var3).addEntity(par1Entity);
|
||||
@@ -1610,6 +1665,12 @@
|
||||
@@ -1610,6 +1670,12 @@
|
||||
* Calculates the color for the skybox
|
||||
*/
|
||||
public Vec3 getSkyColor(Entity par1Entity, float par2)
|
||||
|
@ -168,7 +188,7 @@
|
|||
{
|
||||
float var3 = this.getCelestialAngle(par2);
|
||||
float var4 = MathHelper.cos(var3 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;
|
||||
@@ -1705,6 +1766,12 @@
|
||||
@@ -1705,6 +1771,12 @@
|
||||
@SideOnly(Side.CLIENT)
|
||||
public Vec3 drawClouds(float par1)
|
||||
{
|
||||
|
@ -181,7 +201,7 @@
|
|||
float var2 = this.getCelestialAngle(par1);
|
||||
float var3 = MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.5F;
|
||||
|
||||
@@ -1783,7 +1850,7 @@
|
||||
@@ -1783,7 +1855,7 @@
|
||||
{
|
||||
int var5 = var3.getBlockID(par1, var4, par2);
|
||||
|
||||
|
@ -190,7 +210,7 @@
|
|||
{
|
||||
return var4 + 1;
|
||||
}
|
||||
@@ -1798,6 +1865,12 @@
|
||||
@@ -1798,6 +1870,12 @@
|
||||
* How bright are stars in the sky
|
||||
*/
|
||||
public float getStarBrightness(float par1)
|
||||
|
@ -203,7 +223,7 @@
|
|||
{
|
||||
float var2 = this.getCelestialAngle(par1);
|
||||
float var3 = 1.0F - (MathHelper.cos(var2 * (float)Math.PI * 2.0F) * 2.0F + 0.25F);
|
||||
@@ -1942,7 +2015,7 @@
|
||||
@@ -1942,7 +2020,7 @@
|
||||
|
||||
if (var8 != null)
|
||||
{
|
||||
|
@ -212,7 +232,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -1952,6 +2025,10 @@
|
||||
@@ -1952,6 +2030,10 @@
|
||||
|
||||
if (!this.entityRemoval.isEmpty())
|
||||
{
|
||||
|
@ -223,7 +243,7 @@
|
|||
this.loadedTileEntityList.removeAll(this.entityRemoval);
|
||||
this.entityRemoval.clear();
|
||||
}
|
||||
@@ -1972,7 +2049,9 @@
|
||||
@@ -1972,7 +2054,9 @@
|
||||
{
|
||||
this.loadedTileEntityList.add(var9);
|
||||
}
|
||||
|
@ -234,7 +254,7 @@
|
|||
if (this.chunkExists(var9.xCoord >> 4, var9.zCoord >> 4))
|
||||
{
|
||||
Chunk var10 = this.getChunkFromChunkCoords(var9.xCoord >> 4, var9.zCoord >> 4);
|
||||
@@ -1982,8 +2061,6 @@
|
||||
@@ -1982,8 +2066,6 @@
|
||||
var10.setChunkBlockTileEntity(var9.xCoord & 15, var9.yCoord, var9.zCoord & 15, var9);
|
||||
}
|
||||
}
|
||||
|
@ -243,7 +263,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -1996,13 +2073,13 @@
|
||||
@@ -1996,13 +2078,13 @@
|
||||
|
||||
public void addTileEntity(Collection par1Collection)
|
||||
{
|
||||
|
@ -264,7 +284,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -2022,9 +2099,17 @@
|
||||
@@ -2022,9 +2104,17 @@
|
||||
{
|
||||
int var3 = MathHelper.floor_double(par1Entity.posX);
|
||||
int var4 = MathHelper.floor_double(par1Entity.posZ);
|
||||
|
@ -285,7 +305,7 @@
|
|||
{
|
||||
par1Entity.lastTickPosX = par1Entity.posX;
|
||||
par1Entity.lastTickPosY = par1Entity.posY;
|
||||
@@ -2259,6 +2344,14 @@
|
||||
@@ -2259,6 +2349,14 @@
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
@ -300,7 +320,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
@@ -2566,25 +2659,21 @@
|
||||
@@ -2566,25 +2664,21 @@
|
||||
*/
|
||||
public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity)
|
||||
{
|
||||
|
@ -341,7 +361,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -2593,27 +2682,10 @@
|
||||
@@ -2593,27 +2687,10 @@
|
||||
*/
|
||||
public void removeBlockTileEntity(int par1, int par2, int par3)
|
||||
{
|
||||
|
@ -373,7 +393,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -2639,7 +2711,8 @@
|
||||
@@ -2639,7 +2716,8 @@
|
||||
*/
|
||||
public boolean isBlockNormalCube(int par1, int par2, int par3)
|
||||
{
|
||||
|
@ -383,7 +403,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -2647,8 +2720,7 @@
|
||||
@@ -2647,8 +2725,7 @@
|
||||
*/
|
||||
public boolean doesBlockHaveSolidTopSurface(int par1, int par2, int par3)
|
||||
{
|
||||
|
@ -393,7 +413,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -2664,7 +2736,7 @@
|
||||
@@ -2664,7 +2741,7 @@
|
||||
if (var5 != null && !var5.isEmpty())
|
||||
{
|
||||
Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
||||
|
@ -402,7 +422,7 @@
|
|||
}
|
||||
else
|
||||
{
|
||||
@@ -2695,8 +2767,7 @@
|
||||
@@ -2695,8 +2772,7 @@
|
||||
*/
|
||||
public void setAllowedSpawnTypes(boolean par1, boolean par2)
|
||||
{
|
||||
|
@ -412,7 +432,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -2712,6 +2783,11 @@
|
||||
@@ -2712,6 +2788,11 @@
|
||||
*/
|
||||
private void calculateInitialWeather()
|
||||
{
|
||||
|
@ -424,7 +444,7 @@
|
|||
if (this.worldInfo.isRaining())
|
||||
{
|
||||
this.rainingStrength = 1.0F;
|
||||
@@ -2727,6 +2803,11 @@
|
||||
@@ -2727,6 +2808,11 @@
|
||||
* Updates all weather states.
|
||||
*/
|
||||
protected void updateWeather()
|
||||
|
@ -436,7 +456,7 @@
|
|||
{
|
||||
if (!this.provider.hasNoSky)
|
||||
{
|
||||
@@ -2829,12 +2910,14 @@
|
||||
@@ -2829,12 +2915,14 @@
|
||||
|
||||
public void toggleRain()
|
||||
{
|
||||
|
@ -452,7 +472,7 @@
|
|||
this.theProfiler.startSection("buildList");
|
||||
int var1;
|
||||
EntityPlayer var2;
|
||||
@@ -2941,6 +3024,11 @@
|
||||
@@ -2941,6 +3029,11 @@
|
||||
*/
|
||||
public boolean canBlockFreeze(int par1, int par2, int par3, boolean par4)
|
||||
{
|
||||
|
@ -464,7 +484,7 @@
|
|||
BiomeGenBase var5 = this.getBiomeGenForCoords(par1, par3);
|
||||
float var6 = var5.getFloatTemperature();
|
||||
|
||||
@@ -2998,6 +3086,11 @@
|
||||
@@ -2998,6 +3091,11 @@
|
||||
* Tests whether or not snow can be placed at a given location
|
||||
*/
|
||||
public boolean canSnowAt(int par1, int par2, int par3)
|
||||
|
@ -476,7 +496,7 @@
|
|||
{
|
||||
BiomeGenBase var4 = this.getBiomeGenForCoords(par1, par3);
|
||||
float var5 = var4.getFloatTemperature();
|
||||
@@ -3091,7 +3184,7 @@
|
||||
@@ -3091,7 +3189,7 @@
|
||||
|
||||
private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6)
|
||||
{
|
||||
|
@ -485,7 +505,7 @@
|
|||
int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6;
|
||||
int var9 = this.getSavedLightValue(EnumSkyBlock.Block, par2 + 1, par3, par4) - par6;
|
||||
int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6;
|
||||
@@ -3226,7 +3319,7 @@
|
||||
@@ -3226,7 +3324,7 @@
|
||||
int var21 = var24 + (var18 / 2 + 1) % 3 / 2 * var19;
|
||||
int var22 = var12 + (var18 / 2 + 2) % 3 / 2 * var19;
|
||||
var14 = this.getSavedLightValue(par1EnumSkyBlock, var20, var21, var22);
|
||||
|
@ -494,7 +514,7 @@
|
|||
|
||||
if (var23 == 0)
|
||||
{
|
||||
@@ -3257,7 +3350,7 @@
|
||||
@@ -3257,7 +3355,7 @@
|
||||
var12 = (var9 >> 12 & 63) - 32 + par4;
|
||||
var13 = this.getSavedLightValue(par1EnumSkyBlock, var10, var24, var12);
|
||||
var14 = this.getBlockId(var10, var24, var12);
|
||||
|
@ -503,7 +523,7 @@
|
|||
|
||||
if (var15 == 0)
|
||||
{
|
||||
@@ -3359,10 +3452,10 @@
|
||||
@@ -3359,10 +3457,10 @@
|
||||
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
|
||||
{
|
||||
this.entitiesWithinAABBExcludingEntity.clear();
|
||||
|
@ -518,7 +538,7 @@
|
|||
|
||||
for (int var7 = var3; var7 <= var4; ++var7)
|
||||
{
|
||||
@@ -3388,10 +3481,10 @@
|
||||
@@ -3388,10 +3486,10 @@
|
||||
|
||||
public List func_82733_a(Class par1Class, AxisAlignedBB par2AxisAlignedBB, IEntitySelector par3IEntitySelector)
|
||||
{
|
||||
|
@ -533,7 +553,7 @@
|
|||
ArrayList var8 = new ArrayList();
|
||||
|
||||
for (int var9 = var4; var9 <= var5; ++var9)
|
||||
@@ -3485,11 +3578,14 @@
|
||||
@@ -3485,11 +3583,14 @@
|
||||
*/
|
||||
public void addLoadedEntities(List par1List)
|
||||
{
|
||||
|
@ -551,7 +571,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -3523,6 +3619,11 @@
|
||||
@@ -3523,6 +3624,11 @@
|
||||
else
|
||||
{
|
||||
if (var9 != null && (var9 == Block.waterMoving || var9 == Block.waterStill || var9 == Block.lavaMoving || var9 == Block.lavaStill || var9 == Block.fire || var9.blockMaterial.isGroundCover()))
|
||||
|
@ -563,7 +583,7 @@
|
|||
{
|
||||
var9 = null;
|
||||
}
|
||||
@@ -3740,7 +3841,7 @@
|
||||
@@ -3740,7 +3846,7 @@
|
||||
*/
|
||||
public long getSeed()
|
||||
{
|
||||
|
@ -572,7 +592,7 @@
|
|||
}
|
||||
|
||||
public long func_82737_E()
|
||||
@@ -3750,7 +3851,7 @@
|
||||
@@ -3750,7 +3856,7 @@
|
||||
|
||||
public long getWorldTime()
|
||||
{
|
||||
|
@ -581,7 +601,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -3758,7 +3859,7 @@
|
||||
@@ -3758,7 +3864,7 @@
|
||||
*/
|
||||
public void setWorldTime(long par1)
|
||||
{
|
||||
|
@ -590,7 +610,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -3766,13 +3867,13 @@
|
||||
@@ -3766,13 +3872,13 @@
|
||||
*/
|
||||
public ChunkCoordinates getSpawnPoint()
|
||||
{
|
||||
|
@ -606,7 +626,7 @@
|
|||
}
|
||||
|
||||
@SideOnly(Side.CLIENT)
|
||||
@@ -3796,7 +3897,10 @@
|
||||
@@ -3796,7 +3902,10 @@
|
||||
|
||||
if (!this.loadedEntityList.contains(par1Entity))
|
||||
{
|
||||
|
@ -618,7 +638,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -3804,6 +3908,11 @@
|
||||
@@ -3804,6 +3913,11 @@
|
||||
* Called when checking if a certain block can be mined or not. The 'spawn safe zone' check is located here.
|
||||
*/
|
||||
public boolean canMineBlock(EntityPlayer par1EntityPlayer, int par2, int par3, int par4)
|
||||
|
@ -630,7 +650,7 @@
|
|||
{
|
||||
return true;
|
||||
}
|
||||
@@ -3921,8 +4030,7 @@
|
||||
@@ -3921,8 +4035,7 @@
|
||||
*/
|
||||
public boolean isBlockHighHumidity(int par1, int par2, int par3)
|
||||
{
|
||||
|
@ -640,7 +660,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -3984,7 +4092,7 @@
|
||||
@@ -3984,7 +4097,7 @@
|
||||
*/
|
||||
public int getHeight()
|
||||
{
|
||||
|
@ -649,7 +669,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -3992,7 +4100,7 @@
|
||||
@@ -3992,7 +4105,7 @@
|
||||
*/
|
||||
public int getActualHeight()
|
||||
{
|
||||
|
@ -658,7 +678,7 @@
|
|||
}
|
||||
|
||||
public IUpdatePlayerListBox func_82735_a(EntityMinecart par1EntityMinecart)
|
||||
@@ -4035,7 +4143,7 @@
|
||||
@@ -4035,7 +4148,7 @@
|
||||
*/
|
||||
public double getHorizon()
|
||||
{
|
||||
|
@ -667,7 +687,7 @@
|
|||
}
|
||||
|
||||
/**
|
||||
@@ -4074,4 +4182,75 @@
|
||||
@@ -4074,4 +4187,75 @@
|
||||
this.field_83016_L.setTimeInMillis(System.currentTimeMillis());
|
||||
return this.field_83016_L;
|
||||
}
|
||||
|
|
|
@ -198,7 +198,15 @@
|
|||
}
|
||||
}
|
||||
|
||||
@@ -965,4 +1003,9 @@
|
||||
@@ -740,6 +778,7 @@
|
||||
this.checkSessionLock();
|
||||
this.saveHandler.saveWorldInfoWithPlayer(this.worldInfo, this.mcServer.getConfigurationManager().getTagsFromLastWrite());
|
||||
this.mapStorage.saveAllData();
|
||||
+ this.perWorldStorage.saveAllData();
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -965,4 +1004,9 @@
|
||||
{
|
||||
return this.thePlayerManager;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue