From d104034824cfadd477b595d665f758944dec116a Mon Sep 17 00:00:00 2001 From: Juuz <6596629+Juuxel@users.noreply.github.com> Date: Mon, 1 May 2023 16:42:13 +0300 Subject: [PATCH 1/4] Update Fabric Loader to latest version (#401) Fixes duplicate copies of Loader (pre-0.14 and post-0.14) ending up on the runtime classpath of API users and prevents a crash. --- gradle.properties | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/gradle.properties b/gradle.properties index f47fed14..637c3edb 100644 --- a/gradle.properties +++ b/gradle.properties @@ -13,11 +13,11 @@ archives_base_name_snapshot=architectury-snapshot base_version=4.11 maven_group=dev.architectury -fabric_loader_version=0.13.3 +fabric_loader_version=0.14.19 fabric_api_version=0.58.0+1.18.2 mod_menu_version=3.0.0 forge_version=40.1.14 curseforge_id=419699 -modrinth_id=lhGA9TYQ \ No newline at end of file +modrinth_id=lhGA9TYQ From b29a2723043651c60c77a9b3b12c31d691a74a5c Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 2/4] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.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) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @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) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } } From 935b06c72f7165498940423db7fcfa0daaf574e6 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 3/4] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.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) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @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) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } } From 425b872c2aa74a36c4552f1096d3d102168e4174 Mon Sep 17 00:00:00 2001 From: Max Date: Thu, 4 May 2023 09:44:56 +0200 Subject: [PATCH 4/4] Fix block place event mixin passing incorrect BlockState on Fabric Closes #402 --- .../mixin/fabric/MixinBlockItem.java | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java index ae403f9a..52ba0342 100644 --- a/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java +++ b/fabric/src/main/java/dev/architectury/mixin/fabric/MixinBlockItem.java @@ -23,18 +23,24 @@ import dev.architectury.event.events.common.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) { - var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), context.getLevel().getBlockState(context.getClickedPos()), context.getPlayer()); - if (result.isPresent()) { - cir.setReturnValue(result.isTrue() ? InteractionResult.SUCCESS : InteractionResult.FAIL); + @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) { + var result = BlockEvent.PLACE.invoker().placeBlock(context.getLevel(), context.getClickedPos(), placedState, context.getPlayer()); + if (result.isFalse()) { + cir.setReturnValue(InteractionResult.FAIL); } } }