|
| 1 | +package li.cil.oc.integration.appeng |
| 2 | + |
| 3 | +import appeng.api.config.TunnelType |
| 4 | +import appeng.parts.p2p.PartP2PTunnel |
| 5 | +import cpw.mods.fml.relauncher.Side |
| 6 | +import cpw.mods.fml.relauncher.SideOnly |
| 7 | +import li.cil.oc.api |
| 8 | +import li.cil.oc.api.network._ |
| 9 | +import li.cil.oc.common.EventHandler |
| 10 | +import net.minecraft.item.ItemStack |
| 11 | +import net.minecraft.nbt.NBTTagCompound |
| 12 | +import net.minecraftforge.common.util.ForgeDirection |
| 13 | + |
| 14 | +class PartP2POCNode(stack: ItemStack) extends PartP2PTunnel[PartP2POCNode](stack) with Environment with SidedEnvironment { |
| 15 | + val node = api.Network.newNode(this, Visibility.None).create() |
| 16 | + api.Network.joinNewNetwork(node) |
| 17 | + |
| 18 | + var input: Option[Node] = None |
| 19 | + |
| 20 | + // ----------------------------------------------------------------------- // |
| 21 | + |
| 22 | + override def onConnect(node: Node) {} |
| 23 | + |
| 24 | + override def onMessage(message: Message) {} |
| 25 | + |
| 26 | + override def onDisconnect(node: Node) {} |
| 27 | + |
| 28 | + override def sidedNode(side: ForgeDirection) = if (proxy.isActive) node else null |
| 29 | + |
| 30 | + @SideOnly(Side.CLIENT) |
| 31 | + override def canConnect(side: ForgeDirection) = true |
| 32 | + |
| 33 | + // ----------------------------------------------------------------------- // |
| 34 | + |
| 35 | + // TODO Never called, might as well return null. May have to, if enum gets removed. |
| 36 | + override def getTunnelType = TunnelType.COMPUTER_MESSAGE |
| 37 | + |
| 38 | + @SideOnly(Side.CLIENT) |
| 39 | + override def getTypeTexture = api.Items.get("adapter").block().getIcon(2, 0) |
| 40 | + |
| 41 | + // ----------------------------------------------------------------------- // |
| 42 | + |
| 43 | + override def onTunnelNetworkChange() { |
| 44 | + super.onTunnelNetworkChange() |
| 45 | + if (node != null) { |
| 46 | + input.foreach(in => if (in != node) node.disconnect(in)) |
| 47 | + input = None |
| 48 | + if (output) { |
| 49 | + Option(getInput) match { |
| 50 | + case Some(part) => |
| 51 | + input = Option(part.node) |
| 52 | + input.foreach(node.connect) |
| 53 | + case _ => |
| 54 | + } |
| 55 | + } |
| 56 | + } |
| 57 | + } |
| 58 | + |
| 59 | + override def addToWorld() { |
| 60 | + super.addToWorld() |
| 61 | + EventHandler.schedule(() => api.Network.joinOrCreateNetwork(getHost.getTile)) |
| 62 | + } |
| 63 | + |
| 64 | + override def removeFromWorld() { |
| 65 | + super.removeFromWorld() |
| 66 | + if (node != null) node.remove() |
| 67 | + } |
| 68 | + |
| 69 | + // ----------------------------------------------------------------------- // |
| 70 | + |
| 71 | + override def readFromNBT(data: NBTTagCompound) { |
| 72 | + super.readFromNBT(data) |
| 73 | + node.load(data) |
| 74 | + } |
| 75 | + |
| 76 | + override def writeToNBT(data: NBTTagCompound) { |
| 77 | + super.writeToNBT(data) |
| 78 | + node.save(data) |
| 79 | + } |
| 80 | +} |
0 commit comments