package com.carpentersblocks.item;
import static net.minecraftforge.common.util.ForgeDirection.DOWN;
import static net.minecraftforge.common.util.ForgeDirection.EAST;
import static net.minecraftforge.common.util.ForgeDirection.NORTH;
import static net.minecraftforge.common.util.ForgeDirection.SOUTH;
import static net.minecraftforge.common.util.ForgeDirection.UNKNOWN;
import static net.minecraftforge.common.util.ForgeDirection.UP;
import static net.minecraftforge.common.util.ForgeDirection.WEST;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.world.World;
import net.minecraftforge.common.util.ForgeDirection;
import com.carpentersblocks.CarpentersBlocks;
import com.carpentersblocks.entity.item.EntityCarpentersTile;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class ItemCarpentersTile extends Item {
public ItemCarpentersTile()
{
setCreativeTab(CarpentersBlocks.creativeTab);
}
@SideOnly(Side.CLIENT)
@Override
public void registerIcons(IIconRegister iconRegister)
{
itemIcon = iconRegister.registerIcon(CarpentersBlocks.MODID + ":" + "tile");
}
/**
* Callback for item usage. If the item does something special on right clicking, he will have one of those. Return
* True if something happen and false if it don't. This is for ITEMS, not BLOCKS
*/
@Override
public boolean onItemUse(ItemStack itemStack, EntityPlayer entityPlayer, World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ)
{
if (world.isRemote) {
return true;
} else {
ForgeDirection dir = ForgeDirection.getOrientation(side);
int x_offset = x + dir.offsetX;
int y_offset = y + dir.offsetY;
int z_offset = z + dir.offsetZ;
if (!entityPlayer.canPlayerEdit(x_offset, y_offset, z_offset, side, itemStack)) {
return false;
} else {
ForgeDirection offset_side = getOffsetSide(ForgeDirection.getOrientation(side), hitX, hitY, hitZ);
EntityCarpentersTile entity = new EntityCarpentersTile(entityPlayer, world, x_offset, y_offset, z_offset, ForgeDirection.getOrientation(side), offset_side, entityPlayer.isSneaking());
if (entity != null && entity.onValidSurface()) {
world.spawnEntityInWorld(entity);
entity.playTileSound();
--itemStack.stackSize;
}
return true;
}
}
}
/**
* Returns offset side relative to where on a block a player clicks.
*/
private ForgeDirection getOffsetSide(ForgeDirection side, float hitX, float hitY, float hitZ)
{
ForgeDirection offset_side = UNKNOWN;
float ratio = 0.20F;
float invert_ratio = 1.0F - ratio;
boolean center_clicked = hitX > ratio && hitX < invert_ratio && hitZ > ratio && hitZ < invert_ratio ||
hitX > ratio && hitX < invert_ratio && hitY > ratio && hitY < invert_ratio ||
hitZ > ratio && hitZ < invert_ratio && hitY > ratio && hitY < invert_ratio;
if (!center_clicked) {
switch (side) {
case DOWN:
case UP:
if (hitZ < 1 - hitX && hitZ < hitX) {
offset_side = NORTH;
} else if (hitZ > 1 - hitX && hitZ > hitX) {
offset_side = SOUTH;
} else if (hitX < 1 - hitZ && hitX < hitZ) {
offset_side = WEST;
} else {
offset_side = EAST;
}
break;
case NORTH:
case SOUTH:
if (hitX < 1 - hitY && hitX < hitY) {
offset_side = WEST;
} else if (hitX > 1 - hitY && hitX > hitY) {
offset_side = EAST;
} else if (hitY < 1 - hitX && hitY < hitX) {
offset_side = DOWN;
} else {
offset_side = UP;
}
break;
case WEST:
case EAST:
if (hitZ < 1 - hitY && hitZ < hitY) {
offset_side = NORTH;
} else if (hitZ > 1 - hitY && hitZ > hitY) {
offset_side = SOUTH;
} else if (hitY < 1 - hitZ && hitY < hitZ) {
offset_side = DOWN;
} else {
offset_side = UP;
}
break;
default:
break;
}
}
return offset_side;
}
}