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
|
package ihl.processing.invslots;
import java.util.Iterator;
import net.minecraft.block.Block;
import net.minecraftforge.common.util.ForgeDirection;
import ic2.core.Ic2Items;
import ic2.core.block.invslot.InvSlot;
import ihl.IHLMod;
import ihl.datanet.Contact;
import ihl.datanet.RedstoneSignalConverterTileEntity;
import ihl.interfaces.IDataNode;
import ihl.utils.IHLUtils;
public class InvSlotSignalProcessor extends InvSlot
{
private RedstoneSignalConverterTileEntity rscBase;
public final boolean[] slotStatus;//false=normal;true=activated
public InvSlotSignalProcessor(RedstoneSignalConverterTileEntity base1, String name1, int oldStartIndex1, Access access1, int count, int linksPerSlot) {
super(base1, name1, oldStartIndex1, access1, count);
rscBase = base1;
slotStatus = new boolean[count];
}
public Contact getOppositeContact(IDataNode contact3)
{
for(Contact contact1 : this.rscBase.contacts)
{
if(contact1.attachedSlot==this &&
contact3.getAttachedSlotNumber()==contact1.attachedSlotNumber)
{
switch(contact3.getType())
{
case 0:
if(contact1.type==1)
{
return contact1;
}
break;
case 1:
if(contact1.type==0)
{
return contact1;
}
break;
case 2:
if(slotStatus[contact1.attachedSlotNumber])
{
if(contact1.type==3)
{
return contact1;
}
}
else
{
if(contact1.type==4)
{
return contact1;
}
}
break;
case 3:
if(slotStatus[contact1.attachedSlotNumber])
{
if(contact1.type==2)
{
return contact1;
}
}
break;
case 4:
if(!slotStatus[contact1.attachedSlotNumber])
{
if(contact1.type==2)
{
return contact1;
}
}
break;
}
}
}
return null;
}
public boolean isSlotActivated(int slot)
{
return this.slotStatus[slot];
}
public void notifyNeighbors()
{
int xyz[] = {0,0,1,0,0,-1,0,0};
Block block;
int x,y,z;
for(int i=0;i<=5;i++)
{
x=rscBase.xCoord+xyz[i];
y=rscBase.yCoord+xyz[i+1];
z=rscBase.zCoord+xyz[i+2];
block = rscBase.getWorldObj().getBlock(rscBase.xCoord,rscBase.yCoord,rscBase.zCoord);
rscBase.getWorldObj().notifyBlockOfNeighborChange(x,y,z,block);
}
}
public boolean isIndirectlyConnectedWithContact(Contact contact, int id)
{
if(this.get(contact.attachedSlotNumber)!=null)
{
if(IHLUtils.isItemStacksIsEqual(this.get(contact.attachedSlotNumber), Ic2Items.splitterCableItem, true))//Redstone sensor
{
ForgeDirection dir1 = ForgeDirection.getOrientation(contact.attachedSlotNumber);
if(this.base.getWorldObj().getIndirectPowerOutput(base.xCoord+dir1.offsetX, base.yCoord+dir1.offsetY, base.zCoord+dir1.offsetZ, dir1.getOpposite().flag))
{
Contact oppositeContact = this.getOppositeContact(contact);
if(oppositeContact.getDataGridID()!=contact.getDataGridID())
{
return oppositeContact.isConnectedToContact(id);
}
}
}
}
return false;
}
}
|