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.ICoverable;
|
||||||
import com.refinedmods.refinedstorage.api.network.node.INetworkNodeProxy;
|
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.apiimpl.network.node.cover.CoverType;
|
||||||
import com.refinedmods.refinedstorage.block.shape.ShapeCache;
|
import com.refinedmods.refinedstorage.block.shape.ShapeCache;
|
||||||
import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability;
|
import com.refinedmods.refinedstorage.capability.NetworkNodeProxyCapability;
|
||||||
import com.refinedmods.refinedstorage.render.ConstantsCable;
|
import com.refinedmods.refinedstorage.render.ConstantsCable;
|
||||||
import com.refinedmods.refinedstorage.tile.CableTile;
|
import com.refinedmods.refinedstorage.tile.CableTile;
|
||||||
import com.refinedmods.refinedstorage.tile.NetworkNodeTile;
|
|
||||||
import com.refinedmods.refinedstorage.util.BlockUtils;
|
import com.refinedmods.refinedstorage.util.BlockUtils;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
import net.minecraft.block.BlockState;
|
import net.minecraft.block.BlockState;
|
||||||
@@ -173,8 +170,8 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable {
|
|||||||
&& isSideNotCoveredOrHollow(world.getTileEntity(pos.offset(direction)), direction.getOpposite());
|
&& isSideNotCoveredOrHollow(world.getTileEntity(pos.offset(direction)), direction.getOpposite());
|
||||||
}
|
}
|
||||||
|
|
||||||
private boolean isSideNotCoveredOrHollow(TileEntity tile, Direction direction){
|
private boolean isSideNotCoveredOrHollow(TileEntity tile, Direction direction) {
|
||||||
if (tile == null){
|
if (tile == null) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return tile.getCapability(NetworkNodeProxyCapability.NETWORK_NODE_PROXY_CAPABILITY, direction)
|
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);
|
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.Cover;
|
||||||
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager;
|
||||||
import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType;
|
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.tile.NetworkNodeTile;
|
||||||
import com.refinedmods.refinedstorage.util.WorldUtils;
|
import com.refinedmods.refinedstorage.util.WorldUtils;
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
@@ -67,7 +68,7 @@ public class CoverItem extends Item {
|
|||||||
ItemStack item = getItem(stack);
|
ItemStack item = getItem(stack);
|
||||||
|
|
||||||
if (!item.isEmpty()) {
|
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);
|
TileEntity tile = world.getTileEntity(pos);
|
||||||
|
|
||||||
// Support placing on the bottom side without too much hassle.
|
// Support placing on the bottom side without too much hassle.
|
||||||
if (!canPlaceOn(tile)) {
|
if (!canPlaceOn(world, pos, facing)) {
|
||||||
pos = pos.up();
|
pos = pos.up();
|
||||||
|
|
||||||
facing = Direction.DOWN;
|
facing = Direction.DOWN;
|
||||||
@@ -126,7 +127,7 @@ public class CoverItem extends Item {
|
|||||||
tile = world.getTileEntity(pos);
|
tile = world.getTileEntity(pos);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (canPlaceOn(tile)) {
|
if (canPlaceOn(world, pos, facing)) {
|
||||||
if (world.isRemote) {
|
if (world.isRemote) {
|
||||||
ModelDataManager.requestModelDataRefresh(tile);
|
ModelDataManager.requestModelDataRefresh(tile);
|
||||||
return ActionResultType.SUCCESS;
|
return ActionResultType.SUCCESS;
|
||||||
@@ -155,8 +156,8 @@ public class CoverItem extends Item {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
private boolean canPlaceOn(TileEntity tile) {
|
private boolean canPlaceOn(World world, BlockPos pos, Direction facing) {
|
||||||
return tile instanceof NetworkNodeTile && ((NetworkNodeTile<?>) tile).getNode() instanceof ICoverable;
|
return world.getTileEntity(pos) instanceof NetworkNodeTile && ((NetworkNodeTile<?>) world.getTileEntity(pos)).getNode() instanceof ICoverable && !CableBlock.hasVisualConnectionOnSide(world.getBlockState(pos), facing);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected Cover createCover(ItemStack stack) {
|
protected Cover createCover(ItemStack stack) {
|
||||||
|
|||||||
Reference in New Issue
Block a user