From 1228e4a76543f2c78c4b463c31856322049a0dcf Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:59:19 +0200 Subject: [PATCH] Backport bugfix for block place event to 1.16... again --- .../architectury/mixin/fabric/MixinBlockItem.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java index b7f7d075..25ef3232 100644 --- a/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/me/shedaniel/architectury/mixin/fabric/MixinBlockItem.java @@ -23,17 +23,23 @@ import me.shedaniel.architectury.event.events.BlockEvent; import net.minecraft.world.InteractionResult; import net.minecraft.world.item.BlockItem; import net.minecraft.world.item.context.BlockPlaceContext; +import net.minecraft.world.level.block.state.BlockState; import org.spongepowered.asm.mixin.Mixin; import org.spongepowered.asm.mixin.injection.At; import org.spongepowered.asm.mixin.injection.Inject; import org.spongepowered.asm.mixin.injection.callback.CallbackInfoReturnable; +import org.spongepowered.asm.mixin.injection.callback.LocalCapture; @Mixin(BlockItem.class) public abstract class MixinBlockItem { - @Inject(method = "place", at = @At("HEAD"), cancellable = true) - private void place(BlockPlaceContext context, CallbackInfoReturnable cir) { - InteractionResult result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result != InteractionResult.PASS) { + @Inject(method = "place", + at = @At(value = "INVOKE", + target = "Lnet/minecraft/world/item/BlockItem;placeBlock(Lnet/minecraft/world/item/context/BlockPlaceContext;Lnet/minecraft/world/level/block/state/BlockState;)Z"), + locals = LocalCapture.CAPTURE_FAILHARD, + cancellable = true) + private void place(BlockPlaceContext _0, CallbackInfoReturnable cir, BlockPlaceContext context, BlockState placedState) { + InteractionResult result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result == InteractionResult.FAIL) { cir.setReturnValue(result); } }