package com.jaquadro.minecraft.storagedrawers.item; import com.jaquadro.minecraft.storagedrawers.block.BlockFramingTable; import net.minecraft.block.Block; 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.EnumFacing; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; public class ItemFramingTable extends ItemBlock { public ItemFramingTable (Block block) { super(block); setMaxDamage(0); } @Override public boolean placeBlockAt (ItemStack stack, EntityPlayer player, World world, BlockPos pos, EnumFacing side, float hitX, float hitY, float hitZ, IBlockState newState) { newState = newState.withProperty(BlockFramingTable.RIGHT_SIDE, true); if (side == EnumFacing.DOWN) return false; if (side == EnumFacing.UP) side = EnumFacing.fromAngle(player.rotationYaw).getOpposite(); newState = newState.withProperty(BlockFramingTable.FACING, side); int xOff = 0; int zOff = 0; if (side == EnumFacing.NORTH) xOff = 1; if (side == EnumFacing.SOUTH) xOff = -1; if (side == EnumFacing.WEST) zOff = -1; if (side == EnumFacing.EAST) zOff = 1; if (!world.isAirBlock(pos) || !world.isAirBlock(pos.add(0, 1, 0))) return false; if (!world.isAirBlock(pos.add(xOff, 0, zOff)) || !world.isAirBlock(pos.add(xOff, 1, zOff))) { if (side == EnumFacing.NORTH || side == EnumFacing.SOUTH) xOff *= -1; if (side == EnumFacing.WEST || side == EnumFacing.EAST) zOff *= -1; if (!world.isAirBlock(pos.add(xOff, 0, zOff)) || !world.isAirBlock(pos.add(xOff, 1, zOff))) return false; newState = newState.withProperty(BlockFramingTable.RIGHT_SIDE, false); } if (!world.setBlockState(pos, newState, 3)) return false; IBlockState altState = newState.withProperty(BlockFramingTable.RIGHT_SIDE, !newState.getValue(BlockFramingTable.RIGHT_SIDE)); if (!world.setBlockState(pos.add(xOff, 0, zOff), altState, 3)) { world.setBlockToAir(pos); return false; } if (world.getBlockState(pos).getBlock() == block) block.onBlockPlacedBy(world, pos, newState, player, stack); return true; } }