Files
PrimalSorcery/build/tmp/recompileMc/sources/net/minecraft/tileentity/TileEntityDispenser.java
Mohammad-Ali Minaie b86dedad2f base mod created
2018-10-08 09:07:47 -04:00

146 lines
3.7 KiB
Java

package net.minecraft.tileentity;
import java.util.Random;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.entity.player.InventoryPlayer;
import net.minecraft.inventory.Container;
import net.minecraft.inventory.ContainerDispenser;
import net.minecraft.inventory.ItemStackHelper;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.util.NonNullList;
import net.minecraft.util.datafix.DataFixer;
import net.minecraft.util.datafix.FixTypes;
import net.minecraft.util.datafix.walkers.ItemStackDataLists;
public class TileEntityDispenser extends TileEntityLockableLoot
{
private static final Random RNG = new Random();
private NonNullList<ItemStack> stacks = NonNullList.<ItemStack>withSize(9, ItemStack.EMPTY);
/**
* Returns the number of slots in the inventory.
*/
public int getSizeInventory()
{
return 9;
}
public boolean isEmpty()
{
for (ItemStack itemstack : this.stacks)
{
if (!itemstack.isEmpty())
{
return false;
}
}
return true;
}
public int getDispenseSlot()
{
this.fillWithLoot((EntityPlayer)null);
int i = -1;
int j = 1;
for (int k = 0; k < this.stacks.size(); ++k)
{
if (!((ItemStack)this.stacks.get(k)).isEmpty() && RNG.nextInt(j++) == 0)
{
i = k;
}
}
return i;
}
/**
* Add the given ItemStack to this Dispenser. Return the Slot the Item was placed in or -1 if no free slot is
* available.
*/
public int addItemStack(ItemStack stack)
{
for (int i = 0; i < this.stacks.size(); ++i)
{
if (((ItemStack)this.stacks.get(i)).isEmpty())
{
this.setInventorySlotContents(i, stack);
return i;
}
}
return -1;
}
/**
* Get the name of this object. For players this returns their username
*/
public String getName()
{
return this.hasCustomName() ? this.customName : "container.dispenser";
}
public static void registerFixes(DataFixer fixer)
{
fixer.registerWalker(FixTypes.BLOCK_ENTITY, new ItemStackDataLists(TileEntityDispenser.class, new String[] {"Items"}));
}
public void readFromNBT(NBTTagCompound compound)
{
super.readFromNBT(compound);
this.stacks = NonNullList.<ItemStack>withSize(this.getSizeInventory(), ItemStack.EMPTY);
if (!this.checkLootAndRead(compound))
{
ItemStackHelper.loadAllItems(compound, this.stacks);
}
if (compound.hasKey("CustomName", 8))
{
this.customName = compound.getString("CustomName");
}
}
public NBTTagCompound writeToNBT(NBTTagCompound compound)
{
super.writeToNBT(compound);
if (!this.checkLootAndWrite(compound))
{
ItemStackHelper.saveAllItems(compound, this.stacks);
}
if (this.hasCustomName())
{
compound.setString("CustomName", this.customName);
}
return compound;
}
/**
* Returns the maximum stack size for a inventory slot. Seems to always be 64, possibly will be extended.
*/
public int getInventoryStackLimit()
{
return 64;
}
public String getGuiID()
{
return "minecraft:dispenser";
}
public Container createContainer(InventoryPlayer playerInventory, EntityPlayer playerIn)
{
this.fillWithLoot(playerIn);
return new ContainerDispenser(playerInventory, this);
}
protected NonNullList<ItemStack> getItems()
{
return this.stacks;
}
}