package net.minecraft.block; import net.minecraft.block.material.MapColor; import net.minecraft.block.material.Material; import net.minecraft.block.properties.IProperty; import net.minecraft.block.properties.PropertyEnum; import net.minecraft.block.state.BlockStateContainer; import net.minecraft.block.state.IBlockState; import net.minecraft.entity.EntityLivingBase; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.EnumFacing; import net.minecraft.util.Rotation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class BlockRotatedPillar extends Block { public static final PropertyEnum AXIS = PropertyEnum.create("axis", EnumFacing.Axis.class); protected BlockRotatedPillar(Material materialIn) { super(materialIn, materialIn.getMaterialMapColor()); } protected BlockRotatedPillar(Material materialIn, MapColor color) { super(materialIn, color); } @Override public boolean rotateBlock(net.minecraft.world.World world, BlockPos pos, EnumFacing axis) { net.minecraft.block.state.IBlockState state = world.getBlockState(pos); for (net.minecraft.block.properties.IProperty prop : state.getProperties().keySet()) { if (prop.getName().equals("axis")) { world.setBlockState(pos, state.cycleProperty(prop)); return true; } } return false; } /** * Returns the blockstate with the given rotation from the passed blockstate. If inapplicable, returns the passed * blockstate. */ public IBlockState withRotation(IBlockState state, Rotation rot) { switch (rot) { case COUNTERCLOCKWISE_90: case CLOCKWISE_90: switch ((EnumFacing.Axis)state.getValue(AXIS)) { case X: return state.withProperty(AXIS, EnumFacing.Axis.Z); case Z: return state.withProperty(AXIS, EnumFacing.Axis.X); default: return state; } default: return state; } } /** * Convert the given metadata into a BlockState for this Block */ public IBlockState getStateFromMeta(int meta) { EnumFacing.Axis enumfacing$axis = EnumFacing.Axis.Y; int i = meta & 12; if (i == 4) { enumfacing$axis = EnumFacing.Axis.X; } else if (i == 8) { enumfacing$axis = EnumFacing.Axis.Z; } return this.getDefaultState().withProperty(AXIS, enumfacing$axis); } /** * Convert the BlockState into the correct metadata value */ public int getMetaFromState(IBlockState state) { int i = 0; EnumFacing.Axis enumfacing$axis = (EnumFacing.Axis)state.getValue(AXIS); if (enumfacing$axis == EnumFacing.Axis.X) { i |= 4; } else if (enumfacing$axis == EnumFacing.Axis.Z) { i |= 8; } return i; } protected BlockStateContainer createBlockState() { return new BlockStateContainer(this, new IProperty[] {AXIS}); } protected ItemStack getSilkTouchDrop(IBlockState state) { return new ItemStack(Item.getItemFromBlock(this)); } /** * Called by ItemBlocks just before a block is actually set in the world, to allow for adjustments to the * IBlockstate */ public IBlockState getStateForPlacement(World worldIn, BlockPos pos, EnumFacing facing, float hitX, float hitY, float hitZ, int meta, EntityLivingBase placer) { return super.getStateForPlacement(worldIn, pos, facing, hitX, hitY, hitZ, meta, placer).withProperty(AXIS, facing.getAxis()); } }