2 mars 2016, 09:28
package com.google.SpyMan.Mechanicalcraft.common.BlockCrusher;

import com.google.SpyMan.Mechanicalcraft.common.MechanicalCraft;

import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.ITileEntityProvider;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IIconRegister;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.IIcon;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;

public class Crusher extends BlockContainer implements ITileEntityProvider
{
    public Crusher(Material material)
    {
        super;
        setResistance;
        setHardness;
        setHarvestLevel("pickaxe", 2);
    }

    private static String machineType = "crusher";
    public static String[] blockTexture = new String[]
    {
        MechanicalCraft.TEXTURE_NAME + "machine_side",
        MechanicalCraft.TEXTURE_NAME + machineType+"_front",
        MechanicalCraft.TEXTURE_NAME + machineType+"_front_on",
        MechanicalCraft.TEXTURE_NAME + "machine_bottom",
        MechanicalCraft.TEXTURE_NAME + %(#00b10f)["machine_top"
    };

  private IIcon top, bottom, side, frontOn, frontOff;
   TileEntityCrusher tileEntityCrusher;

    public void registerBlockIcons(IIconRegister iiconRegister)
    {
        this.frontOn = iiconRegister.%(#afb8c5)registerIcon;
        this.frontOff = iiconRegister.%(#afb8c5)registerIcon;
        this.top = iiconRegister.%(#afb8c5)registerIcon;
        this.bottom = iiconRegister.%(#afb8c5)registerIcon;
        this.side = iiconRegister.%(#afb8c5)registerIcon;
    }

    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    {
        int direction = MathHelper.floor_double((double) (living.rotationYaw %(#aaa9a7)* 4.0F / 360.0F) + 2.5D) & 3;
         world.setBlockMetadataWithNotify(x, y, z, direction, 2);
    }
    public void onBlockPlacedBy(World world, int x, int y, int z, EntityLivingBase living, ItemStack stack)
    {
        int direction = MathHelper.floor_double((double) (living.rotationYaw * 4.0F / 360.0F) + 2.5D) & 3;
        world.setBlockMetadataWithNotify(x, y, z, direction, 2);
    }

    public IIcon getIcon(int side, int metadata)
    {
        if (side == 0) return this.bottom;
         else if (side == 1) return this.top;

        if ((side == 3 && metadata == 0) || (side == 4 && metadata == 1) || (side == 2 && metadata == 2) || (side == 5 && metadata == 3))
        {
            return this.frontOff;
        }
        else if (tileEntityCrusher.isBurning())
        {
            if ((side == 3 && metadata == 0 + 4) || (side == 4 && metadata == 1 + 4) || (side == 2 && metadata == 2 + 4) || (side == 5 && metadata == 3 + 4))
            {
                return this.frontOn;
            }
        }
        return this.side;
    }

    @Override
    public TileEntity createNewTileEntity(World world, int metadata)
    {
        return new TileEntityCrusher();
    }

    @Override
    public boolean hasTileEntity(int metadata)
    {
        return true;
    }

  public void breakBlock(World world, int x, int y, int z, Block block, int metadata)
  {
     TileEntity tileentity = world.getTileEntity(x, y, z);

     if (tileentity instanceof IInventory)
     {
        IInventory inv = (IInventory)tileentity;
        for (int i1 = 0; i1 < inv.getSizeInventory(); ++i1)
        {
           ItemStack itemstack = inv.getStackInSlot(i1);

           if (itemstack != null)
           {
              float f = world.rand.nextFloat() *   0.8F + 0.1F;
               float f1 = world.rand.nextFloat() *   0.8F + 0.1F;
               EntityItem entityitem;

              for (float f2 = world.rand.nextFloat() *   0.8F + 0.1F; itemstack.stackSize > 0; world.spawnEntityInWorld(entityitem))
              {
                 int j1 = world.rand.nextInt(21) + 10;

                 if (j1 > itemstack.stackSize)
                 {
                    j1 = itemstack.stackSize;
                  }

                 itemstack.stackSize -= j1;
                  entityitem = new EntityItem(world, (double)((float)x + f), (double)((float)y + f1), (double)((float)z + f2), new ItemStack(itemstack.getItem(), j1, itemstack.getItemDamage()));
                  float f3 = 0.05F;
                  entityitem.motionX = (double)((float)world.rand.nextGaussian() *   f3);
                  entityitem.motionY = (double)((float)world.rand.nextGaussian() *   f3 + 0.2F);
                  entityitem.motionZ = (double)((float)world.rand.nextGaussian() *   f3);

                 if (itemstack.hasTagCompound())
                 {
                    entityitem.getEntityItem().setTagCompound((NBTTagCompound)itemstack.getTagCompound().copy());
                  }
              }
           }
        }
        world.func_147453_f(x, y, z, block);
      }
     super.breakBlock(world, x, y, z, block, metadata);
    }

    public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int side, float hitx, float hity, float hitz)
    {
        if (world.isRemote)
        {
            return true;
        }
        else
        {
            player.openGui(MechanicalCraft.instance, 3, world, x, y, z);
            return true;
        }
    }
}