aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/tileentities/TE_ItemServerIOPort.java
blob: a7dc7e14f55d91c8cf9ded1c341d0128f71b006e (plain)
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
package 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;
	
	public void setMultiItemHandler(MultiItemHandler mih) {
		this.mih = mih;
		System.out.println("MIH set");
	}
	
	@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;
	}

}