diff --git a/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java b/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java index 2f0a56dd..2fd252d9 100644 --- a/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java +++ b/src/main/java/li/cil/oc2/common/blockentity/DiskDriveBlockEntity.java @@ -2,7 +2,6 @@ package li.cil.oc2.common.blockentity; -import li.cil.oc2.api.bus.device.vm.VMDevice; import li.cil.oc2.common.Config; import li.cil.oc2.common.Constants; import li.cil.oc2.common.block.DiskDriveBlock; @@ -67,10 +66,6 @@ public final class DiskDriveBlockEntity extends ModBlockEntity { /////////////////////////////////////////////////////////////////// - public VMDevice getDevice() { - return device; - } - public boolean canInsert(final ItemStack stack) { return !stack.isEmpty() && ItemTags.DEVICES_FLOPPY.contains(stack.getItem()); } @@ -120,6 +115,10 @@ public final class DiskDriveBlockEntity extends ModBlockEntity { @Override protected void collectCapabilities(final CapabilityCollector collector, @Nullable final Direction direction) { collector.offer(Capabilities.ITEM_HANDLER, itemHandler); + + if (direction == getBlockState().getValue(DiskDriveBlock.FACING).getOpposite()) { + collector.offer(Capabilities.DEVICE, device); + } } @Override diff --git a/src/main/java/li/cil/oc2/common/blockentity/ProjectorBlockEntity.java b/src/main/java/li/cil/oc2/common/blockentity/ProjectorBlockEntity.java index 20651190..3238856c 100644 --- a/src/main/java/li/cil/oc2/common/blockentity/ProjectorBlockEntity.java +++ b/src/main/java/li/cil/oc2/common/blockentity/ProjectorBlockEntity.java @@ -92,10 +92,6 @@ public final class ProjectorBlockEntity extends ModBlockEntity implements Tickab /////////////////////////////////////////////////////////////// - public ProjectorVMDevice getProjectorDevice() { - return projectorDevice; - } - public boolean isProjecting() { if (!isProjecting || level == null) { return false; @@ -253,6 +249,10 @@ public final class ProjectorBlockEntity extends ModBlockEntity implements Tickab if (projectorsUseEnergy()) { collector.offer(Capabilities.ENERGY_STORAGE, energy); } + + if (direction == getBlockState().getValue(ProjectorBlock.FACING).getOpposite()) { + collector.offer(Capabilities.DEVICE, projectorDevice); + } } /////////////////////////////////////////////////////////////// diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java b/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java index 8d4203a0..04807096 100644 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java +++ b/src/main/java/li/cil/oc2/common/bus/device/provider/Providers.java @@ -33,9 +33,6 @@ public final class Providers { BLOCK_DEVICE_PROVIDERS.register("fluid_handler", FluidHandlerBlockDeviceProvider::new); BLOCK_DEVICE_PROVIDERS.register("item_handler", ItemHandlerBlockDeviceProvider::new); - BLOCK_DEVICE_PROVIDERS.register("disk_drive", DiskDriveDeviceProvider::new); - BLOCK_DEVICE_PROVIDERS.register("projector", ProjectorDeviceProvider::new); - ITEM_DEVICE_PROVIDERS.register("memory", MemoryItemDeviceProvider::new); ITEM_DEVICE_PROVIDERS.register("hard_drive", HardDriveItemDeviceProvider::new); ITEM_DEVICE_PROVIDERS.register("hard_drive_custom", HardDriveWithExternalDataItemDeviceProvider::new); diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/block/DiskDriveDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/block/DiskDriveDeviceProvider.java deleted file mode 100644 index 75d9ded8..00000000 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/block/DiskDriveDeviceProvider.java +++ /dev/null @@ -1,36 +0,0 @@ -/* SPDX-License-Identifier: MIT */ - -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.block.DiskDriveBlock; -import li.cil.oc2.common.blockentity.BlockEntities; -import li.cil.oc2.common.blockentity.DiskDriveBlockEntity; -import li.cil.oc2.common.bus.device.provider.util.AbstractBlockEntityDeviceProvider; -import net.minecraft.core.Direction; - -public final class DiskDriveDeviceProvider extends AbstractBlockEntityDeviceProvider { - public DiskDriveDeviceProvider() { - super(BlockEntities.DISK_DRIVE.get()); - } - - /////////////////////////////////////////////////////////////////// - - // NB: Does *not* need an unmount() implementation, because the blob UUID is stored on the item. - - /////////////////////////////////////////////////////////////////// - - @Override - protected Invalidatable getBlockDevice(final BlockDeviceQuery query, final DiskDriveBlockEntity blockEntity) { - // We only allow connecting to exactly one face of the disk drive to ensure only one - // bus (and thus, one VM) will access the device at any single time. - final Direction blockFacing = blockEntity.getBlockState().getValue(DiskDriveBlock.FACING); - if (query.getQuerySide() == blockFacing.getOpposite()) { - return Invalidatable.of(blockEntity.getDevice()); - } else { - return Invalidatable.empty(); - } - } -} diff --git a/src/main/java/li/cil/oc2/common/bus/device/provider/block/ProjectorDeviceProvider.java b/src/main/java/li/cil/oc2/common/bus/device/provider/block/ProjectorDeviceProvider.java deleted file mode 100644 index d3e142f4..00000000 --- a/src/main/java/li/cil/oc2/common/bus/device/provider/block/ProjectorDeviceProvider.java +++ /dev/null @@ -1,32 +0,0 @@ -/* SPDX-License-Identifier: MIT */ - -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.block.ProjectorBlock; -import li.cil.oc2.common.blockentity.BlockEntities; -import li.cil.oc2.common.blockentity.ProjectorBlockEntity; -import li.cil.oc2.common.bus.device.provider.util.AbstractBlockEntityDeviceProvider; -import net.minecraft.core.Direction; - -public final class ProjectorDeviceProvider extends AbstractBlockEntityDeviceProvider { - public ProjectorDeviceProvider() { - super(BlockEntities.PROJECTOR.get()); - } - - /////////////////////////////////////////////////////////////// - - @Override - protected Invalidatable getBlockDevice(final BlockDeviceQuery query, final ProjectorBlockEntity blockEntity) { - // We only allow connecting to exactly one face of the projector to ensure only one - // bus (and thus, one VM) will access the device at any single time. - final Direction blockFacing = blockEntity.getBlockState().getValue(ProjectorBlock.FACING); - if (query.getQuerySide() == blockFacing.getOpposite()) { - return Invalidatable.of(blockEntity.getProjectorDevice()); - } else { - return Invalidatable.empty(); - } - } -}