--- ../src_base/common/net/minecraft/src/BlockFire.java +++ ../src_work/common/net/minecraft/src/BlockFire.java @@ -3,6 +3,8 @@ import cpw.mods.fml.common.Side; import cpw.mods.fml.common.asm.SideOnly; import java.util.Random; +import net.minecraftforge.common.ForgeDirection; +import static net.minecraftforge.common.ForgeDirection.*; public class BlockFire extends Block { @@ -27,6 +29,8 @@ */ public void initializeBlock() { + abilityToCatchFire = Block.blockFlammability; + chanceToEncourageFire = Block.blockFireSpreadSpeed; this.setBurnRate(Block.planks.blockID, 5, 20); this.setBurnRate(Block.woodDoubleSlab.blockID, 5, 20); this.setBurnRate(Block.woodSingleSlab.blockID, 5, 20); @@ -51,8 +55,7 @@ */ private void setBurnRate(int par1, int par2, int par3) { - this.chanceToEncourageFire[par1] = par2; - this.abilityToCatchFire[par1] = par3; + Block.setBurnProperties(par1, par2, par3); } /** @@ -112,12 +115,8 @@ { if (par1World.func_82736_K().func_82766_b("doFireTick")) { - boolean var6 = par1World.getBlockId(par2, par3 - 1, par4) == Block.netherrack.blockID; - - if (par1World.provider instanceof WorldProviderEnd && par1World.getBlockId(par2, par3 - 1, par4) == Block.bedrock.blockID) - { - var6 = true; - } + Block base = Block.blocksList[par1World.getBlockId(par2, par3 - 1, par4)]; + boolean var6 = (base != null && base.isFireSource(par1World, par2, par3 - 1, par4, par1World.getBlockMetadata(par2, par3 - 1, par4), UP)); if (!this.canPlaceBlockAt(par1World, par2, par3, par4)) { @@ -146,7 +145,7 @@ par1World.setBlockWithNotify(par2, par3, par4, 0); } } - else if (!var6 && !this.canBlockCatchFire(par1World, par2, par3 - 1, par4) && var7 == 15 && par5Random.nextInt(4) == 0) + else if (!var6 && !this.canBlockCatchFire(par1World, par2, par3 - 1, par4, UP) && var7 == 15 && par5Random.nextInt(4) == 0) { par1World.setBlockWithNotify(par2, par3, par4, 0); } @@ -160,12 +159,12 @@ var9 = -50; } - this.tryToCatchBlockOnFire(par1World, par2 + 1, par3, par4, 300 + var9, par5Random, var7); - this.tryToCatchBlockOnFire(par1World, par2 - 1, par3, par4, 300 + var9, par5Random, var7); - this.tryToCatchBlockOnFire(par1World, par2, par3 - 1, par4, 250 + var9, par5Random, var7); - this.tryToCatchBlockOnFire(par1World, par2, par3 + 1, par4, 250 + var9, par5Random, var7); - this.tryToCatchBlockOnFire(par1World, par2, par3, par4 - 1, 300 + var9, par5Random, var7); - this.tryToCatchBlockOnFire(par1World, par2, par3, par4 + 1, 300 + var9, par5Random, var7); + this.tryToCatchBlockOnFire(par1World, par2 + 1, par3, par4, 300 + var9, par5Random, var7, WEST ); + this.tryToCatchBlockOnFire(par1World, par2 - 1, par3, par4, 300 + var9, par5Random, var7, EAST ); + this.tryToCatchBlockOnFire(par1World, par2, par3 - 1, par4, 250 + var9, par5Random, var7, UP ); + this.tryToCatchBlockOnFire(par1World, par2, par3 + 1, par4, 250 + var9, par5Random, var7, DOWN ); + this.tryToCatchBlockOnFire(par1World, par2, par3, par4 - 1, 300 + var9, par5Random, var7, SOUTH); + this.tryToCatchBlockOnFire(par1World, par2, par3, par4 + 1, 300 + var9, par5Random, var7, NORTH); for (int var10 = par2 - 1; var10 <= par2 + 1; ++var10) { @@ -219,9 +218,20 @@ return false; } + @Deprecated private void tryToCatchBlockOnFire(World par1World, int par2, int par3, int par4, int par5, Random par6Random, int par7) { - int var8 = this.abilityToCatchFire[par1World.getBlockId(par2, par3, par4)]; + tryToCatchBlockOnFire(par1World, par2, par3, par4, par5, par6Random, par7, UP); + } + + private void tryToCatchBlockOnFire(World par1World, int par2, int par3, int par4, int par5, Random par6Random, int par7, ForgeDirection face) + { + int var8 = 0; + Block block = Block.blocksList[par1World.getBlockId(par2, par3, par4)]; + if (block != null) + { + var8 = block.getFlammability(par1World, par2, par3, par4, par1World.getBlockMetadata(par2, par3, par4), face); + } if (par6Random.nextInt(par5) < var8) { @@ -255,7 +265,12 @@ */ private boolean canNeighborBurn(World par1World, int par2, int par3, int par4) { - return this.canBlockCatchFire(par1World, par2 + 1, par3, par4) ? true : (this.canBlockCatchFire(par1World, par2 - 1, par3, par4) ? true : (this.canBlockCatchFire(par1World, par2, par3 - 1, par4) ? true : (this.canBlockCatchFire(par1World, par2, par3 + 1, par4) ? true : (this.canBlockCatchFire(par1World, par2, par3, par4 - 1) ? true : this.canBlockCatchFire(par1World, par2, par3, par4 + 1))))); + return canBlockCatchFire(par1World, par2 + 1, par3, par4, WEST ) || + canBlockCatchFire(par1World, par2 - 1, par3, par4, EAST ) || + canBlockCatchFire(par1World, par2, par3 - 1, par4, UP ) || + canBlockCatchFire(par1World, par2, par3 + 1, par4, DOWN ) || + canBlockCatchFire(par1World, par2, par3, par4 - 1, SOUTH) || + canBlockCatchFire(par1World, par2, par3, par4 + 1, NORTH); } /** @@ -271,12 +286,12 @@ } else { - int var6 = this.getChanceToEncourageFire(par1World, par2 + 1, par3, par4, var5); - var6 = this.getChanceToEncourageFire(par1World, par2 - 1, par3, par4, var6); - var6 = this.getChanceToEncourageFire(par1World, par2, par3 - 1, par4, var6); - var6 = this.getChanceToEncourageFire(par1World, par2, par3 + 1, par4, var6); - var6 = this.getChanceToEncourageFire(par1World, par2, par3, par4 - 1, var6); - var6 = this.getChanceToEncourageFire(par1World, par2, par3, par4 + 1, var6); + int var6 = this.getChanceToEncourageFire(par1World, par2 + 1, par3, par4, var5, WEST); + var6 = this.getChanceToEncourageFire(par1World, par2 - 1, par3, par4, var6, EAST); + var6 = this.getChanceToEncourageFire(par1World, par2, par3 - 1, par4, var6, UP); + var6 = this.getChanceToEncourageFire(par1World, par2, par3 + 1, par4, var6, DOWN); + var6 = this.getChanceToEncourageFire(par1World, par2, par3, par4 - 1, var6, SOUTH); + var6 = this.getChanceToEncourageFire(par1World, par2, par3, par4 + 1, var6, NORTH); return var6; } } @@ -291,21 +306,24 @@ /** * Checks the specified block coordinate to see if it can catch fire. Args: blockAccess, x, y, z - */ + * Deprecated for a side-sensitive version + */ + @Deprecated public boolean canBlockCatchFire(IBlockAccess par1IBlockAccess, int par2, int par3, int par4) { - return this.chanceToEncourageFire[par1IBlockAccess.getBlockId(par2, par3, par4)] > 0; + return canBlockCatchFire(par1IBlockAccess, par2, par3, par4, UP); } /** * Retrieves a specified block's chance to encourage their neighbors to burn and if the number is greater than the * current number passed in it will return its number instead of the passed in one. Args: world, x, y, z, * curChanceToEncourageFire - */ + * Deprecated for a side-sensitive version + */ + @Deprecated public int getChanceToEncourageFire(World par1World, int par2, int par3, int par4, int par5) { - int var6 = this.chanceToEncourageFire[par1World.getBlockId(par2, par3, par4)]; - return var6 > par5 ? var6 : par5; + return getChanceToEncourageFire(par1World, par2, par3, par4, par5, UP); } /** @@ -363,9 +381,9 @@ float var8; float var9; - if (!par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) && !Block.fire.canBlockCatchFire(par1World, par2, par3 - 1, par4)) - { - if (Block.fire.canBlockCatchFire(par1World, par2 - 1, par3, par4)) + if (!par1World.doesBlockHaveSolidTopSurface(par2, par3 - 1, par4) && !Block.fire.canBlockCatchFire(par1World, par2, par3 - 1, par4, UP)) + { + if (Block.fire.canBlockCatchFire(par1World, par2 - 1, par3, par4, EAST)) { for (var6 = 0; var6 < 2; ++var6) { @@ -376,7 +394,7 @@ } } - if (Block.fire.canBlockCatchFire(par1World, par2 + 1, par3, par4)) + if (Block.fire.canBlockCatchFire(par1World, par2 + 1, par3, par4, WEST)) { for (var6 = 0; var6 < 2; ++var6) { @@ -387,7 +405,7 @@ } } - if (Block.fire.canBlockCatchFire(par1World, par2, par3, par4 - 1)) + if (Block.fire.canBlockCatchFire(par1World, par2, par3, par4 - 1, SOUTH)) { for (var6 = 0; var6 < 2; ++var6) { @@ -398,7 +416,7 @@ } } - if (Block.fire.canBlockCatchFire(par1World, par2, par3, par4 + 1)) + if (Block.fire.canBlockCatchFire(par1World, par2, par3, par4 + 1, NORTH)) { for (var6 = 0; var6 < 2; ++var6) { @@ -409,7 +427,7 @@ } } - if (Block.fire.canBlockCatchFire(par1World, par2, par3 + 1, par4)) + if (Block.fire.canBlockCatchFire(par1World, par2, par3 + 1, par4, DOWN)) { for (var6 = 0; var6 < 2; ++var6) { @@ -431,4 +449,46 @@ } } } + + /** + * Side sensitive version that calls the block function. + * + * @param world The current world + * @param x X Position + * @param y Y Position + * @param z Z Position + * @param face The side the fire is coming from + * @return True if the face can catch fire. + */ + public boolean canBlockCatchFire(IBlockAccess world, int x, int y, int z, ForgeDirection face) + { + Block block = Block.blocksList[world.getBlockId(x, y, z)]; + if (block != null) + { + return block.isFlammable(world, x, y, z, world.getBlockMetadata(x, y, z), face); + } + return false; + } + + /** + * Side sensitive version that calls the block function. + * + * @param world The current world + * @param x X Position + * @param y Y Position + * @param z Z Position + * @param oldChance The previous maximum chance. + * @param face The side the fire is coming from + * @return The chance of the block catching fire, or oldChance if it is higher + */ + public int getChanceToEncourageFire(World world, int x, int y, int z, int oldChance, ForgeDirection face) + { + int newChance = 0; + Block block = Block.blocksList[world.getBlockId(x, y, z)]; + if (block != null) + { + newChance = block.getFireSpreadSpeed(world, x, y, z, world.getBlockMetadata(x, y, z), face); + } + return (newChance > oldChance ? newChance : oldChance); + } }