From ba5dedaa2fc36e71dc1ce7ab22a133663c3e3c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 29 Dec 2020 17:33:04 +0100 Subject: [PATCH] Added capability for redstone output, inline registration. --- .../device/capabilities/RedstoneEmitter.java | 16 +++++++++++++ .../bus/device/capabilities/package-info.java | 7 ++++++ .../oc2/common/capabilities/Capabilities.java | 14 ++++++++++- .../DeviceBusElementCapability.java | 24 ------------------- 4 files changed, 36 insertions(+), 25 deletions(-) create mode 100644 src/main/java/li/cil/oc2/api/bus/device/capabilities/RedstoneEmitter.java create mode 100644 src/main/java/li/cil/oc2/api/bus/device/capabilities/package-info.java delete mode 100644 src/main/java/li/cil/oc2/common/capabilities/DeviceBusElementCapability.java diff --git a/src/main/java/li/cil/oc2/api/bus/device/capabilities/RedstoneEmitter.java b/src/main/java/li/cil/oc2/api/bus/device/capabilities/RedstoneEmitter.java new file mode 100644 index 00000000..5fffab6b --- /dev/null +++ b/src/main/java/li/cil/oc2/api/bus/device/capabilities/RedstoneEmitter.java @@ -0,0 +1,16 @@ +package li.cil.oc2.api.bus.device.capabilities; + +/** + * This interface may be provided as a capability by item components to signal + * to the containing {@link net.minecraft.tileentity.TileEntity} that they wish + * to emit a redstone signal. This is used by the built-in redstone interface + * card, for example. + */ +public interface RedstoneEmitter { + /** + * Returns the redstone output level for the side this interface was returned for. + * + * @return the redstone output level. + */ + int getRedstoneOutput(); +} diff --git a/src/main/java/li/cil/oc2/api/bus/device/capabilities/package-info.java b/src/main/java/li/cil/oc2/api/bus/device/capabilities/package-info.java new file mode 100644 index 00000000..7baa4840 --- /dev/null +++ b/src/main/java/li/cil/oc2/api/bus/device/capabilities/package-info.java @@ -0,0 +1,7 @@ +@ParametersAreNonnullByDefault +@MethodsReturnNonnullByDefault +package li.cil.oc2.api.bus.device.capabilities; + +import mcp.MethodsReturnNonnullByDefault; + +import javax.annotation.ParametersAreNonnullByDefault; \ No newline at end of file diff --git a/src/main/java/li/cil/oc2/common/capabilities/Capabilities.java b/src/main/java/li/cil/oc2/common/capabilities/Capabilities.java index 06e77800..1151d578 100644 --- a/src/main/java/li/cil/oc2/common/capabilities/Capabilities.java +++ b/src/main/java/li/cil/oc2/common/capabilities/Capabilities.java @@ -1,8 +1,10 @@ package li.cil.oc2.common.capabilities; import li.cil.oc2.api.bus.DeviceBusElement; +import li.cil.oc2.api.bus.device.capabilities.RedstoneEmitter; import net.minecraftforge.common.capabilities.Capability; import net.minecraftforge.common.capabilities.CapabilityInject; +import net.minecraftforge.common.capabilities.CapabilityManager; import net.minecraftforge.energy.IEnergyStorage; import net.minecraftforge.fluids.capability.IFluidHandler; import net.minecraftforge.items.IItemHandler; @@ -20,9 +22,19 @@ public final class Capabilities { @CapabilityInject(DeviceBusElement.class) public static Capability DEVICE_BUS_ELEMENT = null; + @CapabilityInject(RedstoneEmitter.class) + public static Capability REDSTONE_EMITTER = null; + /////////////////////////////////////////////////////////////////// public static void initialize() { - DeviceBusElementCapability.register(); + register(DeviceBusElement.class); + register(RedstoneEmitter.class); + } + + /////////////////////////////////////////////////////////////////// + + private static void register(final Class type) { + CapabilityManager.INSTANCE.register(type, new NullStorage<>(), () -> null); } } diff --git a/src/main/java/li/cil/oc2/common/capabilities/DeviceBusElementCapability.java b/src/main/java/li/cil/oc2/common/capabilities/DeviceBusElementCapability.java deleted file mode 100644 index 18781e69..00000000 --- a/src/main/java/li/cil/oc2/common/capabilities/DeviceBusElementCapability.java +++ /dev/null @@ -1,24 +0,0 @@ -package li.cil.oc2.common.capabilities; - -import li.cil.oc2.api.bus.DeviceBusElement; -import li.cil.oc2.common.bus.AbstractDeviceBusElement; -import net.minecraftforge.common.capabilities.CapabilityManager; -import net.minecraftforge.common.util.LazyOptional; - -import java.util.Collection; -import java.util.Optional; - -public final class DeviceBusElementCapability { - public static void register() { - CapabilityManager.INSTANCE.register(DeviceBusElement.class, new NullStorage<>(), Implementation::new); - } - - /////////////////////////////////////////////////////////////////// - - private static final class Implementation extends AbstractDeviceBusElement { - @Override - public Optional>> getNeighbors() { - return Optional.empty(); - } - } -}