-
Notifications
You must be signed in to change notification settings - Fork 497
/
PipeItemsDiamond.java
122 lines (104 loc) · 3.97 KB
/
PipeItemsDiamond.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
110
111
112
113
114
115
116
117
118
119
120
121
122
/**
* BuildCraft is open-source. It is distributed under the terms of the
* BuildCraft Open Source License. It grants rights to read, modify, compile
* or run the code. It does *NOT* grant the right to redistribute this software
* or its modifications in any form, binary or source, except if expressively
* granted by the copyright holder.
*/
package buildcraft.transport.pipes;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.util.LinkedList;
import net.minecraft.item.Item;
import net.minecraft.item.ItemStack;
import net.minecraft.nbt.NBTBase;
import net.minecraft.nbt.NBTTagCompound;
import net.minecraftforge.common.ForgeDirection;
import buildcraft.BuildCraftTransport;
import buildcraft.api.core.Position;
import buildcraft.api.transport.IPipedItem;
import buildcraft.core.IIconProvider;
import buildcraft.core.network.IClientState;
import buildcraft.transport.IPipeTransportItemsHook;
import buildcraft.transport.Pipe;
import buildcraft.transport.PipeIconProvider;
import buildcraft.transport.PipeTransportItems;
import cpw.mods.fml.relauncher.Side;
import cpw.mods.fml.relauncher.SideOnly;
public class PipeItemsDiamond extends Pipe implements IPipeTransportItemsHook, IClientState {
public PipeItemsDiamond(int itemID) {
super(new PipeTransportItems(), new PipeLogicDiamond(), itemID);
}
@Override
@SideOnly(Side.CLIENT)
public IIconProvider getIconProvider() {
return BuildCraftTransport.instance.pipeIconProvider;
}
@Override
public int getIconIndex(ForgeDirection direction) {
switch(direction){
case UNKNOWN: return PipeIconProvider.PipeItemsDiamond_Center;
case DOWN: return PipeIconProvider.PipeItemsDiamond_Down;
case UP: return PipeIconProvider.PipeItemsDiamond_Up;
case NORTH: return PipeIconProvider.PipeItemsDiamond_North;
case SOUTH: return PipeIconProvider.PipeItemsDiamond_South;
case WEST: return PipeIconProvider.PipeItemsDiamond_West;
case EAST: return PipeIconProvider.PipeItemsDiamond_East;
default: throw new IllegalArgumentException("direction out of bounds");
}
}
@Override
public LinkedList<ForgeDirection> filterPossibleMovements(LinkedList<ForgeDirection> possibleOrientations, Position pos, IPipedItem item) {
LinkedList<ForgeDirection> filteredOrientations = new LinkedList<ForgeDirection>();
LinkedList<ForgeDirection> defaultOrientations = new LinkedList<ForgeDirection>();
// Filtered outputs
for (ForgeDirection dir : possibleOrientations) {
boolean foundFilter = false;
// NB: if there's several of the same match, the probability
// to use that filter is higher, this is why there are
// no breaks here.
PipeLogicDiamond diamondLogic = (PipeLogicDiamond) logic;
for (int slot = 0; slot < 9; ++slot) {
ItemStack stack = diamondLogic.getStackInSlot(dir.ordinal() * 9 + slot);
if (stack != null) {
foundFilter = true;
}
if (stack != null && stack.itemID == item.getItemStack().itemID)
if ((Item.itemsList[item.getItemStack().itemID].isDamageable())) {
filteredOrientations.add(dir);
} else if (stack.getItemDamage() == item.getItemStack().getItemDamage()) {
filteredOrientations.add(dir);
}
}
if (!foundFilter) {
defaultOrientations.add(dir);
}
}
if (filteredOrientations.size() != 0)
return filteredOrientations;
else
return defaultOrientations;
}
@Override
public void entityEntered(IPipedItem item, ForgeDirection orientation) {
}
@Override
public void readjustSpeed(IPipedItem item) {
((PipeTransportItems) transport).defaultReajustSpeed(item);
}
// ICLIENTSTATE
@Override
public void writeData(DataOutputStream data) throws IOException {
NBTTagCompound nbt = new NBTTagCompound();
((PipeLogicDiamond) logic).writeToNBT(nbt);
NBTBase.writeNamedTag(nbt, data);
}
@Override
public void readData(DataInputStream data) throws IOException {
NBTBase nbt = NBTBase.readNamedTag(data);
if (nbt instanceof NBTTagCompound) {
logic.readFromNBT((NBTTagCompound) nbt);
}
}
}