package minefantasy.block.special; import static net.minecraftforge.common.ForgeDirection.UP; import java.util.Random; import cpw.mods.fml.relauncher.Side; import cpw.mods.fml.relauncher.SideOnly; import minefantasy.api.forge.ILighter; import minefantasy.block.tileentity.TileEntityFirepit; import minefantasy.system.cfg; 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.Entity; import net.minecraft.entity.item.EntityItem; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemFlintAndSteel; import net.minecraft.item.ItemStack; import net.minecraft.nbt.NBTTagCompound; import net.minecraft.tileentity.TileEntity; import net.minecraft.util.DamageSource; import net.minecraft.util.Icon; import net.minecraft.world.IBlockAccess; import net.minecraft.world.World; import net.minecraft.world.WorldProviderEnd; import net.minecraftforge.common.ForgeDirection; public class BlockFirepit extends BlockContainer { private Random rand = new Random(); public BlockFirepit(int id) { super(id, Material.wood); this.setCreativeTab(CreativeTabs.tabDecorations); setBlockBounds(0.2F, 0F, 0.2F, 0.8F, 0.5F, 0.8F); } public int idDropped(int id, Random rand, int meta) { return 0; } @Override public void onBlockClicked(World world, int x, int y, int z, EntityPlayer player) { if(world.isRemote) { return; } TileEntityFirepit firepit = (TileEntityFirepit)world.getBlockTileEntity(x, y, z); if(firepit != null && player.getHeldItem() != null) { if(firepit.isBurning() && player.getHeldItem().getItem() == Item.stick) player.getHeldItem().itemID = Block.torchWood.blockID; } } @Override public boolean onBlockActivated(World world, int x, int y, int z, EntityPlayer player, int i, float f, float f1, float f2) { if(world.isRemote) { return false; } TileEntityFirepit firepit = (TileEntityFirepit)world.getBlockTileEntity(x, y, z); if(firepit != null) { ItemStack held = player.getHeldItem(); boolean burning = firepit.isBurning(); if(held != null) { if(burning) { if(held.itemID == Block.sand.blockID) { firepit.extinguish(); return true; } if(held.getItem() == Item.stick) { held.itemID = Block.torchWood.blockID; return true; } } else if(firepit.fuel > 0) { if(held.getItem() instanceof ILighter) { world.playSoundEffect((double)x + 0.5D, (double)y - 0.5D, (double)z + 0.5D, "fire.ignite", 1.0F, rand.nextFloat() * 0.4F + 0.8F); world.spawnParticle("flame", (double)x + 0.5D, (double)y - 0.5D, (double)z + 0.5D, 0F, 0F, 0F); ILighter lighter = (ILighter)held.getItem(); if(lighter.canLight()) { if(rand.nextDouble() < lighter.getChance()) { if(!world.isRemote) { firepit.setLit(true); held.damageItem(1, player); } } return true; } } if(held.getItem() instanceof ItemFlintAndSteel) { world.playSoundEffect((double)x + 0.5D, (double)y - 0.5D, (double)z + 0.5D, "fire.ignite", 1.0F, rand.nextFloat() * 0.4F + 0.8F); world.spawnParticle("flame", (double)x + 0.5D, (double)y - 0.5D, (double)z + 0.5D, 0F, 0F, 0F); if(!world.isRemote) { firepit.setLit(true); held.damageItem(1, player); } return true; } } if(firepit.addFuel(held) && !player.capabilities.isCreativeMode) { if(held.stackSize == 1) { if(held.getItem().hasContainerItem()) { player.setCurrentItemOrArmor(0, held.getItem().getContainerItemStack(held)); } else { player.setCurrentItemOrArmor(0, null); } } else { held.stackSize --; if(held.getItem().hasContainerItem()) { if(!player.inventory.addItemStackToInventory(held.getItem().getContainerItemStack(held))) { player.dropPlayerItem(held.getItem().getContainerItemStack(held)); } } } return true; } } } return super.onBlockActivated(world, x, y, z, player, i, f, f1, f2); } @Override public TileEntity createNewTileEntity(World world) { return new TileEntityFirepit(); } @Override public Icon getIcon(int side, int meta) { return Block.planks.getIcon(side, 0); } public boolean isOpaqueCube() { return false; } @SideOnly(Side.CLIENT) public int getRenderType() { return cfg.renderId; } public boolean renderAsNormalBlock() { return false; } @Override public int getLightValue(IBlockAccess world, int x, int y, int z) { if(world.getBlockMetadata(x, y, z) == 1) { return 15; } return super.getLightValue(world, x, y, z); } @Override public void onEntityCollidedWithBlock(World world, int x, int y, int z, Entity entity) { if(world.isRemote) { return; } TileEntityFirepit tile = (TileEntityFirepit)world.getBlockTileEntity(x, y, z); if(entity == null || tile == null) { return; } if(entity instanceof EntityItem) { EntityItem entIt = (EntityItem)entity; if(entIt.getEntityItem() != null) { for(int a = 0; a < entIt.getEntityItem().stackSize; a ++) { if(tile.addFuel(entIt.getEntityItem())) { entIt.getEntityItem().stackSize --; } if(entIt.getEntityItem().stackSize <= 0) { entIt.setDead(); } } } if(tile.isBurning() && entity.ticksExisted % 25 == 0) { entity.motionY = 0.20000000298023224D; entity.playSound("random.fizz", 0.4F, 2.0F + this.rand.nextFloat() * 0.4F); } } else { if(tile.isBurning()) entity.attackEntityFrom(DamageSource.inFire, 1.0F); } if(tile.isBurning()) entity.setFire(2); } @Override public void breakBlock(World world, int x, int y, int z, int i1, int i2) { TileEntityFirepit tile = (TileEntityFirepit)world.getBlockTileEntity(x, y, z); if(tile != null) { int charcoal = tile.getCharcoalDrop(); if(charcoal > 0) { float xDrop = this.rand.nextFloat() * 0.8F + 0.1F; float yDrop = this.rand.nextFloat() * 0.8F + 0.1F; float zDrop = this.rand.nextFloat() * 0.8F + 0.1F; for(int c = 0; c < charcoal; c ++) { EntityItem drop = new EntityItem(world, (double)((float)x + xDrop), (double)((float)y + yDrop), (double)((float)z + zDrop), new ItemStack(Item.coal, 1, 1)); float jumpFactor = 0.05F; drop.motionX = (double)((float)this.rand.nextGaussian() * jumpFactor); drop.motionY = (double)((float)this.rand.nextGaussian() * jumpFactor + 0.2F); drop.motionZ = (double)((float)this.rand.nextGaussian() * jumpFactor); world.spawnEntityInWorld(drop); } } } super.breakBlock(world, x, y, z, i1, i2); } @Override public void registerIcons(IconRegister reg){} }