From 6a06ef6ae0e0b410dae23ba9aca442b0b63e312e Mon Sep 17 00:00:00 2001 From: Shadowfacts Date: Wed, 17 Feb 2021 22:29:18 -0500 Subject: [PATCH] Fix cables connected to non-network connected sides of devices --- .../phycon/api/NetworkComponentBlock.java | 6 +++--- .../shadowfacts/phycon/network/DeviceBlock.kt | 5 +++-- .../phycon/network/block/cable/CableBlock.kt | 18 +++++++++++++----- .../network/block/extractor/ExtractorBlock.kt | 5 +++-- .../phycon/network/block/miner/MinerBlock.kt | 5 +++-- .../block/netinterface/InterfaceBlock.kt | 4 ++-- .../network/block/netswitch/SwitchBlock.kt | 5 +++-- .../network/block/terminal/TerminalBlock.kt | 3 ++- .../phycon/network/block/test/DestBlock.kt | 3 ++- .../phycon/network/block/test/SourceBlock.kt | 4 ++-- 10 files changed, 36 insertions(+), 22 deletions(-) diff --git a/src/main/java/net/shadowfacts/phycon/api/NetworkComponentBlock.java b/src/main/java/net/shadowfacts/phycon/api/NetworkComponentBlock.java index b9f2412..05d3327 100644 --- a/src/main/java/net/shadowfacts/phycon/api/NetworkComponentBlock.java +++ b/src/main/java/net/shadowfacts/phycon/api/NetworkComponentBlock.java @@ -3,7 +3,7 @@ package net.shadowfacts.phycon.api; import net.minecraft.block.BlockState; import net.minecraft.util.math.BlockPos; import net.minecraft.util.math.Direction; -import net.minecraft.world.World; +import net.minecraft.world.WorldAccess; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -15,9 +15,9 @@ import java.util.Collection; public interface NetworkComponentBlock { @NotNull - Collection getNetworkConnectedSides(@NotNull BlockState state, @NotNull World world, @NotNull BlockPos pos); + Collection getNetworkConnectedSides(@NotNull BlockState state, @NotNull WorldAccess world, @NotNull BlockPos pos); @Nullable - Interface getNetworkInterfaceForSide(@NotNull Direction side, @NotNull BlockState state, @NotNull World world, @NotNull BlockPos pos); + Interface getNetworkInterfaceForSide(@NotNull Direction side, @NotNull BlockState state, @NotNull WorldAccess world, @NotNull BlockPos pos); } diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/DeviceBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/DeviceBlock.kt index 8c9d700..989b2b3 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/DeviceBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/DeviceBlock.kt @@ -5,6 +5,7 @@ import net.minecraft.entity.player.PlayerEntity import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.api.Interface import net.shadowfacts.phycon.api.NetworkComponentBlock import net.shadowfacts.phycon.block.BlockWithEntity @@ -14,9 +15,9 @@ import net.shadowfacts.phycon.block.BlockWithEntity */ abstract class DeviceBlock(settings: Settings): BlockWithEntity(settings), NetworkComponentBlock { - abstract override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection + abstract override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection - override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: World, pos: BlockPos): Interface? { + override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: WorldAccess, pos: BlockPos): Interface? { return getBlockEntity(world, pos)!! } diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/cable/CableBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/cable/CableBlock.kt index 8ab2c0d..b0daaad 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/cable/CableBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/cable/CableBlock.kt @@ -67,7 +67,7 @@ class CableBlock: Block( } } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection { val set = EnumSet.noneOf(Direction::class.java) for ((side, prop) in CONNECTIONS) { if (state[prop] == CableConnection.ON) { @@ -100,8 +100,10 @@ class CableBlock: Block( } private fun getConnectionStateInDirection(world: WorldAccess, pos: BlockPos, direction: Direction): CableConnection { - val state = world.getBlockState(pos.offset(direction)) - return when (state.block) { + val offsetPos = pos.offset(direction) + val state = world.getBlockState(offsetPos) + val block = state.block + return when (block) { this -> { val prop = CONNECTIONS[direction.opposite] when (state[prop]) { @@ -109,12 +111,18 @@ class CableBlock: Block( else -> CableConnection.ON } } - is NetworkComponentBlock -> CableConnection.ON + is NetworkComponentBlock -> { + if (block.getNetworkConnectedSides(state, world, offsetPos).contains(direction.opposite)) { + CableConnection.ON + } else { + CableConnection.OFF + } + } else -> CableConnection.OFF } } - override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: World, pos: BlockPos): Interface? { + override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: WorldAccess, pos: BlockPos): Interface? { // cables don't have network interfaces return null } diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/extractor/ExtractorBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/extractor/ExtractorBlock.kt index 8ccb565..618bacf 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/extractor/ExtractorBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/extractor/ExtractorBlock.kt @@ -16,6 +16,7 @@ import net.minecraft.util.shape.VoxelShape import net.minecraft.util.shape.VoxelShapes import net.minecraft.world.BlockView import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.api.Interface import net.shadowfacts.phycon.network.DeviceBlock @@ -67,11 +68,11 @@ class ExtractorBlock: DeviceBlock(Settings.of(Material.MET } } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection { return EnumSet.of(state[FACING].opposite) } - override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: World, pos: BlockPos): Interface? { + override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: WorldAccess, pos: BlockPos): Interface? { return if (side == state[FACING].opposite) { getBlockEntity(world, pos) } else { diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/miner/MinerBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/miner/MinerBlock.kt index f4c6a37..77a07a8 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/miner/MinerBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/miner/MinerBlock.kt @@ -13,6 +13,7 @@ import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction import net.minecraft.world.BlockView import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.api.Interface import net.shadowfacts.phycon.network.DeviceBlock @@ -29,11 +30,11 @@ class MinerBlock: DeviceBlock(Settings.of(Material.METAL)) { val FACING = Properties.FACING } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection { return EnumSet.of(state[FACING].opposite) } - override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: World, pos: BlockPos): Interface? { + override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: WorldAccess, pos: BlockPos): Interface? { return if (side == state[FACING]) { null } else { diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/netinterface/InterfaceBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/netinterface/InterfaceBlock.kt index 60a4680..cab6826 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/netinterface/InterfaceBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/netinterface/InterfaceBlock.kt @@ -63,13 +63,13 @@ class InterfaceBlock: DeviceBlock(Settings.of(Material.MET } } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection { val set = EnumSet.of(state[CABLE_CONNECTION]) set.remove(state[FACING]) return set } - override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: World, pos: BlockPos): Interface? { + override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: WorldAccess, pos: BlockPos): Interface? { return if (side == state[FACING]) { null } else { diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/netswitch/SwitchBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/netswitch/SwitchBlock.kt index 03ae002..af6a032 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/netswitch/SwitchBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/netswitch/SwitchBlock.kt @@ -9,6 +9,7 @@ import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction import net.minecraft.world.BlockView import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.api.Interface import net.shadowfacts.phycon.api.NetworkComponentBlock @@ -26,11 +27,11 @@ class SwitchBlock: BlockWithEntity(Settings.of(Material.METAL val ID = Identifier(PhysicalConnectivity.MODID, "switch") } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection { return EnumSet.allOf(Direction::class.java) } - override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: World, pos: BlockPos): Interface? { + override fun getNetworkInterfaceForSide(side: Direction, state: BlockState, world: WorldAccess, pos: BlockPos): Interface? { return getBlockEntity(world, pos)?.interfaces?.find { it.side == side } } diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/terminal/TerminalBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/terminal/TerminalBlock.kt index 09e2ed3..c665f91 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/terminal/TerminalBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/terminal/TerminalBlock.kt @@ -13,6 +13,7 @@ import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction import net.minecraft.world.BlockView import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.api.NetworkComponentBlock import net.shadowfacts.phycon.network.DeviceBlock @@ -29,7 +30,7 @@ class TerminalBlock: DeviceBlock(Settings.of(Material.METAL val ID = Identifier(PhysicalConnectivity.MODID, "terminal") } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): Collection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): Collection { return EnumSet.allOf(Direction::class.java) } diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/test/DestBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/test/DestBlock.kt index 10ac59c..aebe862 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/test/DestBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/test/DestBlock.kt @@ -11,6 +11,7 @@ import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction import net.minecraft.world.BlockView import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.network.DeviceBlock import java.util.* @@ -28,7 +29,7 @@ class DestBlock: DeviceBlock(Settings.of(Material.METAL)) { return DestBlockEntity() } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): MutableCollection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): MutableCollection { return EnumSet.allOf(Direction::class.java) } diff --git a/src/main/kotlin/net/shadowfacts/phycon/network/block/test/SourceBlock.kt b/src/main/kotlin/net/shadowfacts/phycon/network/block/test/SourceBlock.kt index 3ac037b..30c53b7 100644 --- a/src/main/kotlin/net/shadowfacts/phycon/network/block/test/SourceBlock.kt +++ b/src/main/kotlin/net/shadowfacts/phycon/network/block/test/SourceBlock.kt @@ -6,7 +6,7 @@ import net.minecraft.util.Identifier import net.minecraft.util.math.BlockPos import net.minecraft.util.math.Direction import net.minecraft.world.BlockView -import net.minecraft.world.World +import net.minecraft.world.WorldAccess import net.shadowfacts.phycon.PhysicalConnectivity import net.shadowfacts.phycon.network.DeviceBlock import java.util.* @@ -24,7 +24,7 @@ class SourceBlock: DeviceBlock(Settings.of(Material.METAL)) { return SourceBlockEntity() } - override fun getNetworkConnectedSides(state: BlockState, world: World, pos: BlockPos): MutableCollection { + override fun getNetworkConnectedSides(state: BlockState, world: WorldAccess, pos: BlockPos): MutableCollection { return EnumSet.allOf(Direction::class.java) }