diff --git a/common/src/main/java/com/klikli_dev/modonomicon/integration/LecternIntegration.java b/common/src/main/java/com/klikli_dev/modonomicon/integration/LecternIntegration.java new file mode 100644 index 00000000..66371762 --- /dev/null +++ b/common/src/main/java/com/klikli_dev/modonomicon/integration/LecternIntegration.java @@ -0,0 +1,68 @@ +package com.klikli_dev.modonomicon.integration; + +import com.klikli_dev.modonomicon.Modonomicon; +import com.klikli_dev.modonomicon.client.gui.BookGuiManager; +import com.klikli_dev.modonomicon.client.gui.book.BookAddress; +import com.klikli_dev.modonomicon.item.ModonomiconItem; +import com.klikli_dev.modonomicon.networking.OpenBookOnClientMessage; +import com.klikli_dev.modonomicon.platform.Services; +import com.klikli_dev.modonomicon.registry.DataComponentRegistry; +import net.minecraft.core.BlockPos; +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.item.ItemStack; +import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.LecternBlock; +import net.minecraft.world.level.block.entity.LecternBlockEntity; +import net.minecraft.world.level.block.state.BlockState; +import net.minecraft.world.phys.BlockHitResult; + +public class LecternIntegration { + + public static InteractionResult rightClick(Player player, Level pLevel, InteractionHand hand, BlockHitResult hit) { + BlockPos pos = hit.getBlockPos(); + BlockState state = pLevel.getBlockState(pos); + + if (!(pLevel.getBlockEntity(pos) instanceof LecternBlockEntity lectern)) + return InteractionResult.PASS; + + if (state.getValue(LecternBlock.HAS_BOOK)) { + if (player.isShiftKeyDown()) { + takeBook(player, lectern); + } else { + if (!pLevel.isClientSide && player instanceof ServerPlayer serverPlayer) { + openBook(serverPlayer, lectern.getBook()); + } + return InteractionResult.SUCCESS; + } + } else { + ItemStack stack = player.getItemInHand(hand); + if (stack.get(DataComponentRegistry.BOOK_ID.get()) != null) { + if (LecternBlock.tryPlaceBook(player, pLevel, pos, state, stack)) { + return InteractionResult.SUCCESS; + } + } + } + return InteractionResult.PASS; + } + + private static void openBook(ServerPlayer player, ItemStack stack) { + var bookId = stack.get(DataComponentRegistry.BOOK_ID.get()); + if (bookId != null) { + Services.NETWORK.sendTo(player, new OpenBookOnClientMessage(bookId)); + } else { + Modonomicon.LOG.error("Modonomicon Lectern: ItemStack has no tag!"); + } + } + + private static void takeBook(Player player, LecternBlockEntity lectern) { + ItemStack itemstack = lectern.getBook(); + lectern.setBook(ItemStack.EMPTY); + LecternBlock.resetBookState(player, lectern.getLevel(), lectern.getBlockPos(), lectern.getBlockState(), false); + if (!player.getInventory().add(itemstack)) { + player.drop(itemstack, false); + } + } +} diff --git a/common/src/main/java/com/klikli_dev/modonomicon/item/ModonomiconItem.java b/common/src/main/java/com/klikli_dev/modonomicon/item/ModonomiconItem.java index 3503381f..abdcd566 100644 --- a/common/src/main/java/com/klikli_dev/modonomicon/item/ModonomiconItem.java +++ b/common/src/main/java/com/klikli_dev/modonomicon/item/ModonomiconItem.java @@ -43,7 +43,7 @@ public static Book getBook(ItemStack stack) { return BookDataManager.get().getBook(res); } - private static ResourceLocation getBookId(ItemStack stack) { + public static ResourceLocation getBookId(ItemStack stack) { return stack.get(DataComponentRegistry.BOOK_ID.get()); } diff --git a/common/src/main/java/com/klikli_dev/modonomicon/networking/OpenBookOnClientMessage.java b/common/src/main/java/com/klikli_dev/modonomicon/networking/OpenBookOnClientMessage.java new file mode 100644 index 00000000..197a2148 --- /dev/null +++ b/common/src/main/java/com/klikli_dev/modonomicon/networking/OpenBookOnClientMessage.java @@ -0,0 +1,48 @@ +/* + * SPDX-FileCopyrightText: 2022 klikli-dev + * + * SPDX-License-Identifier: MIT + */ + +package com.klikli_dev.modonomicon.networking; + +import com.klikli_dev.modonomicon.Modonomicon; +import com.klikli_dev.modonomicon.client.gui.BookGuiManager; +import com.klikli_dev.modonomicon.client.gui.book.BookAddress; +import com.klikli_dev.modonomicon.data.BookDataManager; +import net.minecraft.client.Minecraft; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.entity.player.Player; + +public class OpenBookOnClientMessage implements Message { + + public static final Type TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Modonomicon.MOD_ID, "open_book_on_client")); + + public static final StreamCodec STREAM_CODEC = StreamCodec.composite( + ResourceLocation.STREAM_CODEC, + (m) -> m.bookId, + OpenBookOnClientMessage::new + ); + + public ResourceLocation bookId; + + public OpenBookOnClientMessage(ResourceLocation bookId) { + this.bookId = bookId; + } + + @Override + public Type type() { + return TYPE; + } + + @Override + public void onClientReceived(Minecraft minecraft, Player player) { + var book = BookDataManager.get().getBook(this.bookId); + if (book != null) { + BookGuiManager.get().openBook(BookAddress.defaultFor(book)); + } + } +} diff --git a/fabric/src/generated/resources/.cache/13ce76d12c64f3a9c0874320845bdcbe00b11956 b/fabric/src/generated/resources/.cache/13ce76d12c64f3a9c0874320845bdcbe00b11956 index f5b058d3..915ec3fc 100644 --- a/fabric/src/generated/resources/.cache/13ce76d12c64f3a9c0874320845bdcbe00b11956 +++ b/fabric/src/generated/resources/.cache/13ce76d12c64f3a9c0874320845bdcbe00b11956 @@ -1,4 +1,4 @@ -// 1.21 2024-06-16T10:11:59.7681571 Modonomicon/Books: modonomicon +// 1.21 2024-06-22T12:56:14.3895255 Modonomicon/Books: modonomicon cccca6bb0ab5ae6510bb8a0333426e66e6c62538 data\modonomicon\modonomicon\books\demo\entries\features\multiblock.json bb1c01567081f42f09dbbcb4485915f0cb23897b data\modonomicon\modonomicon\books\demo\categories\features.json e2cb80ba9c55ac1ffe021e250335522c53df2409 data\modonomicon\modonomicon\books\demo\entries\features\recipe.json @@ -17,9 +17,9 @@ e6a715f2cfd8e4506f0fc77153a77ee059476a73 data\modonomicon\modonomicon\books\demo 8d5c900f92888af78e90c20cfffd59c9bb66c462 data\modonomicon\modonomicon\books\demo\entries\features\condition_level_1.json 13db70c54729d19a0815dbe90b52626a3169e18c data\modonomicon\modonomicon\books\demo\entries\features\entity.json df0f65389e81935cede169200a76078be687f45f data\modonomicon\modonomicon\books\demo\entries\formatting\link.json -74b0b26d3953eb7221f2156b78a035c689ff9e48 data\modonomicon\modonomicon\books\demo\entries\index_mode\demo1.json 1ff9ff29111f0befffc51e68363d00d30243788c data\modonomicon\modonomicon\books\demo\entries\features\custom_icon.json -20c110b2a400d413deb1c51ce37a1e7a9c0bd68c data\modonomicon\modonomicon\books\demo_leaflet\book.json +74b0b26d3953eb7221f2156b78a035c689ff9e48 data\modonomicon\modonomicon\books\demo\entries\index_mode\demo1.json +0ca3475365d1581b4cf5353dacee1353c13b49b2 data\modonomicon\modonomicon\books\demo_leaflet\book.json 8a70cb4a1ce959ef735dbd9c051f7b061513f810 data\modonomicon\modonomicon\books\demo\entries\features\condition_root.json ad8b5b90af527f79977ef75aace112b568f2b7ab data\modonomicon\modonomicon\books\demo\entries\features\redirect.json 559dcdd6e09db7f1bad0ea7d1e85f7372b49ea41 data\modonomicon\modonomicon\books\demo\entries\formatting\advanced.json @@ -28,5 +28,5 @@ ce1982da99d038c6b25ce04b87ea97ea9f71c2bb data\modonomicon\modonomicon\books\demo 0f6f7d5bcd1448ec9fcac872af5c29fdc0bd5cf3 data\modonomicon\modonomicon\books\demo\entries\features\command.json 3f4b5dcf418dabc39e48379da526f83810bcd3db data\modonomicon\modonomicon\books\demo\entries\features\condition_advancement.json 1a0db0976ce67f83de62f5d8521a5cb31df8717b data\modonomicon\modonomicon\books\demo\entries\conditional\always_locked.json -636d3714d6b3c9e8174b8a2a1e3bbc57f2561a96 data\modonomicon\modonomicon\books\demo\book.json +ced8829f07caf827b5be21cf851e2287b2f93550 data\modonomicon\modonomicon\books\demo\book.json 90a969b51b609b092763348584ae991aa35967cc data\modonomicon\modonomicon\books\demo\entries\formatting\basic.json diff --git a/fabric/src/generated/resources/.cache/3eecf17e0b3542fa44b02bae7aa93622bb4a80e9 b/fabric/src/generated/resources/.cache/3eecf17e0b3542fa44b02bae7aa93622bb4a80e9 index cf1f093d..d24d7095 100644 --- a/fabric/src/generated/resources/.cache/3eecf17e0b3542fa44b02bae7aa93622bb4a80e9 +++ b/fabric/src/generated/resources/.cache/3eecf17e0b3542fa44b02bae7aa93622bb4a80e9 @@ -1,2 +1,2 @@ -// 1.21 2024-06-16T10:11:59.7711644 Modonomicon/Languages: en_us -dbd6b0627e6448e2df2ca44b3da68ed7e141ddda assets\modonomicon\lang\en_us.json +// 1.21 2024-06-22T12:56:14.3935275 Modonomicon/Languages: en_us +5e9bca31739f981be8d1893d1091664494280f6a assets\modonomicon\lang\en_us.json diff --git a/fabric/src/generated/resources/.cache/a4d0ca8e1032fb3f0e5e6d547c3176158d2ab2f7 b/fabric/src/generated/resources/.cache/a4d0ca8e1032fb3f0e5e6d547c3176158d2ab2f7 index da1e4438..80eb6969 100644 --- a/fabric/src/generated/resources/.cache/a4d0ca8e1032fb3f0e5e6d547c3176158d2ab2f7 +++ b/fabric/src/generated/resources/.cache/a4d0ca8e1032fb3f0e5e6d547c3176158d2ab2f7 @@ -1,2 +1,3 @@ -// 1.21 2024-06-16T10:11:59.7701583 Modonomicon/Tags for minecraft:item +// 1.21 2024-06-22T12:56:14.3925257 Modonomicon/Tags for minecraft:item 44de4772d365fcc0e5706dbfcd83d2967ec352c0 data\minecraft\tags\item\bookshelf_books.json +44de4772d365fcc0e5706dbfcd83d2967ec352c0 data\minecraft\tags\item\lectern_books.json diff --git a/fabric/src/generated/resources/.cache/e6530a5ab7a2c0d5d93ba510671319215bfabee3 b/fabric/src/generated/resources/.cache/e6530a5ab7a2c0d5d93ba510671319215bfabee3 index 8b197861..ffe9b725 100644 --- a/fabric/src/generated/resources/.cache/e6530a5ab7a2c0d5d93ba510671319215bfabee3 +++ b/fabric/src/generated/resources/.cache/e6530a5ab7a2c0d5d93ba510671319215bfabee3 @@ -1,4 +1,4 @@ -// 1.21 2024-06-16T10:11:59.7701583 Modonomicon/Model Definitions +// 1.21 2024-06-22T12:56:14.3925257 Modonomicon/Model Definitions b02e0bc9f75e0fde6807935577e74b75348413fb assets\modonomicon\models\item\modonomicon_blue.json 83adea7fd65acd9581797454e1a6dc6122d8a826 assets\modonomicon\models\item\modonomicon_green.json a4a605637998b2d6d6b7cd9c002d5ba0163622c0 assets\modonomicon\models\item\modonomicon_red.json diff --git a/fabric/src/generated/resources/.cache/fbe7fdca8a3d7d4724f001a760fe02aeb76403e5 b/fabric/src/generated/resources/.cache/fbe7fdca8a3d7d4724f001a760fe02aeb76403e5 index 9704eda1..836fd9d6 100644 --- a/fabric/src/generated/resources/.cache/fbe7fdca8a3d7d4724f001a760fe02aeb76403e5 +++ b/fabric/src/generated/resources/.cache/fbe7fdca8a3d7d4724f001a760fe02aeb76403e5 @@ -1,4 +1,4 @@ -// 1.21 2024-06-16T10:11:59.7701583 Modonomicon/Multiblocks: modonomicon +// 1.21 2024-06-22T12:56:14.3915201 Modonomicon/Multiblocks: modonomicon fc1e7363336d456dd0d1583fcfdaa27a8c4bf23e data\modonomicon\modonomicon\multiblocks\demo_predicate.json 89b499dd4f3850c8099ad26ae3c286e95ac8cf99 data\modonomicon\modonomicon\multiblocks\demo_fluid.json 6af533f5fa171fb2cf2d27b166e16ec54b2c5c06 data\modonomicon\modonomicon\multiblocks\test_non_square.json diff --git a/fabric/src/generated/resources/assets/modonomicon/lang/en_us.json b/fabric/src/generated/resources/assets/modonomicon/lang/en_us.json index 695d2896..d514a029 100644 --- a/fabric/src/generated/resources/assets/modonomicon/lang/en_us.json +++ b/fabric/src/generated/resources/assets/modonomicon/lang/en_us.json @@ -132,7 +132,12 @@ "modonomicon.command.success.save_progress": "Saved progress for book: %s. The unlock code has been copied to your clipboard.", "modonomicon.command.test_command.success": "You got an apple, because reading is cool!", "modonomicon.command.test_command2.success": "You got wheat, because clicking is cool!", + "modonomicon.gui.add_bookmark": "Add Bookmark", "modonomicon.gui.book.index_list_title": "Categories", + "modonomicon.gui.bookmarks.entry_list_title": "Bookmark Entries", + "modonomicon.gui.bookmarks.info": "To navigate to a bookmark, click on it in this list.\n\\\n\\\nTo add a bookmark, open an entry and click the \"Add Bookmark\" button on the bottom right.\n\\\n\\\nTo remove a bookmark, navigate to it and click the \"Remove Bookmark\" button on the bottom right.\n", + "modonomicon.gui.bookmarks.no_results": "No entries yet.", + "modonomicon.gui.bookmarks.screen.title": "Bookmarks", "modonomicon.gui.button.back": "Back", "modonomicon.gui.button.back.tooltip": "Go back to the last page you visited", "modonomicon.gui.button.exit": "Exit", @@ -160,9 +165,11 @@ "modonomicon.gui.hover.item_link_info.no_jei": "Install JEI to show recipe/usage on click.", "modonomicon.gui.hover.item_link_info_line2": "Will not do anything, if no recipe/usage is found.", "modonomicon.gui.no_errors_found": "No errors found. You should not see this page!", + "modonomicon.gui.open_bookmarks": "Open Bookmarks", "modonomicon.gui.open_search": "Open Search", "modonomicon.gui.page.entity.loading_error": "Failed to load entity", "modonomicon.gui.recipe_page.recipe_missing": "Recipe %s was not found! This may be an issue with the mod, or the modpack may have disabled it.", + "modonomicon.gui.remove_bookmark": "Remove Bookmark", "modonomicon.gui.search.entry.locked": "(Locked)", "modonomicon.gui.search.entry_list_title": "Entries", "modonomicon.gui.search.info": "To search for entries, simply start typing what you are looking for.\n", diff --git a/fabric/src/generated/resources/data/minecraft/tags/item/lectern_books.json b/fabric/src/generated/resources/data/minecraft/tags/item/lectern_books.json new file mode 100644 index 00000000..f2911ffc --- /dev/null +++ b/fabric/src/generated/resources/data/minecraft/tags/item/lectern_books.json @@ -0,0 +1,5 @@ +{ + "values": [ + "modonomicon:modonomicon" + ] +} \ No newline at end of file diff --git a/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json b/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json index fad78687..fcee679e 100644 --- a/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json +++ b/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json @@ -50,7 +50,7 @@ "search_button_x_offset": 0, "search_button_y_offset": 0, "single_page_texture": "modonomicon:textures/gui/single_page_entry.png", - "tooltip": "", + "tooltip": "book.modonomicon.demo.tooltip", "top_frame_overlay": { "frame_height": 7, "frame_width": 72, diff --git a/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json b/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json index e08560e5..fcafc2e6 100644 --- a/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json +++ b/fabric/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json @@ -51,7 +51,7 @@ "search_button_x_offset": 0, "search_button_y_offset": 0, "single_page_texture": "modonomicon:textures/gui/single_page_entry.png", - "tooltip": "", + "tooltip": "book.modonomicon.demo_leaflet.tooltip", "top_frame_overlay": { "frame_height": 7, "frame_width": 72, diff --git a/fabric/src/main/java/com/klikli_dev/modonomicon/ModonomiconFabric.java b/fabric/src/main/java/com/klikli_dev/modonomicon/ModonomiconFabric.java index fdef87e3..a2a758aa 100644 --- a/fabric/src/main/java/com/klikli_dev/modonomicon/ModonomiconFabric.java +++ b/fabric/src/main/java/com/klikli_dev/modonomicon/ModonomiconFabric.java @@ -8,10 +8,12 @@ import com.klikli_dev.modonomicon.bookstate.BookUnlockStateManager; import com.klikli_dev.modonomicon.bookstate.BookVisualStateManager; +import com.klikli_dev.modonomicon.client.render.MultiblockPreviewRenderer; import com.klikli_dev.modonomicon.data.BookDataManager; import com.klikli_dev.modonomicon.data.LoaderRegistry; import com.klikli_dev.modonomicon.data.MultiblockDataManager; import com.klikli_dev.modonomicon.data.ReloadListenerWrapper; +import com.klikli_dev.modonomicon.integration.LecternIntegration; import com.klikli_dev.modonomicon.network.Networking; import com.klikli_dev.modonomicon.registry.CommandRegistry; import com.klikli_dev.modonomicon.registry.CreativeModeTabRegistry; @@ -19,6 +21,7 @@ import net.fabricmc.fabric.api.command.v2.CommandRegistrationCallback; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerLifecycleEvents; import net.fabricmc.fabric.api.event.lifecycle.v1.ServerWorldEvents; +import net.fabricmc.fabric.api.event.player.UseBlockCallback; import net.fabricmc.fabric.api.itemgroup.v1.ItemGroupEvents; import net.fabricmc.fabric.api.networking.v1.ServerPlayConnectionEvents; import net.fabricmc.fabric.api.resource.ResourceManagerHelper; @@ -87,6 +90,8 @@ public void onInitialize() { } }); + UseBlockCallback.EVENT.register(LecternIntegration::rightClick); + //Advancement event handling for condition/unlock system //done in MixinPlayerAdvancements, because we have no event in Fabric diff --git a/fabric/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java b/fabric/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java index 6180f2a4..9df5bbd7 100644 --- a/fabric/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java +++ b/fabric/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java @@ -24,5 +24,6 @@ public ItemTagsProvider(FabricDataOutput output, CompletableFuture()); ClientPlayNetworking.registerGlobalReceiver(ReloadResourcesOnClientMessage.TYPE, new ClientMessageHandler<>()); ClientPlayNetworking.registerGlobalReceiver(SendAdvancementToClientMessage.TYPE, new ClientMessageHandler<>()); + ClientPlayNetworking.registerGlobalReceiver(OpenBookOnClientMessage.TYPE, new ClientMessageHandler<>()); } } diff --git a/fabric/src/main/java/com/klikli_dev/modonomicon/network/Networking.java b/fabric/src/main/java/com/klikli_dev/modonomicon/network/Networking.java index fc0687fc..49128e79 100644 --- a/fabric/src/main/java/com/klikli_dev/modonomicon/network/Networking.java +++ b/fabric/src/main/java/com/klikli_dev/modonomicon/network/Networking.java @@ -50,5 +50,6 @@ public static void registerMessages() { PayloadTypeRegistry.playS2C().register(SyncMultiblockDataMessage.TYPE, SyncMultiblockDataMessage.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(ReloadResourcesOnClientMessage.TYPE, ReloadResourcesOnClientMessage.STREAM_CODEC); PayloadTypeRegistry.playS2C().register(SendAdvancementToClientMessage.TYPE, SendAdvancementToClientMessage.STREAM_CODEC); + PayloadTypeRegistry.playS2C().register(OpenBookOnClientMessage.TYPE, OpenBookOnClientMessage.STREAM_CODEC); } } diff --git a/forge/src/generated/resources/.cache/1a31259611d3b927433f60e0500eb1623e6ee72d b/forge/src/generated/resources/.cache/1a31259611d3b927433f60e0500eb1623e6ee72d index 5c3786d8..3284072b 100644 --- a/forge/src/generated/resources/.cache/1a31259611d3b927433f60e0500eb1623e6ee72d +++ b/forge/src/generated/resources/.cache/1a31259611d3b927433f60e0500eb1623e6ee72d @@ -1,5 +1,5 @@ -// 1.21 2024-06-15T21:00:35.2774022 Books: modonomicon -636d3714d6b3c9e8174b8a2a1e3bbc57f2561a96 data/modonomicon/modonomicon/books/demo/book.json +// 1.21 2024-06-22T12:54:19.901528 Books: modonomicon +ced8829f07caf827b5be21cf851e2287b2f93550 data/modonomicon/modonomicon/books/demo/book.json e6a715f2cfd8e4506f0fc77153a77ee059476a73 data/modonomicon/modonomicon/books/demo/categories/conditional.json bb1c01567081f42f09dbbcb4485915f0cb23897b data/modonomicon/modonomicon/books/demo/categories/features.json 447f3ebb16996ca02562642ead2e57ff8f9b6c86 data/modonomicon/modonomicon/books/demo/categories/formatting.json @@ -27,6 +27,6 @@ ce1982da99d038c6b25ce04b87ea97ea9f71c2bb data/modonomicon/modonomicon/books/demo df0f65389e81935cede169200a76078be687f45f data/modonomicon/modonomicon/books/demo/entries/formatting/link.json 74b0b26d3953eb7221f2156b78a035c689ff9e48 data/modonomicon/modonomicon/books/demo/entries/index_mode/demo1.json 0692a83733a7baebf8cd86907bc271654cc6f0a8 data/modonomicon/modonomicon/books/demo/entries/index_mode/demo2.json -20c110b2a400d413deb1c51ce37a1e7a9c0bd68c data/modonomicon/modonomicon/books/demo_leaflet/book.json +0ca3475365d1581b4cf5353dacee1353c13b49b2 data/modonomicon/modonomicon/books/demo_leaflet/book.json ca6aad8e1b20aaab7e1dce1b623644b18b9a7119 data/modonomicon/modonomicon/books/demo_leaflet/categories/leaflet.json dd5cb5f430655580d4c8766f7df63ced770df651 data/modonomicon/modonomicon/books/demo_leaflet/entries/leaflet/leaflet.json diff --git a/forge/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 b/forge/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 index f2d1af02..db0d5236 100644 --- a/forge/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 +++ b/forge/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 @@ -1,2 +1,3 @@ -// 1.21 2024-06-16T10:28:55.6717379 Tags for minecraft:item mod id modonomicon +// 1.21 2024-06-22T12:54:19.9035275 Tags for minecraft:item mod id modonomicon 44de4772d365fcc0e5706dbfcd83d2967ec352c0 data/minecraft/tags/item/bookshelf_books.json +44de4772d365fcc0e5706dbfcd83d2967ec352c0 data/minecraft/tags/item/lectern_books.json diff --git a/forge/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 b/forge/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 index 2c57e31e..dce5b1d8 100644 --- a/forge/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 +++ b/forge/src/generated/resources/.cache/c622617f6fabf890a00b9275cd5f643584a8a2c8 @@ -1,2 +1,2 @@ -// 1.21 2024-06-15T21:00:35.2793933 Languages: en_us -dbd6b0627e6448e2df2ca44b3da68ed7e141ddda assets/modonomicon/lang/en_us.json +// 1.21 2024-06-22T12:54:19.9035275 Languages: en_us +5e9bca31739f981be8d1893d1091664494280f6a assets/modonomicon/lang/en_us.json diff --git a/forge/src/generated/resources/assets/modonomicon/lang/en_us.json b/forge/src/generated/resources/assets/modonomicon/lang/en_us.json index 695d2896..d514a029 100644 --- a/forge/src/generated/resources/assets/modonomicon/lang/en_us.json +++ b/forge/src/generated/resources/assets/modonomicon/lang/en_us.json @@ -132,7 +132,12 @@ "modonomicon.command.success.save_progress": "Saved progress for book: %s. The unlock code has been copied to your clipboard.", "modonomicon.command.test_command.success": "You got an apple, because reading is cool!", "modonomicon.command.test_command2.success": "You got wheat, because clicking is cool!", + "modonomicon.gui.add_bookmark": "Add Bookmark", "modonomicon.gui.book.index_list_title": "Categories", + "modonomicon.gui.bookmarks.entry_list_title": "Bookmark Entries", + "modonomicon.gui.bookmarks.info": "To navigate to a bookmark, click on it in this list.\n\\\n\\\nTo add a bookmark, open an entry and click the \"Add Bookmark\" button on the bottom right.\n\\\n\\\nTo remove a bookmark, navigate to it and click the \"Remove Bookmark\" button on the bottom right.\n", + "modonomicon.gui.bookmarks.no_results": "No entries yet.", + "modonomicon.gui.bookmarks.screen.title": "Bookmarks", "modonomicon.gui.button.back": "Back", "modonomicon.gui.button.back.tooltip": "Go back to the last page you visited", "modonomicon.gui.button.exit": "Exit", @@ -160,9 +165,11 @@ "modonomicon.gui.hover.item_link_info.no_jei": "Install JEI to show recipe/usage on click.", "modonomicon.gui.hover.item_link_info_line2": "Will not do anything, if no recipe/usage is found.", "modonomicon.gui.no_errors_found": "No errors found. You should not see this page!", + "modonomicon.gui.open_bookmarks": "Open Bookmarks", "modonomicon.gui.open_search": "Open Search", "modonomicon.gui.page.entity.loading_error": "Failed to load entity", "modonomicon.gui.recipe_page.recipe_missing": "Recipe %s was not found! This may be an issue with the mod, or the modpack may have disabled it.", + "modonomicon.gui.remove_bookmark": "Remove Bookmark", "modonomicon.gui.search.entry.locked": "(Locked)", "modonomicon.gui.search.entry_list_title": "Entries", "modonomicon.gui.search.info": "To search for entries, simply start typing what you are looking for.\n", diff --git a/forge/src/generated/resources/data/minecraft/tags/item/lectern_books.json b/forge/src/generated/resources/data/minecraft/tags/item/lectern_books.json new file mode 100644 index 00000000..f2911ffc --- /dev/null +++ b/forge/src/generated/resources/data/minecraft/tags/item/lectern_books.json @@ -0,0 +1,5 @@ +{ + "values": [ + "modonomicon:modonomicon" + ] +} \ No newline at end of file diff --git a/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json b/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json index fad78687..fcee679e 100644 --- a/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json +++ b/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo/book.json @@ -50,7 +50,7 @@ "search_button_x_offset": 0, "search_button_y_offset": 0, "single_page_texture": "modonomicon:textures/gui/single_page_entry.png", - "tooltip": "", + "tooltip": "book.modonomicon.demo.tooltip", "top_frame_overlay": { "frame_height": 7, "frame_width": 72, diff --git a/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json b/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json index e08560e5..fcafc2e6 100644 --- a/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json +++ b/forge/src/generated/resources/data/modonomicon/modonomicon/books/demo_leaflet/book.json @@ -51,7 +51,7 @@ "search_button_x_offset": 0, "search_button_y_offset": 0, "single_page_texture": "modonomicon:textures/gui/single_page_entry.png", - "tooltip": "", + "tooltip": "book.modonomicon.demo_leaflet.tooltip", "top_frame_overlay": { "frame_height": 7, "frame_width": 72, diff --git a/forge/src/main/java/com/klikli_dev/modonomicon/ModonomiconForge.java b/forge/src/main/java/com/klikli_dev/modonomicon/ModonomiconForge.java index f541a870..3cd0e007 100644 --- a/forge/src/main/java/com/klikli_dev/modonomicon/ModonomiconForge.java +++ b/forge/src/main/java/com/klikli_dev/modonomicon/ModonomiconForge.java @@ -17,6 +17,7 @@ import com.klikli_dev.modonomicon.data.LoaderRegistry; import com.klikli_dev.modonomicon.data.MultiblockDataManager; import com.klikli_dev.modonomicon.datagen.DataGenerators; +import com.klikli_dev.modonomicon.integration.LecternIntegration; import com.klikli_dev.modonomicon.network.Networking; import com.klikli_dev.modonomicon.registry.CommandRegistry; import com.klikli_dev.modonomicon.registry.CreativeModeTabRegistry; @@ -135,6 +136,14 @@ public void onCommonSetup(FMLCommonSetupEvent event) { Networking.registerMessages(); LoaderRegistry.registerLoaders(); + + MinecraftForge.EVENT_BUS.addListener((PlayerInteractEvent.RightClickBlock e) -> { + var result = LecternIntegration.rightClick(e.getEntity(), e.getLevel(), e.getHand(), e.getHitVec()); + if (result.consumesAction()) { + e.setCanceled(true); + e.setCancellationResult(result); + } + }); } public static class Client { diff --git a/forge/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java b/forge/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java index 79859833..f82b1c37 100644 --- a/forge/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java +++ b/forge/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java @@ -26,5 +26,6 @@ public ItemTagsProvider(PackOutput output, CompletableFuture) MessageHandler::handle) .add(); + INSTANCE.messageBuilder(OpenBookOnClientMessage.class) + .encoder(encoder(OpenBookOnClientMessage.STREAM_CODEC)) + .decoder(decoder(OpenBookOnClientMessage.STREAM_CODEC)) + .consumerNetworkThread((BiConsumer) MessageHandler::handle) + .add(); + INSTANCE.messageBuilder(SendUnlockCodeToServerMessage.class) .encoder(encoder(SendUnlockCodeToServerMessage.STREAM_CODEC)) .decoder(decoder(SendUnlockCodeToServerMessage.STREAM_CODEC)) diff --git a/neo/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 b/neo/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 index fab8766c..b6213a40 100644 --- a/neo/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 +++ b/neo/src/generated/resources/.cache/6c598f431bd47b05b7a4eb102a1f5ce41438a4c5 @@ -1,2 +1,3 @@ -// 1.21 2024-06-16T10:14:26.3229885 Tags for minecraft:item mod id modonomicon +// 1.21 2024-06-22T12:53:16.6005258 Tags for minecraft:item mod id modonomicon 44de4772d365fcc0e5706dbfcd83d2967ec352c0 data/minecraft/tags/item/bookshelf_books.json +44de4772d365fcc0e5706dbfcd83d2967ec352c0 data/minecraft/tags/item/lectern_books.json diff --git a/neo/src/generated/resources/data/minecraft/tags/item/lectern_books.json b/neo/src/generated/resources/data/minecraft/tags/item/lectern_books.json new file mode 100644 index 00000000..f2911ffc --- /dev/null +++ b/neo/src/generated/resources/data/minecraft/tags/item/lectern_books.json @@ -0,0 +1,5 @@ +{ + "values": [ + "modonomicon:modonomicon" + ] +} \ No newline at end of file diff --git a/neo/src/main/java/com/klikli_dev/modonomicon/ModonomiconNeo.java b/neo/src/main/java/com/klikli_dev/modonomicon/ModonomiconNeo.java index 54b7fa22..6ef7b9ae 100644 --- a/neo/src/main/java/com/klikli_dev/modonomicon/ModonomiconNeo.java +++ b/neo/src/main/java/com/klikli_dev/modonomicon/ModonomiconNeo.java @@ -17,6 +17,7 @@ import com.klikli_dev.modonomicon.data.LoaderRegistry; import com.klikli_dev.modonomicon.data.MultiblockDataManager; import com.klikli_dev.modonomicon.datagen.DataGenerators; +import com.klikli_dev.modonomicon.integration.LecternIntegration; import com.klikli_dev.modonomicon.network.Networking; import com.klikli_dev.modonomicon.registry.CommandRegistry; import com.klikli_dev.modonomicon.registry.CreativeModeTabRegistry; @@ -131,6 +132,14 @@ public ModonomiconNeo(IEventBus modEventBus, ModContainer modContainer) { public void onCommonSetup(FMLCommonSetupEvent event) { LoaderRegistry.registerLoaders(); + + NeoForge.EVENT_BUS.addListener((PlayerInteractEvent.RightClickBlock e) -> { + var result = LecternIntegration.rightClick(e.getEntity(), e.getLevel(), e.getHand(), e.getHitVec()); + if (result.consumesAction()) { + e.setCanceled(true); + e.setCancellationResult(result); + } + }); } public static class Client { diff --git a/neo/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java b/neo/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java index 4c89e41c..0265abf2 100644 --- a/neo/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java +++ b/neo/src/main/java/com/klikli_dev/modonomicon/datagen/ItemTagsProvider.java @@ -24,5 +24,6 @@ public ItemTagsProvider(PackOutput output, CompletableFuture