fix being able to place covers on connected cables
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user