From 2a27275ba329f860fdd02ad347927d2bd81a0ea0 Mon Sep 17 00:00:00 2001 From: Darkere Date: Sun, 31 Oct 2021 12:55:44 +0100 Subject: [PATCH] fix covers not preventing netrwork connections --- .../api/network/node/INetworkNode.java | 10 ++++++++++ .../apiimpl/network/node/CableNetworkNode.java | 8 +++++++- .../apiimpl/network/node/NetworkNode.java | 15 +++++++++------ .../apiimpl/network/node/RelayNetworkNode.java | 2 +- .../node/WirelessTransmitterNetworkNode.java | 2 +- 5 files changed, 28 insertions(+), 9 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/api/network/node/INetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/api/network/node/INetworkNode.java index d1b71dc12..bf8db471b 100644 --- a/src/main/java/com/refinedmods/refinedstorage/api/network/node/INetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/api/network/node/INetworkNode.java @@ -3,6 +3,7 @@ package com.refinedmods.refinedstorage.api.network.node; import com.refinedmods.refinedstorage.api.network.INetwork; import net.minecraft.item.ItemStack; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -91,6 +92,15 @@ public interface INetworkNode { */ ResourceLocation getId(); + /** + * @param direction the direction + * @return whether a network signal can be conducted in the given direction. + */ + + default boolean canConduct(Direction direction) { + return true; + } + /** * @param owner the owner */ diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CableNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CableNetworkNode.java index 27d6f0bbc..7491f3a1e 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CableNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/CableNetworkNode.java @@ -3,8 +3,9 @@ package com.refinedmods.refinedstorage.apiimpl.network.node; import com.refinedmods.refinedstorage.RS; import com.refinedmods.refinedstorage.api.network.node.ICoverable; import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverManager; -import com.refinedmods.refinedstorage.util.WorldUtils; +import com.refinedmods.refinedstorage.apiimpl.network.node.cover.CoverType; import net.minecraft.nbt.CompoundNBT; +import net.minecraft.util.Direction; import net.minecraft.util.ResourceLocation; import net.minecraft.util.math.BlockPos; import net.minecraft.world.World; @@ -19,6 +20,11 @@ public class CableNetworkNode extends NetworkNode implements ICoverable { this.coverManager = new CoverManager(this); } + @Override + public boolean canConduct(Direction direction) { + return !coverManager.hasCover(direction) || coverManager.getCover(direction).getType() == CoverType.HOLLOW; + } + @Override public int getEnergyUsage() { return RS.SERVER_CONFIG.getCable().getUsage(); diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java index 4b1efd2a7..19e7295d6 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/NetworkNode.java @@ -8,6 +8,7 @@ import com.refinedmods.refinedstorage.apiimpl.API; import com.refinedmods.refinedstorage.block.BaseBlock; import com.refinedmods.refinedstorage.block.NetworkNodeBlock; import com.refinedmods.refinedstorage.tile.config.RedstoneMode; +import com.refinedmods.refinedstorage.util.NetworkUtils; import net.minecraft.block.BlockState; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -224,18 +225,20 @@ public abstract class NetworkNode implements INetworkNode, INetworkNodeVisitor { return world; } - /** - * @param direction the direction - * @return whether a network signal can be conducted in the given direction. - */ - protected boolean canConduct(Direction direction) { + + @Override + public boolean canConduct(Direction direction) { return true; } @Override public void visit(Operator operator) { for (Direction facing : Direction.values()) { - if (canConduct(facing)) { + INetworkNode oppositeNode = NetworkUtils.getNodeFromTile(world.getTileEntity(pos.offset(facing))); + if (oppositeNode == null) { + continue; + } + if (canConduct(facing) && oppositeNode.canConduct(facing.getOpposite())) { operator.apply(world, pos.offset(facing), facing.getOpposite()); } } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RelayNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RelayNetworkNode.java index 9e4cec24f..866616dd8 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RelayNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/RelayNetworkNode.java @@ -37,7 +37,7 @@ public class RelayNetworkNode extends NetworkNode { } @Override - protected boolean canConduct(Direction direction) { + public boolean canConduct(Direction direction) { return canUpdate(); } diff --git a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java index 1b496e417..282746560 100644 --- a/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java +++ b/src/main/java/com/refinedmods/refinedstorage/apiimpl/network/node/WirelessTransmitterNetworkNode.java @@ -75,7 +75,7 @@ public class WirelessTransmitterNetworkNode extends NetworkNode implements IWire } @Override - protected boolean canConduct(Direction direction) { + public boolean canConduct(Direction direction) { return Direction.DOWN.equals(direction); }