From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- .../invslots/InvSlotSignalProcessor.java | 125 +++++++++++++++++++++ 1 file changed, 125 insertions(+) create mode 100644 ihl/processing/invslots/InvSlotSignalProcessor.java (limited to 'ihl/processing/invslots/InvSlotSignalProcessor.java') 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 -- cgit v1.2.3