mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-18 11:48:02 -04:00
Added support for AE2's spatial I/O (i.e. moving computers etc. into spatial storage cells).
Somewhat hacky, to avoid computers resetting, but seems to work.
This commit is contained in:
parent
5413a2a320
commit
eee133dfed
@ -128,7 +128,7 @@ trait Computer extends Environment with ComponentInventory with Rotatable with B
|
||||
|
||||
override def dispose(): Unit = {
|
||||
super.dispose()
|
||||
if (machine != null && !this.isInstanceOf[RobotProxy]) {
|
||||
if (machine != null && !this.isInstanceOf[RobotProxy] && !moving) {
|
||||
machine.stop()
|
||||
}
|
||||
}
|
||||
|
@ -1,15 +1,22 @@
|
||||
package li.cil.oc.common.tileentity.traits
|
||||
|
||||
import cpw.mods.fml.common.Optional
|
||||
import li.cil.oc.Settings
|
||||
import li.cil.oc.api.driver
|
||||
import li.cil.oc.api.network
|
||||
import li.cil.oc.api.network.Connector
|
||||
import li.cil.oc.api.network.Node
|
||||
import li.cil.oc.api.network.SidedEnvironment
|
||||
import li.cil.oc.common.EventHandler
|
||||
import li.cil.oc.common.asm.Injectable
|
||||
import li.cil.oc.integration.Mods
|
||||
import li.cil.oc.server.network.Network
|
||||
import li.cil.oc.util.ExtendedNBT._
|
||||
import li.cil.oc.util.ExtendedWorld._
|
||||
import net.minecraft.nbt.NBTTagCompound
|
||||
import net.minecraftforge.common.util.ForgeDirection
|
||||
|
||||
@Injectable.Interface(value = "appeng.api.movable.IMovableTile", modid = Mods.IDs.AppliedEnergistics2)
|
||||
trait Environment extends TileEntity with network.Environment with driver.EnvironmentHost {
|
||||
protected var isChangeScheduled = false
|
||||
|
||||
@ -43,12 +50,34 @@ trait Environment extends TileEntity with network.Environment with driver.Enviro
|
||||
override def dispose() {
|
||||
super.dispose()
|
||||
if (isServer) {
|
||||
Option(node).foreach(_.remove)
|
||||
this match {
|
||||
case sidedEnvironment: SidedEnvironment => for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
||||
Option(sidedEnvironment.sidedNode(side)).foreach(_.remove())
|
||||
if (moving && this.isInstanceOf[Computer]) {
|
||||
this match {
|
||||
case env: SidedEnvironment =>
|
||||
for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
||||
val npos = position.offset(side)
|
||||
Network.getNetworkNode(world.getTileEntity(npos), side.getOpposite) match {
|
||||
case neighbor: Node if env.sidedNode(side) != null => env.sidedNode(side).disconnect(neighbor)
|
||||
case _ => // No neighbor node.
|
||||
}
|
||||
}
|
||||
case env =>
|
||||
for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
||||
val npos = position.offset(side)
|
||||
Network.getNetworkNode(world.getTileEntity(npos), side.getOpposite) match {
|
||||
case neighbor: Node if env.node != null => env.node.disconnect(neighbor)
|
||||
case _ => // No neighbor node.
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
Option(node).foreach(_.remove)
|
||||
this match {
|
||||
case sidedEnvironment: SidedEnvironment => for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
||||
Option(sidedEnvironment.sidedNode(side)).foreach(_.remove())
|
||||
}
|
||||
case _ =>
|
||||
}
|
||||
case _ =>
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -84,5 +113,22 @@ trait Environment extends TileEntity with network.Environment with driver.Enviro
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
protected var moving = false
|
||||
|
||||
@Optional.Method(modid = Mods.IDs.AppliedEnergistics2)
|
||||
def prepareToMove(): Boolean = {
|
||||
moving = true
|
||||
true
|
||||
}
|
||||
|
||||
@Optional.Method(modid = Mods.IDs.AppliedEnergistics2)
|
||||
def doneMoving(): Unit = {
|
||||
moving = false
|
||||
Network.joinOrCreateNetwork(this)
|
||||
world.markBlockForUpdate(x, y, z)
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------- //
|
||||
|
||||
protected def result(args: Any*) = li.cil.oc.util.ResultWrapper.result(args: _*)
|
||||
}
|
||||
|
@ -1,6 +1,8 @@
|
||||
package li.cil.oc.integration.appeng
|
||||
|
||||
import appeng.api.AEApi
|
||||
import li.cil.oc.api.Driver
|
||||
import li.cil.oc.common.tileentity.Print
|
||||
import li.cil.oc.integration.ModProxy
|
||||
import li.cil.oc.integration.Mods
|
||||
|
||||
@ -8,6 +10,8 @@ object ModAppEng extends ModProxy {
|
||||
override def getMod = Mods.AppliedEnergistics2
|
||||
|
||||
override def initialize() {
|
||||
AEApi.instance.registries.movable.whiteListTileEntity(classOf[Print])
|
||||
|
||||
Driver.add(DriverController)
|
||||
Driver.add(DriverExportBus)
|
||||
Driver.add(DriverImportBus)
|
||||
|
@ -452,7 +452,7 @@ object Network extends api.detail.NetworkAPI {
|
||||
case _ =>
|
||||
}
|
||||
|
||||
private def getNetworkNode(tileEntity: TileEntity, side: ForgeDirection) =
|
||||
def getNetworkNode(tileEntity: TileEntity, side: ForgeDirection) =
|
||||
tileEntity match {
|
||||
case host: SidedEnvironment => Option(host.sidedNode(side))
|
||||
case host: Environment with SidedComponent =>
|
||||
|
Loading…
x
Reference in New Issue
Block a user