diff --git a/dependencies.gradle b/dependencies.gradle index 5483108d23..eaa3193c97 100644 --- a/dependencies.gradle +++ b/dependencies.gradle @@ -20,7 +20,7 @@ dependencies { compileOnly("com.github.GTNewHorizons:ForgeMultipart:1.6.2:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:Galacticraft:3.3.4-GTNH:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:GT5-Unofficial:5.09.51.153:dev") {transitive = false} - compileOnly("com.github.GTNewHorizons:GTNHLib:0.6.11:dev") { transitive = false } + compileOnly("com.github.GTNewHorizons:GTNHLib:0.6.11:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:ModularUI:1.2.18:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:NotEnoughItems:2.7.29-GTNH:dev") {transitive = false} compileOnly("com.github.GTNewHorizons:ProjectRed:4.11.1-GTNH:dev") {transitive = false} diff --git a/src/main/java/li/cil/oc/api/prefab/DriverSidedTileEntity.java b/src/main/java/li/cil/oc/api/prefab/DriverSidedTileEntity.java index 1eb8cedadc..9ea2b49da2 100644 --- a/src/main/java/li/cil/oc/api/prefab/DriverSidedTileEntity.java +++ b/src/main/java/li/cil/oc/api/prefab/DriverSidedTileEntity.java @@ -1,5 +1,6 @@ package li.cil.oc.api.prefab; +import li.cil.oc.util.CapabilityUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; import net.minecraftforge.common.util.ForgeDirection; @@ -20,6 +21,6 @@ public boolean worksWith(final World world, final int x, final int y, final int return false; } final TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity != null && filter.isAssignableFrom(tileEntity.getClass()); + return CapabilityUtil.hasCapability(tileEntity, filter); } } diff --git a/src/main/java/li/cil/oc/api/prefab/DriverTileEntity.java b/src/main/java/li/cil/oc/api/prefab/DriverTileEntity.java index b458246b8c..3f87757d21 100644 --- a/src/main/java/li/cil/oc/api/prefab/DriverTileEntity.java +++ b/src/main/java/li/cil/oc/api/prefab/DriverTileEntity.java @@ -1,5 +1,6 @@ package li.cil.oc.api.prefab; +import li.cil.oc.util.CapabilityUtil; import net.minecraft.tileentity.TileEntity; import net.minecraft.world.World; @@ -19,6 +20,6 @@ public boolean worksWith(final World world, final int x, final int y, final int return false; } final TileEntity tileEntity = world.getTileEntity(x, y, z); - return tileEntity != null && filter.isAssignableFrom(tileEntity.getClass()); + return CapabilityUtil.hasCapability(tileEntity, filter); } } diff --git a/src/main/java/li/cil/oc/util/CapabilityUtil.java b/src/main/java/li/cil/oc/util/CapabilityUtil.java new file mode 100644 index 0000000000..aed9ac45b7 --- /dev/null +++ b/src/main/java/li/cil/oc/util/CapabilityUtil.java @@ -0,0 +1,30 @@ +package li.cil.oc.util; + +import com.gtnewhorizon.gtnhlib.capability.Capabilities; +import cpw.mods.fml.common.Loader; +import net.minecraft.tileentity.TileEntity; + +public final class CapabilityUtil { + + private static final boolean isGTNHLibLoaded = Loader.isModLoaded("gtnhlib"); + + public static boolean hasCapability(TileEntity tileEntity, Class capability) { + if (isGTNHLibLoaded) { + return Capabilities.getCapability(tileEntity, capability) != null; + } else { + return tileEntity != null && capability.isAssignableFrom(tileEntity.getClass()); + } + } + + public static T getCapability(TileEntity tileEntity, Class capability) { + if (isGTNHLibLoaded) { + return Capabilities.getCapability(tileEntity, capability); + } else { + if (tileEntity != null && capability.isAssignableFrom(tileEntity.getClass())) { + return capability.cast(tileEntity); + } else { + return null; + } + } + } +} diff --git a/src/main/scala/li/cil/oc/integration/gregtech/DriverEnergyContainer.java b/src/main/scala/li/cil/oc/integration/gregtech/DriverEnergyContainer.java index d4857bee30..6c37ff86ae 100644 --- a/src/main/scala/li/cil/oc/integration/gregtech/DriverEnergyContainer.java +++ b/src/main/scala/li/cil/oc/integration/gregtech/DriverEnergyContainer.java @@ -1,5 +1,6 @@ package li.cil.oc.integration.gregtech; +import com.gtnewhorizon.gtnhlib.capability.Capabilities; import gregtech.api.interfaces.tileentity.IBasicEnergyContainer; import li.cil.oc.api.machine.Arguments; import li.cil.oc.api.machine.Callback; @@ -19,7 +20,7 @@ public Class getTileEntityClass() { @Override public ManagedEnvironment createEnvironment( final World world, final int x, final int y, final int z, final ForgeDirection side) { - return new Environment((IBasicEnergyContainer) world.getTileEntity(x, y, z)); + return new Environment(Capabilities.getCapability(world.getTileEntity(x, y, z), IBasicEnergyContainer.class, side)); } public static final class Environment extends ManagedTileEntityEnvironment { diff --git a/src/main/scala/li/cil/oc/integration/gregtech/EventHandlerGregTech.scala b/src/main/scala/li/cil/oc/integration/gregtech/EventHandlerGregTech.scala index 162ac6fc7a..c7b8436217 100644 --- a/src/main/scala/li/cil/oc/integration/gregtech/EventHandlerGregTech.scala +++ b/src/main/scala/li/cil/oc/integration/gregtech/EventHandlerGregTech.scala @@ -1,24 +1,29 @@ package li.cil.oc.integration.gregtech +import com.gtnewhorizon.gtnhlib.capability.Capabilities import cpw.mods.fml.common.eventhandler.SubscribeEvent import gregtech.api.interfaces.IDamagableItem -import gregtech.api.interfaces.tileentity.IGregTechTileEntity +import gregtech.api.interfaces.tileentity.{IGregTechDeviceInformation, IGregTechTileEntity, ITurnable} import gregtech.api.items.MetaGeneratedTool import li.cil.oc.api.event.{GeolyzerEvent, RobotUsedToolEvent} import net.minecraft.item.ItemStack -import net.minecraftforge.common.util.ForgeDirection + import scala.collection.convert.WrapAsScala._ object EventHandlerGregTech { @SubscribeEvent def onGeolyzerAnalyze(e: GeolyzerEvent.Analyze) { val world = e.host.world - world.getTileEntity(e.x, e.y, e.z) match { - case tile : IGregTechTileEntity => - e.data += "facing" -> tile.getFrontFacing.name - e.data += "sensorInformation" -> tile.getInfoData() + val te = world.getTileEntity(e.x, e.y, e.z) + te match { + case turnable : ITurnable => + e.data += "facing" -> turnable.getFrontFacing.name case _ => } + val infoDevice = Capabilities.getCapability(te, classOf[IGregTechDeviceInformation]) + if (infoDevice != null) { + e.data += "sensorInformation" -> infoDevice.getInfoData + } } @SubscribeEvent