From 4af6961f7f5f7ce23fba3e82e2c2d5e5b08d3f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Thu, 27 Nov 2014 14:35:56 +0100 Subject: [PATCH] Added support for IC2 wrenches and TE hammers as tools for rotating blocks. Added a new IMC callback for this, registerWrenchTool. Takes a string parameter being the FQN name of a static method with the signature `public static boolean(EntityPlayer player, Int x, Int y, Int z, boolean changeDurability)`. Returns true if item stack held by player is supported. Split up BC integration into parts for each API package. Just in case someone decides to ship parts of the BC API. Cleaned up a little. --- .../renderer/tileentity/ScreenRenderer.scala | 4 +-- .../scala/li/cil/oc/common/EventHandler.scala | 3 --- src/main/scala/li/cil/oc/common/IMC.scala | 10 +++++++- .../scala/li/cil/oc/common/block/Case.scala | 4 +-- .../li/cil/oc/common/block/Charger.scala | 6 ++--- .../scala/li/cil/oc/common/block/Screen.scala | 4 +-- .../traits/BundledRedstoneAware.scala | 3 +-- .../scala/li/cil/oc/integration/Mods.scala | 13 +++++++++- .../{ => tiles}/DriverControllable.java | 2 +- .../ModBuildCraftAPITiles.scala} | 9 +++---- .../tools/EventHandlerBuildCraft.scala | 18 +++++++++++++ .../tools/ModBuildCraftAPITools.scala | 13 ++++++++++ .../{ => transport}/DriverPipeTile.java | 2 +- .../transport/ModBuildCraftAPITransport.scala | 13 ++++++++++ .../cofh/energy/ModCoFHEnergy.scala | 2 +- .../cofh/item/EventHandlerCoFH.scala | 18 +++++++++++++ .../integration/cofh/item/ModCoFHItem.scala | 13 ++++++++++ .../oc/integration/gregtech/ModGregtech.scala | 5 ++-- .../ic2/EventHandlerIndustrialCraft2.scala | 18 ++++++++++++- .../integration/ic2/ModIndustrialCraft2.scala | 7 ++++-- .../tcon/ModTinkersConstruct.scala | 2 +- .../cil/oc/integration/util/BuildCraft.scala | 25 ------------------- .../oc/integration/util/BundledRedstone.scala | 2 +- .../cil/oc/integration/util/ProjectRed.scala | 7 ------ .../li/cil/oc/integration/util/Wrench.scala | 20 +++++++++++++++ .../cil/oc/integration/waila/ModWaila.scala | 2 +- 26 files changed, 161 insertions(+), 64 deletions(-) rename src/main/scala/li/cil/oc/integration/buildcraft/{ => tiles}/DriverControllable.java (97%) rename src/main/scala/li/cil/oc/integration/buildcraft/{ModBuildCraft.scala => tiles/ModBuildCraftAPITiles.scala} (52%) create mode 100644 src/main/scala/li/cil/oc/integration/buildcraft/tools/EventHandlerBuildCraft.scala create mode 100644 src/main/scala/li/cil/oc/integration/buildcraft/tools/ModBuildCraftAPITools.scala rename src/main/scala/li/cil/oc/integration/buildcraft/{ => transport}/DriverPipeTile.java (98%) create mode 100644 src/main/scala/li/cil/oc/integration/buildcraft/transport/ModBuildCraftAPITransport.scala create mode 100644 src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala create mode 100644 src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala delete mode 100644 src/main/scala/li/cil/oc/integration/util/BuildCraft.scala delete mode 100644 src/main/scala/li/cil/oc/integration/util/ProjectRed.scala create mode 100644 src/main/scala/li/cil/oc/integration/util/Wrench.scala diff --git a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala index 567c2f045..c3a1cbde6 100644 --- a/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala +++ b/src/main/scala/li/cil/oc/client/renderer/tileentity/ScreenRenderer.scala @@ -4,7 +4,7 @@ import li.cil.oc.Settings import li.cil.oc.client.Textures import li.cil.oc.common.block import li.cil.oc.common.tileentity.Screen -import li.cil.oc.integration.util.BuildCraft +import li.cil.oc.integration.util.Wrench import li.cil.oc.util.RenderState import net.minecraft.client.Minecraft import net.minecraft.client.renderer.Tessellator @@ -104,7 +104,7 @@ object ScreenRenderer extends TileEntitySpecialRenderer { // Show up vector overlay when holding same screen block. val stack = Minecraft.getMinecraft.thePlayer.getHeldItem if (stack != null) { - if (BuildCraft.holdsApplicableWrench(Minecraft.getMinecraft.thePlayer, screen.x, screen.y, screen.z) || + if (Wrench.holdsApplicableWrench(Minecraft.getMinecraft.thePlayer, screen.x, screen.y, screen.z) || (stack.getItem match { case block: block.Item => block.getMetadata(stack.getItemDamage) == screen.getBlockMetadata case _ => false diff --git a/src/main/scala/li/cil/oc/common/EventHandler.scala b/src/main/scala/li/cil/oc/common/EventHandler.scala index 0c6c3b845..8ec9e274d 100644 --- a/src/main/scala/li/cil/oc/common/EventHandler.scala +++ b/src/main/scala/li/cil/oc/common/EventHandler.scala @@ -120,9 +120,6 @@ object EventHandler { if (!LuaStateFactory.isAvailable) { player.addChatMessage(Localization.Chat.WarningLuaFallback) } - if (Mods.ProjectRedTransmission.isAvailable && !util.ProjectRed.isAPIAvailable) { - player.addChatMessage(Localization.Chat.WarningProjectRed) - } if (!Settings.get.pureIgnorePower && Settings.get.ignorePower) { player.addChatMessage(Localization.Chat.WarningPower) } diff --git a/src/main/scala/li/cil/oc/common/IMC.scala b/src/main/scala/li/cil/oc/common/IMC.scala index d76520580..c1abccb69 100644 --- a/src/main/scala/li/cil/oc/common/IMC.scala +++ b/src/main/scala/li/cil/oc/common/IMC.scala @@ -8,6 +8,8 @@ import cpw.mods.fml.common.event.FMLInterModComms.IMCEvent import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.common.template.AssemblerTemplates +import li.cil.oc.integration.util.Wrench +import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack import net.minecraftforge.common.util.Constants.NBT @@ -27,7 +29,7 @@ object IMC { } else if (message.key == "registerToolDurabilityProvider" && message.isStringMessage) { OpenComputers.log.info(s"Registering new tool durability provider '${message.getStringValue}' from mod ${message.getSender}.") - try ToolDurabilityProviders.add(IMC.getStaticMethod(message.getStringValue, classOf[ItemStack])) catch { + try ToolDurabilityProviders.add(getStaticMethod(message.getStringValue, classOf[ItemStack])) catch { case t: Throwable => OpenComputers.log.warn("Failed registering tool durability provider.", t) } } @@ -37,6 +39,12 @@ object IMC { case t: Throwable => OpenComputers.log.warn("Failed sending config.", t) } } + else if (message.key == "registerWrenchTool" && message.isStringMessage) { + OpenComputers.log.info(s"Registering new wrench tool '${message.getStringValue}' from mod ${message.getSender}.") + try Wrench.add(getStaticMethod(message.getStringValue, classOf[EntityPlayer], classOf[Int], classOf[Int], classOf[Int], classOf[Boolean])) catch { + case t: Throwable => OpenComputers.log.warn("Failed registering wrench tool.", t) + } + } } } diff --git a/src/main/scala/li/cil/oc/common/block/Case.scala b/src/main/scala/li/cil/oc/common/block/Case.scala index 46c997cdc..06eafbab7 100644 --- a/src/main/scala/li/cil/oc/common/block/Case.scala +++ b/src/main/scala/li/cil/oc/common/block/Case.scala @@ -8,7 +8,7 @@ import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.common.GuiType import li.cil.oc.common.tileentity -import li.cil.oc.integration.util.BuildCraft +import li.cil.oc.integration.util.Wrench import li.cil.oc.util.Color import li.cil.oc.util.Tooltip import net.minecraft.client.renderer.texture.IIconRegister @@ -78,7 +78,7 @@ class Case(val tier: Int) extends RedstoneAware with traits.PowerAcceptor { override def onBlockActivated(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float) = { - if (!player.isSneaking && !BuildCraft.holdsApplicableWrench(player, x, y, z)) { + if (!player.isSneaking && !Wrench.holdsApplicableWrench(player, x, y, z)) { if (!world.isRemote) { player.openGui(OpenComputers, GuiType.Case.id, world, x, y, z) } diff --git a/src/main/scala/li/cil/oc/common/block/Charger.scala b/src/main/scala/li/cil/oc/common/block/Charger.scala index ecabf258a..c89e7e7a5 100644 --- a/src/main/scala/li/cil/oc/common/block/Charger.scala +++ b/src/main/scala/li/cil/oc/common/block/Charger.scala @@ -5,7 +5,7 @@ import li.cil.oc.Settings import li.cil.oc.client.Textures import li.cil.oc.common.GuiType import li.cil.oc.common.tileentity -import li.cil.oc.integration.util.BuildCraft +import li.cil.oc.integration.util.Wrench import li.cil.oc.server.PacketSender import net.minecraft.block.Block import net.minecraft.client.renderer.texture.IIconRegister @@ -45,12 +45,12 @@ class Charger extends RedstoneAware with traits.PowerAcceptor { override def onBlockActivated(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float) = world.getTileEntity(x, y, z) match { case charger: tileentity.Charger => - if (BuildCraft.holdsApplicableWrench(player, x, y, z)) { + if (Wrench.holdsApplicableWrench(player, x, y, z)) { if (!world.isRemote) { charger.invertSignal = !charger.invertSignal charger.chargeSpeed = 1.0 - charger.chargeSpeed PacketSender.sendChargerState(charger) - BuildCraft.wrenchUsed(player, x, y, z) + Wrench.wrenchUsed(player, x, y, z) } true } diff --git a/src/main/scala/li/cil/oc/common/block/Screen.scala b/src/main/scala/li/cil/oc/common/block/Screen.scala index 5650aff83..74d9d2328 100644 --- a/src/main/scala/li/cil/oc/common/block/Screen.scala +++ b/src/main/scala/li/cil/oc/common/block/Screen.scala @@ -8,7 +8,7 @@ import li.cil.oc.OpenComputers import li.cil.oc.Settings import li.cil.oc.common.GuiType import li.cil.oc.common.tileentity -import li.cil.oc.integration.util.BuildCraft +import li.cil.oc.integration.util.Wrench import li.cil.oc.util.Color import li.cil.oc.util.PackedColor import li.cil.oc.util.Tooltip @@ -332,7 +332,7 @@ class Screen(val tier: Int) extends RedstoneAware { def rightClick(world: World, x: Int, y: Int, z: Int, player: EntityPlayer, side: ForgeDirection, hitX: Float, hitY: Float, hitZ: Float, force: Boolean) = - if (BuildCraft.holdsApplicableWrench(player, x, y, z)) false + if (Wrench.holdsApplicableWrench(player, x, y, z)) false else world.getTileEntity(x, y, z) match { case screen: tileentity.Screen if screen.hasKeyboard && (force || player.isSneaking == screen.invertTouchMode) => // Yep, this GUI is actually purely client side. We could skip this diff --git a/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala b/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala index 4165d90f0..e85f3e690 100644 --- a/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala +++ b/src/main/scala/li/cil/oc/common/tileentity/traits/BundledRedstoneAware.scala @@ -3,7 +3,6 @@ package li.cil.oc.common.tileentity.traits import cpw.mods.fml.common.Optional import li.cil.oc.Settings import li.cil.oc.integration.Mods -import li.cil.oc.integration.util.ProjectRed import li.cil.oc.util.ExtendedNBT._ import mods.immibis.redlogic.api.wiring.IBundledEmitter import mods.immibis.redlogic.api.wiring.IBundledUpdatable @@ -151,7 +150,7 @@ trait BundledRedstoneAware extends RedstoneAware with IBundledEmitter with IBund else null } else null - val projectRed = if (Mods.ProjectRedTransmission.isAvailable && ProjectRed.isAPIAvailable) { + val projectRed = if (Mods.ProjectRedTransmission.isAvailable) { Option(ProjectRedAPI.transmissionAPI.getBundledInput(world, x, y, z, side.ordinal)).fold(null: Array[Int])(_.map(_ & 0xFF)) } else null diff --git a/src/main/scala/li/cil/oc/integration/Mods.scala b/src/main/scala/li/cil/oc/integration/Mods.scala index 1297d40bd..c3707b455 100644 --- a/src/main/scala/li/cil/oc/integration/Mods.scala +++ b/src/main/scala/li/cil/oc/integration/Mods.scala @@ -22,7 +22,11 @@ object Mods { val AppliedEnergistics2 = new SimpleMod(IDs.AppliedEnergistics2, version = "@[rv1,)") val BattleGear2 = new SimpleMod(IDs.BattleGear2) val BuildCraft = new SimpleMod(IDs.BuildCraft) + val BuildCraftTiles = new SimpleMod(IDs.BuildCraftTiles) + val BuildCraftTools = new SimpleMod(IDs.BuildCraftTools) + val BuildCraftTransport = new SimpleMod(IDs.BuildCraftTransport) val CoFHEnergy = new SimpleMod(IDs.CoFHEnergy, providesPower = true) + val CoFHItem = new SimpleMod(IDs.CoFHItem) val CoFHTileEntity = new SimpleMod(IDs.CoFHTileEntity) val CoFHTransport = new SimpleMod(IDs.CoFHTransport) val ComputerCraft = new SimpleMod(IDs.ComputerCraft) @@ -74,8 +78,11 @@ object Mods { def init() { tryInit(integration.appeng.ModAppEng) - tryInit(integration.buildcraft.ModBuildCraft) + tryInit(integration.buildcraft.tools.ModBuildCraftAPITools) + tryInit(integration.buildcraft.tiles.ModBuildCraftAPITiles) + tryInit(integration.buildcraft.transport.ModBuildCraftAPITransport) tryInit(integration.cofh.energy.ModCoFHEnergy) + tryInit(integration.cofh.item.ModCoFHItem) tryInit(integration.cofh.tileentity.ModCoFHTileEntity) tryInit(integration.cofh.transport.ModCoFHTransport) tryInit(integration.enderstorage.ModEnderStorage) @@ -123,7 +130,11 @@ object Mods { final val BattleGear2 = "battlegear2" final val BuildCraft = "BuildCraft|Core" final val BuildCraftPower = "BuildCraftAPI|power" + final val BuildCraftTiles = "BuildCraftAPI|tiles" + final val BuildCraftTools = "BuildCraftAPI|tools" + final val BuildCraftTransport = "BuildCraftAPI|transport" final val CoFHEnergy = "CoFHAPI|energy" + final val CoFHItem = "CoFHAPI|item" final val CoFHTileEntity = "CoFHAPI|tileentity" final val CoFHTransport = "CoFHAPI|transport" final val ComputerCraft = "ComputerCraft" diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/DriverControllable.java b/src/main/scala/li/cil/oc/integration/buildcraft/tiles/DriverControllable.java similarity index 97% rename from src/main/scala/li/cil/oc/integration/buildcraft/DriverControllable.java rename to src/main/scala/li/cil/oc/integration/buildcraft/tiles/DriverControllable.java index 5a9856c91..9746e37b3 100644 --- a/src/main/scala/li/cil/oc/integration/buildcraft/DriverControllable.java +++ b/src/main/scala/li/cil/oc/integration/buildcraft/tiles/DriverControllable.java @@ -1,4 +1,4 @@ -package li.cil.oc.integration.buildcraft; +package li.cil.oc.integration.buildcraft.tiles; import buildcraft.api.tiles.IControllable; import li.cil.oc.api.machine.Arguments; diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/ModBuildCraft.scala b/src/main/scala/li/cil/oc/integration/buildcraft/tiles/ModBuildCraftAPITiles.scala similarity index 52% rename from src/main/scala/li/cil/oc/integration/buildcraft/ModBuildCraft.scala rename to src/main/scala/li/cil/oc/integration/buildcraft/tiles/ModBuildCraftAPITiles.scala index 4ddd0eb3a..a5b3cf3b0 100644 --- a/src/main/scala/li/cil/oc/integration/buildcraft/ModBuildCraft.scala +++ b/src/main/scala/li/cil/oc/integration/buildcraft/tiles/ModBuildCraftAPITiles.scala @@ -1,14 +1,13 @@ -package li.cil.oc.integration.buildcraft +package li.cil.oc.integration.buildcraft.tiles import li.cil.oc.api.Driver import li.cil.oc.integration.ModProxy import li.cil.oc.integration.Mods -object ModBuildCraft extends ModProxy { - override def getMod = Mods.BuildCraft +object ModBuildCraftAPITiles extends ModProxy { + override def getMod = Mods.BuildCraftTiles override def initialize() { - Driver.add(new DriverPipeTile) Driver.add(new DriverControllable) } -} \ No newline at end of file +} diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/tools/EventHandlerBuildCraft.scala b/src/main/scala/li/cil/oc/integration/buildcraft/tools/EventHandlerBuildCraft.scala new file mode 100644 index 000000000..90676882b --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/buildcraft/tools/EventHandlerBuildCraft.scala @@ -0,0 +1,18 @@ +package li.cil.oc.integration.buildcraft.tools + +import buildcraft.api.tools.IToolWrench +import net.minecraft.entity.player.EntityPlayer + +object EventHandlerBuildCraft { + def useWrench(player: EntityPlayer, x: Int, y: Int, z: Int, changeDurability: Boolean): Boolean = { + player.getCurrentEquippedItem.getItem match { + case wrench: IToolWrench => + if (changeDurability) { + wrench.wrenchUsed(player, x, y, z) + true + } + else wrench.canWrench(player, x, y, z) + case _ => false + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/tools/ModBuildCraftAPITools.scala b/src/main/scala/li/cil/oc/integration/buildcraft/tools/ModBuildCraftAPITools.scala new file mode 100644 index 000000000..cdf57daeb --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/buildcraft/tools/ModBuildCraftAPITools.scala @@ -0,0 +1,13 @@ +package li.cil.oc.integration.buildcraft.tools + +import cpw.mods.fml.common.event.FMLInterModComms +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods + +object ModBuildCraftAPITools extends ModProxy { + override def getMod = Mods.BuildCraftTools + + override def initialize(): Unit = { + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerWrenchTool", "li.cil.oc.integration.buildcraft.tools.EventHandlerBuildCraft.useWrench") + } +} diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/DriverPipeTile.java b/src/main/scala/li/cil/oc/integration/buildcraft/transport/DriverPipeTile.java similarity index 98% rename from src/main/scala/li/cil/oc/integration/buildcraft/DriverPipeTile.java rename to src/main/scala/li/cil/oc/integration/buildcraft/transport/DriverPipeTile.java index 24a9de9d9..cc865cbe1 100644 --- a/src/main/scala/li/cil/oc/integration/buildcraft/DriverPipeTile.java +++ b/src/main/scala/li/cil/oc/integration/buildcraft/transport/DriverPipeTile.java @@ -1,4 +1,4 @@ -package li.cil.oc.integration.buildcraft; +package li.cil.oc.integration.buildcraft.transport; import buildcraft.api.transport.IPipeTile; import buildcraft.api.transport.PipeWire; diff --git a/src/main/scala/li/cil/oc/integration/buildcraft/transport/ModBuildCraftAPITransport.scala b/src/main/scala/li/cil/oc/integration/buildcraft/transport/ModBuildCraftAPITransport.scala new file mode 100644 index 000000000..06ffe9e7d --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/buildcraft/transport/ModBuildCraftAPITransport.scala @@ -0,0 +1,13 @@ +package li.cil.oc.integration.buildcraft.transport + +import li.cil.oc.api.Driver +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods + +object ModBuildCraftAPITransport extends ModProxy { + override def getMod = Mods.BuildCraftTransport + + override def initialize() { + Driver.add(new DriverPipeTile) + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/energy/ModCoFHEnergy.scala b/src/main/scala/li/cil/oc/integration/cofh/energy/ModCoFHEnergy.scala index 49c425d1c..b5142b944 100644 --- a/src/main/scala/li/cil/oc/integration/cofh/energy/ModCoFHEnergy.scala +++ b/src/main/scala/li/cil/oc/integration/cofh/energy/ModCoFHEnergy.scala @@ -10,7 +10,7 @@ object ModCoFHEnergy extends ModProxy { override def getMod = Mods.CoFHEnergy override def initialize() { - FMLInterModComms.sendMessage("OpenComputers", "registerToolDurabilityProvider", "li.cil.oc.integration.cofh.energy.EventHandlerRedstoneFlux.getDurability") + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerToolDurabilityProvider", "li.cil.oc.integration.cofh.energy.EventHandlerRedstoneFlux.getDurability") MinecraftForge.EVENT_BUS.register(EventHandlerRedstoneFlux) diff --git a/src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala b/src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala new file mode 100644 index 000000000..e97e092d7 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/item/EventHandlerCoFH.scala @@ -0,0 +1,18 @@ +package li.cil.oc.integration.cofh.item + +import cofh.api.item.IToolHammer +import net.minecraft.entity.player.EntityPlayer + +object EventHandlerCoFH { + def useWrench(player: EntityPlayer, x: Int, y: Int, z: Int, changeDurability: Boolean): Boolean = { + player.getCurrentEquippedItem.getItem match { + case wrench: IToolHammer => + if (changeDurability) { + wrench.toolUsed(player.getHeldItem, player, x, y, z) + true + } + else wrench.isUsable(player.getHeldItem, player, x, y, z) + case _ => false + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala b/src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala new file mode 100644 index 000000000..cdb2d65f2 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/cofh/item/ModCoFHItem.scala @@ -0,0 +1,13 @@ +package li.cil.oc.integration.cofh.item + +import cpw.mods.fml.common.event.FMLInterModComms +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods + +object ModCoFHItem extends ModProxy { + override def getMod = Mods.CoFHItem + + override def initialize(): Unit = { + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerWrenchTool", "li.cil.oc.integration.cofh.item.EventHandlerCoFH.useWrench") + } +} diff --git a/src/main/scala/li/cil/oc/integration/gregtech/ModGregtech.scala b/src/main/scala/li/cil/oc/integration/gregtech/ModGregtech.scala index 438e1d701..4ea66e917 100644 --- a/src/main/scala/li/cil/oc/integration/gregtech/ModGregtech.scala +++ b/src/main/scala/li/cil/oc/integration/gregtech/ModGregtech.scala @@ -2,14 +2,15 @@ package li.cil.oc.integration.gregtech import cpw.mods.fml.common.event.FMLInterModComms import li.cil.oc.api.Driver -import li.cil.oc.integration.{ModProxy, Mods} +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods import net.minecraftforge.common.MinecraftForge object ModGregtech extends ModProxy { override def getMod = Mods.GregTech override def initialize() { - FMLInterModComms.sendMessage("OpenComputers", "registerToolDurabilityProvider", "li.cil.oc.integration.gregtech.EventHandlerGregTech.getDurability") + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerToolDurabilityProvider", "li.cil.oc.integration.gregtech.EventHandlerGregTech.getDurability") MinecraftForge.EVENT_BUS.register(EventHandlerGregTech) diff --git a/src/main/scala/li/cil/oc/integration/ic2/EventHandlerIndustrialCraft2.scala b/src/main/scala/li/cil/oc/integration/ic2/EventHandlerIndustrialCraft2.scala index db23a115f..22f207a9f 100644 --- a/src/main/scala/li/cil/oc/integration/ic2/EventHandlerIndustrialCraft2.scala +++ b/src/main/scala/li/cil/oc/integration/ic2/EventHandlerIndustrialCraft2.scala @@ -1,8 +1,12 @@ package li.cil.oc.integration.ic2 import cpw.mods.fml.common.eventhandler.SubscribeEvent -import ic2.api.item.{ElectricItem, IElectricItem, ISpecialElectricItem} +import ic2.api.item.ElectricItem +import ic2.api.item.IElectricItem +import ic2.api.item.ISpecialElectricItem +import ic2.core.item.tool.ItemToolWrench import li.cil.oc.api.event.RobotUsedToolEvent +import net.minecraft.entity.player.EntityPlayer import net.minecraft.item.ItemStack object EventHandlerIndustrialCraft2 { @@ -41,4 +45,16 @@ object EventHandlerIndustrialCraft2 { case _ => Double.NaN } } + + def useWrench(player: EntityPlayer, x: Int, y: Int, z: Int, changeDurability: Boolean): Boolean = { + player.getCurrentEquippedItem.getItem match { + case wrench: ItemToolWrench => + if (changeDurability) { + wrench.damage(player.getHeldItem, 1, player) + true + } + else wrench.canTakeDamage(player.getHeldItem, 1) + case _ => false + } + } } diff --git a/src/main/scala/li/cil/oc/integration/ic2/ModIndustrialCraft2.scala b/src/main/scala/li/cil/oc/integration/ic2/ModIndustrialCraft2.scala index 0a169667f..d51b1eaeb 100644 --- a/src/main/scala/li/cil/oc/integration/ic2/ModIndustrialCraft2.scala +++ b/src/main/scala/li/cil/oc/integration/ic2/ModIndustrialCraft2.scala @@ -2,14 +2,17 @@ package li.cil.oc.integration.ic2 import cpw.mods.fml.common.event.FMLInterModComms import li.cil.oc.api.Driver -import li.cil.oc.integration.{ModProxy, Mods} +import li.cil.oc.integration.ModProxy +import li.cil.oc.integration.Mods import net.minecraftforge.common.MinecraftForge object ModIndustrialCraft2 extends ModProxy { override def getMod = Mods.IndustrialCraft2 override def initialize() { - FMLInterModComms.sendMessage("OpenComputers", "registerToolDurabilityProvider", "li.cil.oc.integration.ic2.EventHandlerIndustrialCraft2.getDurability") + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerToolDurabilityProvider", "li.cil.oc.integration.ic2.EventHandlerIndustrialCraft2.getDurability") + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerWrenchTool", "li.cil.oc.integration.ic2.EventHandlerIndustrialCraft2.useWrench") + MinecraftForge.EVENT_BUS.register(EventHandlerIndustrialCraft2) diff --git a/src/main/scala/li/cil/oc/integration/tcon/ModTinkersConstruct.scala b/src/main/scala/li/cil/oc/integration/tcon/ModTinkersConstruct.scala index a13c2f8af..ad8eb67ef 100644 --- a/src/main/scala/li/cil/oc/integration/tcon/ModTinkersConstruct.scala +++ b/src/main/scala/li/cil/oc/integration/tcon/ModTinkersConstruct.scala @@ -9,7 +9,7 @@ object ModTinkersConstruct extends ModProxy { override def getMod = Mods.TinkersConstruct override def initialize() { - FMLInterModComms.sendMessage("OpenComputers", "registerToolDurabilityProvider", "li.cil.oc.integration.tcon.EventHandlerTinkersConstruct.getDurability") + FMLInterModComms.sendMessage(Mods.IDs.OpenComputers, "registerToolDurabilityProvider", "li.cil.oc.integration.tcon.EventHandlerTinkersConstruct.getDurability") MinecraftForge.EVENT_BUS.register(EventHandlerTinkersConstruct) } diff --git a/src/main/scala/li/cil/oc/integration/util/BuildCraft.scala b/src/main/scala/li/cil/oc/integration/util/BuildCraft.scala deleted file mode 100644 index 333e30090..000000000 --- a/src/main/scala/li/cil/oc/integration/util/BuildCraft.scala +++ /dev/null @@ -1,25 +0,0 @@ -package li.cil.oc.integration.util - -import buildcraft.api.tools.IToolWrench -import cpw.mods.fml.common.ModAPIManager -import net.minecraft.entity.player.EntityPlayer - -object BuildCraft { - def holdsApplicableWrench(player: EntityPlayer, x: Int, y: Int, z: Int) = - ModAPIManager.INSTANCE.hasAPI("BuildCraftAPI|tools") && - player.getCurrentEquippedItem != null && - (player.getCurrentEquippedItem.getItem match { - case wrench: IToolWrench => wrench.canWrench(player, x, y, z) - case _ => false - }) - - def wrenchUsed(player: EntityPlayer, x: Int, y: Int, z: Int) = - ModAPIManager.INSTANCE.hasAPI("BuildCraftAPI|tools") && - player.getCurrentEquippedItem != null && - (player.getCurrentEquippedItem.getItem match { - case wrench: IToolWrench if wrench.canWrench(player, x, y, z) => - wrench.wrenchUsed(player, x, y, z) - true - case _ => false - }) -} diff --git a/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala b/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala index e63487213..2502881dc 100644 --- a/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala +++ b/src/main/scala/li/cil/oc/integration/util/BundledRedstone.scala @@ -5,5 +5,5 @@ import li.cil.oc.integration.Mods object BundledRedstone { def isAvailable = Mods.RedLogic.isAvailable || Mods.MineFactoryReloaded.isAvailable || - (Mods.ProjectRedTransmission.isAvailable && ProjectRed.isAPIAvailable) + Mods.ProjectRedTransmission.isAvailable } diff --git a/src/main/scala/li/cil/oc/integration/util/ProjectRed.scala b/src/main/scala/li/cil/oc/integration/util/ProjectRed.scala deleted file mode 100644 index 1cf171944..000000000 --- a/src/main/scala/li/cil/oc/integration/util/ProjectRed.scala +++ /dev/null @@ -1,7 +0,0 @@ -package li.cil.oc.integration.util - -import mrtjp.projectred.api.ProjectRedAPI - -object ProjectRed { - def isAPIAvailable = classOf[ProjectRedAPI].getFields.exists(_.getName == "transmissionAPI") -} diff --git a/src/main/scala/li/cil/oc/integration/util/Wrench.scala b/src/main/scala/li/cil/oc/integration/util/Wrench.scala new file mode 100644 index 000000000..73a80d8c2 --- /dev/null +++ b/src/main/scala/li/cil/oc/integration/util/Wrench.scala @@ -0,0 +1,20 @@ +package li.cil.oc.integration.util + +import java.lang.reflect.Method + +import li.cil.oc.common.IMC +import net.minecraft.entity.player.EntityPlayer + +import scala.collection.mutable + +object Wrench { + private val wrenches = mutable.LinkedHashSet.empty[Method] + + def add(wrench: Method): Unit = wrenches += wrench + + def holdsApplicableWrench(player: EntityPlayer, x: Int, y: Int, z: Int): Boolean = + player.getCurrentEquippedItem != null && wrenches.exists(IMC.tryInvokeStatic(_, player, int2Integer(x), int2Integer(y), int2Integer(z), boolean2Boolean(false))(false)) + + def wrenchUsed(player: EntityPlayer, x: Int, y: Int, z: Int): Unit = + if (player.getCurrentEquippedItem != null) wrenches.foreach(IMC.tryInvokeStaticVoid(_, player, int2Integer(x), int2Integer(y), int2Integer(z), boolean2Boolean(true))) +} diff --git a/src/main/scala/li/cil/oc/integration/waila/ModWaila.scala b/src/main/scala/li/cil/oc/integration/waila/ModWaila.scala index 2c3d517d2..ac5a58198 100644 --- a/src/main/scala/li/cil/oc/integration/waila/ModWaila.scala +++ b/src/main/scala/li/cil/oc/integration/waila/ModWaila.scala @@ -8,6 +8,6 @@ object ModWaila extends ModProxy { override def getMod = Mods.Waila override def initialize() { - FMLInterModComms.sendMessage("Waila", "register", "li.cil.oc.integration.waila.BlockDataProvider.init") + FMLInterModComms.sendMessage(Mods.IDs.Waila, "register", "li.cil.oc.integration.waila.BlockDataProvider.init") } }