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") } }