diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/cover/CoverManager.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/cover/CoverManager.java index 0e81cc9d9..977b16b4a 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/cover/CoverManager.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/cover/CoverManager.java @@ -72,6 +72,22 @@ public class CoverManager { return false; } + @Nullable + public Cover removeCover(Direction direction){ + if (hasCover(direction)){ + Cover cover = covers.remove(direction); + + node.markDirty(); + + if (node.getNetwork() != null) { + node.getNetwork().getNodeGraph().invalidate(Action.PERFORM, node.getNetwork().getWorld(), node.getNetwork().getPosition()); + } + + return cover; + } + return null; + } + public void readFromNbt(CompoundNBT nbt) { covers.clear(); System.out.println(nbt); diff --git a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java index 4e2bba435..c19bc0bea 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/CableBlock.java @@ -123,6 +123,12 @@ public class CableBlock extends NetworkNodeBlock implements IWaterLoggable { super.onDirectionChanged(world, pos, newDirection); } + @Override + public void neighborChanged(BlockState state, World world, BlockPos pos, Block blockIn, BlockPos fromPos, boolean isMoving) { + super.neighborChanged(state, world, pos, blockIn, fromPos, isMoving); + world.setBlockState(pos, getState(world.getBlockState(pos), world, pos)); + } + @Nullable @Override public BlockState getStateForPlacement(BlockItemUseContext ctx) { diff --git a/src/main/java/com/refinedmods/refinedstorage/item/WrenchItem.java b/src/main/java/com/refinedmods/refinedstorage/item/WrenchItem.java index 28c6afd7b..feb331842 100644 --- a/src/main/java/com/refinedmods/refinedstorage/item/WrenchItem.java +++ b/src/main/java/com/refinedmods/refinedstorage/item/WrenchItem.java @@ -2,7 +2,11 @@ package com.refinedmods.refinedstorage.item; import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.api.network.INetwork; +import com.refinedmods.refinedstorage.api.network.node.ICoverable; +import com.refinedmods.refinedstorage.api.network.node.INetworkNode; import com.refinedmods.refinedstorage.api.network.security.Permission; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.Cover; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType; import com.refinedmods.refinedstorage.util.NetworkUtils; import com.refinedmods.refinedstorage.util.WorldUtils; import net.minecraft.block.BlockState; @@ -11,6 +15,7 @@ import net.minecraft.item.ItemStack; import net.minecraft.item.ItemUseContext; import net.minecraft.util.ActionResultType; import net.minecraft.util.Rotation; +import net.minecraftforge.items.ItemHandlerHelper; public class WrenchItem extends Item { public WrenchItem() { @@ -23,15 +28,27 @@ public class WrenchItem extends Item { return ActionResultType.CONSUME; } - INetwork network = NetworkUtils.getNetworkFromNode(NetworkUtils.getNodeFromTile(ctx.getWorld().getTileEntity(ctx.getPos()))); + INetworkNode node = NetworkUtils.getNodeFromTile(ctx.getWorld().getTileEntity(ctx.getPos())); + INetwork network = NetworkUtils.getNetworkFromNode(node); if (network != null && !network.getSecurityManager().hasPermission(Permission.BUILD, ctx.getPlayer())) { WorldUtils.sendNoPermissionMessage(ctx.getPlayer()); return ActionResultType.FAIL; } - BlockState state = ctx.getWorld().getBlockState(ctx.getPos()); + if (node instanceof ICoverable && ((ICoverable) node).getCoverManager().hasCover(ctx.getFace())){ + Cover cover = ((ICoverable) node).getCoverManager().removeCover(ctx.getFace()); + if (cover != null){ + ItemStack stack1 = cover.getType().createStack(); + CoverItem.setItem(stack1, cover.getStack()); + ItemHandlerHelper.giveItemToPlayer(ctx.getPlayer(), stack1); + ctx.getWorld().notifyBlockUpdate(ctx.getPos(), state, state, 3); + ctx.getWorld().notifyNeighborsOfStateChange(ctx.getPos(), ctx.getWorld().getBlockState(ctx.getPos()).getBlock()); + return ActionResultType.SUCCESS; + } + } + ctx.getWorld().setBlockState(ctx.getPos(), state.rotate(ctx.getWorld(), ctx.getPos(), Rotation.CLOCKWISE_90)); return ActionResultType.CONSUME;