From 823c9903a9b2308bb0f6588cc956a2b29b0def06 Mon Sep 17 00:00:00 2001 From: DrummerMC Date: Thu, 23 Nov 2017 23:48:15 +0100 Subject: [PATCH] Add ExtraCells and Mekanism integration (#2629) --- build.gradle | 20 +++++++++++++------ build.properties | 6 ++++-- .../scala/li/cil/oc/integration/Mods.scala | 8 ++++---- .../integration/appeng/NetworkControl.scala | 4 +++- .../integration/ec/DriverBlockInterface.scala | 17 +++++++++++----- .../oc/integration/ec/DriverController.scala | 13 +++++++----- .../oc/integration/ec/NetworkControl.scala | 8 +++++--- .../mekanism/EventHandlerMekanism.scala | 8 +++++--- 8 files changed, 55 insertions(+), 29 deletions(-) diff --git a/build.gradle b/build.gradle index 5c88b93f3..81da15838 100644 --- a/build.gradle +++ b/build.gradle @@ -141,10 +141,12 @@ repositories { name 'Galacticraft' artifactPattern "http://ci.cil.li/job/Galacticraft/${config.gc.build}/artifact/build/libs/[module]-1.7-[revision].${config.gc.build}.[ext]" } + */ ivy { name 'Mekanism' - artifactPattern "http://ci.cil.li/job/Mekanism/${config.mekanism.build}/artifact/output/[module]-${config.minecraft.version}-[revision].${config.mekanism.build}.[ext]" + artifactPattern "http://addons-origin.cursecdn.com/files/${config.mekanism.cf}/[module]-[revision].[ext]" } + /* ivy { name 'immibis' artifactPattern "https://dl.dropboxusercontent.com/u/2944265/mods/autobuilt/files/[module]-[revision].[ext]" @@ -169,10 +171,12 @@ repositories { name 'BloodMagic' artifactPattern "http://addons-origin.cursecdn.com/files/${config.bloodmagic.cf}/[module]-${config.minecraft.version}-[revision].[ext]" } + */ ivy { name 'ExtraCells' - artifactPattern "http://addons-origin.cursecdn.com/files/${config.ec.cf}/[module]-[revision].[ext]" + artifactPattern "http://addons-origin.cursecdn.com/files/${config.extracells.cf}/[module]-[revision].[ext]" } + /* ivy { name 'ThaumicEnergistics' artifactPattern "http://addons-origin.cursecdn.com/files/${config.thaumicenergistics.cf}/[module]-[revision].[ext]" @@ -250,7 +254,9 @@ dependencies { /* provided name: 'buildcraft', version: config.bc.version, classifier: "dev", ext: 'jar' provided name: 'GalacticraftCoreAll', version: config.gc.version, ext: 'jar' - provided name: 'MekanismAll', version: config.mekanism.version, ext: 'jar' +*/ + provided name: 'Mekanism', version: config.mekanism.version, ext: 'jar' +/* provided name: 'redlogic', version: config.redlogic.version, ext: 'jar' provided name: 'CoFHLib', version: config.cofhlib.version, ext: 'jar' @@ -258,7 +264,9 @@ dependencies { provided name: 'MineFactoryReloaded', version: config.mfr.version, ext: 'jar' provided name: 'Railcraft', version: config.rc.version, ext: 'jar' provided name: 'BloodMagic', version: config.bloodmagic.version, ext: 'jar' - provided name: 'ExtraCells', version: config.ec.version, ext: 'jar' +*/ + provided name: 'ExtraCells', version: config.extracells.version, ext: 'jar' +/* provided name: 'ThaumicEnergistics', version: config.thaumicenergistics.version, ext: 'jar' provided "cyano.poweradvantage:PowerAdvantage-API:${config.poweradvantage.version}" */ @@ -291,13 +299,13 @@ sourceSets { exclude 'li/cil/oc/integration/cofh/**' //exclude 'li/cil/oc/integration/computercraft/**' exclude 'li/cil/oc/integration/dsu/**' - exclude 'li/cil/oc/integration/ec/**' + //exclude 'li/cil/oc/integration/ec/**' //exclude 'li/cil/oc/integration/enderio/**' //exclude 'li/cil/oc/integration/enderstorage/**' exclude 'li/cil/oc/integration/fmp/**' exclude 'li/cil/oc/integration/gc/**' exclude 'li/cil/oc/integration/gregtech/**' - exclude 'li/cil/oc/integration/mekanism/**' + //exclude 'li/cil/oc/integration/mekanism/**' exclude 'li/cil/oc/integration/mfr/**' exclude 'li/cil/oc/integration/mystcraft/**' exclude 'li/cil/oc/integration/nei/**' diff --git a/build.properties b/build.properties index ec39ead3c..cb83847ce 100644 --- a/build.properties +++ b/build.properties @@ -19,6 +19,8 @@ coloredlights.build=35 ec.version=1.10.2-0.4.1.58-beta eio.version=1.10.2-3.0.1.132_beta es.version=2.2.1.106 +extracells.cf=2499/811 +extracells.version=1.10.2-2.4.2a9 fmp.version=1.1.0.308 forestry.version=5.2.17.376 gc.build=3 @@ -28,8 +30,8 @@ ic2.version=2.6.69-ex110 igwmod.version=1.3.0-5 jei.version=3.14.4.404 mcmp.version=1.2.0_70 -mekanism.build=5 -mekanism.version=7.1.2 +mekanism.cf=2475/800 +mekanism.version=1.10.2-9.2.4.103 mfr.cf=2229/626 mfr.version=[1.7.10]2.8.0RC8-86 nei.version=2.0.1.132 diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 3c9024b40..96f978799 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -40,7 +40,7 @@ object Mods { val ElectricalAge = new SimpleMod(IDs.ElectricalAge) val EnderIO = new SimpleMod(IDs.EnderIO, version = "@[1.10.2-3.0.1.132,)") val EnderStorage = new SimpleMod(IDs.EnderStorage) - val ExtraCells = new SimpleMod(IDs.ExtraCells, version = "@[2.2.73,)") + val ExtraCells = new SimpleMod(IDs.ExtraCells) val Factorization = new SimpleMod(IDs.Factorization) val Forestry = new SimpleMod(IDs.Forestry, version = "@[5.2,)") val Forge = new SimpleMod(IDs.Forge) @@ -106,7 +106,7 @@ object Mods { // integration.cofh.item.ModCoFHItem, // integration.cofh.tileentity.ModCoFHTileEntity, // integration.cofh.transport.ModCoFHTransport, - // integration.ec.ModExtraCells, + integration.ec.ModExtraCells, integration.enderio.ModEnderIO, integration.enderstorage.ModEnderStorage, // integration.dsu.ModDeepStorageUnit, @@ -116,8 +116,8 @@ object Mods { // integration.gregtech.ModGregtech, integration.ic2.ModIndustrialCraft2, integration.mcmp.ModMCMultiPart, - // integration.mekanism.ModMekanism, - // integration.mekanism.gas.ModMekanismGas, + integration.mekanism.ModMekanism, + integration.mekanism.gas.ModMekanismGas, // integration.mfr.ModMineFactoryReloaded, integration.minecraftforge.ModMinecraftForge, // integration.mystcraft.ModMystcraft, diff --git a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala index 7e066fd38..f6b26d780 100644 --- a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala +++ b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala @@ -15,6 +15,8 @@ import li.cil.oc.api.machine.Context import li.cil.oc.api.network.Node import li.cil.oc.api.prefab.AbstractValue import li.cil.oc.common.EventHandler +import li.cil.oc.integration.Mods +import li.cil.oc.integration.ec.ECUtil import li.cil.oc.util.DatabaseAccess import li.cil.oc.util.ExtendedArguments._ import li.cil.oc.util.ExtendedNBT._ @@ -96,7 +98,7 @@ trait NetworkControl[AETile >: Null <: TileEntity with IActionHost] { @Callback(doc = "function():table -- Get a list of the stored fluids in the network.") def getFluidsInNetwork(context: Context, args: Arguments): Array[AnyRef] = result(AEUtil.getGridStorage(tile.getGridNode(pos).getGrid).getFluidInventory.getStorageList.filter(stack => - stack != null). + stack != null && (!Mods.ExtraCells.isModAvailable || ECUtil.canSeeFluidInNetwork(stack))). map(_.getFluidStack).toArray) @Callback(doc = "function():number -- Get the average power injection into the network.") diff --git a/src/main/scala/li/cil/oc/integration/ec/DriverBlockInterface.scala b/src/main/scala/li/cil/oc/integration/ec/DriverBlockInterface.scala index 2eaca1860..d4581bee4 100644 --- a/src/main/scala/li/cil/oc/integration/ec/DriverBlockInterface.scala +++ b/src/main/scala/li/cil/oc/integration/ec/DriverBlockInterface.scala @@ -1,22 +1,29 @@ package li.cil.oc.integration.ec -import appeng.tile.misc.TileInterface + +import appeng.api.implementations.tiles.ISegmentedInventory +import appeng.api.networking.security.IActionHost +import appeng.api.util.AEPartLocation import li.cil.oc.api.driver.EnvironmentProvider import li.cil.oc.api.network.ManagedEnvironment import li.cil.oc.api.prefab.DriverSidedTileEntity import li.cil.oc.integration.ManagedTileEntityEnvironment import li.cil.oc.integration.appeng.AEUtil import net.minecraft.item.ItemStack +import net.minecraft.tileentity.TileEntity import net.minecraft.util.EnumFacing +import net.minecraft.util.math.BlockPos import net.minecraft.world.World object DriverBlockInterface extends DriverSidedTileEntity { - def getTileEntityClass: Class[_] = classOf[TileInterface] + def getTileEntityClass: Class[_] = AEUtil.interfaceClass - def createEnvironment(world: World, x: Int, y: Int, z: Int, side: EnumFacing): ManagedEnvironment = - new Environment(world.getTileEntity(x, y, z).asInstanceOf[TileInterface]) + def createEnvironment(world: World, pos: BlockPos, side: EnumFacing): ManagedEnvironment = + new Environment(world.getTileEntity(pos).asInstanceOf[TileEntity with ISegmentedInventory with IActionHost]) - final class Environment(val tile: TileInterface) extends ManagedTileEntityEnvironment[TileInterface](tile, "me_interface") with NetworkControl[TileInterface] + final class Environment(val tile: TileEntity with ISegmentedInventory with IActionHost) extends ManagedTileEntityEnvironment[TileEntity with ISegmentedInventory with IActionHost](tile, "me_interface") with NetworkControl[TileEntity with ISegmentedInventory with IActionHost]{ + override def pos: AEPartLocation = AEPartLocation.INTERNAL + } object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = diff --git a/src/main/scala/li/cil/oc/integration/ec/DriverController.scala b/src/main/scala/li/cil/oc/integration/ec/DriverController.scala index 93738a377..1a11c244f 100644 --- a/src/main/scala/li/cil/oc/integration/ec/DriverController.scala +++ b/src/main/scala/li/cil/oc/integration/ec/DriverController.scala @@ -1,7 +1,7 @@ package li.cil.oc.integration.ec import appeng.api.networking.security.IActionHost -import appeng.me.helpers.IGridProxyable +import appeng.api.util.AEPartLocation import li.cil.oc.api.driver.EnvironmentProvider import li.cil.oc.api.network.ManagedEnvironment import li.cil.oc.api.prefab.DriverSidedTileEntity @@ -10,19 +10,22 @@ import li.cil.oc.integration.appeng.AEUtil import net.minecraft.item.ItemStack import net.minecraft.tileentity.TileEntity import net.minecraft.util.EnumFacing +import net.minecraft.util.math.BlockPos import net.minecraft.world.World import scala.language.existentials object DriverController extends DriverSidedTileEntity { - private type TileController = TileEntity with IGridProxyable with IActionHost + private type TileController = TileEntity with IActionHost def getTileEntityClass = AEUtil.controllerClass - def createEnvironment(world: World, x: Int, y: Int, z: Int, side: EnumFacing): ManagedEnvironment = - new Environment(world.getTileEntity(x, y, z).asInstanceOf[TileController]) + def createEnvironment(world: World, pos: BlockPos, side: EnumFacing): ManagedEnvironment = + new Environment(world.getTileEntity(pos).asInstanceOf[TileController]) - final class Environment(val tile: TileController) extends ManagedTileEntityEnvironment[TileController](tile, "me_controller") with NetworkControl[TileController] + final class Environment(val tile: TileController) extends ManagedTileEntityEnvironment[TileController](tile, "me_controller") with NetworkControl[TileController]{ + override def pos: AEPartLocation = AEPartLocation.INTERNAL + } object Provider extends EnvironmentProvider { override def getEnvironment(stack: ItemStack): Class[_] = diff --git a/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala b/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala index 540bed796..be52b43f2 100644 --- a/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala +++ b/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala @@ -1,23 +1,25 @@ package li.cil.oc.integration.ec import appeng.api.networking.security.IActionHost -import appeng.me.helpers.IGridProxyable +import appeng.api.util.AEPartLocation import extracells.api.ECApi import li.cil.oc.api.machine.Arguments import li.cil.oc.api.machine.Callback import li.cil.oc.api.machine.Context +import li.cil.oc.integration.appeng.AEUtil import li.cil.oc.util.ResultWrapper._ import net.minecraft.tileentity.TileEntity import scala.collection.convert.WrapAsScala._ // Note to self: this class is used by ExtraCells (and potentially others), do not rename / drastically change it. -trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActionHost] { +trait NetworkControl[AETile >: Null <: TileEntity with IActionHost] { def tile: AETile + def pos: AEPartLocation @Callback(doc = "function():table -- Get a list of the stored gases in the network.") def getGasesInNetwork(context: Context, args: Arguments): Array[AnyRef] = - result(tile.getProxy.getStorage.getFluidInventory.getStorageList.filter(stack => + result(AEUtil.getGridStorage(tile.getGridNode(pos).getGrid).getFluidInventory.getStorageList.filter(stack => ECApi.instance.isGasStack(stack)). map(ECApi.instance.createGasStack).toArray) } diff --git a/src/main/scala/li/cil/oc/integration/mekanism/EventHandlerMekanism.scala b/src/main/scala/li/cil/oc/integration/mekanism/EventHandlerMekanism.scala index bb3ced079..b15ec865f 100644 --- a/src/main/scala/li/cil/oc/integration/mekanism/EventHandlerMekanism.scala +++ b/src/main/scala/li/cil/oc/integration/mekanism/EventHandlerMekanism.scala @@ -3,11 +3,13 @@ package li.cil.oc.integration.mekanism import mekanism.api.IMekWrench import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack +import net.minecraft.util.EnumHand +import net.minecraft.util.math.BlockPos object EventHandlerMekanism { - def useWrench(player: EntityPlayer, x: Int, y: Int, z: Int, changeDurability: Boolean): Boolean = { - player.getHeldItem.getItem match { - case wrench: IMekWrench => wrench.canUseWrench(player, x, y, z) + def useWrench(player: EntityPlayer, pos: BlockPos, changeDurability: Boolean): Boolean = { + player.getHeldItem(EnumHand.MAIN_HAND).getItem match { + case wrench: IMekWrench => wrench.canUseWrench(player.getHeldItem(EnumHand.MAIN_HAND), player, pos) case _ => false } }