fix being able to place covers on connected cables

This commit is contained in:
Darkere
2021-10-31 13:16:23 +01:00
parent 2a27275ba3
commit 110b8ea9b1
2 changed files with 33 additions and 17 deletions

View File

@@ -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;
@@ -173,8 +170,8 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable {
&& 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)
@@ -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;
}
}

View File

@@ -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) {