package mods.custom_flags.blocks;
import cpw.mods.fml.common.FMLCommonHandler;
import cpw.mods.fml.common.network.PacketDispatcher;
import cpw.mods.fml.relauncher.Side;
import mods.custom_flags.items.ItemFlag;
import net.minecraft.block.Block;
import net.minecraft.block.BlockContainer;
import net.minecraft.block.material.Material;
import net.minecraft.client.renderer.texture.IconRegister;
import net.minecraft.creativetab.CreativeTabs;
import net.minecraft.entity.EntityLivingBase;
import net.minecraft.entity.item.EntityItem;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
import net.minecraft.util.AxisAlignedBB;
import net.minecraft.util.Icon;
import net.minecraft.world.World;
import org.objectweb.asm.Opcodes;
import org.objectweb.asm.util.ASMifier;
import java.util.List;
/**
* User: nerd-boy
* Date: 2/08/13
* Time: 11:53 AM
*
* Block class for a flag pole
*/
public class BlockFlagPole extends BlockContainer{
private static final float[] woodTexDims = new float[5];
private static final float[] ironTexDims = new float[5];
private static final AxisAlignedBB[] bounds = new AxisAlignedBB[3];
static{
woodTexDims[0] = 0F;
woodTexDims[1] = 4F;
woodTexDims[2] = 8F;
woodTexDims[3] = 12F;
woodTexDims[4] = 16F;
ironTexDims[0] = 1F;
ironTexDims[1] = 4.5F;
ironTexDims[2] = 8F;
ironTexDims[3] = 11.5F;
ironTexDims[4] = 15;
}
public BlockFlagPole(int id) {
super(id, Material.wood);
this.setCreativeTab(CreativeTabs.tabDecorations);
this.setUnlocalizedName("custom_flags:flagpole");
}
@Override
public void getSubBlocks(int par1, CreativeTabs par2CreativeTabs, List par3List) {
for(int i = 0; i < 5; i++){
par3List.add(new ItemStack(par1, 1, i));
}
}
public int damageDropped(int par1)
{
return par1 % 5;
}
@Override
public void registerIcons(IconRegister par1IconRegister) {
}
@Override
public AxisAlignedBB getSelectedBoundingBoxFromPool(World par1World, int par2, int par3, int par4) {
int side = getOrient(par1World.getBlockMetadata(par2, par3, par4));
switch(side){
case 0:
return AxisAlignedBB.getAABBPool().getAABB((double)par2 + 6F/16F, (double)par3 + 0, (double)par4 + 6F/16F, (double)par2 + 10F/16F, (double)par3 + 1, (double)par4 + 10F/16F);
case 1:
return AxisAlignedBB.getAABBPool().getAABB((double)par2 + 6F/16F, (double)par3 + 13F/16F, (double)par4 + 0, (double)par2 + 10F/16F, (double)par3 + 1, (double)par4 + 1);
case 2:
return AxisAlignedBB.getAABBPool().getAABB((double)par2 + 0, (double)par3 + 13F/16F, (double)par4 + 6F/16F, (double)par2 + 1, (double)par3 + 1, (double)par4 + 10F/16F);
}
return super.getSelectedBoundingBoxFromPool(par1World, par2, par3, par4);
}
@Override
public AxisAlignedBB getCollisionBoundingBoxFromPool(World par1World, int par2, int par3, int par4) {
return getSelectedBoundingBoxFromPool(par1World, par2, par3, par4);
}
@Override
public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer par5EntityPlayer, int par6, float par7, float par8, float par9) {
TileEntity te = world.getBlockTileEntity(x,y,z);
ItemStack stack = par5EntityPlayer.getCurrentEquippedItem();
if(te != null && te instanceof TileEntityFlagPole){
if(stack == null){
if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER){
if(((TileEntityFlagPole) te).hasFlag()){
par5EntityPlayer.inventory.setInventorySlotContents(par5EntityPlayer.inventory.currentItem, ((TileEntityFlagPole) te).popFlag());
PacketDispatcher.sendPacketToAllPlayers(te.getDescriptionPacket());
}
}
return true;
}else if(stack.getItem() instanceof ItemFlag){
if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER){
if(((TileEntityFlagPole) te).setFlag(stack) && !par5EntityPlayer.capabilities.isCreativeMode){
par5EntityPlayer.inventory.decrStackSize(par5EntityPlayer.inventory.currentItem, 1);
}
PacketDispatcher.sendPacketToAllPlayers(te.getDescriptionPacket());
}
return true;
}
}
return super.onBlockActivated(world, x, y, z, par5EntityPlayer, par6, par7, par8, par9);
}
public float getTextDim(int metadata, int section){
if(metadata % 5 == 4){
return ironTexDims[section];
}else{
return woodTexDims[section];
}
}
@Override
public int getRenderType() {
return -1;
}
@Override
public boolean isOpaqueCube() {
return false;
}
@Override
public boolean renderAsNormalBlock() {
return false;
}
@Override
public TileEntity createNewTileEntity(World world) {
return new TileEntityFlagPole();
}
@Override
public Icon getIcon(int par1, int par2) {
if(par2 % 5 == 4)
return Block.blockIron.getIcon(par1,0);
else{
return Block.wood.getIcon(par1,par2 % 5);
}
}
/**
* Called when a block is placed using its ItemBlock. Args: World, X, Y, Z, side, hitX, hitY, hitZ, block metadata
*/
public int onBlockPlaced(World world, int x, int y, int z, int side, float hitX, float hitY, float hitZ, int meta)
{
meta = meta % 5 + (5 * (side / 2));
return meta;
}
public int getOrient(int meta){
return meta / 5;
}
@Override
public void breakBlock(World par1World, int par2, int par3, int par4, int par5, int par6) {
if(FMLCommonHandler.instance().getEffectiveSide() == Side.SERVER){
TileEntity te = par1World.getBlockTileEntity(par2, par3, par4);
if(te != null && te instanceof TileEntityFlagPole){
List<ItemStack> flags = ((TileEntityFlagPole)te).getFlags();
for(ItemStack f : flags){
par1World.spawnEntityInWorld(new EntityItem(par1World, par2, par3, par4, f));
}
}
}
super.breakBlock(par1World, par2, par3, par4, par5, par6);
}
}