package fox.spiteful.forbidden.blocks;
import java.util.Random;
import net.minecraft.block.Block;
import net.minecraft.block.BlockCake;
import net.minecraft.block.material.Material;
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.util.AxisAlignedBB;
import net.minecraft.util.IIcon;
import net.minecraft.util.MovingObjectPosition;
import net.minecraft.world.IBlockAccess;
import net.minecraft.world.World;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class BlockArcaneCake extends Block {
@SideOnly(Side.CLIENT)
private IIcon cakeTopIcon;
@SideOnly(Side.CLIENT)
private IIcon cakeBottomIcon;
@SideOnly(Side.CLIENT)
private IIcon cakeInsideIcon;
protected BlockArcaneCake() {
super(Material.cake);
this.setTickRandomly(true);
setHardness(0.5F);
setStepSound(Block.soundTypeCloth);
}
@Override
public void setBlockBoundsBasedOnState(IBlockAccess world, int x, int y, int z) {
int l = world.getBlockMetadata(x, y, z);
float f = 0.0625F;
float f1 = (float) (1 + l) / 12.0F;
this.setBlockBounds(f1, 0.0F, f, 1.0F - f, 0.5F, 1.0F - f);
}
@Override
public void setBlockBoundsForItemRender() {
float f = 0.0625F;
float f1 = 0.5F;
this.setBlockBounds(f, 0.0F, f, 1.0F - f, f1, 1.0F - f);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World world, int x, int y, int z) {
int l = world.getBlockMetadata(x, y, z);
float f = 0.0625F;
float f1 = (float) (1 + l) / 12.0F;
float f2 = 0.5F;
//return AxisAlignedBB.getAABBPool().getAABB((double) ((float) x + f1), (double) y, (double) ((float) z + f), (double) ((float) (x + 1) - f), (double) ((float) y + f2 - f), (double) ((float) (z + 1) - f));
return AxisAlignedBB.getBoundingBox((double)((float)x + f1), (double)y, (double)((float)z + f), (double)((float)(x + 1) - f), (double)((float)y + f2 - f), (double)((float)(z + 1) - f));
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@SideOnly(Side.CLIENT)
@Override
public AxisAlignedBB getSelectedBoundingBoxFromPool(World world, int x, int y, int z) {
int l = world.getBlockMetadata(x, y, z);
float f = 0.0625F;
float f1 = (float) (1 + l) / 12.0F;
float f2 = 0.5F;
//return AxisAlignedBB.getAABBPool().getAABB((double) ((float) x + f1), (double) y, (double) ((float) z + f), (double) ((float) (x + 1) - f), (double) ((float) y + f2), (double) ((float) (z + 1) - f));
return AxisAlignedBB.getBoundingBox((double)((float)x + f1), (double)y, (double)((float)z + f), (double)((float)(x + 1) - f), (double)((float)y + f2), (double)((float)(z + 1) - f));
}
@SideOnly(Side.CLIENT)
@Override
public IIcon getIcon(int par1, int x) {
return par1 == 1 ? this.cakeTopIcon : (par1 == 0 ? this.cakeBottomIcon : (x > 0 && par1 == 4 ? this.cakeInsideIcon : this.blockIcon));
}
@SideOnly(Side.CLIENT)
@Override
public void registerBlockIcons(IIconRegister ir) {
this.blockIcon = ir.registerIcon("forbidden:cake_side");
this.cakeInsideIcon = ir.registerIcon("forbidden:cake_inner");
this.cakeTopIcon = ir.registerIcon("forbidden:cake_top");
this.cakeBottomIcon = ir.registerIcon("forbidden:cake_bottom");
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitX, float hitY, float hitZ) {
this.eatCakeSlice(world, x, y, z, player);
return true;
}
@Override
public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) {
this.eatCakeSlice(world, x, y, z, player);
}
private void eatCakeSlice(World world, int x, int y, int z, EntityPlayer player) {
if (player.canEat(false)) {
player.getFoodStats().addStats(2, 1.0F);
int l = world.getBlockMetadata(x, y, z) + 1;
if (l >= 12) {
world.setBlockToAir(x, y, z);
} else {
world.setBlockMetadataWithNotify(x, y, z, l, 2);
}
}
}
@Override
public void updateTick(World world, int x, int y, int z, Random par5Random) {
super.updateTick(world, x, y, z, par5Random);
int l = world.getBlockMetadata(x, y, z);
if (l > 0) {
// if (par5Random.nextInt((int)(25.0F / f) + 1) == 0)
// {
--l;
world.setBlockMetadataWithNotify(x, y, z, l, 2);
// }
}
}
@Override
public boolean canPlaceBlockAt(World world, int x, int y, int z) {
return super.canPlaceBlockAt(world, x, y, z) && this.canBlockStay(world, x, y, z);
}
@Override
public void onNeighborBlockChange(World world, int x, int y, int z, Block block) {
if (!this.canBlockStay(world, x, y, z)) {
world.setBlockToAir(x, y, z);
}
}
@Override
public boolean canBlockStay(World world, int x, int y, int z) {
return world.getBlock(x, y - 1, z).getMaterial().isSolid();
}
@Override
public int quantityDropped(Random par1Random) {
return 0;
}
@Override
public Item getItem(World world, int x, int y, int z) {
return null;
}
@SideOnly(Side.CLIENT)
@Override
public ItemStack getPickBlock(MovingObjectPosition target, World world, int x, int y, int z) {
return new ItemStack(this);
}
}