Allow providing Devices as Capabilities on BlockEntities.
This commit is contained in:
@@ -3,6 +3,7 @@ package li.cil.oc2.api.bus.device;
|
||||
import li.cil.oc2.api.bus.DeviceBus;
|
||||
import li.cil.oc2.api.bus.DeviceBusController;
|
||||
import net.minecraft.nbt.CompoundTag;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
import net.minecraftforge.common.util.INBTSerializable;
|
||||
|
||||
/**
|
||||
@@ -11,6 +12,8 @@ import net.minecraftforge.common.util.INBTSerializable;
|
||||
* Which types are handled/supported by a bus depends on context of the {@link DeviceBusController}
|
||||
* managing the bus.
|
||||
* <p>
|
||||
* May be provided as a capability on {@link BlockEntity}s.
|
||||
* <p>
|
||||
* Note that it is strongly encouraged for implementations to provide an overloaded
|
||||
* {@link Object#equals(Object)} and {@link Object#hashCode()} so that identical devices can be
|
||||
* detected.
|
||||
|
||||
@@ -25,6 +25,7 @@ public final class Providers {
|
||||
public static void initialize() {
|
||||
BLOCK_DEVICE_PROVIDERS.register("block", BlockStateDeviceProvider::new);
|
||||
BLOCK_DEVICE_PROVIDERS.register("block_entity", BlockEntityDeviceProvider::new);
|
||||
BLOCK_DEVICE_PROVIDERS.register("block_entity/capability", BlockEntityCapabilityDeviceProvider::new);
|
||||
|
||||
BLOCK_DEVICE_PROVIDERS.register("energy_storage", EnergyStorageBlockDeviceProvider::new);
|
||||
BLOCK_DEVICE_PROVIDERS.register("fluid_handler", FluidHandlerBlockDeviceProvider::new);
|
||||
|
||||
@@ -0,0 +1,19 @@
|
||||
package li.cil.oc2.common.bus.device.provider.block;
|
||||
|
||||
import li.cil.oc2.api.bus.device.Device;
|
||||
import li.cil.oc2.api.bus.device.provider.BlockDeviceQuery;
|
||||
import li.cil.oc2.api.util.Invalidatable;
|
||||
import li.cil.oc2.common.bus.device.provider.util.AbstractBlockEntityCapabilityDeviceProvider;
|
||||
import li.cil.oc2.common.capabilities.Capabilities;
|
||||
import net.minecraft.world.level.block.entity.BlockEntity;
|
||||
|
||||
public final class BlockEntityCapabilityDeviceProvider extends AbstractBlockEntityCapabilityDeviceProvider<Device, BlockEntity> {
|
||||
public BlockEntityCapabilityDeviceProvider() {
|
||||
super(() -> Capabilities.DEVICE);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected Invalidatable<Device> getBlockDevice(final BlockDeviceQuery query, final Device device) {
|
||||
return Invalidatable.of(device);
|
||||
}
|
||||
}
|
||||
@@ -1,6 +1,7 @@
|
||||
package li.cil.oc2.common.capabilities;
|
||||
|
||||
import li.cil.oc2.api.bus.DeviceBusElement;
|
||||
import li.cil.oc2.api.bus.device.Device;
|
||||
import li.cil.oc2.api.capabilities.NetworkInterface;
|
||||
import li.cil.oc2.api.capabilities.RedstoneEmitter;
|
||||
import li.cil.oc2.api.capabilities.Robot;
|
||||
@@ -20,6 +21,7 @@ public final class Capabilities {
|
||||
public static final Capability<IItemHandler> ITEM_HANDLER = CapabilityManager.get(new CapabilityToken<>() { });
|
||||
|
||||
public static final Capability<DeviceBusElement> DEVICE_BUS_ELEMENT = CapabilityManager.get(new CapabilityToken<>() { });
|
||||
public static final Capability<Device> DEVICE = CapabilityManager.get(new CapabilityToken<>() { });
|
||||
public static final Capability<RedstoneEmitter> REDSTONE_EMITTER = CapabilityManager.get(new CapabilityToken<>() { });
|
||||
public static final Capability<NetworkInterface> NETWORK_INTERFACE = CapabilityManager.get(new CapabilityToken<>() { });
|
||||
public static final Capability<TerminalUserProvider> TERMINAL_USER_PROVIDER = CapabilityManager.get(new CapabilityToken<>() { });
|
||||
@@ -30,6 +32,7 @@ public final class Capabilities {
|
||||
@SubscribeEvent
|
||||
public static void initialize(final RegisterCapabilitiesEvent event) {
|
||||
event.register(DeviceBusElement.class);
|
||||
event.register(Device.class);
|
||||
event.register(RedstoneEmitter.class);
|
||||
event.register(NetworkInterface.class);
|
||||
event.register(TerminalUserProvider.class);
|
||||
|
||||
Reference in New Issue
Block a user