diff --git a/Xplat/src/generated/resources/.cache/5e449fe289648869bd1f4d4d99715c8b4e0c057d b/Xplat/src/generated/resources/.cache/5e449fe289648869bd1f4d4d99715c8b4e0c057d index 54fa4391bb..5569a2f8bf 100644 --- a/Xplat/src/generated/resources/.cache/5e449fe289648869bd1f4d4d99715c8b4e0c057d +++ b/Xplat/src/generated/resources/.cache/5e449fe289648869bd1f4d4d99715c8b4e0c057d @@ -56,10 +56,12 @@ adfc7deaa7aa9d5425da095270745d58605b86ad data/botania/tags/items/rods.json 70a32077a4c06e2fc3ed8783037d4b6c659216be data/botania/tags/items/terrasteel_ingots.json de5556cc02036175ac731ce76827076c6b834d25 data/botania/tags/items/terrasteel_nuggets.json 43bfa13de3ebc0be372fc48b0e4be56a25cb1893 data/minecraft/tags/items/axes.json +65c35efa8dfbdc9f5a8c05624c492fba8408e3b2 data/minecraft/tags/items/bookshelf_books.json a101ef4ecfece48f1cdff62f34f30f9f25b3dbd3 data/minecraft/tags/items/cluster_max_harvestables.json b59d5b36ebe88ae60fca62eb6985e9825e0a9031 data/minecraft/tags/items/fences.json d0af4dd70afe7bdf3964a0aa4df4722e4452d78c data/minecraft/tags/items/freeze_immune_wearables.json 79ae3faf230addcc2958d69860afa0c406f4ca35 data/minecraft/tags/items/hoes.json +65c35efa8dfbdc9f5a8c05624c492fba8408e3b2 data/minecraft/tags/items/lectern_books.json 0d43cab6db2ee9b5d1865b8938630349ce5bfa23 data/minecraft/tags/items/logs_that_burn.json cc4f967b08052c03ce91be3de50f078469fb2749 data/minecraft/tags/items/music_discs.json a101ef4ecfece48f1cdff62f34f30f9f25b3dbd3 data/minecraft/tags/items/pickaxes.json diff --git a/Xplat/src/generated/resources/data/minecraft/tags/items/bookshelf_books.json b/Xplat/src/generated/resources/data/minecraft/tags/items/bookshelf_books.json new file mode 100644 index 0000000000..c34be7421b --- /dev/null +++ b/Xplat/src/generated/resources/data/minecraft/tags/items/bookshelf_books.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "botania:lexicon" + ] +} \ No newline at end of file diff --git a/Xplat/src/generated/resources/data/minecraft/tags/items/lectern_books.json b/Xplat/src/generated/resources/data/minecraft/tags/items/lectern_books.json new file mode 100644 index 0000000000..c34be7421b --- /dev/null +++ b/Xplat/src/generated/resources/data/minecraft/tags/items/lectern_books.json @@ -0,0 +1,6 @@ +{ + "replace": false, + "values": [ + "botania:lexicon" + ] +} \ No newline at end of file diff --git a/Xplat/src/main/java/vazkii/botania/data/ItemTagProvider.java b/Xplat/src/main/java/vazkii/botania/data/ItemTagProvider.java index 51290fa5fa..5a9bbec918 100644 --- a/Xplat/src/main/java/vazkii/botania/data/ItemTagProvider.java +++ b/Xplat/src/main/java/vazkii/botania/data/ItemTagProvider.java @@ -87,6 +87,8 @@ protected void addTags(HolderLookup.Provider provider) { BotaniaBlocks.hourglass.asItem(), BotaniaBlocks.manaPylon.asItem(), monocle); this.tag(ItemTags.MUSIC_DISCS).add(recordGaia1, recordGaia2); this.tag(ItemTags.CLUSTER_MAX_HARVESTABLES).add(manasteelPick, elementiumPick, terraPick, glassPick); + this.tag(ItemTags.LECTERN_BOOKS).add(lexicon); + this.tag(ItemTags.BOOKSHELF_BOOKS).add(lexicon); this.tag(BotaniaTags.Items.DUSTS_MANA).add(manaPowder); diff --git a/Xplat/src/main/java/vazkii/botania/mixin/LecternEventHandlerMixin.java b/Xplat/src/main/java/vazkii/botania/mixin/LecternEventHandlerMixin.java new file mode 100644 index 0000000000..50599ea1a0 --- /dev/null +++ b/Xplat/src/main/java/vazkii/botania/mixin/LecternEventHandlerMixin.java @@ -0,0 +1,43 @@ +package vazkii.botania.mixin; + +import net.minecraft.server.level.ServerPlayer; +import net.minecraft.world.InteractionHand; +import net.minecraft.world.InteractionResult; +import net.minecraft.world.entity.player.Player; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.entity.BlockEntityType; +import net.minecraft.world.phys.BlockHitResult; + +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 vazkii.botania.common.advancements.UseItemSuccessTrigger; +import vazkii.botania.common.item.BotaniaItems; +import vazkii.patchouli.common.handler.LecternEventHandler; + +@Mixin(LecternEventHandler.class) +public class LecternEventHandlerMixin { + /** + * Hooks into the Patchouli lectern event handler, right before the call to {@code openBookGUI}, to properly award + * the lexicon reading advancement if read via a lectern instead of via the book item directly. + */ + @Inject( + method = "rightClick(Lnet/minecraft/world/entity/player/Player;Lnet/minecraft/world/level/Level;Lnet/minecraft/world/InteractionHand;Lnet/minecraft/world/phys/BlockHitResult;)Lnet/minecraft/world/InteractionResult;", + at = @At(value = "INVOKE", target = "Lvazkii/patchouli/api/PatchouliAPI$IPatchouliAPI;openBookGUI(Lnet/minecraft/server/level/ServerPlayer;Lnet/minecraft/resources/ResourceLocation;)V") + ) + private static void checkUseLexicon(Player player, Level world, InteractionHand hand, BlockHitResult hit, CallbackInfoReturnable cir) { + if (!(player instanceof ServerPlayer serverPlayer)) { + return; + } + final var blockEntity = world.getBlockEntity(hit.getBlockPos(), BlockEntityType.LECTERN); + blockEntity.ifPresent(lecternBlockEntity -> { + final var itemStack = lecternBlockEntity.getBook(); + if (itemStack.is(BotaniaItems.lexicon)) { + UseItemSuccessTrigger.INSTANCE.trigger(serverPlayer, itemStack, serverPlayer.serverLevel(), + player.getX(), player.getY(), player.getZ()); + } + }); + } +} diff --git a/Xplat/src/main/resources/botania_xplat.mixins.json b/Xplat/src/main/resources/botania_xplat.mixins.json index eb0c0bac8b..09f8882459 100644 --- a/Xplat/src/main/resources/botania_xplat.mixins.json +++ b/Xplat/src/main/resources/botania_xplat.mixins.json @@ -28,6 +28,7 @@ "ItemEntityAccessor", "ItemEntityMixin", "ItemMixin", + "LecternEventHandlerMixin", "LevelAccessor", "LivingEntityAccessor", "LoomMenuMixin",