|
|
@ -1,9 +1,12 @@
|
|
|
|
package net.minecraft.src;
|
|
|
|
package net.minecraft.src;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
import java.math.BigInteger;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// The most evil class
|
|
|
|
public class ChunkCache implements IBlockAccess
|
|
|
|
public class ChunkCache implements IBlockAccess
|
|
|
|
{
|
|
|
|
{
|
|
|
|
private int chunkX;
|
|
|
|
private BigInteger chunkX;
|
|
|
|
private int chunkZ;
|
|
|
|
private BigInteger chunkZ;
|
|
|
|
private Chunk[][] chunkArray;
|
|
|
|
private Chunk[][] chunkArray;
|
|
|
|
|
|
|
|
|
|
|
|
/** set by !chunk.getAreLevelsEmpty */
|
|
|
|
/** set by !chunk.getAreLevelsEmpty */
|
|
|
@ -12,25 +15,25 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/** Reference to the World object. */
|
|
|
|
/** Reference to the World object. */
|
|
|
|
private World worldObj;
|
|
|
|
private World worldObj;
|
|
|
|
|
|
|
|
|
|
|
|
public ChunkCache(World par1World, int par2, int par3, int par4, int par5, int par6, int par7)
|
|
|
|
public ChunkCache(World par1World, BigInteger par2, int par3, BigInteger par4, BigInteger par5, int par6, BigInteger par7)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
this.worldObj = par1World;
|
|
|
|
this.worldObj = par1World;
|
|
|
|
this.chunkX = par2 >> 4;
|
|
|
|
this.chunkX = par2.shiftRight(4);
|
|
|
|
this.chunkZ = par4 >> 4;
|
|
|
|
this.chunkZ = par4.shiftRight(4);
|
|
|
|
int var8 = par5 >> 4;
|
|
|
|
BigInteger var8 = par5.shiftRight(4);
|
|
|
|
int var9 = par7 >> 4;
|
|
|
|
BigInteger var9 = par7.shiftRight(4);
|
|
|
|
this.chunkArray = new Chunk[var8 - this.chunkX + 1][var9 - this.chunkZ + 1];
|
|
|
|
this.chunkArray = new Chunk[var8.subtract(chunkX).intValueExact() + 1][var9.subtract(chunkZ).intValueExact() + 1];
|
|
|
|
this.hasExtendedLevels = true;
|
|
|
|
this.hasExtendedLevels = true;
|
|
|
|
|
|
|
|
|
|
|
|
for (int var10 = this.chunkX; var10 <= var8; ++var10)
|
|
|
|
for (BigInteger var10 = this.chunkX; var10.compareTo(var8) <= 0; var10 = var10.add(BigInteger.ONE))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
for (int var11 = this.chunkZ; var11 <= var9; ++var11)
|
|
|
|
for (BigInteger var11 = this.chunkZ; var11.compareTo(var9) <= 0; var11 = var11.add(BigInteger.ONE))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Chunk var12 = par1World.getChunkFromChunkCoords(var10, var11);
|
|
|
|
Chunk var12 = par1World.getChunkFromChunkCoords(var10, var11);
|
|
|
|
|
|
|
|
|
|
|
|
if (var12 != null)
|
|
|
|
if (var12 != null)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
this.chunkArray[var10 - this.chunkX][var11 - this.chunkZ] = var12;
|
|
|
|
this.chunkArray[var10.subtract(chunkX).intValueExact()][var11.subtract(chunkZ).intValueExact()] = var12;
|
|
|
|
|
|
|
|
|
|
|
|
if (!var12.getAreLevelsEmpty(par3, par6))
|
|
|
|
if (!var12.getAreLevelsEmpty(par3, par6))
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -52,7 +55,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns the block ID at coords x,y,z
|
|
|
|
* Returns the block ID at coords x,y,z
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getBlockId(int par1, int par2, int par3)
|
|
|
|
public int getBlockId(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (par2 < 0)
|
|
|
|
if (par2 < 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -64,13 +67,13 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var4 = (par1 >> 4) - this.chunkX;
|
|
|
|
int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
|
|
|
|
int var5 = (par3 >> 4) - this.chunkZ;
|
|
|
|
int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
|
|
|
|
|
|
|
|
|
|
|
|
if (var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length)
|
|
|
|
if (var4 >= 0 && var4 < this.chunkArray.length && var5 >= 0 && var5 < this.chunkArray[var4].length)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Chunk var6 = this.chunkArray[var4][var5];
|
|
|
|
Chunk var6 = this.chunkArray[var4][var5];
|
|
|
|
return var6 == null ? 0 : var6.getBlockID(par1 & 15, par2, par3 & 15);
|
|
|
|
return var6 == null ? 0 : var6.getBlockID(par1.intValue() & 15, par2, par3.intValue() & 15);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -82,14 +85,14 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns the TileEntity associated with a given block in X,Y,Z coordinates, or null if no TileEntity exists
|
|
|
|
* Returns the TileEntity associated with a given block in X,Y,Z coordinates, or null if no TileEntity exists
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public TileEntity getBlockTileEntity(int par1, int par2, int par3)
|
|
|
|
public TileEntity getBlockTileEntity(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var4 = (par1 >> 4) - this.chunkX;
|
|
|
|
int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
|
|
|
|
int var5 = (par3 >> 4) - this.chunkZ;
|
|
|
|
int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
|
|
|
|
return this.chunkArray[var4][var5].getChunkBlockTileEntity(par1 & 15, par2, par3 & 15);
|
|
|
|
return this.chunkArray[var4][var5].getChunkBlockTileEntity(par1.intValue() & 15, par2, par3.intValue() & 15);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
public float getBrightness(int par1, int par2, int par3, int par4)
|
|
|
|
public float getBrightness(BigInteger par1, int par2, BigInteger par3, int par4)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var5 = this.getLightValue(par1, par2, par3);
|
|
|
|
int var5 = this.getLightValue(par1, par2, par3);
|
|
|
|
|
|
|
|
|
|
|
@ -104,7 +107,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Any Light rendered on a 1.8 Block goes through here
|
|
|
|
* Any Light rendered on a 1.8 Block goes through here
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getLightBrightnessForSkyBlocks(int par1, int par2, int par3, int par4)
|
|
|
|
public int getLightBrightnessForSkyBlocks(BigInteger par1, int par2, BigInteger par3, int par4)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var5 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Sky, par1, par2, par3);
|
|
|
|
int var5 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Sky, par1, par2, par3);
|
|
|
|
int var6 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Block, par1, par2, par3);
|
|
|
|
int var6 = this.getSkyBlockTypeBrightness(EnumSkyBlock.Block, par1, par2, par3);
|
|
|
@ -121,7 +124,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
* Returns how bright the block is shown as which is the block's light value looked up in a lookup table (light
|
|
|
|
* Returns how bright the block is shown as which is the block's light value looked up in a lookup table (light
|
|
|
|
* values aren't linear for brightness). Args: x, y, z
|
|
|
|
* values aren't linear for brightness). Args: x, y, z
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public float getLightBrightness(int par1, int par2, int par3)
|
|
|
|
public float getLightBrightness(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return this.worldObj.provider.lightBrightnessTable[this.getLightValue(par1, par2, par3)];
|
|
|
|
return this.worldObj.provider.lightBrightnessTable[this.getLightValue(par1, par2, par3)];
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -129,7 +132,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Gets the light value of the specified block coords. Args: x, y, z
|
|
|
|
* Gets the light value of the specified block coords. Args: x, y, z
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getLightValue(int par1, int par2, int par3)
|
|
|
|
public int getLightValue(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return this.getLightValueExt(par1, par2, par3, true);
|
|
|
|
return this.getLightValueExt(par1, par2, par3, true);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -137,81 +140,74 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Get light value with flag
|
|
|
|
* Get light value with flag
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getLightValueExt(int par1, int par2, int par3, boolean par4)
|
|
|
|
public int getLightValueExt(BigInteger par1, int par2, BigInteger par3, boolean par4)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (par1 >= -30000000 && par3 >= -30000000 && par1 < 30000000 && par3 <= 30000000)
|
|
|
|
int var5;
|
|
|
|
|
|
|
|
int var6;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (par4)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var5;
|
|
|
|
var5 = this.getBlockId(par1, par2, par3);
|
|
|
|
int var6;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (par4)
|
|
|
|
if (var5 == Block.stoneSingleSlab.blockID || var5 == Block.woodSingleSlab.blockID || var5 == Block.tilledField.blockID || var5 == Block.stairCompactPlanks.blockID || var5 == Block.stairCompactCobblestone.blockID)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var5 = this.getBlockId(par1, par2, par3);
|
|
|
|
var6 = this.getLightValueExt(par1, par2 + 1, par3, false);
|
|
|
|
|
|
|
|
int var7 = this.getLightValueExt(par1.add(BigInteger.ONE), par2, par3, false);
|
|
|
|
|
|
|
|
int var8 = this.getLightValueExt(par1.subtract(BigInteger.ONE), par2, par3, false);
|
|
|
|
|
|
|
|
int var9 = this.getLightValueExt(par1, par2, par3.add(BigInteger.ONE), false);
|
|
|
|
|
|
|
|
int var10 = this.getLightValueExt(par1, par2, par3.subtract(BigInteger.ONE), false);
|
|
|
|
|
|
|
|
|
|
|
|
if (var5 == Block.stoneSingleSlab.blockID || var5 == Block.woodSingleSlab.blockID || var5 == Block.tilledField.blockID || var5 == Block.stairCompactPlanks.blockID || var5 == Block.stairCompactCobblestone.blockID)
|
|
|
|
if (var7 > var6)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var6 = this.getLightValueExt(par1, par2 + 1, par3, false);
|
|
|
|
var6 = var7;
|
|
|
|
int var7 = this.getLightValueExt(par1 + 1, par2, par3, false);
|
|
|
|
}
|
|
|
|
int var8 = this.getLightValueExt(par1 - 1, par2, par3, false);
|
|
|
|
|
|
|
|
int var9 = this.getLightValueExt(par1, par2, par3 + 1, false);
|
|
|
|
|
|
|
|
int var10 = this.getLightValueExt(par1, par2, par3 - 1, false);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var7 > var6)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var6 = var7;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var8 > var6)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var6 = var8;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var9 > var6)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var6 = var9;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var10 > var6)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var6 = var10;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return var6;
|
|
|
|
if (var8 > var6)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var6 = var8;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (par2 < 0)
|
|
|
|
if (var9 > var6)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return 0;
|
|
|
|
var6 = var9;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else if (par2 >= 256)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var5 = 15 - this.worldObj.skylightSubtracted;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var5 < 0)
|
|
|
|
if (var10 > var6)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var5 = 0;
|
|
|
|
var6 = var10;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
return var5;
|
|
|
|
return var6;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (par2 < 0)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return 0;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else if (par2 >= 256)
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
var5 = 15 - this.worldObj.skylightSubtracted;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if (var5 < 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
var5 = (par1 >> 4) - this.chunkX;
|
|
|
|
var5 = 0;
|
|
|
|
var6 = (par3 >> 4) - this.chunkZ;
|
|
|
|
|
|
|
|
return this.chunkArray[var5][var6].getBlockLightValue(par1 & 15, par2, par3 & 15, this.worldObj.skylightSubtracted);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
return var5;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return 15;
|
|
|
|
var5 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
|
|
|
|
|
|
|
|
var6 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
|
|
|
|
|
|
|
|
return this.chunkArray[var5][var6].getBlockLightValue(par1.intValue() & 15, par2, par3.intValue() & 15, this.worldObj.skylightSubtracted);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns the block metadata at coords x,y,z
|
|
|
|
* Returns the block metadata at coords x,y,z
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getBlockMetadata(int par1, int par2, int par3)
|
|
|
|
public int getBlockMetadata(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (par2 < 0)
|
|
|
|
if (par2 < 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -223,16 +219,16 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
else
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var4 = (par1 >> 4) - this.chunkX;
|
|
|
|
int var4 = (par1.shiftRight(4)).subtract(chunkX).intValueExact();
|
|
|
|
int var5 = (par3 >> 4) - this.chunkZ;
|
|
|
|
int var5 = (par3.shiftRight(4)).subtract(chunkZ).intValueExact();
|
|
|
|
return this.chunkArray[var4][var5].getBlockMetadata(par1 & 15, par2, par3 & 15);
|
|
|
|
return this.chunkArray[var4][var5].getBlockMetadata(par1.intValue() & 15, par2, par3.intValue() & 15);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns the block's material.
|
|
|
|
* Returns the block's material.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public Material getBlockMaterial(int par1, int par2, int par3)
|
|
|
|
public Material getBlockMaterial(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
int var4 = this.getBlockId(par1, par2, par3);
|
|
|
|
int var4 = this.getBlockId(par1, par2, par3);
|
|
|
|
return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial;
|
|
|
|
return var4 == 0 ? Material.air : Block.blocksList[var4].blockMaterial;
|
|
|
@ -241,7 +237,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Gets the biome for a given set of x/z coordinates
|
|
|
|
* Gets the biome for a given set of x/z coordinates
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public BiomeGenBase getBiomeGenForCoords(int par1, int par2)
|
|
|
|
public BiomeGenBase getBiomeGenForCoords(BigInteger par1, BigInteger par2)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
return this.worldObj.getBiomeGenForCoords(par1, par2);
|
|
|
|
return this.worldObj.getBiomeGenForCoords(par1, par2);
|
|
|
|
}
|
|
|
|
}
|
|
|
@ -249,7 +245,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns true if the block at the specified coordinates is an opaque cube. Args: x, y, z
|
|
|
|
* Returns true if the block at the specified coordinates is an opaque cube. Args: x, y, z
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public boolean isBlockOpaqueCube(int par1, int par2, int par3)
|
|
|
|
public boolean isBlockOpaqueCube(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
return var4 == null ? false : var4.isOpaqueCube();
|
|
|
|
return var4 == null ? false : var4.isOpaqueCube();
|
|
|
@ -258,7 +254,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Indicate if a material is a normal solid opaque cube.
|
|
|
|
* Indicate if a material is a normal solid opaque cube.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public boolean isBlockNormalCube(int par1, int par2, int par3)
|
|
|
|
public boolean isBlockNormalCube(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
return var4 == null ? false : var4.blockMaterial.blocksMovement() && var4.renderAsNormalBlock();
|
|
|
|
return var4 == null ? false : var4.blockMaterial.blocksMovement() && var4.renderAsNormalBlock();
|
|
|
@ -267,7 +263,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns true if the block at the given coordinate has a solid (buildable) top surface.
|
|
|
|
* Returns true if the block at the given coordinate has a solid (buildable) top surface.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public boolean doesBlockHaveSolidTopSurface(int par1, int par2, int par3)
|
|
|
|
public boolean doesBlockHaveSolidTopSurface(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
return var4 == null ? false : (var4.blockMaterial.isOpaque() && var4.renderAsNormalBlock() ? true : (var4 instanceof BlockStairs ? (this.getBlockMetadata(par1, par2, par3) & 4) == 4 : (var4 instanceof BlockHalfSlab ? (this.getBlockMetadata(par1, par2, par3) & 8) == 8 : false)));
|
|
|
|
return var4 == null ? false : (var4.blockMaterial.isOpaque() && var4.renderAsNormalBlock() ? true : (var4 instanceof BlockStairs ? (this.getBlockMetadata(par1, par2, par3) & 4) == 4 : (var4 instanceof BlockHalfSlab ? (this.getBlockMetadata(par1, par2, par3) & 8) == 8 : false)));
|
|
|
@ -276,7 +272,7 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* Returns true if the block at the specified coordinates is empty
|
|
|
|
* Returns true if the block at the specified coordinates is empty
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public boolean isAirBlock(int par1, int par2, int par3)
|
|
|
|
public boolean isAirBlock(BigInteger par1, int par2, BigInteger par3)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
Block var4 = Block.blocksList[this.getBlockId(par1, par2, par3)];
|
|
|
|
return var4 == null;
|
|
|
|
return var4 == null;
|
|
|
@ -286,70 +282,64 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
* Brightness for SkyBlock.Sky is clear white and (through color computing it is assumed) DEPENDENT ON DAYTIME.
|
|
|
|
* Brightness for SkyBlock.Sky is clear white and (through color computing it is assumed) DEPENDENT ON DAYTIME.
|
|
|
|
* Brightness for SkyBlock.Block is yellowish and independent.
|
|
|
|
* Brightness for SkyBlock.Block is yellowish and independent.
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getSkyBlockTypeBrightness(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4)
|
|
|
|
public int getSkyBlockTypeBrightness(EnumSkyBlock par1EnumSkyBlock, BigInteger par2, int par3, BigInteger par4)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (par3 < 0)
|
|
|
|
return 15;
|
|
|
|
{
|
|
|
|
// if (par3 < 0)
|
|
|
|
par3 = 0;
|
|
|
|
// {
|
|
|
|
}
|
|
|
|
// par3 = 0;
|
|
|
|
|
|
|
|
// }
|
|
|
|
if (par3 >= 256)
|
|
|
|
//
|
|
|
|
{
|
|
|
|
// if (par3 >= 256)
|
|
|
|
par3 = 255;
|
|
|
|
// {
|
|
|
|
}
|
|
|
|
// par3 = 255;
|
|
|
|
|
|
|
|
// }
|
|
|
|
if (par3 >= 0 && par3 < 256 && par2 >= -30000000 && par4 >= -30000000 && par2 < 30000000 && par4 <= 30000000)
|
|
|
|
//
|
|
|
|
{
|
|
|
|
// int var5;
|
|
|
|
int var5;
|
|
|
|
// int var6;
|
|
|
|
int var6;
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (Block.useNeighborBrightness[this.getBlockId(par2, par3, par4)])
|
|
|
|
if (Block.useNeighborBrightness[this.getBlockId(par2, par3, par4)])
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// var5 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2, par3 + 1, par4);
|
|
|
|
var5 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2, par3 + 1, par4);
|
|
|
|
// var6 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2.add(BigInteger.ONE), par3, par4);
|
|
|
|
var6 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2 + 1, par3, par4);
|
|
|
|
// int var7 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2.subtract(BigInteger.ONE), par3, par4);
|
|
|
|
int var7 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2 - 1, par3, par4);
|
|
|
|
// int var8 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2, par3, par4.add(BigInteger.ONE));
|
|
|
|
int var8 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2, par3, par4 + 1);
|
|
|
|
// int var9 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2, par3, par4.subtract(BigInteger.ONE));
|
|
|
|
int var9 = this.getSpecialBlockBrightness(par1EnumSkyBlock, par2, par3, par4 - 1);
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (var6 > var5)
|
|
|
|
if (var6 > var5)
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// var5 = var6;
|
|
|
|
var5 = var6;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (var7 > var5)
|
|
|
|
if (var7 > var5)
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// var5 = var7;
|
|
|
|
var5 = var7;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (var8 > var5)
|
|
|
|
if (var8 > var5)
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// var5 = var8;
|
|
|
|
var5 = var8;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
//
|
|
|
|
|
|
|
|
// if (var9 > var5)
|
|
|
|
if (var9 > var5)
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// var5 = var9;
|
|
|
|
var5 = var9;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
//
|
|
|
|
|
|
|
|
// return var5;
|
|
|
|
return var5;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
// else
|
|
|
|
else
|
|
|
|
// {
|
|
|
|
{
|
|
|
|
// var5 = (par2.shiftRight(4)).subtract(chunkX).intValueExact();
|
|
|
|
var5 = (par2 >> 4) - this.chunkX;
|
|
|
|
// var6 = (par4.shiftRight(4)).subtract(chunkZ).intValueExact();
|
|
|
|
var6 = (par4 >> 4) - this.chunkZ;
|
|
|
|
// return this.chunkArray[var5][var6].getSavedLightValue(par1EnumSkyBlock, par2.intValue() & 15, par3, par4.intValue() & 15);
|
|
|
|
return this.chunkArray[var5][var6].getSavedLightValue(par1EnumSkyBlock, par2 & 15, par3, par4 & 15);
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return par1EnumSkyBlock.defaultLightValue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|
* is only used on stairs and tilled fields
|
|
|
|
* is only used on stairs and tilled fields
|
|
|
|
*/
|
|
|
|
*/
|
|
|
|
public int getSpecialBlockBrightness(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4)
|
|
|
|
public int getSpecialBlockBrightness(EnumSkyBlock par1EnumSkyBlock, BigInteger par2, int par3, BigInteger par4)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if (par3 < 0)
|
|
|
|
if (par3 < 0)
|
|
|
|
{
|
|
|
|
{
|
|
|
@ -361,16 +351,9 @@ public class ChunkCache implements IBlockAccess
|
|
|
|
par3 = 255;
|
|
|
|
par3 = 255;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (par3 >= 0 && par3 < 256 && par2 >= -30000000 && par4 >= -30000000 && par2 < 30000000 && par4 <= 30000000)
|
|
|
|
int var5 = (par2.shiftRight(4)).subtract(chunkX).intValueExact();
|
|
|
|
{
|
|
|
|
int var6 = (par4.shiftRight(4)).subtract(chunkZ).intValueExact();
|
|
|
|
int var5 = (par2 >> 4) - this.chunkX;
|
|
|
|
return this.chunkArray[var5][var6].getSavedLightValue(par1EnumSkyBlock, par2.intValue() & 15, par3, par4.intValue() & 15);
|
|
|
|
int var6 = (par4 >> 4) - this.chunkZ;
|
|
|
|
|
|
|
|
return this.chunkArray[var5][var6].getSavedLightValue(par1EnumSkyBlock, par2 & 15, par3, par4 & 15);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
else
|
|
|
|
|
|
|
|
{
|
|
|
|
|
|
|
|
return par1EnumSkyBlock.defaultLightValue;
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
/**
|
|
|
|