Accept capability for IBasicEnergyContainer & IGregTechDeviceInformation (#151)

This commit is contained in:
miozune 2025-02-25 03:13:57 +09:00 committed by GitHub
parent e420c61b1f
commit 1647ff6597
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 48 additions and 10 deletions

View File

@ -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}

View File

@ -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 abstract class DriverSidedTileEntity implements li.cil.oc.api.driver.Side
return false;
}
final TileEntity tileEntity = world.getTileEntity(x, y, z);
return tileEntity != null && filter.isAssignableFrom(tileEntity.getClass());
return CapabilityUtil.hasCapability(tileEntity, filter);
}
}

View File

@ -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 abstract class DriverTileEntity implements li.cil.oc.api.driver.Block {
return false;
}
final TileEntity tileEntity = world.getTileEntity(x, y, z);
return tileEntity != null && filter.isAssignableFrom(tileEntity.getClass());
return CapabilityUtil.hasCapability(tileEntity, filter);
}
}

View File

@ -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;
}
}
}
}

View File

@ -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 final class DriverEnergyContainer extends DriverSidedTileEntity {
@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> {

View File

@ -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