Skip to content

Commit

Permalink
feat: add lectern compatibility for modonomicon books
Browse files Browse the repository at this point in the history
Closes #162
  • Loading branch information
klikli-dev committed Jun 22, 2024
1 parent f8f4a8d commit ee6c0d7
Show file tree
Hide file tree
Showing 31 changed files with 204 additions and 21 deletions.
Original file line number Diff line number Diff line change
@@ -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);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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());
}

Expand Down
Original file line number Diff line number Diff line change
@@ -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<OpenBookOnClientMessage> TYPE = new Type<>(ResourceLocation.fromNamespaceAndPath(Modonomicon.MOD_ID, "open_book_on_client"));

public static final StreamCodec<RegistryFriendlyByteBuf, OpenBookOnClientMessage> 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<? extends CustomPacketPayload> 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));
}
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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
Expand All @@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
@@ -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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"values": [
"modonomicon:modonomicon"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,17 +8,20 @@

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;
import net.fabricmc.api.ModInitializer;
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;
Expand Down Expand Up @@ -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

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,5 +24,6 @@ public ItemTagsProvider(FabricDataOutput output, CompletableFuture<HolderLookup.
protected void addTags(HolderLookup.Provider pProvider) {
//item tag provider is per modloader because forge and neo modify the constructor
this.tag(ItemTags.BOOKSHELF_BOOKS).add(ItemRegistry.MODONOMICON.getResourceKey());
this.tag(ItemTags.LECTERN_BOOKS).add(ItemRegistry.MODONOMICON.getResourceKey());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,5 +19,6 @@ public static void registerReceivers() {
ClientPlayNetworking.registerGlobalReceiver(SyncMultiblockDataMessage.TYPE, new ClientMessageHandler<>());
ClientPlayNetworking.registerGlobalReceiver(ReloadResourcesOnClientMessage.TYPE, new ClientMessageHandler<>());
ClientPlayNetworking.registerGlobalReceiver(SendAdvancementToClientMessage.TYPE, new ClientMessageHandler<>());
ClientPlayNetworking.registerGlobalReceiver(OpenBookOnClientMessage.TYPE, new ClientMessageHandler<>());
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}
}
Original file line number Diff line number Diff line change
@@ -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
Expand Down Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
@@ -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
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down Expand Up @@ -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",
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"values": [
"modonomicon:modonomicon"
]
}
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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,
Expand Down
Loading

0 comments on commit ee6c0d7

Please sign in to comment.