package net.minecraft.entity.item;
import java.util.List;
import net.minecraft.block.Block;
import net.minecraft.command.IEntitySelector;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.init.Blocks;
import net.minecraft.item.Item;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.IHopper;
import net.minecraft.tileentity.TileEntityHopper;
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 static final String __OBFID = "CL_00001676";
public EntityMinecartHopper(World p_i1720_1_)
{
super(p_i1720_1_);
}
public EntityMinecartHopper(World p_i1721_1_, double p_i1721_2_, double p_i1721_4_, double p_i1721_6_)
{
super(p_i1721_1_, p_i1721_2_, p_i1721_4_, p_i1721_6_);
}
public int getMinecartType()
{
return 5;
}
public Block getDefaultDisplayTile()
{
return Blocks.hopper;
}
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 player)
{
if(net.minecraftforge.common.MinecraftForge.EVENT_BUS.post(new net.minecraftforge.event.entity.minecart.MinecartInteractEvent(this, player))) return true;
if (!this.worldObj.isRemote)
{
player.displayGUIHopperMinecart(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 flag1 = !p_96095_4_;
if (flag1 != this.getBlocked())
{
this.setBlocked(flag1);
}
}
/**
* 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())
{
--this.transferTicker;
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 list = this.worldObj.selectEntitiesWithinAABB(EntityItem.class, this.boundingBox.expand(0.25D, 0.0D, 0.25D), IEntitySelector.selectAnything);
if (list.size() > 0)
{
TileEntityHopper.func_145898_a(this, (EntityItem)list.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;
}
}