From e372c150b0f013b499f21fc4ddff7d91422aea5f Mon Sep 17 00:00:00 2001 From: Darkere Date: Wed, 9 Jun 2021 17:56:57 +0200 Subject: [PATCH] fix detector crashing when dyed and deactivating powered state (#2974) --- .../refinedstorage/block/DetectorBlock.java | 12 +++++++++--- .../refinedmods/refinedstorage/util/ColorMap.java | 15 ++++++++------- 2 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java b/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java index 62c78217a..953251bc2 100644 --- a/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java +++ b/src/main/java/com/refinedmods/refinedstorage/block/DetectorBlock.java @@ -5,11 +5,13 @@ import com.refinedmods.refinedstorage.container.DetectorContainer; import com.refinedmods.refinedstorage.container.factory.PositionalTileContainerProvider; import com.refinedmods.refinedstorage.tile.DetectorTile; import com.refinedmods.refinedstorage.util.BlockUtils; +import com.refinedmods.refinedstorage.util.ColorMap; import com.refinedmods.refinedstorage.util.NetworkUtils; import net.minecraft.block.Block; import net.minecraft.block.BlockState; import net.minecraft.entity.player.PlayerEntity; import net.minecraft.entity.player.ServerPlayerEntity; +import net.minecraft.item.DyeColor; import net.minecraft.state.BooleanProperty; import net.minecraft.state.StateContainer; import net.minecraft.tileentity.TileEntity; @@ -68,9 +70,13 @@ public class DetectorBlock extends ColoredNetworkBlock { @Override @SuppressWarnings("deprecation") public ActionResultType onBlockActivated(BlockState state, World world, BlockPos pos, PlayerEntity player, Hand hand, BlockRayTraceResult hit) { - ActionResultType result = RSBlocks.DETECTOR.changeBlockColor(state, player.getHeldItem(hand), world, pos, player); - if (result != ActionResultType.PASS) { - return result; + ColorMap colorMap = RSBlocks.DETECTOR; + DyeColor color = DyeColor.getColor(player.getHeldItem(hand)); + + if (color != null && !state.getBlock().equals(colorMap.get(color).get())) { + BlockState newState = colorMap.get(color).get().getDefaultState().with(POWERED, state.get(POWERED)); + + return RSBlocks.DETECTOR.setBlockState(newState, player.getHeldItem(hand), world, pos, player); } if (!world.isRemote) { diff --git a/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java b/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java index 6e10c036f..1fc54cb14 100644 --- a/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java +++ b/src/main/java/com/refinedmods/refinedstorage/util/ColorMap.java @@ -112,15 +112,16 @@ public class ColorMap> { } private BlockState getNewState(RegistryObject block, BlockState state) { - if (block.get().getDirection() == BlockDirection.NONE) { - return block.get().getDefaultState() - .with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)); - } else { - return block.get().getDefaultState() - .with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)) - .with(block.get().getDirection().getProperty(), state.get(block.get().getDirection().getProperty())); + BlockState newState = block.get().getDefaultState(); + + if (((NetworkNodeBlock) block.get()).hasConnectedState()) { + newState = newState.with(NetworkNodeBlock.CONNECTED, state.get(NetworkNodeBlock.CONNECTED)); + } + if (block.get().getDirection() != BlockDirection.NONE) { + newState = newState.with(block.get().getDirection().getProperty(), state.get(block.get().getDirection().getProperty())); } + return newState; } public ActionResultType setBlockState(BlockState newState, ItemStack heldItem, World world, BlockPos pos, PlayerEntity player) {