diff options
| author | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
|---|---|---|
| committer | Foghrye4 <foghrye4@gmail.com> | 2016-04-11 19:44:54 +0300 |
| commit | 05c78126859231a68e199dc34613689bd0978e2f (patch) | |
| tree | 050bea104a18c72905095d29f31bec2935a27a24 /ihl/processing/invslots/InvSlotSignalProcessor.java | |
Initial commit
Diffstat (limited to 'ihl/processing/invslots/InvSlotSignalProcessor.java')
| -rw-r--r-- | ihl/processing/invslots/InvSlotSignalProcessor.java | 125 |
1 files changed, 125 insertions, 0 deletions
diff --git a/ihl/processing/invslots/InvSlotSignalProcessor.java b/ihl/processing/invslots/InvSlotSignalProcessor.java new file mode 100644 index 0000000..6663db0 --- /dev/null +++ b/ihl/processing/invslots/InvSlotSignalProcessor.java @@ -0,0 +1,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;
+ }
+
+}
\ No newline at end of file |
