diff --git a/src/main/java/mekanism/common/block/basic/BlockLogisticalSorter.java b/src/main/java/mekanism/common/block/basic/BlockLogisticalSorter.java index 963474e8deb..50fb6f202e5 100644 --- a/src/main/java/mekanism/common/block/basic/BlockLogisticalSorter.java +++ b/src/main/java/mekanism/common/block/basic/BlockLogisticalSorter.java @@ -75,7 +75,7 @@ public InteractionResult use(@NotNull BlockState state, @NotNull Level world, @N return InteractionResult.FAIL; } if (player.isShiftKeyDown()) { - WorldUtils.dismantleBlock(state, world, pos); + WorldUtils.dismantleBlock(state, world, pos, player); return InteractionResult.SUCCESS; } Direction change = tile.getDirection().getClockWise(); diff --git a/src/main/java/mekanism/common/block/prefab/BlockBase.java b/src/main/java/mekanism/common/block/prefab/BlockBase.java index 5a881f865d9..0fcd3b3d85f 100644 --- a/src/main/java/mekanism/common/block/prefab/BlockBase.java +++ b/src/main/java/mekanism/common/block/prefab/BlockBase.java @@ -114,7 +114,7 @@ public InteractionResult use(@NotNull BlockState state, @NotNull Level world, @N @NotNull BlockHitResult hit) { if (player.isShiftKeyDown() && MekanismUtils.canUseAsWrench(player.getItemInHand(hand))) { if (!world.isClientSide) { - WorldUtils.dismantleBlock(state, world, pos); + WorldUtils.dismantleBlock(state, world, pos, player); } return InteractionResult.SUCCESS; } diff --git a/src/main/java/mekanism/common/block/transmitter/BlockTransmitter.java b/src/main/java/mekanism/common/block/transmitter/BlockTransmitter.java index 796287d8186..159ae3af693 100644 --- a/src/main/java/mekanism/common/block/transmitter/BlockTransmitter.java +++ b/src/main/java/mekanism/common/block/transmitter/BlockTransmitter.java @@ -76,7 +76,7 @@ public InteractionResult use(@NotNull BlockState state, @NotNull Level world, @N ItemStack stack = player.getItemInHand(hand); if (MekanismUtils.canUseAsWrench(stack) && player.isShiftKeyDown()) { if (!world.isClientSide) { - WorldUtils.dismantleBlock(state, world, pos); + WorldUtils.dismantleBlock(state, world, pos, player); } return InteractionResult.SUCCESS; } diff --git a/src/main/java/mekanism/common/tile/base/TileEntityMekanism.java b/src/main/java/mekanism/common/tile/base/TileEntityMekanism.java index f5eb10054c5..ed2487fd655 100644 --- a/src/main/java/mekanism/common/tile/base/TileEntityMekanism.java +++ b/src/main/java/mekanism/common/tile/base/TileEntityMekanism.java @@ -501,7 +501,7 @@ public WrenchResult tryWrench(BlockState state, Player player, InteractionHand h return WrenchResult.NO_SECURITY; } if (player.isShiftKeyDown()) { - WorldUtils.dismantleBlock(state, getLevel(), worldPosition, this); + WorldUtils.dismantleBlock(state, getLevel(), worldPosition, this, player); return WrenchResult.DISMANTLED; } //Special ITileDirectional handling diff --git a/src/main/java/mekanism/common/util/TransporterUtils.java b/src/main/java/mekanism/common/util/TransporterUtils.java index b5516b93747..12a024d26e8 100644 --- a/src/main/java/mekanism/common/util/TransporterUtils.java +++ b/src/main/java/mekanism/common/util/TransporterUtils.java @@ -70,13 +70,15 @@ public static EnumColor decrement(EnumColor color) { } public static void drop(LogisticalTransporterBase transporter, TransporterStack stack) { - BlockPos blockPos = transporter.getBlockPos(); + BlockPos blockPos; if (stack.hasPath()) { float[] pos = TransporterUtils.getStackPosition(transporter, stack, 0); - blockPos = blockPos.offset(Mth.floor(pos[0]), Mth.floor(pos[1]), Mth.floor(pos[2])); + blockPos = transporter.getBlockPos().offset(Mth.floor(pos[0]), Mth.floor(pos[1]), Mth.floor(pos[2])); + } else { + blockPos = transporter.getBlockPos(); } TransporterManager.remove(transporter.getLevel(), stack); - Block.popResource(transporter.getLevel(), blockPos, stack.itemStack); + InventoryUtils.dropStack(stack.itemStack, item -> Block.popResource(transporter.getLevel(), blockPos, item)); } public static float[] getStackPosition(LogisticalTransporterBase transporter, TransporterStack stack, float partial) { diff --git a/src/main/java/mekanism/common/util/WorldUtils.java b/src/main/java/mekanism/common/util/WorldUtils.java index fcd2636bf6c..e7514fc7a61 100644 --- a/src/main/java/mekanism/common/util/WorldUtils.java +++ b/src/main/java/mekanism/common/util/WorldUtils.java @@ -9,10 +9,10 @@ import net.minecraft.core.BlockPos; import net.minecraft.core.Direction; import net.minecraft.core.SectionPos; -import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundSource; import net.minecraft.util.Mth; +import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.player.Player; import net.minecraft.world.item.ItemStack; import net.minecraft.world.item.context.BlockPlaceContext; @@ -385,18 +385,15 @@ public static void markChunkDirty(Level world, BlockPos pos) { /** * Dismantles a block, dropping it and removing it from the world. */ - public static void dismantleBlock(BlockState state, Level world, BlockPos pos) { - dismantleBlock(state, world, pos, getTileEntity(world, pos)); + public static void dismantleBlock(BlockState state, Level world, BlockPos pos, @Nullable Entity entity) { + dismantleBlock(state, world, pos, getTileEntity(world, pos), entity); } /** * Dismantles a block, dropping it and removing it from the world. */ - public static void dismantleBlock(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity tile) { - if (world instanceof ServerLevel level) {//Copy of Block#dropResources but skipping the xp dropping - Block.getDrops(state, level, pos, tile).forEach(stack -> Block.popResource(world, pos, stack)); - state.spawnAfterBreak(level, pos, ItemStack.EMPTY, false); - } + public static void dismantleBlock(BlockState state, Level world, BlockPos pos, @Nullable BlockEntity tile, @Nullable Entity entity) { + Block.dropResources(state, world, pos, tile, entity, ItemStack.EMPTY, false); world.removeBlock(pos, false); }