package net.minecraft.block; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyBool; 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.creativetab.CreativeTabs; import net.minecraft.entity.EntityLivingBase; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.init.Blocks; import net.minecraft.util.AxisAlignedBB; import net.minecraft.util.BlockPos; import net.minecraft.util.EnumFacing; import net.minecraft.util.IStringSerializable; import net.minecraft.util.MovingObjectPosition; import net.minecraft.util.Vec3; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; public class BlockTrapDoor extends Block { public static final PropertyDirection field_176284_a = PropertyDirection.create("facing", EnumFacing.Plane.HORIZONTAL); public static final PropertyBool field_176283_b = PropertyBool.create("open"); public static final PropertyEnum field_176285_M = PropertyEnum.create("half", BlockTrapDoor.DoorHalf.class); private static final String __OBFID = "CL_00000327"; protected BlockTrapDoor(Material p_i45434_1_) { super(p_i45434_1_); this.setDefaultState(this.blockState.getBaseState().withProperty(field_176284_a, EnumFacing.NORTH).withProperty(field_176283_b, Boolean.valueOf(false)).withProperty(field_176285_M, BlockTrapDoor.DoorHalf.BOTTOM)); float var2 = 0.5F; float var3 = 1.0F; this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); this.setCreativeTab(CreativeTabs.tabRedstone); } public boolean isOpaqueCube() { return false; } public boolean isFullCube() { return false; } public boolean isPassable(IBlockAccess blockAccess, BlockPos pos) { return !((Boolean)blockAccess.getBlockState(pos).getValue(field_176283_b)).booleanValue(); } public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { this.setBlockBoundsBasedOnState(worldIn, pos); return super.getCollisionBoundingBox(worldIn, pos, state); } public void setBlockBoundsBasedOnState(IBlockAccess access, BlockPos pos) { this.func_180693_d(access.getBlockState(pos)); } /** * Sets the block's bounds for rendering it as an item */ public void setBlockBoundsForItemRender() { float var1 = 0.1875F; this.setBlockBounds(0.0F, 0.40625F, 0.0F, 1.0F, 0.59375F, 1.0F); } public void func_180693_d(IBlockState p_180693_1_) { if (p_180693_1_.getBlock() == this) { boolean var2 = p_180693_1_.getValue(field_176285_M) == BlockTrapDoor.DoorHalf.TOP; Boolean var3 = (Boolean)p_180693_1_.getValue(field_176283_b); EnumFacing var4 = (EnumFacing)p_180693_1_.getValue(field_176284_a); float var5 = 0.1875F; if (var2) { this.setBlockBounds(0.0F, 0.8125F, 0.0F, 1.0F, 1.0F, 1.0F); } else { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 0.1875F, 1.0F); } if (var3.booleanValue()) { if (var4 == EnumFacing.NORTH) { this.setBlockBounds(0.0F, 0.0F, 0.8125F, 1.0F, 1.0F, 1.0F); } if (var4 == EnumFacing.SOUTH) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 1.0F, 1.0F, 0.1875F); } if (var4 == EnumFacing.WEST) { this.setBlockBounds(0.8125F, 0.0F, 0.0F, 1.0F, 1.0F, 1.0F); } if (var4 == EnumFacing.EAST) { this.setBlockBounds(0.0F, 0.0F, 0.0F, 0.1875F, 1.0F, 1.0F); } } } } public boolean onBlockActivated(World worldIn, BlockPos pos, IBlockState state, EntityPlayer playerIn, EnumFacing side, float hitX, float hitY, float hitZ) { if (this.blockMaterial == Material.iron) { return true; } else { state = state.cycleProperty(field_176283_b); worldIn.setBlockState(pos, state, 2); worldIn.playAuxSFXAtEntity(playerIn, ((Boolean)state.getValue(field_176283_b)).booleanValue() ? 1003 : 1006, pos, 0); return true; } } public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) { if (!worldIn.isRemote) { BlockPos var5 = pos.offset(((EnumFacing)state.getValue(field_176284_a)).getOpposite()); if (!isValidSupportBlock(worldIn.getBlockState(var5).getBlock())) { worldIn.setBlockToAir(pos); this.dropBlockAsItem(worldIn, pos, state, 0); } else { boolean var6 = worldIn.isBlockPowered(pos); if (var6 || neighborBlock.canProvidePower()) { boolean var7 = ((Boolean)state.getValue(field_176283_b)).booleanValue(); if (var7 != var6) { worldIn.setBlockState(pos, state.withProperty(field_176283_b, Boolean.valueOf(var6)), 2); worldIn.playAuxSFXAtEntity((EntityPlayer)null, var6 ? 1003 : 1006, pos, 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) { this.setBlockBoundsBasedOnState(worldIn, pos); return super.collisionRayTrace(worldIn, pos, start, end); } public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { IBlockState var9 = this.getDefaultState(); if (facing.getAxis().isHorizontal()) { var9 = var9.withProperty(field_176284_a, facing).withProperty(field_176283_b, Boolean.valueOf(false)); var9 = var9.withProperty(field_176285_M, hitY > 0.5F ? BlockTrapDoor.DoorHalf.TOP : BlockTrapDoor.DoorHalf.BOTTOM); } return var9; } /** * Check whether this Block can be placed on the given side */ public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side) { return !side.getAxis().isVertical() && isValidSupportBlock(worldIn.getBlockState(pos.offset(side.getOpposite())).getBlock()); } protected static EnumFacing func_176281_b(int p_176281_0_) { switch (p_176281_0_ & 3) { case 0: return EnumFacing.NORTH; case 1: return EnumFacing.SOUTH; case 2: return EnumFacing.WEST; case 3: default: return EnumFacing.EAST; } } protected static int func_176282_a(EnumFacing p_176282_0_) { switch (BlockTrapDoor.SwitchEnumFacing.field_177058_a[p_176282_0_.ordinal()]) { case 1: return 0; case 2: return 1; case 3: return 2; case 4: default: return 3; } } private static boolean isValidSupportBlock(Block p_150119_0_) { return p_150119_0_.blockMaterial.isOpaque() && p_150119_0_.isFullCube() || p_150119_0_ == Blocks.glowstone || p_150119_0_ instanceof BlockSlab || p_150119_0_ instanceof BlockStairs; } /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { return this.getDefaultState().withProperty(field_176284_a, func_176281_b(meta)).withProperty(field_176283_b, Boolean.valueOf((meta & 4) != 0)).withProperty(field_176285_M, (meta & 8) == 0 ? BlockTrapDoor.DoorHalf.BOTTOM : BlockTrapDoor.DoorHalf.TOP); } /** * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState state) { byte var2 = 0; int var3 = var2 | func_176282_a((EnumFacing)state.getValue(field_176284_a)); if (((Boolean)state.getValue(field_176283_b)).booleanValue()) { var3 |= 4; } if (state.getValue(field_176285_M) == BlockTrapDoor.DoorHalf.TOP) { var3 |= 8; } return var3; } protected BlockState createBlockState() { return new BlockState(this, new IProperty[] {field_176284_a, field_176283_b, field_176285_M}); } public static enum DoorHalf implements IStringSerializable { TOP("TOP", 0, "top"), BOTTOM("BOTTOM", 1, "bottom"); private final String field_176671_c; private static final BlockTrapDoor.DoorHalf[] $VALUES = new BlockTrapDoor.DoorHalf[]{TOP, BOTTOM}; private static final String __OBFID = "CL_00002051"; private DoorHalf(String p_i45674_1_, int p_i45674_2_, String p_i45674_3_) { this.field_176671_c = p_i45674_3_; } public String toString() { return this.field_176671_c; } public String getName() { return this.field_176671_c; } } static final class SwitchEnumFacing { static final int[] field_177058_a = new int[EnumFacing.values().length]; private static final String __OBFID = "CL_00002052"; static { try { field_177058_a[EnumFacing.NORTH.ordinal()] = 1; } catch (NoSuchFieldError var4) { ; } try { field_177058_a[EnumFacing.SOUTH.ordinal()] = 2; } catch (NoSuchFieldError var3) { ; } try { field_177058_a[EnumFacing.WEST.ordinal()] = 3; } catch (NoSuchFieldError var2) { ; } try { field_177058_a[EnumFacing.EAST.ordinal()] = 4; } catch (NoSuchFieldError var1) { ; } } } }