Wrench now removes covers

This commit is contained in:
Buuz135
2021-09-11 13:15:45 +02:00
parent 2f90b6b592
commit 3fa1fbb272
3 changed files with 41 additions and 2 deletions

View File

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

View File

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

View File

@@ -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;