package net.minecraft.block; import com.google.common.base.Predicate; import java.util.Iterator; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyDirection; 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.init.Blocks; 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.World; public class BlockTorch extends Block { public static final PropertyDirection FACING_PROP = PropertyDirection.create("facing", new Predicate() { private static final String __OBFID = "CL_00002054"; public boolean func_176601_a(EnumFacing p_176601_1_) { return p_176601_1_ != EnumFacing.DOWN; } public boolean apply(Object p_apply_1_) { return this.func_176601_a((EnumFacing)p_apply_1_); } }); private static final String __OBFID = "CL_00000325"; protected BlockTorch() { super(Material.circuits); this.setDefaultState(this.blockState.getBaseState().withProperty(FACING_PROP, EnumFacing.UP)); this.setTickRandomly(true); this.setCreativeTab(CreativeTabs.tabDecorations); } public AxisAlignedBB getCollisionBoundingBox(World worldIn, BlockPos pos, IBlockState state) { return null; } public boolean isOpaqueCube() { return false; } public boolean isFullCube() { return false; } private boolean func_176594_d(World worldIn, BlockPos p_176594_2_) { if (World.doesBlockHaveSolidTopSurface(worldIn, p_176594_2_)) { return true; } else { Block var3 = worldIn.getBlockState(p_176594_2_).getBlock(); return var3 instanceof BlockFence || var3 == Blocks.glass || var3 == Blocks.cobblestone_wall || var3 == Blocks.stained_glass; } } public boolean canPlaceBlockAt(World worldIn, BlockPos pos) { Iterator var3 = FACING_PROP.getAllowedValues().iterator(); EnumFacing var4; do { if (!var3.hasNext()) { return false; } var4 = (EnumFacing)var3.next(); } while (!this.func_176595_b(worldIn, pos, var4)); return true; } private boolean func_176595_b(World worldIn, BlockPos p_176595_2_, EnumFacing p_176595_3_) { BlockPos var4 = p_176595_2_.offset(p_176595_3_.getOpposite()); boolean var5 = p_176595_3_.getAxis().isHorizontal(); return var5 && worldIn.func_175677_d(var4, true) || p_176595_3_.equals(EnumFacing.UP) && this.func_176594_d(worldIn, var4); } public IBlockState onBlockPlaced(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { if (this.func_176595_b(worldIn, pos, facing)) { return this.getDefaultState().withProperty(FACING_PROP, facing); } else { Iterator var9 = EnumFacing.Plane.HORIZONTAL.iterator(); EnumFacing var10; do { if (!var9.hasNext()) { return this.getDefaultState(); } var10 = (EnumFacing)var9.next(); } while (!worldIn.func_175677_d(pos.offset(var10.getOpposite()), true)); return this.getDefaultState().withProperty(FACING_PROP, var10); } } public void onBlockAdded(World worldIn, BlockPos pos, IBlockState state) { this.func_176593_f(worldIn, pos, state); } public void onNeighborBlockChange(World worldIn, BlockPos pos, IBlockState state, Block neighborBlock) { this.func_176592_e(worldIn, pos, state); } protected boolean func_176592_e(World worldIn, BlockPos p_176592_2_, IBlockState p_176592_3_) { if (!this.func_176593_f(worldIn, p_176592_2_, p_176592_3_)) { return true; } else { EnumFacing var4 = (EnumFacing)p_176592_3_.getValue(FACING_PROP); EnumFacing.Axis var5 = var4.getAxis(); EnumFacing var6 = var4.getOpposite(); boolean var7 = false; if (var5.isHorizontal() && !worldIn.func_175677_d(p_176592_2_.offset(var6), true)) { var7 = true; } else if (var5.isVertical() && !this.func_176594_d(worldIn, p_176592_2_.offset(var6))) { var7 = true; } if (var7) { this.dropBlockAsItem(worldIn, p_176592_2_, p_176592_3_, 0); worldIn.setBlockToAir(p_176592_2_); return true; } else { return false; } } } protected boolean func_176593_f(World worldIn, BlockPos p_176593_2_, IBlockState p_176593_3_) { if (p_176593_3_.getBlock() == this && this.func_176595_b(worldIn, p_176593_2_, (EnumFacing)p_176593_3_.getValue(FACING_PROP))) { return true; } else { if (worldIn.getBlockState(p_176593_2_).getBlock() == this) { this.dropBlockAsItem(worldIn, p_176593_2_, p_176593_3_, 0); worldIn.setBlockToAir(p_176593_2_); } return false; } } /** * 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) { EnumFacing var5 = (EnumFacing)worldIn.getBlockState(pos).getValue(FACING_PROP); float var6 = 0.15F; if (var5 == EnumFacing.EAST) { this.setBlockBounds(0.0F, 0.2F, 0.5F - var6, var6 * 2.0F, 0.8F, 0.5F + var6); } else if (var5 == EnumFacing.WEST) { this.setBlockBounds(1.0F - var6 * 2.0F, 0.2F, 0.5F - var6, 1.0F, 0.8F, 0.5F + var6); } else if (var5 == EnumFacing.SOUTH) { this.setBlockBounds(0.5F - var6, 0.2F, 0.0F, 0.5F + var6, 0.8F, var6 * 2.0F); } else if (var5 == EnumFacing.NORTH) { this.setBlockBounds(0.5F - var6, 0.2F, 1.0F - var6 * 2.0F, 0.5F + var6, 0.8F, 1.0F); } else { var6 = 0.1F; this.setBlockBounds(0.5F - var6, 0.0F, 0.5F - var6, 0.5F + var6, 0.6F, 0.5F + var6); } return super.collisionRayTrace(worldIn, pos, start, end); } /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { IBlockState var2 = this.getDefaultState(); switch (meta) { case 1: var2 = var2.withProperty(FACING_PROP, EnumFacing.EAST); break; case 2: var2 = var2.withProperty(FACING_PROP, EnumFacing.WEST); break; case 3: var2 = var2.withProperty(FACING_PROP, EnumFacing.SOUTH); break; case 4: var2 = var2.withProperty(FACING_PROP, EnumFacing.NORTH); break; case 5: default: var2 = var2.withProperty(FACING_PROP, EnumFacing.UP); } return var2; } /** * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState state) { byte var2 = 0; int var3; switch (BlockTorch.SwitchEnumFacing.field_176609_a[((EnumFacing)state.getValue(FACING_PROP)).ordinal()]) { case 1: var3 = var2 | 1; break; case 2: var3 = var2 | 2; break; case 3: var3 = var2 | 3; break; case 4: var3 = var2 | 4; break; case 5: case 6: default: var3 = var2 | 5; } return var3; } protected BlockState createBlockState() { return new BlockState(this, new IProperty[] {FACING_PROP}); } static final class SwitchEnumFacing { static final int[] field_176609_a = new int[EnumFacing.values().length]; private static final String __OBFID = "CL_00002053"; static { try { field_176609_a[EnumFacing.EAST.ordinal()] = 1; } catch (NoSuchFieldError var6) { ; } try { field_176609_a[EnumFacing.WEST.ordinal()] = 2; } catch (NoSuchFieldError var5) { ; } try { field_176609_a[EnumFacing.SOUTH.ordinal()] = 3; } catch (NoSuchFieldError var4) { ; } try { field_176609_a[EnumFacing.NORTH.ordinal()] = 4; } catch (NoSuchFieldError var3) { ; } try { field_176609_a[EnumFacing.DOWN.ordinal()] = 5; } catch (NoSuchFieldError var2) { ; } try { field_176609_a[EnumFacing.UP.ordinal()] = 6; } catch (NoSuchFieldError var1) { ; } } } }