mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-19 12:17:17 -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 = {
|
override def dispose(): Unit = {
|
||||||
super.dispose()
|
super.dispose()
|
||||||
if (machine != null && !this.isInstanceOf[RobotProxy]) {
|
if (machine != null && !this.isInstanceOf[RobotProxy] && !moving) {
|
||||||
machine.stop()
|
machine.stop()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,15 +1,22 @@
|
|||||||
package li.cil.oc.common.tileentity.traits
|
package li.cil.oc.common.tileentity.traits
|
||||||
|
|
||||||
|
import cpw.mods.fml.common.Optional
|
||||||
import li.cil.oc.Settings
|
import li.cil.oc.Settings
|
||||||
import li.cil.oc.api.driver
|
import li.cil.oc.api.driver
|
||||||
import li.cil.oc.api.network
|
import li.cil.oc.api.network
|
||||||
import li.cil.oc.api.network.Connector
|
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.api.network.SidedEnvironment
|
||||||
import li.cil.oc.common.EventHandler
|
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.ExtendedNBT._
|
||||||
|
import li.cil.oc.util.ExtendedWorld._
|
||||||
import net.minecraft.nbt.NBTTagCompound
|
import net.minecraft.nbt.NBTTagCompound
|
||||||
import net.minecraftforge.common.util.ForgeDirection
|
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 {
|
trait Environment extends TileEntity with network.Environment with driver.EnvironmentHost {
|
||||||
protected var isChangeScheduled = false
|
protected var isChangeScheduled = false
|
||||||
|
|
||||||
@ -43,12 +50,34 @@ trait Environment extends TileEntity with network.Environment with driver.Enviro
|
|||||||
override def dispose() {
|
override def dispose() {
|
||||||
super.dispose()
|
super.dispose()
|
||||||
if (isServer) {
|
if (isServer) {
|
||||||
Option(node).foreach(_.remove)
|
if (moving && this.isInstanceOf[Computer]) {
|
||||||
this match {
|
this match {
|
||||||
case sidedEnvironment: SidedEnvironment => for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
case env: SidedEnvironment =>
|
||||||
Option(sidedEnvironment.sidedNode(side)).foreach(_.remove())
|
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: _*)
|
protected def result(args: Any*) = li.cil.oc.util.ResultWrapper.result(args: _*)
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
package li.cil.oc.integration.appeng
|
package li.cil.oc.integration.appeng
|
||||||
|
|
||||||
|
import appeng.api.AEApi
|
||||||
import li.cil.oc.api.Driver
|
import li.cil.oc.api.Driver
|
||||||
|
import li.cil.oc.common.tileentity.Print
|
||||||
import li.cil.oc.integration.ModProxy
|
import li.cil.oc.integration.ModProxy
|
||||||
import li.cil.oc.integration.Mods
|
import li.cil.oc.integration.Mods
|
||||||
|
|
||||||
@ -8,6 +10,8 @@ object ModAppEng extends ModProxy {
|
|||||||
override def getMod = Mods.AppliedEnergistics2
|
override def getMod = Mods.AppliedEnergistics2
|
||||||
|
|
||||||
override def initialize() {
|
override def initialize() {
|
||||||
|
AEApi.instance.registries.movable.whiteListTileEntity(classOf[Print])
|
||||||
|
|
||||||
Driver.add(DriverController)
|
Driver.add(DriverController)
|
||||||
Driver.add(DriverExportBus)
|
Driver.add(DriverExportBus)
|
||||||
Driver.add(DriverImportBus)
|
Driver.add(DriverImportBus)
|
||||||
|
@ -452,7 +452,7 @@ object Network extends api.detail.NetworkAPI {
|
|||||||
case _ =>
|
case _ =>
|
||||||
}
|
}
|
||||||
|
|
||||||
private def getNetworkNode(tileEntity: TileEntity, side: ForgeDirection) =
|
def getNetworkNode(tileEntity: TileEntity, side: ForgeDirection) =
|
||||||
tileEntity match {
|
tileEntity match {
|
||||||
case host: SidedEnvironment => Option(host.sidedNode(side))
|
case host: SidedEnvironment => Option(host.sidedNode(side))
|
||||||
case host: Environment with SidedComponent =>
|
case host: Environment with SidedComponent =>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user