Location aware version og Block.lightOpacity for PR #169

This commit is contained in:
LexManos 2012-09-26 22:12:47 -07:00
parent 6ec887b34f
commit 520550dab9
6 changed files with 145 additions and 38 deletions

View file

@ -102,7 +102,7 @@
{
ItemStack var8 = this.createStackedBlock(par6);
@@ -1249,4 +1255,797 @@
@@ -1249,4 +1255,816 @@
canBlockGrass[0] = true;
StatList.initBreakableStats();
}
@ -898,5 +898,24 @@
+ }
+
+ return false;
+ }
+
+ /**
+ * Location aware and overrideable version of the lightOpacity array,
+ * return the number to subtract from the light value when it passes through this block.
+ *
+ * This is not guaranteed to have the tile entity in place before this is called, so it is
+ * Recommended that you have your tile entity call relight after being placed if you
+ * rely on it for light info.
+ *
+ * @param world The current world
+ * @param x X Position
+ * @param y Y Position
+ * @param z Z position
+ * @return The amount of light to block, 0 for air, 255 for fully opaque.
+ */
+ public int getLightOpacity(World world, int x, int y, int z)
+ {
+ return lightOpacity[blockID];
+ }
}

View file

@ -0,0 +1,20 @@
--- ../src_base/common/net/minecraft/src/BlockGrass.java
+++ ../src_work/common/net/minecraft/src/BlockGrass.java
@@ -51,7 +51,7 @@
{
if (!par1World.isRemote)
{
- if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && Block.lightOpacity[par1World.getBlockId(par2, par3 + 1, par4)] > 2)
+ if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2)
{
par1World.setBlockWithNotify(par2, par3, par4, Block.dirt.blockID);
}
@@ -64,7 +64,7 @@
int var9 = par4 + par5Random.nextInt(3) - 1;
int var10 = par1World.getBlockId(var7, var8 + 1, var9);
- if (par1World.getBlockId(var7, var8, var9) == Block.dirt.blockID && par1World.getBlockLightValue(var7, var8 + 1, var9) >= 4 && Block.lightOpacity[var10] <= 2)
+ if (par1World.getBlockId(var7, var8, var9) == Block.dirt.blockID && par1World.getBlockLightValue(var7, var8 + 1, var9) >= 4 && par1World.getBlockLightOpacity(var7, var8 + 1, var9) <= 2)
{
par1World.setBlockWithNotify(var7, var8, var9, Block.grass.blockID);
}

View file

@ -0,0 +1,20 @@
--- ../src_base/common/net/minecraft/src/BlockMycelium.java
+++ ../src_work/common/net/minecraft/src/BlockMycelium.java
@@ -51,7 +51,7 @@
{
if (!par1World.isRemote)
{
- if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && Block.lightOpacity[par1World.getBlockId(par2, par3 + 1, par4)] > 2)
+ if (par1World.getBlockLightValue(par2, par3 + 1, par4) < 4 && par1World.getBlockLightOpacity(par2, par3 + 1, par4) > 2)
{
par1World.setBlockWithNotify(par2, par3, par4, Block.dirt.blockID);
}
@@ -64,7 +64,7 @@
int var9 = par4 + par5Random.nextInt(3) - 1;
int var10 = par1World.getBlockId(var7, var8 + 1, var9);
- if (par1World.getBlockId(var7, var8, var9) == Block.dirt.blockID && par1World.getBlockLightValue(var7, var8 + 1, var9) >= 4 && Block.lightOpacity[var10] <= 2)
+ if (par1World.getBlockId(var7, var8, var9) == Block.dirt.blockID && par1World.getBlockLightValue(var7, var8 + 1, var9) >= 4 && par1World.getBlockLightOpacity(var7, var8 + 1, var9) <= 2)
{
par1World.setBlockWithNotify(var7, var8, var9, this.blockID);
}

View file

@ -22,17 +22,10 @@
if (var9 != 0)
{
@@ -134,6 +140,48 @@
}
@@ -141,6 +147,48 @@
}
this.storageArrays[var10].setExtBlockID(var6, var8 & 15, var7, var9);
+ }
+ }
+ }
+ }
+ }
+
+ /**
/**
+ * Metadata sensitive Chunk constructor for use in new ChunkProviders that
+ * use metadata sensitive blocks during generation.
+ *
@ -68,10 +61,38 @@
+
+ this.storageArrays[var10].setExtBlockID(x, y & 15, z, id);
+ this.storageArrays[var10].setExtBlockMetadata(x, y & 15, z, meta);
}
}
}
@@ -507,7 +555,7 @@
+ }
+ }
+ }
+ }
+ }
+
+ /**
* Checks whether the chunk is at the X/Z location specified
*/
public boolean isAtLocation(int par1, int par2)
@@ -204,7 +252,7 @@
{
int var5 = this.getBlockID(var2, var4 - 1, var3);
- if (Block.lightOpacity[var5] == 0)
+ if (getBlockLightOpacity(var2, var4 - 1, var3) == 0)
{
--var4;
continue;
@@ -499,7 +547,10 @@
public int getBlockLightOpacity(int par1, int par2, int par3)
{
- return Block.lightOpacity[this.getBlockID(par1, par2, par3)];
+ int x = (xPosition << 4) + par1;
+ int z = (zPosition << 4) + par3;
+ Block block = Block.blocksList[getBlockID(par1, par2, par3)];
+ return (block == null ? 0 : block.getLightOpacity(worldObj, x, par2, z));
}
/**
@@ -507,7 +558,7 @@
*/
public int getBlockID(int par1, int par2, int par3)
{
@ -80,7 +101,7 @@
{
return 0;
}
@@ -523,7 +571,7 @@
@@ -523,7 +574,7 @@
*/
public int getBlockMetadata(int par1, int par2, int par3)
{
@ -89,7 +110,7 @@
{
return 0;
}
@@ -564,6 +612,11 @@
@@ -564,6 +615,11 @@
}
else
{
@ -101,7 +122,7 @@
ExtendedBlockStorage var10 = this.storageArrays[par2 >> 4];
boolean var11 = false;
@@ -594,7 +647,7 @@
@@ -594,7 +650,7 @@
{
Block.blocksList[var8].breakBlock(this.worldObj, var12, par2, var13, var8, var9);
}
@ -110,7 +131,16 @@
{
this.worldObj.removeBlockTileEntity(var12, par2, var13);
}
@@ -638,29 +691,21 @@
@@ -614,7 +670,7 @@
}
else
{
- if (Block.lightOpacity[par4 & 4095] > 0)
+ if (getBlockLightOpacity(par1, par2 + 1, par3) > 0)
{
if (par2 >= var7)
{
@@ -638,29 +694,21 @@
Block.blocksList[par4].onBlockAdded(this.worldObj, var12, par2, var13);
}
@ -143,7 +173,7 @@
}
}
@@ -675,7 +720,7 @@
@@ -675,7 +723,7 @@
*/
public boolean setBlockMetadata(int par1, int par2, int par3, int par4)
{
@ -152,7 +182,7 @@
if (var5 == null)
{
@@ -695,7 +740,7 @@
@@ -695,7 +743,7 @@
var5.setExtBlockMetadata(par1, par2 & 15, par3, par4);
int var7 = var5.getExtBlockID(par1, par2 & 15, par3);
@ -161,7 +191,7 @@
{
TileEntity var8 = this.getChunkBlockTileEntity(par1, par2, par3);
@@ -716,7 +761,7 @@
@@ -716,7 +764,7 @@
*/
public int getSavedLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4)
{
@ -170,7 +200,7 @@
return var5 == null ? (this.canBlockSeeTheSky(par2, par3, par4) ? par1EnumSkyBlock.defaultLightValue : 0) : (par1EnumSkyBlock == EnumSkyBlock.Sky ? var5.getExtSkylightValue(par2, par3 & 15, par4) : (par1EnumSkyBlock == EnumSkyBlock.Block ? var5.getExtBlocklightValue(par2, par3 & 15, par4) : par1EnumSkyBlock.defaultLightValue));
}
@@ -726,6 +771,11 @@
@@ -726,6 +774,11 @@
*/
public void setLightValue(EnumSkyBlock par1EnumSkyBlock, int par2, int par3, int par4, int par5)
{
@ -182,7 +212,7 @@
ExtendedBlockStorage var6 = this.storageArrays[par3 >> 4];
if (var6 == null)
@@ -754,7 +804,7 @@
@@ -754,7 +807,7 @@
*/
public int getBlockLightValue(int par1, int par2, int par3, int par4)
{
@ -191,7 +221,7 @@
if (var5 == null)
{
@@ -807,7 +857,7 @@
@@ -807,7 +860,7 @@
{
var4 = this.entityLists.length - 1;
}
@ -200,7 +230,7 @@
par1Entity.addedToChunk = true;
par1Entity.chunkCoordX = this.xPosition;
par1Entity.chunkCoordY = var4;
@@ -857,33 +907,33 @@
@@ -857,33 +910,33 @@
ChunkPosition var4 = new ChunkPosition(par1, par2, par3);
TileEntity var5 = (TileEntity)this.chunkTileEntityMap.get(var4);
@ -245,7 +275,7 @@
}
/**
@@ -898,7 +948,7 @@
@@ -898,7 +951,7 @@
if (this.isChunkLoaded)
{
@ -254,7 +284,7 @@
}
}
@@ -913,8 +963,14 @@
@@ -913,8 +966,14 @@
par4TileEntity.yCoord = par2;
par4TileEntity.zCoord = this.zPosition * 16 + par3;
@ -271,7 +301,7 @@
par4TileEntity.validate();
this.chunkTileEntityMap.put(var5, par4TileEntity);
}
@@ -953,6 +1009,7 @@
@@ -953,6 +1012,7 @@
List var4 = var1[var3];
this.worldObj.addLoadedEntities(var4);
}
@ -279,7 +309,7 @@
}
/**
@@ -977,6 +1034,7 @@
@@ -977,6 +1037,7 @@
List var4 = var5[var3];
this.worldObj.unloadEntities(var4);
}
@ -287,7 +317,7 @@
}
/**
@@ -993,8 +1051,8 @@
@@ -993,8 +1054,8 @@
*/
public void getEntitiesWithinAABBForEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB, List par3List)
{
@ -298,7 +328,7 @@
if (var4 < 0)
{
@@ -1042,8 +1100,8 @@
@@ -1042,8 +1103,8 @@
*/
public void getEntitiesOfTypeWithinAAAB(Class par1Class, AxisAlignedBB par2AxisAlignedBB, List par3List)
{
@ -309,7 +339,7 @@
if (var4 < 0)
{
@@ -1227,6 +1285,15 @@
@@ -1227,6 +1288,15 @@
*/
public void fillChunk(byte[] par1ArrayOfByte, int par2, int par3, boolean par4)
{
@ -325,7 +355,7 @@
int var5 = 0;
int var6;
@@ -1323,12 +1390,26 @@
@@ -1323,12 +1393,26 @@
}
this.generateHeightMap();
@ -358,7 +388,7 @@
}
}
@@ -1437,4 +1518,18 @@
@@ -1437,4 +1521,18 @@
}
}
}

View file

@ -433,6 +433,24 @@
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;
@@ -3176,7 +3251,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);
- int var23 = Block.lightOpacity[this.getBlockId(var20, var21, var22)];
+ int var23 = this.getBlockLightOpacity(var20, var21, var22);
if (var23 == 0)
{
@@ -3207,7 +3282,7 @@
var12 = (var9 >> 12 & 63) - 32 + par4;
var13 = this.getSavedLightValue(par1EnumSkyBlock, var10, var24, var12);
var14 = this.getBlockId(var10, var24, var12);
- var15 = Block.lightOpacity[var14];
+ var15 = this.getBlockLightOpacity(var10, var24, var12);
if (var15 == 0)
{
@@ -3309,10 +3384,10 @@
public List getEntitiesWithinAABBExcludingEntity(Entity par1Entity, AxisAlignedBB par2AxisAlignedBB)
{

View file

@ -24,7 +24,7 @@
int var8 = var3 != null ? var3.stackSize : 0;
- if (this.playerController.onPlayerRightClick(this.thePlayer, this.theWorld, var3, var4, var5, var6, var7, this.objectMouseOver.hitVec))
+ boolean result = ForgeEventFactory.onPlayerInteract(thePlayer, Action.RIGHT_CLICK_BLOCK, var4, var5, var6, var7);
+ boolean result = !ForgeEventFactory.onPlayerInteract(thePlayer, Action.RIGHT_CLICK_BLOCK, var4, var5, var6, var7).isCanceled();
+ if (result && this.playerController.onPlayerRightClick(this.thePlayer, this.theWorld, var3, var4, var5, var6, var7, this.objectMouseOver.hitVec))
{
var2 = false;
@ -34,7 +34,7 @@
ItemStack var9 = this.thePlayer.inventory.getCurrentItem();
- if (var9 != null && this.playerController.sendUseItem(this.thePlayer, this.theWorld, var9))
+ boolean result = ForgeEventFactory.onPlayerInteract(thePlayer, Action.RIGHT_CLICK_AIR, 0, 0, 0, -1);
+ boolean result = !ForgeEventFactory.onPlayerInteract(thePlayer, Action.RIGHT_CLICK_AIR, 0, 0, 0, -1).isCanceled();
+ if (result && var9 != null && this.playerController.sendUseItem(this.thePlayer, this.theWorld, var9))
{
this.entityRenderer.itemRenderer.func_78445_c();