mirror of
https://github.com/MightyPirates/OpenComputers.git
synced 2025-09-17 11:15:12 -04:00
made fmp a soft dependency, finishes fmp implementation for cables, closes #3 (at long last!)
This commit is contained in:
parent
004a88f47a
commit
4cb5c1bf41
@ -1,5 +1,6 @@
|
||||
package li.cil.oc.common
|
||||
|
||||
import cpw.mods.fml.common.Loader
|
||||
import cpw.mods.fml.common.event._
|
||||
import cpw.mods.fml.common.network.NetworkRegistry
|
||||
import cpw.mods.fml.common.registry.{TickRegistry, GameRegistry}
|
||||
@ -19,7 +20,9 @@ class Proxy {
|
||||
|
||||
Blocks.init()
|
||||
Items.init()
|
||||
if (Loader.isModLoaded("ForgeMultipart")) {
|
||||
MultiPart.init()
|
||||
}
|
||||
|
||||
api.Driver.instance = driver.Registry
|
||||
api.FileSystem.instance = fs.FileSystem
|
||||
|
@ -1,19 +1,21 @@
|
||||
package li.cil.oc.common.block
|
||||
|
||||
import codechicken.multipart.TileMultipart
|
||||
import cpw.mods.fml.common.Loader
|
||||
import cpw.mods.fml.relauncher.{SideOnly, Side}
|
||||
import java.util
|
||||
import li.cil.oc.Settings
|
||||
import li.cil.oc.api.network.{SidedEnvironment, Environment}
|
||||
import li.cil.oc.common.multipart.CablePart
|
||||
import li.cil.oc.common.tileentity
|
||||
import li.cil.oc.util.Tooltip
|
||||
import li.cil.oc.{Settings, api}
|
||||
import net.minecraft.client.renderer.texture.IconRegister
|
||||
import net.minecraft.entity.player.EntityPlayer
|
||||
import net.minecraft.item.ItemStack
|
||||
import net.minecraft.tileentity.TileEntity
|
||||
import net.minecraft.util.{Icon, AxisAlignedBB}
|
||||
import net.minecraft.world.{IBlockAccess, World}
|
||||
import net.minecraftforge.common.ForgeDirection
|
||||
import codechicken.multipart.{TileMultipart, TMultiPart}
|
||||
import li.cil.oc.common.multipart.CablePart
|
||||
|
||||
class Cable(val parent: SpecialDelegator) extends SpecialDelegate {
|
||||
val unlocalizedName = "Cable"
|
||||
@ -86,34 +88,44 @@ object Cable {
|
||||
|
||||
def neighbors(world: IBlockAccess, x: Int, y: Int, z: Int) = {
|
||||
var result = 0
|
||||
val tileEntity = world.getBlockTileEntity(x, y, z) match {
|
||||
case multi: TileMultipart => Some(multi)
|
||||
case _ => None
|
||||
}
|
||||
val tileEntity = world.getBlockTileEntity(x, y, z)
|
||||
for (side <- ForgeDirection.VALID_DIRECTIONS) {
|
||||
if (tileEntity match {
|
||||
case Some(multi) => !multi.isSolid(side.ordinal)
|
||||
case _ => true
|
||||
}) {
|
||||
val (tx, ty, tz) = (x + side.offsetX, y + side.offsetY, z + side.offsetZ)
|
||||
if (!world.isAirBlock(tx, ty, tz)) world.getBlockTileEntity(tx, ty, tz) match {
|
||||
case robot: tileentity.RobotProxy =>
|
||||
case host: SidedEnvironment =>
|
||||
val connects = if (host.getWorldObj.isRemote) host.canConnect(side.getOpposite) else host.sidedNode(side.getOpposite) != null
|
||||
if (connects) {
|
||||
if (!world.isAirBlock(tx, ty, tz)) {
|
||||
val neighborTileEntity = world.getBlockTileEntity(tx, ty, tz)
|
||||
val neighborHasNode = hasNetworkNode(neighborTileEntity, side.getOpposite)
|
||||
val canConnect = !Loader.isModLoaded("ForgeMultipart") ||
|
||||
(canConnectFromSide(tileEntity, side) && canConnectFromSide(neighborTileEntity, side.getOpposite))
|
||||
if (neighborHasNode && canConnect) {
|
||||
result |= side.flag
|
||||
}
|
||||
case host: Environment => result |= side.flag
|
||||
case multi: TileMultipart =>
|
||||
if (multi.partList.exists(_.isInstanceOf[CablePart]) &&
|
||||
!multi.isSolid(side.getOpposite.ordinal))
|
||||
result |= side.flag
|
||||
case _ =>
|
||||
}
|
||||
}
|
||||
}
|
||||
result
|
||||
}
|
||||
|
||||
def bounds(world: IBlockAccess, x: Int, y: Int, z: Int) = Cable.cachedBounds(Cable.neighbors(world, x, y, z)).copy()
|
||||
|
||||
private def hasNetworkNode(tileEntity: TileEntity, side: ForgeDirection) =
|
||||
tileEntity match {
|
||||
case robot: tileentity.RobotProxy => false
|
||||
case host: SidedEnvironment =>
|
||||
if (host.getWorldObj.isRemote) host.canConnect(side)
|
||||
else host.sidedNode(side) != null
|
||||
case host: Environment => true
|
||||
case host if Loader.isModLoaded("ForgeMultipart") => hasMultiPartNode(tileEntity)
|
||||
case _ => false
|
||||
}
|
||||
|
||||
private def hasMultiPartNode(tileEntity: TileEntity) =
|
||||
tileEntity match {
|
||||
case host: TileMultipart => host.partList.exists(_.isInstanceOf[CablePart])
|
||||
case _ => false
|
||||
}
|
||||
|
||||
private def canConnectFromSide(tileEntity: TileEntity, side: ForgeDirection) =
|
||||
tileEntity match {
|
||||
case host: TileMultipart => !host.isSolid(side.ordinal)
|
||||
case _ => true
|
||||
}
|
||||
}
|
@ -1,7 +1,7 @@
|
||||
package li.cil.oc.server.network
|
||||
|
||||
import codechicken.multipart.TileMultipart
|
||||
import cpw.mods.fml.common.FMLCommonHandler
|
||||
import cpw.mods.fml.common.{Loader, FMLCommonHandler}
|
||||
import cpw.mods.fml.relauncher.Side
|
||||
import li.cil.oc.api.network.{Node => ImmutableNode, SidedEnvironment, Environment, Visibility}
|
||||
import li.cil.oc.common.multipart.CablePart
|
||||
@ -395,7 +395,9 @@ object Network extends api.detail.NetworkAPI {
|
||||
case Some(node: MutableNode) =>
|
||||
neighborNode match {
|
||||
case Some(neighbor: MutableNode) if neighbor != node && neighbor.network != null =>
|
||||
if (canConnectFromSide(tileEntity, side) && canConnectFromSide(neighborTileEntity, side.getOpposite)) neighbor.connect(node)
|
||||
val canConnect = !Loader.isModLoaded("ForgeMultipart") ||
|
||||
(canConnectFromSide(tileEntity, side) && canConnectFromSide(neighborTileEntity, side.getOpposite))
|
||||
if (canConnect) neighbor.connect(node)
|
||||
else node.disconnect(neighbor)
|
||||
case _ =>
|
||||
}
|
||||
@ -417,6 +419,12 @@ object Network extends api.detail.NetworkAPI {
|
||||
tileEntity match {
|
||||
case host: SidedEnvironment => Option(host.sidedNode(side))
|
||||
case host: Environment => Some(host.node)
|
||||
case host if Loader.isModLoaded("ForgeMultipart") => getMultiPartNode(host)
|
||||
case _ => None
|
||||
}
|
||||
|
||||
private def getMultiPartNode(tileEntity: TileEntity) =
|
||||
tileEntity match {
|
||||
case host: TileMultipart => host.partList.find(_.isInstanceOf[CablePart]) match {
|
||||
case Some(part: CablePart) => Some(part.node)
|
||||
case _ => None
|
||||
|
@ -14,6 +14,7 @@
|
||||
"dependencies": [
|
||||
"BuildCraft|Energy",
|
||||
"ComputerCraft",
|
||||
"ForgeMultipart",
|
||||
"IC2",
|
||||
"MineFactoryReloaded",
|
||||
"ProjRed|Transmission",
|
||||
|
Loading…
x
Reference in New Issue
Block a user