From 05c78126859231a68e199dc34613689bd0978e2f Mon Sep 17 00:00:00 2001 From: Foghrye4 Date: Mon, 11 Apr 2016 19:44:54 +0300 Subject: Initial commit --- ihl/datanet/Contact.java | 254 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 254 insertions(+) create mode 100644 ihl/datanet/Contact.java (limited to 'ihl/datanet/Contact.java') diff --git a/ihl/datanet/Contact.java b/ihl/datanet/Contact.java new file mode 100644 index 0000000..3d5b6af --- /dev/null +++ b/ihl/datanet/Contact.java @@ -0,0 +1,254 @@ +package ihl.datanet; + +import java.util.Arrays; +import java.util.HashSet; +import java.util.Set; + +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.world.World; +import ic2.core.Ic2Items; +import ihl.IHLMod; +import ihl.interfaces.IDataCableHolder; +import ihl.interfaces.IDataNode; +import ihl.processing.invslots.InvSlotSignalProcessor; +import ihl.utils.IHLUtils; + +public class Contact implements IDataNode +{ + public final int innerId; + private int dataGridID=-1; + private Set connectedContacts = new HashSet(); + public final InvSlotSignalProcessor attachedSlot; + public final int attachedSlotNumber; + public final int type; //Free:-1; A1:0; A2:1; C:2; NO:3; NC:4; + private final TileEntity base; + + public Contact(TileEntity base1, int innerId1,InvSlotSignalProcessor attachedSlot1,int attachedSlotNumber1, int type1) + { + type=type1; + base=base1; + innerId=innerId1; + attachedSlot=attachedSlot1; + attachedSlotNumber=attachedSlotNumber1; + } + + public void onLoad() + { + if(dataGridID!=-1) + { + DataGrid grid = IHLMod.datanet.getGrid(dataGridID); + grid.telist.add(this); + } + } + + @Override + public int getDataGridID() { + return dataGridID; + } + + @Override + public void setDataGrid(int newGridID) + { + dataGridID=newGridID; + onLoad(); + } + + @Override + public Set getConnectedDataNodes() { + return this.connectedContacts; + } + + public void removeLinkTo(Contact contact2) + { + this.connectedContacts.remove(contact2); + contact2.getConnectedDataNodes().remove(this); + if(dataGridID!=-1) + { + IHLMod.datanet.splitGrids(dataGridID); + } + if(dataGridID!=-1) + { + for(IDataNode contact3:IHLMod.datanet.getGrid(dataGridID).telist) + { + contact3.checkAttachedSlots(); + } + } + else + { + this.checkAttachedSlots(); + } + if(contact2.getDataGridID()!=-1) + { + for(IDataNode contact3:IHLMod.datanet.getGrid(contact2.getDataGridID()).telist) + { + contact3.checkAttachedSlots(); + } + } + else + { + contact2.checkAttachedSlots(); + } + + } + + public void removeConnections(Contact[] contacts) + { + if(this.dataGridID!=-1) + { + this.connectedContacts.removeAll(Arrays.asList(contacts)); + IHLMod.datanet.splitGrids(dataGridID); + } + } + + public void establishLink(Contact contact) + { + this.connectedContacts.add(contact); + contact.getConnectedDataNodes().add(this); + if(dataGridID!=contact.getDataGridID() || dataGridID==-1 || contact.getDataGridID()==-1) + { + int newDataGridID = IHLMod.datanet.mergeGrids(dataGridID,contact.getDataGridID()); + if(this.dataGridID==-1) + { + this.setDataGrid(newDataGridID); + } + if(contact.getDataGridID()==-1) + { + contact.setDataGrid(newDataGridID); + } + for(IDataNode contact2:IHLMod.datanet.getGrid(newDataGridID).telist) + { + contact2.checkAttachedSlots(); + } + } + } + + public void writeToNBT(NBTTagCompound nbt) + { + nbt.setInteger("dataGridID", dataGridID); + NBTTagList connections = new NBTTagList(); + for(IDataNode contact1:this.connectedContacts) + { + NBTTagCompound contactNBT = new NBTTagCompound(); + contactNBT.setInteger("x", contact1.getXPos()); + contactNBT.setInteger("y", contact1.getYPos()); + contactNBT.setInteger("z", contact1.getZPos()); + contactNBT.setInteger("innerId", contact1.getInnerId()); + connections.appendTag(contactNBT); + } + nbt.setTag("connections"+innerId, connections); + } + + public void readFromNBT(NBTTagCompound nbt) + { + this.setDataGrid(nbt.getInteger("dataGridID")); + NBTTagList connections = nbt.getTagList("connections"+innerId, 10); + for(int i=0;i