package net.minecraft.entity.item;
import java.util.List;
import net.minecraft.block.state.IBlockState;
import net.minecraft.command.IEntitySelector;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ContainerHopper;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.IHopper;
import net.minecraft.tileentity.TileEntityHopper;
import net.minecraft.util.BlockPos;
import net.minecraft.util.DamageSource;
import net.minecraft.world.World;
public class EntityMinecartHopper extends EntityMinecartContainer implements IHopper
{
/** Whether this hopper minecart is being blocked by an activator rail. */
private boolean isBlocked = true;
private int transferTicker = -1;
private BlockPos field_174900_c;
private static final String __OBFID = "CL_00001676";
public EntityMinecartHopper(World worldIn)
{
super(worldIn);
this.field_174900_c = BlockPos.ORIGIN;
}
public EntityMinecartHopper(World worldIn, double p_i1721_2_, double p_i1721_4_, double p_i1721_6_)
{
super(worldIn, p_i1721_2_, p_i1721_4_, p_i1721_6_);
this.field_174900_c = BlockPos.ORIGIN;
}
public EntityMinecart.EnumMinecartType func_180456_s()
{
return EntityMinecart.EnumMinecartType.HOPPER;
}
public IBlockState func_180457_u()
{
return Blocks.hopper.getDefaultState();
}
public int getDefaultDisplayTileOffset()
{
return 1;
}
/**
* Returns the number of slots in the inventory.
*/
public int getSizeInventory()
{
return 5;
}
/**
* First layer of player interaction
*/
public boolean interactFirst(EntityPlayer playerIn)
{
if (!this.worldObj.isRemote)
{
playerIn.displayGUIChest(this);
}
return true;
}
/**
* Called every tick the minecart is on an activator rail. Args: x, y, z, is the rail receiving power
*/
public void onActivatorRailPass(int p_96095_1_, int p_96095_2_, int p_96095_3_, boolean p_96095_4_)
{
boolean var5 = !p_96095_4_;
if (var5 != this.getBlocked())
{
this.setBlocked(var5);
}
}
/**
* Get whether this hopper minecart is being blocked by an activator rail.
*/
public boolean getBlocked()
{
return this.isBlocked;
}
/**
* Set whether this hopper minecart is being blocked by an activator rail.
*/
public void setBlocked(boolean p_96110_1_)
{
this.isBlocked = p_96110_1_;
}
/**
* Returns the worldObj for this tileEntity.
*/
public World getWorld()
{
return this.worldObj;
}
/**
* Gets the world X position for this hopper entity.
*/
public double getXPos()
{
return this.posX;
}
/**
* Gets the world Y position for this hopper entity.
*/
public double getYPos()
{
return this.posY;
}
/**
* Gets the world Z position for this hopper entity.
*/
public double getZPos()
{
return this.posZ;
}
/**
* Called to update the entity's position/logic.
*/
public void onUpdate()
{
super.onUpdate();
if (!this.worldObj.isRemote && this.isEntityAlive() && this.getBlocked())
{
BlockPos var1 = new BlockPos(this);
if (var1.equals(this.field_174900_c))
{
--this.transferTicker;
}
else
{
this.setTransferTicker(0);
}
if (!this.canTransfer())
{
this.setTransferTicker(0);
if (this.func_96112_aD())
{
this.setTransferTicker(4);
this.markDirty();
}
}
}
}
public boolean func_96112_aD()
{
if (TileEntityHopper.func_145891_a(this))
{
return true;
}
else
{
List var1 = this.worldObj.func_175647_a(EntityItem.class, this.getEntityBoundingBox().expand(0.25D, 0.0D, 0.25D), IEntitySelector.selectAnything);
if (var1.size() > 0)
{
TileEntityHopper.func_145898_a(this, (EntityItem)var1.get(0));
}
return false;
}
}
public void killMinecart(DamageSource p_94095_1_)
{
super.killMinecart(p_94095_1_);
this.dropItemWithOffset(Item.getItemFromBlock(Blocks.hopper), 1, 0.0F);
}
/**
* (abstract) Protected helper method to write subclass entity data to NBT.
*/
protected void writeEntityToNBT(NBTTagCompound tagCompound)
{
super.writeEntityToNBT(tagCompound);
tagCompound.setInteger("TransferCooldown", this.transferTicker);
}
/**
* (abstract) Protected helper method to read subclass entity data from NBT.
*/
protected void readEntityFromNBT(NBTTagCompound tagCompund)
{
super.readEntityFromNBT(tagCompund);
this.transferTicker = tagCompund.getInteger("TransferCooldown");
}
/**
* Sets the transfer ticker, used to determine the delay between transfers.
*/
public void setTransferTicker(int p_98042_1_)
{
this.transferTicker = p_98042_1_;
}
/**
* Returns whether the hopper cart can currently transfer an item.
*/
public boolean canTransfer()
{
return this.transferTicker > 0;
}
public String getGuiID()
{
return "minecraft:hopper";
}
public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn)
{
return new ContainerHopper(playerInventory, this, playerIn);
}
}