From ddba688f59024e7491857fbcb4d5ec06ea4f2612 Mon Sep 17 00:00:00 2001 From: gnembon Date: Mon, 9 Nov 2020 09:43:15 -0400 Subject: [PATCH] remove updates when removing blocks, fixes #533 --- .../mixins/WorldChunk_fillUpdatesMixin.java | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/src/main/java/carpet/mixins/WorldChunk_fillUpdatesMixin.java b/src/main/java/carpet/mixins/WorldChunk_fillUpdatesMixin.java index 3447cadd..cab107b8 100644 --- a/src/main/java/carpet/mixins/WorldChunk_fillUpdatesMixin.java +++ b/src/main/java/carpet/mixins/WorldChunk_fillUpdatesMixin.java @@ -22,4 +22,23 @@ public class WorldChunk_fillUpdatesMixin if (!CarpetSettings.impendingFillSkipUpdates) blockState.onBlockAdded(world_1, blockPos_1, blockState_1, boolean_1); } + + @Redirect(method = "setBlockState", at = @At( + value = "INVOKE", + target = "Lnet/minecraft/block/BlockState;onStateReplaced(Lnet/minecraft/world/World;Lnet/minecraft/util/math/BlockPos;Lnet/minecraft/block/BlockState;Z)V" + )) + private void onRemovedBlock(BlockState blockState, World world, BlockPos pos, BlockState state, boolean moved) + { + if (CarpetSettings.impendingFillSkipUpdates) // doing due dilligence from AbstractBlock onStateReplaced + { + if (blockState.getBlock().hasBlockEntity() && !blockState.isOf(state.getBlock())) + { + world.removeBlockEntity(pos); + } + } + else + { + blockState.onStateReplaced(world, pos, state, moved); + } + } }