From 381dc041fe74037af632be4b18f83e4322ff3230 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20N=C3=BCcke?= Date: Tue, 29 Dec 2020 17:33:45 +0100 Subject: [PATCH] Support RedstoneEmitter capability in computer. --- .../cil/oc2/common/block/ComputerBlock.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/src/main/java/li/cil/oc2/common/block/ComputerBlock.java b/src/main/java/li/cil/oc2/common/block/ComputerBlock.java index 67003d27..4657cfb4 100644 --- a/src/main/java/li/cil/oc2/common/block/ComputerBlock.java +++ b/src/main/java/li/cil/oc2/common/block/ComputerBlock.java @@ -1,7 +1,9 @@ package li.cil.oc2.common.block; +import li.cil.oc2.api.bus.device.capabilities.RedstoneEmitter; import li.cil.oc2.client.gui.TerminalScreen; import li.cil.oc2.common.block.entity.ComputerTileEntity; +import li.cil.oc2.common.capabilities.Capabilities; import li.cil.oc2.common.container.ComputerContainer; import li.cil.oc2.common.init.TileEntities; import li.cil.oc2.common.integration.Wrenches; @@ -64,6 +66,34 @@ public final class ComputerBlock extends HorizontalBlock { return TileEntities.COMPUTER_TILE_ENTITY.get().create(); } + @SuppressWarnings("deprecation") + @Override + public boolean canProvidePower(final BlockState state) { + return true; + } + + @SuppressWarnings("deprecation") + @Override + public int getWeakPower(final BlockState state, final IBlockReader world, final BlockPos pos, final Direction side) { + if (side.getAxis().getPlane() == Direction.Plane.HORIZONTAL) { + final TileEntity tileEntity = world.getTileEntity(pos); + if (tileEntity != null) { + // Redstone requests info for faces with external perspective. Capabilities treat + // the Direction from internal perspective, so flip it. + return tileEntity.getCapability(Capabilities.REDSTONE_EMITTER, side.getOpposite()) + .map(RedstoneEmitter::getRedstoneOutput) + .orElse(0); + } + } + return super.getWeakPower(state, world, pos, side); + } + + @SuppressWarnings("deprecation") + @Override + public int getStrongPower(final BlockState state, final IBlockReader world, final BlockPos pos, final Direction side) { + return getWeakPower(state, world, pos, side); + } + @SuppressWarnings("deprecation") @Override public void neighborChanged(final BlockState state, final World world, final BlockPos pos, final Block changedBlock, final BlockPos changedBlockPos, final boolean isMoving) {