From 110b8ea9b156e9f84e609a8d3a1edbadf37c8121 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 31 Oct 2021 13:16:23 +0100 Subject: [PATCH] fix being able to place covers on connected cables --- .../refinedstorage/block/CableBlock.java | 39 +++++++++++++------ .../refinedstorage/item/CoverItem.java | 11 +++--- 2 files changed, 33 insertions(+), 17 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java index f1f01a8cd..8229b6060 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java @@ -2,14 +2,11 @@ package com.refinedmods.refinedstorage.block; import com.refinedmods.refinedstorage.api.network.node.ICoverable; import com.refinedmods.refinedstorage.api.network.node.INetworkNodeProxy; -import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover; -import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType; import com.refinedmods.refinedstorage.block.shape.ShapeCache; import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability; import com.refinedmods.refinedstorage.render.ConstantsCable; import com.refinedmods.refinedstorage.tile.CableTile; -import com.refinedmods.refinedstorage.tile.NetworkNodeTile; import com.refinedmods.refinedstorage.util.BlockUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; @@ -169,20 +166,20 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable { } return tile.getCapability(NetworkNodeProxyCapability.NETWORK_NODE_PROXY_CAPABILITY, direction).isPresent() - && isSideNotCoveredOrHollow(tile, direction) - && isSideNotCoveredOrHollow(world.getTileEntity(pos.offset(direction)), direction.getOpposite()); + && isSideNotCoveredOrHollow(tile, direction) + && isSideNotCoveredOrHollow(world.getTileEntity(pos.offset(direction)), direction.getOpposite()); } - private boolean isSideNotCoveredOrHollow(TileEntity tile, Direction direction){ - if (tile == null){ + private boolean isSideNotCoveredOrHollow(TileEntity tile, Direction direction) { + if (tile == null) { return false; } return tile.getCapability(NetworkNodeProxyCapability.NETWORK_NODE_PROXY_CAPABILITY, direction) - .map(INetworkNodeProxy::getNode) - .map(iNetworkNode -> !(iNetworkNode instanceof ICoverable) - || (!((ICoverable) iNetworkNode).getCoverManager().hasCover(direction) - || ((ICoverable) iNetworkNode).getCoverManager().getCover(direction).getType() == CoverType.HOLLOW)) - .orElse(false); + .map(INetworkNodeProxy::getNode) + .map(iNetworkNode -> !(iNetworkNode instanceof ICoverable) + || (!((ICoverable) iNetworkNode).getCoverManager().hasCover(direction) + || ((ICoverable) iNetworkNode).getCoverManager().getCover(direction).getType() == CoverType.HOLLOW)) + .orElse(false); } private BlockState getState(BlockState currentState, IWorld world, BlockPos pos) { @@ -214,4 +211,22 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable { builder.add(NORTH, EAST, SOUTH, WEST, UP, DOWN, WATERLOGGED); } + + public static boolean hasVisualConnectionOnSide(BlockState state, Direction direction) { + switch (direction) { + case DOWN: + return state.get(DOWN); + case UP: + return state.get(UP); + case NORTH: + return state.get(NORTH); + case SOUTH: + return state.get(SOUTH); + case WEST: + return state.get(WEST); + case EAST: + return state.get(EAST); + } + return false; + } } diff --git a/src/main/java/com/refinedmods/refinedstorage/item/CoverItem.java b/src/main/java/com/refinedmods/refinedstorage/item/CoverItem.java index e71e9a36f..ebf0409f2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/CoverItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/CoverItem.java @@ -8,6 +8,7 @@ import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType; +import com.refinedmods.refinedstorage.block.CableBlock; import com.refinedmods.refinedstorage.tile.NetworkNodeTile; import com.refinedmods.refinedstorage.util.WorldUtils; import net.minecraft.block.Block; @@ -67,7 +68,7 @@ public class CoverItem extends Item { ItemStack item = getItem(stack); if (!item.isEmpty()) { - tooltip.add(((TextComponent)item.getItem().getDisplayName(item)).mergeStyle(TextFormatting.GRAY)); + tooltip.add(((TextComponent) item.getItem().getDisplayName(item)).mergeStyle(TextFormatting.GRAY)); } } @@ -118,7 +119,7 @@ public class CoverItem extends Item { TileEntity tile = world.getTileEntity(pos); // Support placing on the bottom side without too much hassle. - if (!canPlaceOn(tile)) { + if (!canPlaceOn(world, pos, facing)) { pos = pos.up(); facing = Direction.DOWN; @@ -126,7 +127,7 @@ public class CoverItem extends Item { tile = world.getTileEntity(pos); } - if (canPlaceOn(tile)) { + if (canPlaceOn(world, pos, facing)) { if (world.isRemote) { ModelDataManager.requestModelDataRefresh(tile); return ActionResultType.SUCCESS; @@ -155,8 +156,8 @@ public class CoverItem extends Item { } - private boolean canPlaceOn(TileEntity tile) { - return tile instanceof NetworkNodeTile && ((NetworkNodeTile) tile).getNode() instanceof ICoverable; + private boolean canPlaceOn(World world, BlockPos pos, Direction facing) { + return world.getTileEntity(pos) instanceof NetworkNodeTile && ((NetworkNodeTile) world.getTileEntity(pos)).getNode() instanceof ICoverable && !CableBlock.hasVisualConnectionOnSide(world.getBlockState(pos), facing); } protected Cover createCover(ItemStack stack) {