Added capability for redstone output, inline registration.

This commit is contained in:
Florian Nücke
2020-12-29 17:33:04 +01:00
parent 4ab4da29e1
commit ba5dedaa2f
4 changed files with 36 additions and 25 deletions

View File

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

View File

@@ -0,0 +1,7 @@
@ParametersAreNonnullByDefault
@MethodsReturnNonnullByDefault
package li.cil.oc2.api.bus.device.capabilities;
import mcp.MethodsReturnNonnullByDefault;
import javax.annotation.ParametersAreNonnullByDefault;

View File

@@ -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<DeviceBusElement> DEVICE_BUS_ELEMENT = null;
@CapabilityInject(RedstoneEmitter.class)
public static Capability<RedstoneEmitter> REDSTONE_EMITTER = null;
///////////////////////////////////////////////////////////////////
public static void initialize() {
DeviceBusElementCapability.register();
register(DeviceBusElement.class);
register(RedstoneEmitter.class);
}
///////////////////////////////////////////////////////////////////
private static <T> void register(final Class<T> type) {
CapabilityManager.INSTANCE.register(type, new NullStorage<>(), () -> null);
}
}

View File

@@ -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<Collection<LazyOptional<DeviceBusElement>>> getNeighbors() {
return Optional.empty();
}
}
}