package com.cricketcraft.chisel.item;
import net.minecraft.block.Block;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.cricketcraft.chisel.block.BlockCarvableSlab;
public class ItemCarvableSlab extends ItemCarvable {
public ItemCarvableSlab(Block block) {
super(block);
}
@Override
public boolean func_150936_a(World world, int x, int y, int z, int side, EntityPlayer player, ItemStack stack) {
return true;
}
@Override
public boolean onItemUse(ItemStack stack, EntityPlayer player, World world, int x, int y, int z, int side, float hx, float hy, float hz) {
BlockCarvableSlab block = (BlockCarvableSlab) Block.getBlockFromItem(this);
int meta = stack.getItemDamage();
ForgeDirection dir = ForgeDirection.VALID_DIRECTIONS[side];
Block clicked = world.getBlock(x, y, z);
// the position of the block that we are attempting to place at
int x2 = x + dir.offsetX;
int y2 = y + dir.offsetY;
int z2 = z + dir.offsetZ;
Block at = world.getBlock(x2, y2, z2);
boolean metaEquals = world.getBlockMetadata(x2, y2, z2) == meta;
// if the metadata at the place target matches, and the block there matches either the top of bottom slab, try to fill in the rest of the block
if (metaEquals && ((at == block.top && (hy <= 0.5D || hy == 1.0D)) || (at == block.bottom && (hy > 0.5D || hy == 0)))) {
place(stack, world, x2, y2, z2, block.master, meta);
return true;
}
// else if the block clicked on is a top or bottom slab of this type, try to fill in that block if possible
boolean clickedMetaEquals = world.getBlockMetadata(x, y, z) == meta;
if (clickedMetaEquals && ((clicked == block.bottom && dir == ForgeDirection.UP) || (clicked == block.top && dir == ForgeDirection.DOWN))) {
place(stack, world, x, y, z, block.master, meta);
return true;
}
// finally just try to place a normal slab
if (metaEquals || at.isReplaceable(world, x, y, z)) {
boolean top = hy > 0.5D && dir != ForgeDirection.UP || dir == ForgeDirection.DOWN;
Block toPlace = top ? block.top : block.bottom;
// if we can replace the clicked block do so
if (clicked.isReplaceable(world, x, y, z)) {
place(stack, world, x, y, z, toPlace, meta);
} else {
place(stack, world, x2, y2, z2, toPlace, meta);
}
return true;
}
return false;
}
private void place(ItemStack stack, World world, int x, int y, int z, Block toPlace, int metadata) {
world.setBlock(x, y, z, toPlace, metadata, 2);
stack.stackSize -= 1;
world.playSoundEffect(x + 0.5f, y + 0.5f, z + 0.5f, this.field_150939_a.stepSound.func_150496_b(), (this.field_150939_a.stepSound.getVolume() + 1.0F) / 2.0F,
this.field_150939_a.stepSound.getPitch() * 0.8F);
}
}