package net.minecraft.entity.item;
import net.minecraft.block.BlockFurnace;
import net.minecraft.block.state.IBlockState;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.init.Items;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.BlockPos;
import net.minecraft.util.DamageSource;
import net.minecraft.util.EnumFacing;
import net.minecraft.util.EnumParticleTypes;
import net.minecraft.util.MathHelper;
import net.minecraft.world.World;
public class EntityMinecartFurnace extends EntityMinecart
{
private int fuel;
public double pushX;
public double pushZ;
private static final String __OBFID = "CL_00001675";
public EntityMinecartFurnace(World worldIn)
{
super(worldIn);
}
public EntityMinecartFurnace(World worldIn, double p_i1719_2_, double p_i1719_4_, double p_i1719_6_)
{
super(worldIn, p_i1719_2_, p_i1719_4_, p_i1719_6_);
}
public EntityMinecart.EnumMinecartType func_180456_s()
{
return EntityMinecart.EnumMinecartType.FURNACE;
}
protected void entityInit()
{
super.entityInit();
this.dataWatcher.addObject(16, new Byte((byte)0));
}
/**
* Called to update the entity's position/logic.
*/
public void onUpdate()
{
super.onUpdate();
if (this.fuel > 0)
{
--this.fuel;
}
if (this.fuel <= 0)
{
this.pushX = this.pushZ = 0.0D;
}
this.setMinecartPowered(this.fuel > 0);
if (this.isMinecartPowered() && this.rand.nextInt(4) == 0)
{
this.worldObj.spawnParticle(EnumParticleTypes.SMOKE_LARGE, this.posX, this.posY + 0.8D, this.posZ, 0.0D, 0.0D, 0.0D, new int[0]);
}
}
protected double func_174898_m()
{
return 0.2D;
}
public void killMinecart(DamageSource p_94095_1_)
{
super.killMinecart(p_94095_1_);
if (!p_94095_1_.isExplosion())
{
this.entityDropItem(new ItemStack(Blocks.furnace, 1), 0.0F);
}
}
protected void func_180460_a(BlockPos p_180460_1_, IBlockState p_180460_2_)
{
super.func_180460_a(p_180460_1_, p_180460_2_);
double var3 = this.pushX * this.pushX + this.pushZ * this.pushZ;
if (var3 > 1.0E-4D && this.motionX * this.motionX + this.motionZ * this.motionZ > 0.001D)
{
var3 = (double)MathHelper.sqrt_double(var3);
this.pushX /= var3;
this.pushZ /= var3;
if (this.pushX * this.motionX + this.pushZ * this.motionZ < 0.0D)
{
this.pushX = 0.0D;
this.pushZ = 0.0D;
}
else
{
double var5 = var3 / this.func_174898_m();
this.pushX *= var5;
this.pushZ *= var5;
}
}
}
protected void applyDrag()
{
double var1 = this.pushX * this.pushX + this.pushZ * this.pushZ;
if (var1 > 1.0E-4D)
{
var1 = (double)MathHelper.sqrt_double(var1);
this.pushX /= var1;
this.pushZ /= var1;
double var3 = 1.0D;
this.motionX *= 0.800000011920929D;
this.motionY *= 0.0D;
this.motionZ *= 0.800000011920929D;
this.motionX += this.pushX * var3;
this.motionZ += this.pushZ * var3;
}
else
{
this.motionX *= 0.9800000190734863D;
this.motionY *= 0.0D;
this.motionZ *= 0.9800000190734863D;
}
super.applyDrag();
}
/**
* First layer of player interaction
*/
public boolean interactFirst(EntityPlayer playerIn)
{
ItemStack var2 = playerIn.inventory.getCurrentItem();
if (var2 != null && var2.getItem() == Items.coal)
{
if (!playerIn.capabilities.isCreativeMode && --var2.stackSize == 0)
{
playerIn.inventory.setInventorySlotContents(playerIn.inventory.currentItem, (ItemStack)null);
}
this.fuel += 3600;
}
this.pushX = this.posX - playerIn.posX;
this.pushZ = this.posZ - playerIn.posZ;
return true;
}
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
protected void writeEntityToNBT(NBTTagCompound tagCompound)
{
super.writeEntityToNBT(tagCompound);
tagCompound.setDouble("PushX", this.pushX);
tagCompound.setDouble("PushZ", this.pushZ);
tagCompound.setShort("Fuel", (short)this.fuel);
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
protected void readEntityFromNBT(NBTTagCompound tagCompund)
{
super.readEntityFromNBT(tagCompund);
this.pushX = tagCompund.getDouble("PushX");
this.pushZ = tagCompund.getDouble("PushZ");
this.fuel = tagCompund.getShort("Fuel");
}
protected boolean isMinecartPowered()
{
return (this.dataWatcher.getWatchableObjectByte(16) & 1) != 0;
}
protected void setMinecartPowered(boolean p_94107_1_)
{
if (p_94107_1_)
{
this.dataWatcher.updateObject(16, Byte.valueOf((byte)(this.dataWatcher.getWatchableObjectByte(16) | 1)));
}
else
{
this.dataWatcher.updateObject(16, Byte.valueOf((byte)(this.dataWatcher.getWatchableObjectByte(16) & -2)));
}
}
public IBlockState func_180457_u()
{
return (this.isMinecartPowered() ? Blocks.lit_furnace : Blocks.furnace).getDefaultState().withProperty(BlockFurnace.FACING, EnumFacing.NORTH);
}
}