-
Notifications
You must be signed in to change notification settings - Fork 497
/
TileHopper.java
109 lines (86 loc) · 2.87 KB
/
TileHopper.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
package buildcraft.factory;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.IInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraft.tileentity.TileEntity;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.core.TileBuildCraft;
import buildcraft.core.inventory.ITransactor;
import buildcraft.core.inventory.Transactor;
import buildcraft.core.proxy.CoreProxy;
import buildcraft.core.utils.SimpleInventory;
public class TileHopper extends TileBuildCraft implements IInventory {
private final SimpleInventory _inventory = new SimpleInventory(4, "Hopper", 64);
@Override
public void readFromNBT(NBTTagCompound nbtTagCompound) {
super.readFromNBT(nbtTagCompound);
NBTTagCompound p = (NBTTagCompound) nbtTagCompound.getTag("inventory");
_inventory.readFromNBT(p);
}
@Override
public void writeToNBT(NBTTagCompound nbtTagCompound) {
super.writeToNBT(nbtTagCompound);
NBTTagCompound inventoryTag = new NBTTagCompound();
_inventory.writeToNBT(inventoryTag);
nbtTagCompound.setTag("inventory", inventoryTag);
}
@Override
public void updateEntity() {
super.updateEntity();
if (CoreProxy.proxy.isRenderWorld(worldObj) || worldObj.getWorldTime() % 2 != 0)
return;
TileEntity tile = this.worldObj.getBlockTileEntity(xCoord, yCoord - 1, zCoord);
if (tile == null) return;
ITransactor transactor = Transactor.getTransactorFor(tile);
if (transactor == null) return;
for(int internalSlot = 0; internalSlot < _inventory.getSizeInventory(); internalSlot++) {
ItemStack stackInSlot = _inventory.getStackInSlot(internalSlot);
if(stackInSlot == null) continue;
ItemStack clonedStack = stackInSlot.copy().splitStack(1);
if (transactor.add(clonedStack, ForgeDirection.UP, true).stackSize > 0) {
_inventory.decrStackSize(internalSlot, 1);
return;
}
}
}
/** IInventory Implementation **/
@Override
public int getSizeInventory() {
return _inventory.getSizeInventory();
}
@Override
public ItemStack getStackInSlot(int slotId) {
return _inventory.getStackInSlot(slotId);
}
@Override
public ItemStack decrStackSize(int slotId, int count) {
return _inventory.decrStackSize(slotId, count);
}
@Override
public ItemStack getStackInSlotOnClosing(int slotId) {
return _inventory.getStackInSlotOnClosing(slotId);
}
@Override
public void setInventorySlotContents(int slotId, ItemStack itemStack) {
_inventory.setInventorySlotContents(slotId, itemStack);
}
@Override
public String getInvName() {
return _inventory.getInvName();
}
@Override
public int getInventoryStackLimit() {
return _inventory.getInventoryStackLimit();
}
@Override
public boolean isUseableByPlayer(EntityPlayer entityPlayer) {
return worldObj.getBlockTileEntity(xCoord, yCoord, zCoord) == this;
}
@Override
public void openChest() {
}
@Override
public void closeChest() {
}
}