| package com.legacy.aether.items.block; |
| |
| import net.minecraft.block.Block; |
| import net.minecraft.block.BlockSlab; |
| import net.minecraft.block.SoundType; |
| import net.minecraft.block.state.IBlockState; |
| import net.minecraft.entity.player.EntityPlayer; |
| import net.minecraft.item.ItemBlock; |
| import net.minecraft.item.ItemStack; |
| import net.minecraft.util.EnumActionResult; |
| import net.minecraft.util.EnumFacing; |
| import net.minecraft.util.EnumHand; |
| import net.minecraft.util.SoundCategory; |
| import net.minecraft.util.math.AxisAlignedBB; |
| import net.minecraft.util.math.BlockPos; |
| import net.minecraft.world.World; |
| import net.minecraftforge.fml.relauncher.Side; |
| import net.minecraftforge.fml.relauncher.SideOnly; |
| |
| public class ItemAetherSlab extends ItemBlock |
| { |
| private final BlockSlab singleSlab; |
| private final BlockSlab doubleSlab; |
| |
| public ItemAetherSlab(Block block, BlockSlab singleSlab, BlockSlab doubleSlab) |
| { |
| super(block); |
| this.singleSlab = singleSlab; |
| this.doubleSlab = doubleSlab; |
| this.setMaxDamage(0); |
| this.setHasSubtypes(true); |
| } |
| |
| public int getMetadata(int damage) |
| { |
| return damage; |
| } |
| |
| public String getUnlocalizedName(ItemStack stack) |
| { |
| return this.singleSlab.getUnlocalizedName(stack.getMetadata()); |
| } |
| |
| public EnumActionResult onItemUse(ItemStack stack, EntityPlayer playerIn, World worldIn, BlockPos pos, EnumHand hand, EnumFacing facing, float hitX, float hitY, float hitZ) |
| { |
| if (stack.stackSize != 0 && playerIn.canPlayerEdit(pos.offset(facing), facing, stack)) |
| { |
| IBlockState iblockstate = worldIn.getBlockState(pos); |
| |
| if (iblockstate.getBlock() == this.singleSlab) |
| { |
| BlockSlab.EnumBlockHalf blockslab$enumblockhalf = (BlockSlab.EnumBlockHalf)iblockstate.getValue(BlockSlab.HALF); |
| |
| if ((facing == EnumFacing.UP && blockslab$enumblockhalf == BlockSlab.EnumBlockHalf.BOTTOM || facing == EnumFacing.DOWN && blockslab$enumblockhalf == BlockSlab.EnumBlockHalf.TOP)) |
| { |
| IBlockState iblockstate1 = this.makeState(); |
| AxisAlignedBB axisalignedbb = iblockstate1.getCollisionBoundingBox(worldIn, pos); |
| |
| if (axisalignedbb != Block.NULL_AABB && worldIn.checkNoEntityCollision(axisalignedbb.offset(pos)) && worldIn.setBlockState(pos, iblockstate1, 11)) |
| { |
| SoundType soundtype = this.doubleSlab.getSoundType(this.doubleSlab.getDefaultState(), worldIn, pos, playerIn); |
| worldIn.playSound(playerIn, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); |
| --stack.stackSize; |
| } |
| |
| return EnumActionResult.SUCCESS; |
| } |
| } |
| |
| return this.tryPlace(playerIn, stack, worldIn, pos.offset(facing)) ? EnumActionResult.SUCCESS : super.onItemUse(stack, playerIn, worldIn, pos, hand, facing, hitX, hitY, hitZ); |
| } |
| else |
| { |
| return EnumActionResult.FAIL; |
| } |
| } |
| |
| @SideOnly(Side.CLIENT) |
| public boolean canPlaceBlockOnSide(World worldIn, BlockPos pos, EnumFacing side, EntityPlayer player, ItemStack stack) |
| { |
| BlockPos blockpos = pos; |
| IBlockState iblockstate = worldIn.getBlockState(pos); |
| |
| if (iblockstate.getBlock() == this.singleSlab) |
| { |
| boolean flag = iblockstate.getValue(BlockSlab.HALF) == BlockSlab.EnumBlockHalf.TOP; |
| |
| if ((side == EnumFacing.UP && !flag || side == EnumFacing.DOWN && flag)) |
| { |
| return true; |
| } |
| } |
| |
| pos = pos.offset(side); |
| IBlockState iblockstate1 = worldIn.getBlockState(pos); |
| return iblockstate1.getBlock() == this.singleSlab ? true : super.canPlaceBlockOnSide(worldIn, blockpos, side, player, stack); |
| } |
| |
| private boolean tryPlace(EntityPlayer player, ItemStack stack, World worldIn, BlockPos pos) |
| { |
| IBlockState iblockstate = worldIn.getBlockState(pos); |
| |
| if (iblockstate.getBlock() == this.singleSlab) |
| { |
| IBlockState iblockstate1 = this.makeState(); |
| AxisAlignedBB axisalignedbb = iblockstate1.getCollisionBoundingBox(worldIn, pos); |
| |
| if (axisalignedbb != Block.NULL_AABB && worldIn.checkNoEntityCollision(axisalignedbb.offset(pos)) && worldIn.setBlockState(pos, iblockstate1, 11)) |
| { |
| SoundType soundtype = this.doubleSlab.getSoundType(this.doubleSlab.getDefaultState(), worldIn, pos, player); |
| worldIn.playSound(player, pos, soundtype.getPlaceSound(), SoundCategory.BLOCKS, (soundtype.getVolume() + 1.0F) / 2.0F, soundtype.getPitch() * 0.8F); |
| --stack.stackSize; |
| } |
| |
| return true; |
| } |
| |
| return false; |
| } |
| |
| protected <T extends Comparable<T>> IBlockState makeState() |
| { |
| return this.doubleSlab.getDefaultState(); |
| } |
| |
| } |