Skip to content

Commit

Permalink
Accept capability for IBasicEnergyContainer & IGregTechDeviceInformat…
Browse files Browse the repository at this point in the history
…ion (#151)
  • Loading branch information
miozune authored Feb 24, 2025
1 parent e420c61 commit 1647ff6
Show file tree
Hide file tree
Showing 6 changed files with 48 additions and 10 deletions.
2 changes: 1 addition & 1 deletion dependencies.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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}
Expand Down
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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);
}
}
3 changes: 2 additions & 1 deletion src/main/java/li/cil/oc/api/prefab/DriverTileEntity.java
Original file line number Diff line number Diff line change
@@ -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;

Expand All @@ -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);
}
}
30 changes: 30 additions & 0 deletions src/main/java/li/cil/oc/util/CapabilityUtil.java
Original file line number Diff line number Diff line change
@@ -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 <T> boolean hasCapability(TileEntity tileEntity, Class<T> capability) {
if (isGTNHLibLoaded) {
return Capabilities.getCapability(tileEntity, capability) != null;
} else {
return tileEntity != null && capability.isAssignableFrom(tileEntity.getClass());
}
}

public static <T> T getCapability(TileEntity tileEntity, Class<T> capability) {
if (isGTNHLibLoaded) {
return Capabilities.getCapability(tileEntity, capability);
} else {
if (tileEntity != null && capability.isAssignableFrom(tileEntity.getClass())) {
return capability.cast(tileEntity);
} else {
return null;
}
}
}
}
Original file line number Diff line number Diff line change
@@ -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;
Expand All @@ -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<IBasicEnergyContainer> {
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down

0 comments on commit 1647ff6

Please sign in to comment.