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
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
|
package common.tileentities;
import kekztech.MultiItemHandler;
import net.minecraft.entity.player.EntityPlayer;
import net.minecraft.inventory.ISidedInventory;
import net.minecraft.item.ItemStack;
import net.minecraft.tileentity.TileEntity;
public class TE_ItemServerIOPort extends TileEntity implements ISidedInventory {
private MultiItemHandler mih;
private int tickCounter = 0;
public void setMultiItemHandler(MultiItemHandler mih) {
this.mih = mih;
}
@Override
public void updateEntity() {
if(mih != null) {
tickCounter++;
if(tickCounter >= 40) {
mih.debugPrint();
tickCounter = 0;
}
}
}
@Override
public int getSizeInventory() {
return (mih != null) ? mih.getItemTypeCapacity() : 0;
}
@Override
public ItemStack getStackInSlot(int slot) {
return (mih != null) ? mih.getStackInSlot(slot) : null;
}
@Override
public ItemStack decrStackSize(int slot, int amount) {
if(mih != null) {
if(mih.getStackInSlot(slot) != null) {
final ItemStack obtained = mih.getStackInSlot(slot).copy();
obtained.stackSize = mih.reduceStackInSlot(slot, amount);
super.markDirty();
return obtained;
} else {
return null;
}
} else {
return null;
}
}
@Override
public ItemStack getStackInSlotOnClosing(int slot) {
return null;
}
@Override
public void setInventorySlotContents(int slot, ItemStack itemStack) {
System.out.println("Set slot: " + slot);
if(mih != null) {
if(itemStack == null) {
return;
} else {
if(!mih.insertStackInSlot(slot, itemStack)) {
final int delta = itemStack.stackSize - mih.getStackInSlot(slot).stackSize;
if(delta < 0) {
System.out.println("Set slot reduce: " + itemStack.getDisplayName());
mih.reduceStackInSlot(slot, delta);
} else {
System.out.println("Set slot increase: " + itemStack.getDisplayName());
mih.increaseStackInSlot(slot, delta);
}
} else {
System.out.println("Allocated new slot for: " + itemStack.getDisplayName());
}
super.markDirty();
}
}
}
@Override
public String getInventoryName() {
return "Item Server IO Port";
}
@Override
public boolean hasCustomInventoryName() {
return true;
}
@Override
public int getInventoryStackLimit() {
return (mih != null) ? mih.getPerTypeCapacity() : 0;
}
@Override
public boolean isUseableByPlayer(EntityPlayer player) {
return true;
}
@Override
public void openInventory() {
}
@Override
public void closeInventory() {
}
@Override
public boolean isItemValidForSlot(int slot, ItemStack itemStack) {
return (mih != null) ? (mih.getStackInSlot(slot).isItemEqual(itemStack) || mih.getStackInSlot(slot) == null) : false;
}
@Override
public int[] getAccessibleSlotsFromSide(int side) {
if(mih != null) {
final int[] as = new int[mih.getItemTypeCapacity()];
for(int i = 0; i < mih.getItemTypeCapacity(); i++) {
as[i] = i;
}
return as;
} else {
return new int[1];
}
}
@Override
public boolean canInsertItem(int slot, ItemStack itemStack, int side) {
return isItemValidForSlot(slot, itemStack);
}
@Override
public boolean canExtractItem(int slot, ItemStack itemStack, int side) {
return (mih != null) ? true : false;
}
}
|