Files
PrimalSorcery/build/tmp/recompileMc/sources/net/minecraft/block/BlockStaticLiquid.java
Mohammad-Ali Minaie b86dedad2f base mod created
2018-10-08 09:07:47 -04:00

119 lines
4.3 KiB
Java

package net.minecraft.block;
import java.util.Random;
import net.minecraft.block.material.Material;
import net.minecraft.block.state.IBlockState;
import net.minecraft.init.Blocks;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.math.BlockPos;
import net.minecraft.world.World;
public class BlockStaticLiquid extends BlockLiquid
{
protected BlockStaticLiquid(Material materialIn)
{
super(materialIn);
this.setTickRandomly(false);
if (materialIn == Material.LAVA)
{
this.setTickRandomly(true);
}
}
/**
* Called when a neighboring block was changed and marks that this state should perform any checks during a neighbor
* change. Cases may include when redstone power is updated, cactus blocks popping off due to a neighboring solid
* block, etc.
*/
public void neighborChanged(IBlockState state, World worldIn, BlockPos pos, Block blockIn, BlockPos fromPos)
{
if (!this.checkForMixing(worldIn, pos, state))
{
this.updateLiquid(worldIn, pos, state);
}
}
private void updateLiquid(World worldIn, BlockPos pos, IBlockState state)
{
BlockDynamicLiquid blockdynamicliquid = getFlowingBlock(this.blockMaterial);
worldIn.setBlockState(pos, blockdynamicliquid.getDefaultState().withProperty(LEVEL, state.getValue(LEVEL)), 2);
worldIn.scheduleUpdate(pos, blockdynamicliquid, this.tickRate(worldIn));
}
public void updateTick(World worldIn, BlockPos pos, IBlockState state, Random rand)
{
if (this.blockMaterial == Material.LAVA)
{
if (worldIn.getGameRules().getBoolean("doFireTick"))
{
int i = rand.nextInt(3);
if (i > 0)
{
BlockPos blockpos = pos;
for (int j = 0; j < i; ++j)
{
blockpos = blockpos.add(rand.nextInt(3) - 1, 1, rand.nextInt(3) - 1);
if (blockpos.getY() >= 0 && blockpos.getY() < worldIn.getHeight() && !worldIn.isBlockLoaded(blockpos))
{
return;
}
IBlockState block = worldIn.getBlockState(blockpos);
if (block.getBlock().isAir(block, worldIn, blockpos))
{
if (this.isSurroundingBlockFlammable(worldIn, blockpos))
{
worldIn.setBlockState(blockpos, net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, blockpos, pos, Blocks.FIRE.getDefaultState()));
return;
}
}
else if (block.getMaterial().blocksMovement())
{
return;
}
}
}
else
{
for (int k = 0; k < 3; ++k)
{
BlockPos blockpos1 = pos.add(rand.nextInt(3) - 1, 0, rand.nextInt(3) - 1);
if (blockpos1.getY() >= 0 && blockpos1.getY() < 256 && !worldIn.isBlockLoaded(blockpos1))
{
return;
}
if (worldIn.isAirBlock(blockpos1.up()) && this.getCanBlockBurn(worldIn, blockpos1))
{
worldIn.setBlockState(blockpos1.up(), net.minecraftforge.event.ForgeEventFactory.fireFluidPlaceBlockEvent(worldIn, blockpos1.up(), pos, Blocks.FIRE.getDefaultState()));
}
}
}
}
}
}
protected boolean isSurroundingBlockFlammable(World worldIn, BlockPos pos)
{
for (EnumFacing enumfacing : EnumFacing.values())
{
if (this.getCanBlockBurn(worldIn, pos.offset(enumfacing)))
{
return true;
}
}
return false;
}
private boolean getCanBlockBurn(World worldIn, BlockPos pos)
{
return pos.getY() >= 0 && pos.getY() < 256 && !worldIn.isBlockLoaded(pos) ? false : worldIn.getBlockState(pos).getMaterial().getCanBurn();
}
}