From 4cf328598953bad15a8884dfd463fb1eba43d21f Mon Sep 17 00:00:00 2001 From: DrummerMC Date: Tue, 16 Jun 2015 16:01:17 +0200 Subject: [PATCH] Added EC Integration --- build.gradle | 5 +++ build.properties | 2 ++ .../scala/li/cil/oc/integration/Mods.scala | 6 ++++ .../integration/appeng/NetworkControl.scala | 9 +++++- .../oc/integration/ec/DriverController.scala | 31 +++++++++++++++++++ .../oc/integration/ec/DriverInterface.scala | 26 ++++++++++++++++ .../li/cil/oc/integration/ec/ECUtil.scala | 13 ++++++++ .../cil/oc/integration/ec/ModExtraCells.scala | 13 ++++++++ .../oc/integration/ec/NetworkControl.scala | 22 +++++++++++++ .../mekanism/gas/ConverterGasStack.scala | 24 ++++++++++++++ .../mekanism/gas/ModMekanismGas.scala | 13 ++++++++ 11 files changed, 163 insertions(+), 1 deletion(-) create mode 100644 src/main/scala/li/cil/oc/integration/ec/DriverController.scala create mode 100644 src/main/scala/li/cil/oc/integration/ec/DriverInterface.scala create mode 100644 src/main/scala/li/cil/oc/integration/ec/ECUtil.scala create mode 100644 src/main/scala/li/cil/oc/integration/ec/ModExtraCells.scala create mode 100644 src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala create mode 100644 src/main/scala/li/cil/oc/integration/mekanism/gas/ConverterGasStack.scala create mode 100644 src/main/scala/li/cil/oc/integration/mekanism/gas/ModMekanismGas.scala diff --git a/build.gradle b/build.gradle index b091cbdb5..799b0ec78 100644 --- a/build.gradle +++ b/build.gradle @@ -152,6 +152,10 @@ 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]" + } } configurations { @@ -191,6 +195,7 @@ dependencies { provided name: 'EnderIO', version: config.eio.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' compile 'com.google.code.findbugs:jsr305:1.3.9' // Annotations used by google libs. diff --git a/build.properties b/build.properties index 116a3db04..50f0c35e7 100644 --- a/build.properties +++ b/build.properties @@ -14,6 +14,8 @@ cc.version=1.65 ccl.version=1.1.1.104 cofhlib.cf=2230/207 cofhlib.version=[1.7.10]1.0.0RC7-127 +ec.cf=2242/839 +ec.version=deobf-1.7.10-2.2.73b129 eio.cf=2219/296 eio.version=1.7.10-2.2.1.276 es.version=1.4.5.24 diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 9d409600e..bf7249107 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -35,6 +35,7 @@ object Mods { val ComputerCraft = new SimpleMod(IDs.ComputerCraft) val CraftingCosts = new SimpleMod(IDs.CraftingCosts) val DeepStorageUnit = new ClassBasedMod(IDs.DeepStorageUnit, "powercrystals.minefactoryreloaded.api.IDeepStorageUnit")() + val ExtraCells = new SimpleMod(IDs.ExtraCells, version = "@[2.2.73,)") val ElectricalAge = new SimpleMod(IDs.ElectricalAge, providesPower = true) val EnderIO = new SimpleMod(IDs.EnderIO) val EnderStorage = new SimpleMod(IDs.EnderStorage) @@ -47,6 +48,7 @@ object Mods { val IndustrialCraft2Classic = new SimpleMod(IDs.IndustrialCraft2Classic, providesPower = true) val IngameWiki = new SimpleMod(IDs.IngameWiki, version = "@[1.1.3,)") val Mekanism = new SimpleMod(IDs.Mekanism, providesPower = true) + val MekanismGas = new SimpleMod(IDs.MekanismGas) val Minecraft = new SimpleMod(IDs.Minecraft) val MineFactoryReloaded = new SimpleMod(IDs.MineFactoryReloaded) val Mystcraft = new SimpleMod(IDs.Mystcraft) @@ -91,6 +93,7 @@ object Mods { integration.cofh.item.ModCoFHItem, integration.cofh.tileentity.ModCoFHTileEntity, integration.cofh.transport.ModCoFHTransport, + integration.ec.ModExtraCells, integration.enderstorage.ModEnderStorage, integration.dsu.ModDeepStorageUnit, integration.forestry.ModForestry, @@ -98,6 +101,7 @@ object Mods { integration.gc.ModGalacticraft, integration.gregtech.ModGregtech, integration.ic2.ModIndustrialCraft2, + integration.mekanism.gas.ModMekanismGas, integration.mfr.ModMineFactoryReloaded, integration.mystcraft.ModMystcraft, integration.nek.ModNotEnoughKeys, @@ -164,6 +168,7 @@ object Mods { final val CoFHTransport = "CoFHAPI|transport" final val ComputerCraft = "ComputerCraft" final val CraftingCosts = "CraftingCosts" + final val ExtraCells = "extracells" final val ElectricalAge = "Eln" final val EnderIO = "EnderIO" final val EnderStorage = "EnderStorage" @@ -177,6 +182,7 @@ object Mods { final val IndustrialCraft2Classic = "IC2-Classic" final val IngameWiki = "IGWMod" final val Mekanism = "Mekanism" + final val MekanismGas = "MekanismAPI|gas" final val Minecraft = "Minecraft" final val MineFactoryReloaded = "MineFactoryReloaded" final val Mystcraft = "Mystcraft" 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 d5adec0ce..3624c3636 100644 --- a/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala +++ b/src/main/scala/li/cil/oc/integration/appeng/NetworkControl.scala @@ -17,6 +17,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.ec.ECUtil +import li.cil.oc.integration.Mods import li.cil.oc.util.DatabaseAccess import li.cil.oc.util.ExtendedArguments._ import li.cil.oc.util.ExtendedNBT._ @@ -96,7 +98,12 @@ trait NetworkControl[AETile >: Null <: TileEntity with IGridProxyable with IActi @Callback(doc = "function():table -- Get a list of the stored fluids in the network.") def getFluidsInNetwork(context: Context, args: Arguments): Array[AnyRef] = - result(tile.getProxy.getStorage.getFluidInventory.getStorageList.map(_.getFluidStack).toArray) + result(tile.getProxy.getStorage.getFluidInventory.getStorageList.filter(stack => { + if(Mods.ExtraCells.isAvailable) + ECUtil.canSeeFluidInNetwork(stack) + else + true + }).map(_.getFluidStack).toArray) @Callback(doc = "function():number -- Get the average power injection into the network.") def getAvgPowerInjection(context: Context, args: Arguments): Array[AnyRef] = diff --git a/src/main/scala/li/cil/oc/integration/ec/DriverController.scala b/src/main/scala/li/cil/oc/integration/ec/DriverController.scala new file mode 100644 index 000000000..95097d31b --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/ec/DriverController.scala @@ -0,0 +1,31 @@ +package li.cil.oc.integration.ec + +import appeng.api.networking.security.IActionHost +import appeng.me.helpers.IGridProxyable +import li.cil.oc.api.driver.EnvironmentAware +import li.cil.oc.api.network.ManagedEnvironment +import li.cil.oc.api.prefab.DriverTileEntity +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.world.World + +import scala.language.existentials + +object DriverController extends DriverTileEntity with EnvironmentAware { + private type TileController = TileEntity with IGridProxyable with IActionHost + + def getTileEntityClass = AEUtil.controllerClass + + def createEnvironment(world: World, x: Int, y: Int, z: Int): ManagedEnvironment = + new Environment(world.getTileEntity(x, y, z).asInstanceOf[TileController]) + + override def providedEnvironment(stack: ItemStack) = + if (AEUtil.isController(stack)) classOf[Environment] + else null + + class Environment(val tile: TileController) extends ManagedTileEntityEnvironment[TileController](tile, "me_controller") with NetworkControl[TileController] { + } + +} diff --git a/src/main/scala/li/cil/oc/integration/ec/DriverInterface.scala b/src/main/scala/li/cil/oc/integration/ec/DriverInterface.scala new file mode 100644 index 000000000..0d727fff8 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/ec/DriverInterface.scala @@ -0,0 +1,26 @@ +package li.cil.oc.integration.ec + + +import appeng.tile.misc.TileInterface +import li.cil.oc.api.driver.EnvironmentAware +import li.cil.oc.api.network.ManagedEnvironment +import li.cil.oc.api.prefab.DriverTileEntity +import li.cil.oc.integration.ManagedTileEntityEnvironment +import li.cil.oc.integration.appeng.AEUtil +import net.minecraft.item.ItemStack +import net.minecraft.world.World + +object DriverInterface extends DriverTileEntity with EnvironmentAware { + def getTileEntityClass: Class[_] = classOf[TileInterface] + + def createEnvironment(world: World, x: Int, y: Int, z: Int): ManagedEnvironment = + new Environment(world.getTileEntity(x, y, z).asInstanceOf[TileInterface]) + + override def providedEnvironment(stack: ItemStack) = + if (AEUtil.isBlockInterface(stack)) classOf[Environment] + else null + + class Environment(val tile: TileInterface) extends ManagedTileEntityEnvironment[TileInterface](tile, "me_interface") with NetworkControl[TileInterface] { + } + +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/ec/ECUtil.scala b/src/main/scala/li/cil/oc/integration/ec/ECUtil.scala new file mode 100644 index 000000000..8285a1f93 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/ec/ECUtil.scala @@ -0,0 +1,13 @@ +package li.cil.oc.integration.ec + +import appeng.api.storage.data.IAEFluidStack +import extracells.api.ECApi + + +object ECUtil { + + val api = ECApi.instance + + def canSeeFluidInNetwork(fluid: IAEFluidStack) = fluid != null && api.canFluidSeeInTerminal(fluid.getFluid) + +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/ec/ModExtraCells.scala b/src/main/scala/li/cil/oc/integration/ec/ModExtraCells.scala new file mode 100644 index 000000000..f052bd54a --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/ec/ModExtraCells.scala @@ -0,0 +1,13 @@ +package li.cil.oc.integration.ec + +import li.cil.oc.api.Driver +import li.cil.oc.integration.{Mods, Mod, ModProxy} + +object ModExtraCells extends ModProxy{ + override def getMod: Mod = Mods.ExtraCells + + override def initialize(): Unit = { + Driver.add(DriverController) + Driver.add(DriverInterface) + } +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala b/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala new file mode 100644 index 000000000..482f32cd3 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/ec/NetworkControl.scala @@ -0,0 +1,22 @@ +package li.cil.oc.integration.ec + +import appeng.api.networking.security.IActionHost +import appeng.me.helpers.IGridProxyable +import extracells.api.ECApi +import li.cil.oc.api.machine.{Arguments, Context, Callback} +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] { + def tile: AETile + + val api = ECApi.instance + + @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 => api.isGasStack(stack)).map(api.createGasStack(_)).toArray) + + +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/mekanism/gas/ConverterGasStack.scala b/src/main/scala/li/cil/oc/integration/mekanism/gas/ConverterGasStack.scala new file mode 100644 index 000000000..7ca0353c5 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/mekanism/gas/ConverterGasStack.scala @@ -0,0 +1,24 @@ +package li.cil.oc.integration.mekanism.gas + +import java.util + +import li.cil.oc.{Settings, api} + +import scala.collection.convert.WrapAsScala._ + +object ConverterGasStack extends api.driver.Converter { + override def convert(value: scala.Any, output: util.Map[AnyRef, AnyRef]) = + value match { + case stack: mekanism.api.gas.GasStack => + if (Settings.get.insertIdsInConverters) { + output += "id" -> Int.box(stack.getGas.getID) + } + output += "amount" -> Int.box(stack.amount) + val gas = stack.getGas + if (gas != null) { + output += "name" -> gas.getName + output += "label" -> gas.getLocalizedName + } + case _ => + } +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/mekanism/gas/ModMekanismGas.scala b/src/main/scala/li/cil/oc/integration/mekanism/gas/ModMekanismGas.scala new file mode 100644 index 000000000..f0f3d7348 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/mekanism/gas/ModMekanismGas.scala @@ -0,0 +1,13 @@ +package li.cil.oc.integration.mekanism.gas + +import li.cil.oc.api.Driver +import li.cil.oc.integration.{Mod, ModProxy, Mods} + + +object ModMekanismGas extends ModProxy{ + override def getMod: Mod = Mods.MekanismGas + + override def initialize(): Unit = { + Driver.add(ConverterGasStack) + } +} \ No newline at end of file