Added variable entity radius to World, to be used if a mod make really large entities.

This commit is contained in:
LexManos 2012-04-14 13:07:01 -07:00
parent ff54e8279a
commit bda94ce522
2 changed files with 132 additions and 36 deletions

View file

@ -1,6 +1,6 @@
--- ../src_base/minecraft/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000 --- ../src_base/minecraft/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000
@@ -9,6 +9,8 @@ @@ -9,8 +9,17 @@
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
@ -8,8 +8,17 @@
+ +
public class World implements IBlockAccess public class World implements IBlockAccess
{ {
+ /**
+ * Used in the getEntitiesWithinAABB functions to expand the search area for entities.
+ * Modders should change this variable to a higher value if it is less then the radius
+ * of one of there entities.
+ */
+ public static double MAX_ENTITY_RADIUS = 2.0D;
+
/** /**
@@ -79,7 +81,7 @@ * boolean; if true updates scheduled by scheduleBlockUpdate happen immediately
*/
@@ -79,7 +88,7 @@
* Contains a timestamp from when the World object was created. Is used in the session.lock file * Contains a timestamp from when the World object was created. Is used in the session.lock file
*/ */
private long lockTimestamp; private long lockTimestamp;
@ -18,7 +27,7 @@
/** Option > Difficulty setting (0 - 3) */ /** Option > Difficulty setting (0 - 3) */
public int difficultySetting; public int difficultySetting;
@@ -214,6 +216,7 @@ @@ -214,6 +223,7 @@
this.chunkProvider = this.createChunkProvider(); this.chunkProvider = this.createChunkProvider();
this.calculateInitialSkylight(); this.calculateInitialSkylight();
this.calculateInitialWeather(); this.calculateInitialWeather();
@ -26,7 +35,7 @@
} }
public World(World par1World, WorldProvider par2WorldProvider) public World(World par1World, WorldProvider par2WorldProvider)
@@ -259,6 +262,7 @@ @@ -259,6 +269,7 @@
this.chunkProvider = this.createChunkProvider(); this.chunkProvider = this.createChunkProvider();
this.calculateInitialSkylight(); this.calculateInitialSkylight();
this.calculateInitialWeather(); this.calculateInitialWeather();
@ -34,7 +43,7 @@
} }
public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings) public World(ISaveHandler par1ISaveHandler, String par2Str, WorldSettings par3WorldSettings)
@@ -340,6 +344,7 @@ @@ -340,6 +351,7 @@
this.calculateInitialSkylight(); this.calculateInitialSkylight();
this.calculateInitialWeather(); this.calculateInitialWeather();
@ -42,7 +51,7 @@
} }
/** /**
@@ -507,6 +512,7 @@ @@ -507,6 +519,7 @@
} }
this.chunkProvider.saveChunks(par1, par2IProgressUpdate); this.chunkProvider.saveChunks(par1, par2IProgressUpdate);
@ -50,7 +59,7 @@
} }
} }
@@ -559,7 +565,8 @@ @@ -559,7 +572,8 @@
*/ */
public boolean isAirBlock(int par1, int par2, int par3) public boolean isAirBlock(int par1, int par2, int par3)
{ {
@ -60,7 +69,7 @@
} }
/** /**
@@ -2067,7 +2074,7 @@ @@ -2067,7 +2081,7 @@
if (var7 != null) if (var7 != null)
{ {
@ -69,7 +78,7 @@
} }
} }
} }
@@ -2097,18 +2104,18 @@ @@ -2097,18 +2111,18 @@
{ {
this.loadedTileEntityList.add(var8); this.loadedTileEntityList.add(var8);
} }
@ -92,7 +101,7 @@
} }
} }
@@ -2121,13 +2128,13 @@ @@ -2121,13 +2135,13 @@
public void addTileEntity(Collection par1Collection) public void addTileEntity(Collection par1Collection)
{ {
@ -112,7 +121,7 @@
} }
} }
@@ -2149,7 +2156,7 @@ @@ -2149,7 +2163,7 @@
int var4 = MathHelper.floor_double(par1Entity.posZ); int var4 = MathHelper.floor_double(par1Entity.posZ);
byte var5 = 32; byte var5 = 32;
@ -121,7 +130,7 @@
{ {
par1Entity.lastTickPosX = par1Entity.posX; par1Entity.lastTickPosX = par1Entity.posX;
par1Entity.lastTickPosY = par1Entity.posY; par1Entity.lastTickPosY = par1Entity.posY;
@@ -2326,7 +2333,14 @@ @@ -2326,7 +2340,14 @@
if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID) if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID)
{ {
return true; return true;
@ -137,7 +146,7 @@
} }
} }
} }
@@ -2630,25 +2644,19 @@ @@ -2630,25 +2651,19 @@
*/ */
public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity) public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity)
{ {
@ -175,7 +184,7 @@
} }
} }
@@ -2657,27 +2665,10 @@ @@ -2657,27 +2672,10 @@
*/ */
public void removeBlockTileEntity(int par1, int par2, int par3) public void removeBlockTileEntity(int par1, int par2, int par3)
{ {
@ -206,7 +215,7 @@
} }
} }
@@ -2703,7 +2694,8 @@ @@ -2703,7 +2701,8 @@
*/ */
public boolean isBlockNormalCube(int par1, int par2, int par3) public boolean isBlockNormalCube(int par1, int par2, int par3)
{ {
@ -216,7 +225,16 @@
} }
/** /**
@@ -2984,6 +2976,7 @@ @@ -2719,7 +2718,7 @@
if (var5 != null && !var5.isEmpty())
{
Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)];
- return var6 == null ? false : var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock();
+ return var6 == null ? false : isBlockNormalCube(par1, par2, par3);
}
else
{
@@ -2984,6 +2983,7 @@
} }
} }
} }
@ -224,7 +242,7 @@
Profiler.endSection(); Profiler.endSection();
@@ -3307,7 +3300,7 @@ @@ -3307,7 +3307,7 @@
private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6) private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6)
{ {
@ -233,7 +251,37 @@
int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6; int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6;
int var9 = 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; int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6;
@@ -3839,7 +3832,10 @@ @@ -3667,10 +3667,10 @@
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
{
this.entitiesWithinAABBExcludingEntity.clear();
- int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - 2.0D) / 16.0D);
- int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + 2.0D) / 16.0D);
- int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - 2.0D) / 16.0D);
- int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + 2.0D) / 16.0D);
+ int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - MAX_ENTITY_RADIUS) / 16.0D);
+ int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + MAX_ENTITY_RADIUS) / 16.0D);
+ int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - MAX_ENTITY_RADIUS) / 16.0D);
+ int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + MAX_ENTITY_RADIUS) / 16.0D);
for (int var7 = var3; var7 <= var4; ++var7)
{
@@ -3691,10 +3691,10 @@
*/
public List getEntitiesWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB)
{
- int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - 2.0D) / 16.0D);
- int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + 2.0D) / 16.0D);
- int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - 2.0D) / 16.0D);
- int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + 2.0D) / 16.0D);
+ int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - MAX_ENTITY_RADIUS) / 16.0D);
+ int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + MAX_ENTITY_RADIUS) / 16.0D);
+ int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - MAX_ENTITY_RADIUS) / 16.0D);
+ int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + MAX_ENTITY_RADIUS) / 16.0D);
ArrayList var7 = new ArrayList();
for (int var8 = var3; var8 <= var4; ++var8)
@@ -3839,7 +3839,10 @@
{ {
var8 = null; var8 = null;
} }
@ -245,7 +293,7 @@
return par1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, par2, par3, par4, par6); return par1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, par2, par3, par4, par6);
} }
} }
@@ -4443,4 +4439,39 @@ @@ -4443,4 +4446,39 @@
{ {
return this.worldInfo.getTerrainType() == WorldType.FLAT ? 0.0D : 63.0D; return this.worldInfo.getTerrainType() == WorldType.FLAT ? 0.0D : 63.0D;
} }

View file

@ -1,6 +1,6 @@
--- ../src_base/minecraft_server/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000 --- ../src_base/minecraft_server/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000
+++ ../src_work/minecraft_server/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000 +++ ../src_work/minecraft_server/net/minecraft/src/World.java 0000-00-00 00:00:00.000000000 -0000
@@ -9,6 +9,8 @@ @@ -9,8 +9,17 @@
import java.util.Set; import java.util.Set;
import java.util.TreeSet; import java.util.TreeSet;
@ -8,8 +8,17 @@
+ +
public class World implements IBlockAccess public class World implements IBlockAccess
{ {
+ /**
+ * Used in the getEntitiesWithinAABB functions to expand the search area for entities.
+ * Modders should change this variable to a higher value if it is less then the radius
+ * of one of there entities.
+ */
+ public static double MAX_ENTITY_RADIUS = 2.0D;
+
/** /**
@@ -79,7 +81,7 @@ * boolean; if true updates scheduled by scheduleBlockUpdate happen immediately
*/
@@ -79,7 +88,7 @@
* Contains a timestamp from when the World object was created. Is used in the session.lock file * Contains a timestamp from when the World object was created. Is used in the session.lock file
*/ */
private long lockTimestamp = System.currentTimeMillis(); private long lockTimestamp = System.currentTimeMillis();
@ -18,7 +27,7 @@
/** Whether monsters are enabled or not. (1 = on, 0 = off) */ /** Whether monsters are enabled or not. (1 = on, 0 = off) */
public int difficultySetting; public int difficultySetting;
@@ -219,6 +221,7 @@ @@ -219,6 +228,7 @@
this.calculateInitialSkylight(); this.calculateInitialSkylight();
this.calculateInitialWeather(); this.calculateInitialWeather();
@ -26,7 +35,7 @@
} }
/** /**
@@ -323,6 +326,7 @@ @@ -323,6 +333,7 @@
} }
this.chunkProvider.saveChunks(par1, par2IProgressUpdate); this.chunkProvider.saveChunks(par1, par2IProgressUpdate);
@ -34,7 +43,7 @@
} }
} }
@@ -354,7 +358,8 @@ @@ -354,7 +365,8 @@
*/ */
public boolean isAirBlock(int par1, int par2, int par3) public boolean isAirBlock(int par1, int par2, int par3)
{ {
@ -44,7 +53,7 @@
} }
public boolean func_48084_h(int par1, int par2, int par3) public boolean func_48084_h(int par1, int par2, int par3)
@@ -1600,7 +1605,7 @@ @@ -1600,7 +1612,7 @@
if (var7 != null) if (var7 != null)
{ {
@ -53,7 +62,7 @@
} }
} }
} }
@@ -1630,14 +1635,16 @@ @@ -1630,14 +1642,16 @@
{ {
this.loadedTileEntityList.add(var8); this.loadedTileEntityList.add(var8);
} }
@ -72,7 +81,7 @@
} }
} }
@@ -1654,13 +1661,13 @@ @@ -1654,13 +1668,13 @@
public void addTileEntity(Collection par1Collection) public void addTileEntity(Collection par1Collection)
{ {
@ -92,7 +101,7 @@
} }
} }
@@ -1682,7 +1689,7 @@ @@ -1682,7 +1696,7 @@
int var4 = MathHelper.floor_double(par1Entity.posZ); int var4 = MathHelper.floor_double(par1Entity.posZ);
byte var5 = 32; byte var5 = 32;
@ -101,7 +110,7 @@
{ {
par1Entity.lastTickPosX = par1Entity.posX; par1Entity.lastTickPosX = par1Entity.posX;
par1Entity.lastTickPosY = par1Entity.posY; par1Entity.lastTickPosY = par1Entity.posY;
@@ -1905,6 +1912,13 @@ @@ -1905,6 +1919,13 @@
if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID) if (var11 == Block.fire.blockID || var11 == Block.lavaMoving.blockID || var11 == Block.lavaStill.blockID)
{ {
return true; return true;
@ -115,7 +124,7 @@
} }
} }
} }
@@ -2188,25 +2202,21 @@ @@ -2188,25 +2209,21 @@
*/ */
public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity) public void setBlockTileEntity(int par1, int par2, int par3, TileEntity par4TileEntity)
{ {
@ -154,7 +163,7 @@
} }
} }
@@ -2215,27 +2225,10 @@ @@ -2215,27 +2232,10 @@
*/ */
public void removeBlockTileEntity(int par1, int par2, int par3) public void removeBlockTileEntity(int par1, int par2, int par3)
{ {
@ -185,7 +194,7 @@
} }
} }
@@ -2261,7 +2254,8 @@ @@ -2261,7 +2261,8 @@
*/ */
public boolean isBlockNormalCube(int par1, int par2, int par3) public boolean isBlockNormalCube(int par1, int par2, int par3)
{ {
@ -195,7 +204,16 @@
} }
/** /**
@@ -2536,6 +2530,7 @@ @@ -2277,7 +2278,7 @@
if (var5 != null && !var5.isEmpty())
{
Block var6 = Block.blocksList[this.getBlockId(par1, par2, par3)];
- return var6 == null ? false : var6.blockMaterial.isOpaque() && var6.renderAsNormalBlock();
+ return var6 == null ? false : isBlockNormalCube(par1, par2, par3);
}
else
{
@@ -2536,6 +2537,7 @@
} }
} }
} }
@ -203,7 +221,7 @@
Profiler.endSection(); Profiler.endSection();
@@ -2859,7 +2854,7 @@ @@ -2859,7 +2861,7 @@
private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6) private int computeBlockLightValue(int par1, int par2, int par3, int par4, int par5, int par6)
{ {
@ -212,7 +230,37 @@
int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6; int var8 = this.getSavedLightValue(EnumSkyBlock.Block, par2 - 1, par3, par4) - par6;
int var9 = 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; int var10 = this.getSavedLightValue(EnumSkyBlock.Block, par2, par3 - 1, par4) - par6;
@@ -3345,6 +3340,11 @@ @@ -3192,10 +3194,10 @@
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
{
this.entitiesWithinAABBExcludingEntity.clear();
- int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - 2.0D) / 16.0D);
- int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + 2.0D) / 16.0D);
- int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - 2.0D) / 16.0D);
- int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + 2.0D) / 16.0D);
+ int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - MAX_ENTITY_RADIUS) / 16.0D);
+ int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + MAX_ENTITY_RADIUS) / 16.0D);
+ int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - MAX_ENTITY_RADIUS) / 16.0D);
+ int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + MAX_ENTITY_RADIUS) / 16.0D);
for (int var7 = var3; var7 <= var4; ++var7)
{
@@ -3216,10 +3218,10 @@
*/
public List getEntitiesWithinAABB(Class par1Class, AxisAlignedBB par2AxisAlignedBB)
{
- int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - 2.0D) / 16.0D);
- int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + 2.0D) / 16.0D);
- int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - 2.0D) / 16.0D);
- int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + 2.0D) / 16.0D);
+ int var3 = MathHelper.floor_double((par2AxisAlignedBB.minX - MAX_ENTITY_RADIUS) / 16.0D);
+ int var4 = MathHelper.floor_double((par2AxisAlignedBB.maxX + MAX_ENTITY_RADIUS) / 16.0D);
+ int var5 = MathHelper.floor_double((par2AxisAlignedBB.minZ - MAX_ENTITY_RADIUS) / 16.0D);
+ int var6 = MathHelper.floor_double((par2AxisAlignedBB.maxZ + MAX_ENTITY_RADIUS) / 16.0D);
ArrayList var7 = new ArrayList();
for (int var8 = var3; var8 <= var4; ++var8)
@@ -3345,6 +3347,11 @@
{ {
var8 = null; var8 = null;
} }
@ -224,7 +272,7 @@
return par1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, par2, par3, par4, par6); return par1 > 0 && var8 == null && var9.canPlaceBlockOnSide(this, par2, par3, par4, par6);
} }
@@ -3855,4 +3855,38 @@ @@ -3855,4 +3862,38 @@
{ {
return this.getChunkProvider().findClosestStructure(this, par1Str, par2, par3, par4); return this.getChunkProvider().findClosestStructure(this, par1Str, par2, par3, par4);
} }