diff --git a/build.gradle b/build.gradle index 554a4681a..b42691e08 100644 --- a/build.gradle +++ b/build.gradle @@ -167,6 +167,10 @@ repositories { name 'ExtraCells' artifactPattern "http://addons-origin.cursecdn.com/files/${config.ec.cf}/[module]-[revision].[ext]" } + ivy { + name 'ThaumicEnergistics' + artifactPattern "http://addons-origin.cursecdn.com/files/${config.thaumicenergistics.cf}/[module]-[revision].[ext]" + } } configurations { @@ -213,6 +217,7 @@ dependencies { 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: 'ThaumicEnergistics', version: config.thaumicenergistics.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 5fdcee916..75cf9574f 100644 --- a/build.properties +++ b/build.properties @@ -40,6 +40,8 @@ rc.cf=2219/321 rc.version=1.7.10-9.4.0.0 redlogic.version=59.0.3 rotc.version=V5c +thaumicenergistics.cf=2277/520 +thaumicenergistics.version=1.0.0.1-RV2 tis3d.version=MC1.7.10-0.7.1.53 tmech.version=75.0afb56c re.version=3.0.0.342 diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 8fde28065..2bfe1e7f5 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -76,6 +76,7 @@ object Mods { override def isModAvailable: Boolean = isModAvailable_ } val Thaumcraft = new SimpleMod(IDs.Thaumcraft) + val ThaumicEnergistics = new SimpleMod(IDs.ThaumicEnergistics) val ThermalExpansion = new SimpleMod(IDs.ThermalExpansion, providesPower = true) val TinkersConstruct = new SimpleMod(IDs.TinkersConstruct) val TIS3D = new SimpleMod(IDs.TIS3D, version = "@[0.7,)") @@ -122,6 +123,7 @@ object Mods { integration.rotarycraft.ModRotaryCraft, integration.stargatetech2.ModStargateTech2, integration.thaumcraft.ModThaumcraft, + integration.thaumicenergistics.ModThaumicEnergistics, integration.thermalexpansion.ModThermalExpansion, integration.tcon.ModTinkersConstruct, integration.tis3d.ModTIS3D, @@ -214,6 +216,7 @@ object Mods { final val RotaryCraft = "RotaryCraft" final val StargateTech2 = "StargateTech2" final val Thaumcraft = "Thaumcraft" + final val ThaumicEnergistics = "thaumicenergistics" final val ThermalExpansion = "ThermalExpansion" final val TinkersConstruct = "TConstruct" final val TIS3D = "tis3d" diff --git a/src/main/scala/li/cil/oc/integration/thaumicenergistics/DriverBlockInterface.scala b/src/main/scala/li/cil/oc/integration/thaumicenergistics/DriverBlockInterface.scala new file mode 100644 index 000000000..3ee7429c3 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumicenergistics/DriverBlockInterface.scala @@ -0,0 +1,27 @@ +package li.cil.oc.integration.thaumicenergistics + +import appeng.tile.misc.TileInterface +import li.cil.oc.api.driver.EnvironmentProvider +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 DriverBlockInterface extends DriverTileEntity { + 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]) + + final class Environment(val tile: TileInterface) extends ManagedTileEntityEnvironment[TileInterface](tile, "me_interface") with NetworkControl[TileInterface] + + object Provider extends EnvironmentProvider { + override def getEnvironment(stack: ItemStack): Class[_] = + if (AEUtil.isBlockInterface(stack)) + classOf[Environment] + else null + } + +} diff --git a/src/main/scala/li/cil/oc/integration/thaumicenergistics/DriverController.scala b/src/main/scala/li/cil/oc/integration/thaumicenergistics/DriverController.scala new file mode 100644 index 000000000..8a0e90053 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumicenergistics/DriverController.scala @@ -0,0 +1,33 @@ +package li.cil.oc.integration.thaumicenergistics + +import appeng.api.networking.security.IActionHost +import appeng.me.helpers.IGridProxyable +import li.cil.oc.api.driver.EnvironmentProvider +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 { + 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]) + + final class Environment(val tile: TileController) extends ManagedTileEntityEnvironment[TileController](tile, "me_controller") with NetworkControl[TileController] + + object Provider extends EnvironmentProvider { + override def getEnvironment(stack: ItemStack): Class[_] = + if (AEUtil.isController(stack)) + classOf[Environment] + else null + } + +} diff --git a/src/main/scala/li/cil/oc/integration/thaumicenergistics/ModThaumicEnergistics.scala b/src/main/scala/li/cil/oc/integration/thaumicenergistics/ModThaumicEnergistics.scala new file mode 100644 index 000000000..7eb2cf180 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumicenergistics/ModThaumicEnergistics.scala @@ -0,0 +1,18 @@ +package li.cil.oc.integration.thaumicenergistics + +import li.cil.oc.api.Driver +import li.cil.oc.integration.Mod +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods + +object ModThaumicEnergistics extends ModProxy { + override def getMod: Mod = Mods.ThaumicEnergistics + + override def initialize(): Unit = { + Driver.add(DriverController) + Driver.add(DriverBlockInterface) + + Driver.add(DriverController.Provider) + Driver.add(DriverBlockInterface.Provider) + } +} \ No newline at end of file diff --git a/src/main/scala/li/cil/oc/integration/thaumicenergistics/NetworkControl.scala b/src/main/scala/li/cil/oc/integration/thaumicenergistics/NetworkControl.scala new file mode 100644 index 000000000..778cc648f --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumicenergistics/NetworkControl.scala @@ -0,0 +1,24 @@ +package li.cil.oc.integration.thaumicenergistics + +import appeng.api.networking.security.IActionHost +import appeng.me.helpers.IGridProxyable +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.util.ResultWrapper._ +import net.minecraft.tileentity.TileEntity +import thaumicenergistics.api.IThEEssentiaGas + +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 + + @Callback(doc = "function():table -- Get a list of the stored essentia in the network.") + def getEssentiaInNetwork(context: Context, args: Arguments): Array[AnyRef] = + result(tile.getProxy.getStorage.getFluidInventory.getStorageList.filter(stack => + stack.getFluid != null && stack.getFluid.isInstanceOf[IThEEssentiaGas]). + map(ThaumicEnergisticsUtils.getAspect).toArray) +} diff --git a/src/main/scala/li/cil/oc/integration/thaumicenergistics/ThaumicEnergisticsUtils.scala b/src/main/scala/li/cil/oc/integration/thaumicenergistics/ThaumicEnergisticsUtils.scala new file mode 100644 index 000000000..aa9ee8f77 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/thaumicenergistics/ThaumicEnergisticsUtils.scala @@ -0,0 +1,12 @@ +package li.cil.oc.integration.thaumicenergistics + +import appeng.api.storage.data.IAEFluidStack + + +object ThaumicEnergisticsUtils { + def getAspect(fluid: IAEFluidStack) ={ + val aspect = fluid.getFluidStack.copy() + aspect.amount = (fluid.getStackSize / 128).toInt + aspect + } +}