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/RedstoneSignalConverterTileEntity.java | 511 +++++++++++++++++++++ 1 file changed, 511 insertions(+) create mode 100644 ihl/datanet/RedstoneSignalConverterTileEntity.java (limited to 'ihl/datanet/RedstoneSignalConverterTileEntity.java') diff --git a/ihl/datanet/RedstoneSignalConverterTileEntity.java b/ihl/datanet/RedstoneSignalConverterTileEntity.java new file mode 100644 index 0000000..de1a4f7 --- /dev/null +++ b/ihl/datanet/RedstoneSignalConverterTileEntity.java @@ -0,0 +1,511 @@ +package ihl.datanet; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.Iterator; +import java.util.List; +import java.util.Set; + +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.entity.EntityLivingBase; +import net.minecraft.entity.item.EntityItem; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.ItemStack; +import net.minecraft.nbt.NBTTagCompound; +import net.minecraft.nbt.NBTTagList; +import net.minecraft.server.MinecraftServer; +import net.minecraft.tileentity.TileEntity; +import net.minecraft.util.AxisAlignedBB; +import net.minecraftforge.common.util.ForgeDirection; +import ic2.api.network.INetworkClientTileEntityEventListener; +import ic2.core.ContainerBase; +import ic2.core.IC2; +import ic2.core.IHasGui; +import ic2.core.Ic2Items; +import ic2.core.block.TileEntityInventory; +import ic2.core.block.invslot.InvSlot.Access; +import ic2.core.network.NetworkManager; +import ihl.IHLMod; +import ihl.flexible_cable.NodeEntity; +import ihl.interfaces.IDataCableHolder; +import ihl.interfaces.IDataNode; +import ihl.processing.invslots.InvSlotSignalProcessor; +import ihl.utils.IHLInvSlotDischarge; +import ihl.utils.IHLUtils; + +public class RedstoneSignalConverterTileEntity extends TileEntityInventory implements IDataCableHolder, INetworkClientTileEntityEventListener, IHasGui{ + + public final InvSlotSignalProcessor sensorEmitterSlots; + public final List cableList; + public final IHLInvSlotDischarge dischargeSlot; + public final List links = new ArrayList();//Short has 16 bits + public int prevButtonPressed=-1; + public short energy=0; + public final static short maxEnergy=Short.MAX_VALUE; + private int tick=0; + public boolean linksOrInventoryChanged=false; + private int inventoryCheckSum=0; + public final Contact[] contacts = new Contact[68]; + private NBTTagCompound nbtread; + public boolean checkcableList=true; + public short cablesAmount=0; + + /*Contacts is: + * 0 - battery slot plus + * 1 - battery slot minus + * 2-7 sensors/emitters plus + * 8-13 sensors/emitters minus + * 14-49 cableList + */ + + public RedstoneSignalConverterTileEntity() + { + sensorEmitterSlots = new InvSlotSignalProcessor(this, "sensorEmitterSlots", 0, Access.IO, 6, 2); + cableList = new ArrayList(); + dischargeSlot = new IHLInvSlotDischarge(this, 2, Access.IO, 4); + contacts[0]=new Contact(this,0,null,-1,0); + contacts[1]=new Contact(this,1,null,-1,1); + for(int i1=2;i1<8;i1++) + { + contacts[i1]=new Contact(this,i1, sensorEmitterSlots,i1-2,0); + } + for(int i1=8;i1<14;i1++) + { + sensorEmitterSlots.setStackSizeLimit(1); + contacts[i1]=new Contact(this,i1, sensorEmitterSlots,i1-8,1); + } + for(int i1=14;i1<50;i1++) + { + contacts[i1]=new Contact(this,i1,null, -1, -1); + } + for(int i1=50;i1<56;i1++) + { + contacts[i1]=new Contact(this,i1, sensorEmitterSlots,i1-50,2); + } + for(int i1=56;i1<62;i1++) + { + contacts[i1]=new Contact(this,i1, sensorEmitterSlots,i1-56,3); + } + for(int i1=62;i1<68;i1++) + { + contacts[i1]=new Contact(this,i1, sensorEmitterSlots,i1-02,4); + } + } + + @Override + public boolean wrenchCanRemove(EntityPlayer var1) + { + return this.cableList.isEmpty(); + } + + @Override + public void setFacing(short facing) + { + this.removeAttachedChains(); + } + + @Override + public void onLoaded() + { + super.onLoaded(); + if (IC2.platform.isSimulating()) + { + IC2.network.get().updateTileEntityField(this, "sensorEmitterSlots"); + if(nbtread!=null) + { + for(Contact contact1:contacts) + { + contact1.readFromNBT(nbtread); + } + } + nbtread=null; + } + } + + @Override + public List getNetworkedFields() + { + List fields = super.getNetworkedFields(); + fields.add("sensorEmitterSlots"); + return fields; + } + + @Override + public void updateEntityClient() + { + int checkSum=0; + for(int i=0;i0) + { + Set checkedGrids = new HashSet(); + Set unCheckedGrids = new HashSet(); + InvSlotSignalProcessor slots = this.sensorEmitterSlots; + for(int i=0;i ugi = unCheckedGrids.iterator(); + while(!unCheckedGrids.isEmpty()) + { + Integer dgid2 = ugi.next(); + ugi.remove(); + { + for(IDataNode contact3:IHLMod.datanet.getGrid(dgid2).telist) + { + contact3.checkAttachedSlots(); + if(contact3.getAttachedSlot()!=null) + { + Contact c4 = contact3.getAttachedSlot().getOppositeContact(contact3); + if(!checkedGrids.contains(c4.getDataGridID())) + { + unCheckedGrids.add(c4.getDataGridID()); + } + } + } + checkedGrids.add(dgid2); + } + } + this.linksOrInventoryChanged=false; + } + if(this.energy < 1) + { + this.energy += (short)(this.dischargeSlot.discharge(getDemandedEnergy(), false)*256D); + } + if(tick++ % 256==0) + { + this.energy--; + } + } + + @Override + public String getInventoryName() + { + return "redstoneSignalConverter"; + } + @Override + public boolean addDataCable(NBTTagCompound cable) + { + if(this.cableList.size()<4) + { + this.cableList.add(cable); + return true; + } + return false; + } + + + @Override + public double[] getPortPos(EntityLivingBase player) + { + ForgeDirection direction = ForgeDirection.getOrientation(IHLUtils.getFacingFromPlayerView(player, true)).getOpposite(); + return new double[] {this.xCoord+0.5d+0.5d*direction.offsetX,this.yCoord+direction.offsetY*1.0d,this.zCoord+0.5d+0.5d*direction.offsetZ}; + } + + @Override + public void onNetworkEvent(EntityPlayer player, int event) + { + if(prevButtonPressed==-1 && event < 255) + { + prevButtonPressed = event; + } + else if(prevButtonPressed!=event && event < 255) + { + int minor = Math.min(prevButtonPressed,event); + int major = Math.max(prevButtonPressed,event); + int link = ((minor<<8) | major); + this.links.add(link); + contacts[prevButtonPressed].establishLink(contacts[event]); + prevButtonPressed=-1; + } + else if(event==256 && !this.links.isEmpty()) + { + int link = this.links.remove(this.links.size()-1); + Contact contact1 = this.contacts[link >> 8]; + Contact contact2 = this.contacts[link & 255]; + contact1.removeLinkTo(contact2); + } + else if(event==257 && !this.links.isEmpty()) + { + this.links.clear(); + for(Contact contact1:contacts) + { + contact1.removeConnections(contacts); + } + } + } + + @Override + public void writeToNBT(NBTTagCompound nbt) + { + super.writeToNBT(nbt); + for(Contact contact1:contacts) + { + contact1.writeToNBT(nbt); + } + if (!links.isEmpty()) + { + NBTTagList linkList1 = new NBTTagList(); + Iterator fli = links.iterator(); + while(fli.hasNext()) + { + Integer link = fli.next(); + if(link!=null) + { + NBTTagCompound linkNBT1 = new NBTTagCompound(); + linkNBT1.setInteger("link", link); + linkList1.appendTag(linkNBT1); + } + } + nbt.setTag("links", linkList1); + } + else + { + nbt.setString("Empty", ""); + } + NBTTagList cableNBTList = new NBTTagList(); + for(NBTTagCompound cable:this.cableList) + { + cableNBTList.appendTag(cable); + } + nbt.setTag("cableList", cableNBTList); + nbt.setBoolean("checkcableList", this.checkcableList); + } + + @Override + public void readFromNBT(NBTTagCompound nbt) + { + super.readFromNBT(nbt); + NBTTagList cableNBTList=nbt.getTagList("cableList", 10); + for(int i=0;i getGuiContainer(EntityPlayer player) + { + return new RedstoneSignalConverterContainer(player, this); + } + + public int getGUIEnergy(int i) + { + if(this.energy cli = cableList.iterator(); + while(cli.hasNext()) + { + NBTTagCompound cl=cli.next(); + IHLMod.datanet.removeCableEntities(cl); + ItemStack is = IHLUtils.getThisModItemStack("dataCable"); + is.stackTagCompound=cl; + double[] pps = this.getPortPos(null); + EntityItem eitem = new EntityItem(worldObj, pps[0], pps[1], pps[2], is); + worldObj.spawnEntityInWorld(eitem); + { + int chainUID = cl.getInteger("chainUID"); + int x1 = cl.getInteger("connectorX1"); + int y1 = cl.getInteger("connectorY1"); + int z1 = cl.getInteger("connectorZ1"); + int connectorDimensionId1 = cl.getInteger("connectorDimensionId1"); + int x = cl.getInteger("connectorX"); + int y = cl.getInteger("connectorY"); + int z = cl.getInteger("connectorZ"); + int connectorDimensionId = cl.getInteger("connectorDimensionId"); + if(x1!=xCoord || y1!=yCoord || z1!=zCoord) + { + x=x1; + y=y1; + z=z1; + connectorDimensionId=connectorDimensionId1; + } + TileEntity te = MinecraftServer.getServer().worldServerForDimension(connectorDimensionId).getTileEntity(x, y, z); + if(te instanceof IDataCableHolder) + { + IDataCableHolder dch = ((IDataCableHolder)te); + Contact[] c = this.getContacts(chainUID); + Contact[] c1 = dch.getContacts(chainUID); + for(int i2=0;i2 cli = cableList.iterator(); + while(cli.hasNext()) + { + NBTTagCompound cl=cli.next(); + int chainUID1 = cl.getInteger("chainUID"); + if(chainUID1==chainUID) + { + cli.remove(); + return; + } + } + } + + @Override + public Contact getContact(int innerId1) + { + return this.contacts[innerId1]; + } + + + @Override + public boolean isCableRemoved(int chainUniqueID) { + if(!checkcableList) + { + return false; + } + for(NBTTagCompound cl:cableList) + { + if(cl.getInteger("chainUID")==chainUniqueID) + { + return false; + } + } + return true; + } + + @Override + public void setCableCheck(boolean b) + { + this.checkcableList=b; + } +} -- cgit v1.2.3