package net.minecraft.block; import java.util.Random; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyDirection; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockState; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.item.Item; import net.minecraft.tileentity.TileEntity; import net.minecraft.tileentity.TileEntityPiston; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockPistonMoving extends BlockContainer { public static final PropertyDirection field_176426_a = BlockPistonExtension.field_176326_a; public static final PropertyEnum field_176425_b = BlockPistonExtension.field_176325_b; private static final String __OBFID = "CL_00000368"; public BlockPistonMoving() { super(Material.piston); this.setDefaultState(this.blockState.getBaseState().withProperty(field_176426_a, EnumFacing.NORTH).withProperty(field_176425_b, BlockPistonExtension.EnumPistonType.DEFAULT)); this.setHardness(-1.0F); } /** * Returns a new instance of a block's tile entity class. Called on placing the block. */ public TileEntity createNewTileEntity(World worldIn, int meta) { return null; } public static TileEntity func_176423_a(IBlockState p_176423_0_, EnumFacing p_176423_1_, boolean p_176423_2_, boolean p_176423_3_) { return new TileEntityPiston(p_176423_0_, p_176423_1_, p_176423_2_, p_176423_3_); } public void breakBlock(World worldIn, BlockPos pos, IBlockState state) { TileEntity var4 = worldIn.getTileEntity(pos); if (var4 instanceof TileEntityPiston) { ((TileEntityPiston)var4).clearPistonTileEntity(); } else { super.breakBlock(worldIn, pos, state); } } public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { return false; } /** * Check whether this Block can be placed on the given side */ public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) { return false; } /** * Called when a player destroys this Block */ public void onBlockDestroyedByPlayer(World worldIn, BlockPos pos, IBlockState state) { BlockPos var4 = pos.offset(((EnumFacing)state.getValue(field_176426_a)).getOpposite()); IBlockState var5 = worldIn.getBlockState(var4); if (var5.getBlock() instanceof BlockPistonBase && ((Boolean)var5.getValue(BlockPistonBase.EXTENDED)).booleanValue()) { worldIn.setBlockToAir(var4); } } public boolean isOpaqueCube() { return false; } public boolean isFullCube() { return false; } public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { if (!worldIn.isRemote && worldIn.getTileEntity(pos) == null) { worldIn.setBlockToAir(pos); return true; } else { return false; } } /** * Get the Item that this Block should drop when harvested. * * @param fortune the level of the Fortune enchantment on the player's tool */ public Item getItemDropped(IBlockState state, Random rand, int fortune) { return null; } /** * Spawns this Block's drops into the World as EntityItems. * * @param chance The chance that each Item is actually spawned (1.0 = always, 0.0 = never) * @param fortune The player's fortune level */ public void dropBlockAsItemWithChance(World worldIn, BlockPos pos, IBlockState state, float chance, int fortune) { if (!worldIn.isRemote) { TileEntityPiston var6 = this.func_176422_e(worldIn, pos); if (var6 != null) { IBlockState var7 = var6.func_174927_b(); var7.getBlock().dropBlockAsItem(worldIn, pos, var7, 0); } } } /** * Ray traces through the blocks collision from start vector to end vector returning a ray trace hit. * * @param start The start vector * @param end The end vector */ public MovingObjectPosition collisionRayTrace(World worldIn, BlockPos pos, Vec3 start, Vec3 end) { return null; } public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) { if (!worldIn.isRemote) { worldIn.getTileEntity(pos); } } public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { TileEntityPiston var4 = this.func_176422_e(worldIn, pos); if (var4 == null) { return null; } else { float var5 = var4.func_145860_a(0.0F); if (var4.isExtending()) { var5 = 1.0F - var5; } return this.func_176424_a(worldIn, pos, var4.func_174927_b(), var5, var4.func_174930_e()); } } public void setBlockBoundsBasedOnState(IBlockAccess access, BlockPos pos) { TileEntityPiston var3 = this.func_176422_e(access, pos); if (var3 != null) { IBlockState var4 = var3.func_174927_b(); Block var5 = var4.getBlock(); if (var5 == this || var5.getMaterial() == Material.air) { return; } float var6 = var3.func_145860_a(0.0F); if (var3.isExtending()) { var6 = 1.0F - var6; } var5.setBlockBoundsBasedOnState(access, pos); if (var5 == Blocks.piston || var5 == Blocks.sticky_piston) { var6 = 0.0F; } EnumFacing var7 = var3.func_174930_e(); this.minX = var5.getBlockBoundsMinX() - (double)((float)var7.getFrontOffsetX() * var6); this.minY = var5.getBlockBoundsMinY() - (double)((float)var7.getFrontOffsetY() * var6); this.minZ = var5.getBlockBoundsMinZ() - (double)((float)var7.getFrontOffsetZ() * var6); this.maxX = var5.getBlockBoundsMaxX() - (double)((float)var7.getFrontOffsetX() * var6); this.maxY = var5.getBlockBoundsMaxY() - (double)((float)var7.getFrontOffsetY() * var6); this.maxZ = var5.getBlockBoundsMaxZ() - (double)((float)var7.getFrontOffsetZ() * var6); } } public AxisAlignedBB func_176424_a(World worldIn, BlockPos p_176424_2_, IBlockState p_176424_3_, float p_176424_4_, EnumFacing p_176424_5_) { if (p_176424_3_.getBlock() != this && p_176424_3_.getBlock().getMaterial() != Material.air) { AxisAlignedBB var6 = p_176424_3_.getBlock().getCollisionBoundingBox(worldIn, p_176424_2_, p_176424_3_); if (var6 == null) { return null; } else { double var7 = var6.minX; double var9 = var6.minY; double var11 = var6.minZ; double var13 = var6.maxX; double var15 = var6.maxY; double var17 = var6.maxZ; if (p_176424_5_.getFrontOffsetX() < 0) { var7 -= (double)((float)p_176424_5_.getFrontOffsetX() * p_176424_4_); } else { var13 -= (double)((float)p_176424_5_.getFrontOffsetX() * p_176424_4_); } if (p_176424_5_.getFrontOffsetY() < 0) { var9 -= (double)((float)p_176424_5_.getFrontOffsetY() * p_176424_4_); } else { var15 -= (double)((float)p_176424_5_.getFrontOffsetY() * p_176424_4_); } if (p_176424_5_.getFrontOffsetZ() < 0) { var11 -= (double)((float)p_176424_5_.getFrontOffsetZ() * p_176424_4_); } else { var17 -= (double)((float)p_176424_5_.getFrontOffsetZ() * p_176424_4_); } return new AxisAlignedBB(var7, var9, var11, var13, var15, var17); } } else { return null; } } private TileEntityPiston func_176422_e(IBlockAccess p_176422_1_, BlockPos p_176422_2_) { TileEntity var3 = p_176422_1_.getTileEntity(p_176422_2_); return var3 instanceof TileEntityPiston ? (TileEntityPiston)var3 : null; } /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(field_176426_a, BlockPistonExtension.func_176322_b(meta)).withProperty(field_176425_b, (meta & 8) > 0 ? BlockPistonExtension.EnumPistonType.STICKY : BlockPistonExtension.EnumPistonType.DEFAULT); } /** * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState state) { byte var2 = 0; int var3 = var2 | ((EnumFacing)state.getValue(field_176426_a)).getIndex(); if (state.getValue(field_176425_b) == BlockPistonExtension.EnumPistonType.STICKY) { var3 |= 8; } return var3; } protected BlockState createBlockState() { return new BlockState(this, new IProperty[] {field_176426_a, field_176425_b}); } }