From e511e7c10b1b0110a7a09a9a79b7e149f629048f Mon Sep 17 00:00:00 2001 From: Dustin Norberg Date: Thu, 24 Sep 2026 14:08:12 -0400 Subject: [PATCH] Add Writing Desk symbol catalog and paper transcription --- NOTICE | 2 + README.md | 9 +- docs/ASSET_PROVENANCE.md | 1 + docs/WRITING_DATA.md | 10 +- gradle.properties | 2 +- .../rivencraft/block/WritingDeskBlock.java | 6 +- .../block/entity/WritingDeskBlockEntity.java | 5 +- .../client/ClientWritingDeskCatalog.java | 20 +++ .../client/screen/NotebookScreen.java | 6 +- .../client/screen/WritingDeskScreen.java | 128 +++++++++++++++++- .../gametest/WritingDataGameTests.java | 16 +-- .../gametest/WritingDeskGameTests.java | 65 ++++++++- .../rivencraft/menu/WritingDeskMenu.java | 52 ++++++- .../rivencraft/network/ModNetworking.java | 3 + .../network/WritingDeskCatalogPayload.java | 26 ++++ .../rivencraft/registry/ModCreativeTabs.java | 1 - .../writing/WritingDeskCatalog.java | 63 +++++++++ .../rivencraft/writing/WritingInkService.java | 2 +- .../assets/rivencraft/lang/en_us.json | 4 +- .../rivencraft/models/block/writing_desk.json | 71 +++++++++- .../rivencraft/models/item/writing_desk.json | 3 +- .../textures/block/writing_desk.png | Bin 0 -> 101065 bytes .../data/rivencraft/recipe/page.json | 13 -- 23 files changed, 449 insertions(+), 59 deletions(-) create mode 100644 src/main/java/net/dnorberg/rivencraft/client/ClientWritingDeskCatalog.java create mode 100644 src/main/java/net/dnorberg/rivencraft/network/WritingDeskCatalogPayload.java create mode 100644 src/main/java/net/dnorberg/rivencraft/writing/WritingDeskCatalog.java create mode 100644 src/main/resources/assets/rivencraft/textures/block/writing_desk.png delete mode 100644 src/main/resources/data/rivencraft/recipe/page.json diff --git a/NOTICE b/NOTICE index f52a95c..2d85d7f 100644 --- a/NOTICE +++ b/NOTICE @@ -12,6 +12,8 @@ The Notebook page atlas is copied from Legacy's assets/mystcraft/gui/bookui_page under the same license. The Writing Desk item texture is copied from Legacy's assets/mystcraft/textures/items/writingdesk.png under the same license. +The Writing Desk block texture is copied from Legacy's +assets/mystcraft/textures/entity/desk.png under the same license. The initial build layout is derived from the official NeoForge 1.21.1 ModDevGradle MDK: https://github.com/NeoForgeMDKs/MDK-1.21.1-ModDevGradle diff --git a/README.md b/README.md index 75df96d..b38667e 100644 --- a/README.md +++ b/README.md @@ -14,7 +14,7 @@ have not been ported yet. Milestone 4 now includes stackable blank Pages plus server-created symbol, unresolved-symbol, and baseline link-panel states. Page visuals follow the legacy runtime-composition rules. Craft an Ink Vial from two black dye, a glass -bottle, and a water bucket; the bucket is returned. Hold a blank Page in one +bottle, and a water bucket; the bucket is returned. Hold vanilla paper in one hand and use the Ink Vial in the other to prepare a baseline Link Panel Page. Each vial holds 16 ink units, and the default link-panel cost is two units. The spent vial returns a glass bottle. Server owners can adjust the symbol-copy @@ -25,12 +25,13 @@ Its four collection tabs, paper input, ink vial input, empty glass-bottle return 16-unit ink meter, and inventory persist through world saves; breaking it drops stored contents. The desk screen is a functional foundation styled after Legacy's left tabs, central writing surface, -and right inventory. Put vanilla paper (or a blank Rivencraft Page) in the +and right inventory. Put vanilla paper in the upper-left slot and Ink Vials in the upper-right; a copy appears in the lower-left result slot when the selected page is valid. Taking it consumes one paper and, by default, one ink. An empty meter consumes a vial to refill and -returns a vanilla glass bottle to the lower-right slot. Writing new symbols -from a catalog remains future work. +returns a vanilla glass bottle to the lower-right slot. The ALL browser searches +and filters symbols held in the desk's loose pages and Notebooks; selection +is validated against the server's current symbol catalog. Selecting a stored page on the desk surface shows its Legacy-proportioned portrait preview and name above the player inventory. diff --git a/docs/ASSET_PROVENANCE.md b/docs/ASSET_PROVENANCE.md index b16fa40..5ca85d7 100644 --- a/docs/ASSET_PROVENANCE.md +++ b/docs/ASSET_PROVENANCE.md @@ -9,6 +9,7 @@ project's GNU LGPL v3 license. Rivencraft itself uses the same license. | `assets/rivencraft/textures/item/page.png` | `assets/mystcraft/textures/items/page_background.png` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Namespace/path rename only | | `assets/rivencraft/textures/gui/notebook_pages.png` | `assets/mystcraft/gui/bookui_pagel.png` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Namespace/path rename only; Notebook draws the native 30×40 page at atlas coordinates `(156, 0)` | | `assets/rivencraft/textures/item/writing_desk.png` | `assets/mystcraft/textures/items/writingdesk.png` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Namespace/path rename only | +| `assets/rivencraft/textures/block/writing_desk.png` | `assets/mystcraft/textures/entity/desk.png` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Namespace/path rename only; single-block model adapts the desk geometry and UV regions from `ModelWritingDesk` | | `assets/rivencraft/textures/item/linking_book_unwritten.png` | `assets/mystcraft/textures/items/unlinked.png` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Namespace/path rename only | | `assets/rivencraft/textures/item/page_link_panel.png` | `page_background.png` and `PageBuilder.BasicPageSprite` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Reproduces the legacy 160 px scale, black panel at `(25,30)`–`(135,75)`, and 128 px resample | | `assets/rivencraft/textures/item/page_symbol*.png` and `page_unresolved.png` | `page_background.png`, `textures/symbolcomponents.png`, `WordData`, `ModSymbols`, and `PageBuilder.PageSprite` | `9bc8ddc061845df0cd5ea47f4fdef773cff786ae` | Static 1.21.1 renditions of the legacy runtime-composed four-word symbol pages; `normal_time` uses the legacy Full Length poem | diff --git a/docs/WRITING_DATA.md b/docs/WRITING_DATA.md index cf6f33f..5bc9db9 100644 --- a/docs/WRITING_DATA.md +++ b/docs/WRITING_DATA.md @@ -53,8 +53,8 @@ unresolved symbol, and baseline link panel. Symbol and unresolved-symbol pages retain their namespaced symbol reference; unresolved pages can be inspected and removed but are rejected as usable writing until their data pack returns. -Only server-side writing operations may turn a blank page into a known symbol -page or link panel. The shared `PageItem` creation and validation gates reject +Only server-side writing operations may create a known symbol +page or link panel from vanilla paper. The shared `PageItem` creation and validation gates reject new pages for identifiers absent from the server catalog. Later Writing Desk and Book Binder packets must call these gates rather than accepting page contents supplied by a client. @@ -82,9 +82,9 @@ used to craft another. The animated item texture comes from Mystcraft Legacy. The server config sets ink costs independently for symbol copying (default one unit) and baseline link-panel preparation (default two units). To prepare a -panel, hold a blank Page in one hand and use an Ink Vial in the other. The -server checks the held items, blank state, and sufficient ink before consuming -anything. A stack of blank Pages yields exactly one Link Panel Page per use; +panel, hold vanilla paper in one hand and use an Ink Vial in the other. The +server checks the held items and sufficient ink before consuming +anything. A stack of paper yields exactly one Link Panel Page per use; if the inventory is full, the result is dropped instead of deleted. Symbol copying is implemented by the Writing Desk: it previews a copy of the selected resolved page, then spends paper and ink only when that copy is taken. The diff --git a/gradle.properties b/gradle.properties index 42041d1..e380cad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -35,7 +35,7 @@ mod_name=Rivencraft # The license of the mod. Review your options at https://choosealicense.com/. All Rights Reserved is the default. mod_license=LGPL-3.0-or-later # The mod version. Rivencraft uses the x.y.z.b policy documented in README.md. -mod_version=0.3.5.2 +mod_version=0.3.6.0 immersive_portals_version=6.0.7 # The group ID for the mod. It is only important when publishing as an artifact to a Maven repository. # This should match the base package used for the mod sources. diff --git a/src/main/java/net/dnorberg/rivencraft/block/WritingDeskBlock.java b/src/main/java/net/dnorberg/rivencraft/block/WritingDeskBlock.java index fe611d8..76d74ca 100644 --- a/src/main/java/net/dnorberg/rivencraft/block/WritingDeskBlock.java +++ b/src/main/java/net/dnorberg/rivencraft/block/WritingDeskBlock.java @@ -3,6 +3,7 @@ package net.dnorberg.rivencraft.block; import com.mojang.serialization.MapCodec; import net.dnorberg.rivencraft.block.entity.WritingDeskBlockEntity; import net.dnorberg.rivencraft.menu.WritingDeskMenu; +import net.dnorberg.rivencraft.writing.WritingDeskCatalog; import net.minecraft.core.BlockPos; import net.minecraft.network.chat.Component; import net.minecraft.server.level.ServerPlayer; @@ -48,7 +49,10 @@ public final class WritingDeskBlock extends BaseEntityBlock { serverPlayer.openMenu(new SimpleMenuProvider( (id, inventory, ignored) -> new WritingDeskMenu(id, inventory, desk), Component.translatable("container.rivencraft.writing_desk")), - buffer -> buffer.writeBlockPos(pos)); + buffer -> { + buffer.writeBlockPos(pos); + WritingDeskCatalog.write(buffer, WritingDeskCatalog.available(desk)); + }); } return InteractionResult.sidedSuccess(level.isClientSide); } diff --git a/src/main/java/net/dnorberg/rivencraft/block/entity/WritingDeskBlockEntity.java b/src/main/java/net/dnorberg/rivencraft/block/entity/WritingDeskBlockEntity.java index 28958ca..d817a95 100644 --- a/src/main/java/net/dnorberg/rivencraft/block/entity/WritingDeskBlockEntity.java +++ b/src/main/java/net/dnorberg/rivencraft/block/entity/WritingDeskBlockEntity.java @@ -1,7 +1,6 @@ package net.dnorberg.rivencraft.block.entity; import net.dnorberg.rivencraft.item.InkVialItem; -import net.dnorberg.rivencraft.item.PageItem; import net.dnorberg.rivencraft.writing.WritingInkService; import net.dnorberg.rivencraft.registry.ModBlockEntities; import net.dnorberg.rivencraft.registry.ModItems; @@ -68,9 +67,7 @@ public final class WritingDeskBlockEntity extends BlockEntity implements Contain return switch (slot) { case INK -> stack.is(ModItems.INK_VIAL.get()); case RETURN -> false; - case PAPER -> stack.is(Items.PAPER) - || stack.is(ModItems.PAGE.get()) && PageItem.content(stack).kind() - == net.dnorberg.rivencraft.writing.PageContent.Kind.BLANK; + case PAPER -> stack.is(Items.PAPER); case LEGACY_OUTPUT -> false; default -> false; }; diff --git a/src/main/java/net/dnorberg/rivencraft/client/ClientWritingDeskCatalog.java b/src/main/java/net/dnorberg/rivencraft/client/ClientWritingDeskCatalog.java new file mode 100644 index 0000000..ba82635 --- /dev/null +++ b/src/main/java/net/dnorberg/rivencraft/client/ClientWritingDeskCatalog.java @@ -0,0 +1,20 @@ +package net.dnorberg.rivencraft.client; + +import net.dnorberg.rivencraft.menu.WritingDeskMenu; +import net.dnorberg.rivencraft.network.WritingDeskCatalogPayload; +import net.minecraft.client.Minecraft; +import net.neoforged.neoforge.network.handling.IPayloadContext; + +public final class ClientWritingDeskCatalog { + private ClientWritingDeskCatalog() {} + + public static void handle(WritingDeskCatalogPayload payload, IPayloadContext context) { + context.enqueueWork(() -> { + var player = Minecraft.getInstance().player; + if (player != null && player.containerMenu instanceof WritingDeskMenu menu + && menu.containerId == payload.containerId()) { + menu.setCatalog(payload.symbols()); + } + }); + } +} diff --git a/src/main/java/net/dnorberg/rivencraft/client/screen/NotebookScreen.java b/src/main/java/net/dnorberg/rivencraft/client/screen/NotebookScreen.java index 979cc55..3c5f38b 100644 --- a/src/main/java/net/dnorberg/rivencraft/client/screen/NotebookScreen.java +++ b/src/main/java/net/dnorberg/rivencraft/client/screen/NotebookScreen.java @@ -276,7 +276,11 @@ public final class NotebookScreen extends AbstractContainerScreen if (content.kind() == net.dnorberg.rivencraft.writing.PageContent.Kind.UNRESOLVED_SYMBOL) { return UNRESOLVED_SYMBOL; } - return switch (content.symbol().orElseThrow().id().toString()) { + return symbolTexture(content.symbol().orElseThrow().id()); + } + + static ResourceLocation symbolTexture(ResourceLocation id) { + return switch (id.toString()) { case "rivencraft:terrain/standard" -> STANDARD_TERRAIN; case "rivencraft:biome/native" -> NATIVE_BIOMES; case "rivencraft:lighting/normal" -> NORMAL_LIGHTING; diff --git a/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java b/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java index 4a7a05b..314744f 100644 --- a/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java +++ b/src/main/java/net/dnorberg/rivencraft/client/screen/WritingDeskScreen.java @@ -1,13 +1,18 @@ package net.dnorberg.rivencraft.client.screen; import java.util.List; +import java.util.Locale; +import java.util.Objects; import net.dnorberg.rivencraft.Rivencraft; import net.dnorberg.rivencraft.item.PageItem; import net.dnorberg.rivencraft.menu.WritingDeskMenu; import net.dnorberg.rivencraft.registry.ModDataComponents; import net.dnorberg.rivencraft.registry.ModItems; import net.dnorberg.rivencraft.writing.NotebookContents; +import net.dnorberg.rivencraft.writing.SymbolDisplayMetadata; import net.minecraft.client.gui.GuiGraphics; +import net.minecraft.client.gui.components.Button; +import net.minecraft.client.gui.components.EditBox; import net.minecraft.client.gui.screens.inventory.AbstractContainerScreen; import net.minecraft.network.chat.Component; import net.minecraft.resources.ResourceLocation; @@ -21,6 +26,11 @@ public final class WritingDeskScreen extends AbstractContainerScreen { + allMode = true; + scrollRows = 0; + }).bounds(leftPos + 48, topPos - 18, 29, 18).build()); + categoryButton = addRenderableWidget(Button.builder(Component.literal("All types"), button -> { + List categories = menu.catalog().stream() + .map(SymbolDisplayMetadata::category).distinct().sorted().toList(); + int next = selectedCategory == null ? 0 : categories.indexOf(selectedCategory) + 1; + selectedCategory = next >= categories.size() ? null : categories.get(next); + categoryButton.setMessage(Component.literal(selectedCategory == null + ? "All types" : selectedCategory.getPath())); + allMode = true; + scrollRows = 0; + }).bounds(leftPos + 79, topPos - 18, 66, 18).build()); + search = new EditBox(font, leftPos + 147, topPos - 18, 69, 18, + Component.translatable("screen.rivencraft.writing_desk.search")); + search.setMaxLength(64); + search.setHint(Component.translatable("screen.rivencraft.writing_desk.search")); + search.setResponder(value -> { + allMode = true; + scrollRows = 0; + }); + addRenderableWidget(search); + } + + private List filteredCatalog() { + String query = search == null ? "" : search.getValue().trim().toLowerCase(Locale.ROOT); + return menu.catalog().stream() + .filter(entry -> selectedCategory == null || selectedCategory.equals(entry.category())) + .filter(entry -> query.isEmpty() + || entry.id().toString().toLowerCase(Locale.ROOT).contains(query) + || Component.translatable(entry.nameTranslationKey()).getString() + .toLowerCase(Locale.ROOT).contains(query)) + .toList(); + } + @Override public void renderBackground(GuiGraphics graphics, int mouseX, int mouseY, float partialTick) { // Legacy leaves the world visible around the desk instead of dimming it. } @@ -94,6 +142,10 @@ public final class WritingDeskScreen extends AbstractContainerScreen pages = pages(); if (lastCollection != menu.activeCollection()) { lastCollection = menu.activeCollection(); @@ -124,6 +176,41 @@ public final class WritingDeskScreen extends AbstractContainerScreen filtered = filteredCatalog(); + if (filtered.isEmpty()) { + graphics.drawString(font, Component.translatable("screen.rivencraft.writing_desk.no_symbols"), + leftPos + 52, topPos + 24, 0xFFC4B8A3, false); + } + for (int i = scrollRows * 5; i < filtered.size() && i < scrollRows * 5 + 15; i++) { + SymbolDisplayMetadata entry = filtered.get(i); + int x = leftPos + 48 + (i % 5) * 31; + int y = topPos + 18 + (i / 5 - scrollRows) * 41; + drawSymbolPage(graphics, entry.id(), x, y); + if (Objects.equals(entry.id(), selectedSymbol)) { + graphics.renderOutline(x, y, 30, 40, 0xFFFFD061); + } + } + SymbolDisplayMetadata selected = menu.catalog().stream() + .filter(entry -> Objects.equals(entry.id(), selectedSymbol)).findFirst().orElse(null); + if (selected == null) return; + graphics.pose().pushPose(); + graphics.pose().translate(leftPos + 294, topPos + 12, 0); + graphics.pose().scale(1.35F, 1.35F, 1.0F); + drawSymbolPage(graphics, selected.id(), 0, 0); + graphics.pose().popPose(); + String title = font.plainSubstrByWidth( + Component.translatable(selected.nameTranslationKey()).getString(), 112); + graphics.fill(leftPos + 251, topPos + 64, leftPos + 365, topPos + 77, 0xFF202020); + graphics.drawString(font, title, leftPos + 254, topPos + 67, 0xFFE0E0E0, false); + } + + private void drawSymbolPage(GuiGraphics graphics, ResourceLocation id, int x, int y) { + graphics.blit(PAGE_ATLAS, x, y, 30, 40, 156, 0, 30, 40, 256, 256); + graphics.blit(NotebookScreen.symbolTexture(id), x + 1, y + 6, + 28, 28, 16, 16, 96, 96, 128, 128); + } + private void drawPage(GuiGraphics graphics, ItemStack page, int x, int y) { graphics.blit(PAGE_ATLAS, x, y, 30, 40, 156, 0, 30, 40, 256, 256); if (page.isEmpty()) return; @@ -143,12 +230,24 @@ public final class WritingDeskScreen extends AbstractContainerScreen pages = pages(); - if (x % 31 < 30 && y % 41 < 40 && index < pages.size() - && !pages.get(index).isEmpty()) { - selectedPage = index; - if (minecraft != null && minecraft.gameMode != null) { - minecraft.gameMode.handleInventoryButtonClick(menu.containerId, 16 + index); + if (allMode) { + List filtered = filteredCatalog(); + if (x % 31 < 30 && y % 41 < 40 && index < filtered.size()) { + SymbolDisplayMetadata entry = filtered.get(index); + selectedSymbol = entry.id(); + int serverIndex = menu.catalog().indexOf(entry); + if (serverIndex >= 0 && minecraft != null && minecraft.gameMode != null) { + minecraft.gameMode.handleInventoryButtonClick(menu.containerId, 100 + serverIndex); + } + } + } else { + List pages = pages(); + if (x % 31 < 30 && y % 41 < 40 && index < pages.size() + && !pages.get(index).isEmpty()) { + selectedPage = index; + if (minecraft != null && minecraft.gameMode != null) { + minecraft.gameMode.handleInventoryButtonClick(menu.containerId, 16 + index); + } } } return true; @@ -158,6 +257,8 @@ public final class WritingDeskScreen extends AbstractContainerScreen= top && mouseY < top + 32) { + allMode = false; + selectedSymbol = null; if (minecraft != null && minecraft.gameMode != null) { minecraft.gameMode.handleInventoryButtonClick(menu.containerId, i); } @@ -171,10 +272,23 @@ public final class WritingDeskScreen extends AbstractContainerScreen= leftPos + 48 && mouseX < leftPos + 203 && mouseY >= topPos + 18 && mouseY < topPos + 141) { - int rows = (pages().size() + 4) / 5; + int rows = ((allMode ? filteredCatalog().size() : pages().size()) + 4) / 5; scrollRows = Math.clamp(scrollRows - (int) Math.signum(scrollY), 0, Math.max(0, rows - 3)); return true; } return super.mouseScrolled(mouseX, mouseY, scrollX, scrollY); } + + @Override public boolean keyPressed(int keyCode, int scanCode, int modifiers) { + if (search != null && search.isFocused()) { + if (keyCode == 256) { + setFocused(null); + search.setFocused(false); + } else { + search.keyPressed(keyCode, scanCode, modifiers); + } + return true; + } + return super.keyPressed(keyCode, scanCode, modifiers); + } } diff --git a/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java b/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java index bcff5db..efa7958 100644 --- a/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java +++ b/src/main/java/net/dnorberg/rivencraft/gametest/WritingDataGameTests.java @@ -244,14 +244,14 @@ public final class WritingDataGameTests { @GameTest(template = "empty") public static void linkPanelPreparationConsumesOnePageAndConfiguredInkOnlyOnSuccess(GameTestHelper helper) { var player = helper.makeMockServerPlayerInLevel(); - ItemStack pages = new ItemStack(ModItems.PAGE.get(), 2); + ItemStack pages = new ItemStack(Items.PAPER, 2); ItemStack vial = new ItemStack(ModItems.INK_VIAL.get()); player.setItemInHand(InteractionHand.MAIN_HAND, vial); player.setItemInHand(InteractionHand.OFF_HAND, pages); helper.assertTrue(WritingInkService.prepareLinkPanel(player, InteractionHand.MAIN_HAND), - "A blank Page and sufficient ink must prepare one link panel"); - helper.assertValueEqual(pages.getCount(), 1, "Preparation must consume exactly one blank Page"); + "Paper and sufficient ink must prepare one link panel"); + helper.assertValueEqual(pages.getCount(), 1, "Preparation must consume exactly one paper"); helper.assertValueEqual(InkVialItem.remaining(player.getMainHandItem()), InkVialItem.CAPACITY - WritingInkService.linkPanelCost(), "Preparation must consume exactly the server-configured ink cost"); @@ -274,14 +274,14 @@ public final class WritingDataGameTests { ItemStack lowInk = new ItemStack(ModItems.INK_VIAL.get()); lowInk.set(ModDataComponents.INK_REMAINING.get(), WritingInkService.linkPanelCost() - 1); player.setItemInHand(InteractionHand.MAIN_HAND, lowInk); - player.setItemInHand(InteractionHand.OFF_HAND, new ItemStack(ModItems.PAGE.get())); + player.setItemInHand(InteractionHand.OFF_HAND, new ItemStack(Items.PAPER)); helper.assertFalse(WritingInkService.prepareLinkPanel(player, InteractionHand.MAIN_HAND), "Insufficient ink must reject link-panel preparation"); helper.assertValueEqual(InkVialItem.remaining(player.getMainHandItem()), WritingInkService.linkPanelCost() - 1, "Insufficient ink must remain untouched"); - helper.assertValueEqual(PageItem.content(player.getOffhandItem()).kind(), PageContent.Kind.BLANK, - "Insufficient ink must leave the Page blank"); + helper.assertTrue(player.getOffhandItem().is(Items.PAPER), + "Insufficient ink must leave paper untouched"); lowInk.set(ModDataComponents.INK_REMAINING.get(), WritingInkService.linkPanelCost()); helper.assertTrue(WritingInkService.prepareLinkPanel(player, InteractionHand.MAIN_HAND), @@ -290,7 +290,7 @@ public final class WritingDataGameTests { "A depleted Ink Vial must return a reusable glass bottle"); helper.assertValueEqual(PageItem.content(player.getOffhandItem()).kind(), PageContent.Kind.LINK_PANEL, - "A single blank Page must be replaced by one Link Panel Page"); + "A single paper must be replaced by one Link Panel Page"); helper.succeed(); } @@ -298,7 +298,7 @@ public final class WritingDataGameTests { public static void stackedInkVialsSplitWithoutChangingTheOtherVials(GameTestHelper helper) { var player = helper.makeMockServerPlayerInLevel(); player.setItemInHand(InteractionHand.MAIN_HAND, new ItemStack(ModItems.INK_VIAL.get(), 2)); - player.setItemInHand(InteractionHand.OFF_HAND, new ItemStack(ModItems.PAGE.get())); + player.setItemInHand(InteractionHand.OFF_HAND, new ItemStack(Items.PAPER)); helper.assertTrue(WritingInkService.prepareLinkPanel(player, InteractionHand.MAIN_HAND), "A stack of full vials must support preparing one panel"); diff --git a/src/main/java/net/dnorberg/rivencraft/gametest/WritingDeskGameTests.java b/src/main/java/net/dnorberg/rivencraft/gametest/WritingDeskGameTests.java index 02e26cc..88bfd30 100644 --- a/src/main/java/net/dnorberg/rivencraft/gametest/WritingDeskGameTests.java +++ b/src/main/java/net/dnorberg/rivencraft/gametest/WritingDeskGameTests.java @@ -9,7 +9,10 @@ import net.dnorberg.rivencraft.registry.ModBlocks; import net.dnorberg.rivencraft.registry.ModDataComponents; import net.dnorberg.rivencraft.registry.ModItems; import net.dnorberg.rivencraft.writing.NotebookContents; +import net.dnorberg.rivencraft.writing.SymbolReference; +import net.dnorberg.rivencraft.writing.WritingDeskCatalog; import net.minecraft.core.BlockPos; +import net.minecraft.resources.ResourceLocation; import net.minecraft.gametest.framework.GameTest; import net.minecraft.gametest.framework.GameTestHelper; import net.minecraft.world.entity.item.ItemEntity; @@ -32,7 +35,7 @@ public final class WritingDeskGameTests { var original = new WritingDeskBlockEntity(pos, ModBlocks.WRITING_DESK.get().defaultBlockState()); original.setItem(0, new ItemStack(ModItems.NOTEBOOK.get())); original.setItem(WritingDeskBlockEntity.INK, new ItemStack(ModItems.INK_VIAL.get())); - original.setItem(WritingDeskBlockEntity.PAPER, new ItemStack(ModItems.PAGE.get(), 12)); + original.setItem(WritingDeskBlockEntity.PAPER, new ItemStack(Items.PAPER, 12)); original.setActiveCollection(2); var saved = original.saveWithoutMetadata(helper.getLevel().registryAccess()); var restored = new WritingDeskBlockEntity(pos, ModBlocks.WRITING_DESK.get().defaultBlockState()); @@ -52,12 +55,12 @@ public final class WritingDeskGameTests { WritingDeskBlockEntity desk = (WritingDeskBlockEntity) helper.getLevel().getBlockEntity(pos); desk.setItem(0, new ItemStack(ModItems.NOTEBOOK.get())); desk.setItem(WritingDeskBlockEntity.INK, new ItemStack(ModItems.INK_VIAL.get())); - desk.setItem(WritingDeskBlockEntity.PAPER, new ItemStack(ModItems.PAGE.get(), 12)); + desk.setItem(WritingDeskBlockEntity.PAPER, new ItemStack(Items.PAPER, 12)); helper.getLevel().setBlock(pos, Blocks.AIR.defaultBlockState(), 3); var drops = helper.getLevel().getEntitiesOfClass(ItemEntity.class, new AABB(pos).inflate(2)); int notebooks = drops.stream().filter(e -> e.getItem().is(ModItems.NOTEBOOK.get())).mapToInt(e -> e.getItem().getCount()).sum(); int ink = drops.stream().filter(e -> e.getItem().is(ModItems.INK_VIAL.get())).mapToInt(e -> e.getItem().getCount()).sum(); - int pages = drops.stream().filter(e -> e.getItem().is(ModItems.PAGE.get())).mapToInt(e -> e.getItem().getCount()).sum(); + int pages = drops.stream().filter(e -> e.getItem().is(Items.PAPER)).mapToInt(e -> e.getItem().getCount()).sum(); helper.assertValueEqual(notebooks, 1, "Notebook must drop exactly once"); helper.assertValueEqual(ink, 1, "Ink must drop exactly once"); helper.assertValueEqual(pages, 12, "Pages must drop without loss"); @@ -206,4 +209,60 @@ public final class WritingDeskGameTests { "Shared desk must spend paper only once"); helper.succeed(); } + + @GameTest(template = "empty") + public static void catalogAggregatesKnownSymbolsAcrossCollections(GameTestHelper helper) { + BlockPos pos = helper.absolutePos(new BlockPos(1, 1, 1)); + helper.getLevel().setBlock(pos, ModBlocks.WRITING_DESK.get().defaultBlockState(), 3); + WritingDeskBlockEntity desk = (WritingDeskBlockEntity) helper.getLevel().getBlockEntity(pos); + ResourceLocation known = ResourceLocation.parse("rivencraft:terrain/standard"); + ItemStack page = PageItem.createSymbolPage(new SymbolReference(known)); + ItemStack notebook = new ItemStack(ModItems.NOTEBOOK.get()); + notebook.set(ModDataComponents.NOTEBOOK_CONTENTS.get(), new NotebookContents(List.of(page.copy()))); + desk.setItem(0, page); + desk.setItem(1, notebook); + helper.assertValueEqual(WritingDeskCatalog.available(desk).size(), 1, + "Duplicate symbols across loose pages and notebooks must appear once"); + helper.assertValueEqual(WritingDeskCatalog.available(desk).getFirst().id(), known, + "Catalog must retain the authoritative symbol ID"); + var player = helper.makeMockServerPlayerInLevel(); + player.moveTo(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + WritingDeskMenu menu = new WritingDeskMenu(1, player.getInventory(), desk); + helper.assertFalse(menu.clickMenuButton(player, 101), "Out-of-range catalog index must be rejected"); + helper.assertTrue(menu.clickMenuButton(player, 100), "Known catalog symbol must be selectable"); + desk.setItem(WritingDeskBlockEntity.PAPER, new ItemStack(Items.PAPER)); + desk.setItem(WritingDeskBlockEntity.INK, new ItemStack(ModItems.INK_VIAL.get())); + menu.broadcastChanges(); + helper.assertTrue(menu.getSlot(WritingDeskMenu.COPY_RESULT).getItem().is(ModItems.PAGE.get()), + "Catalog selection must preview a copy of the known symbol"); + desk.setItem(0, ItemStack.EMPTY); + desk.setItem(1, ItemStack.EMPTY); + menu.broadcastChanges(); + helper.assertTrue(menu.catalog().isEmpty(), "Removed sources must invalidate catalog for the viewer"); + helper.assertTrue(menu.getSlot(WritingDeskMenu.COPY_RESULT).getItem().isEmpty(), + "Removed sources must invalidate the copy output"); + helper.succeed(); + } + + @GameTest(template = "empty") + public static void fullInventoryCannotConsumeCopyMaterials(GameTestHelper helper) { + BlockPos pos = helper.absolutePos(new BlockPos(1, 1, 1)); + helper.getLevel().setBlock(pos, ModBlocks.WRITING_DESK.get().defaultBlockState(), 3); + WritingDeskBlockEntity desk = (WritingDeskBlockEntity) helper.getLevel().getBlockEntity(pos); + desk.setItem(0, PageItem.createLinkPanelPage()); + desk.setItem(WritingDeskBlockEntity.PAPER, new ItemStack(Items.PAPER)); + desk.setItem(WritingDeskBlockEntity.INK, new ItemStack(ModItems.INK_VIAL.get())); + var player = helper.makeMockServerPlayerInLevel(); + player.moveTo(pos.getX() + 0.5, pos.getY() + 0.5, pos.getZ() + 0.5); + for (int i = 0; i < 36; i++) player.getInventory().setItem(i, new ItemStack(Items.COBBLESTONE, 64)); + WritingDeskMenu menu = new WritingDeskMenu(1, player.getInventory(), desk); + helper.assertTrue(menu.quickMoveStack(player, WritingDeskMenu.COPY_RESULT).isEmpty(), + "Full inventory must reject shift-click copy"); + helper.assertValueEqual(desk.getItem(WritingDeskBlockEntity.PAPER).getCount(), 1, + "Rejected copy must preserve paper"); + helper.assertValueEqual(desk.inkRemaining(), 0, "Rejected copy must preserve ink meter"); + helper.assertTrue(desk.getItem(WritingDeskBlockEntity.INK).is(ModItems.INK_VIAL.get()), + "Rejected copy must preserve ink vial"); + helper.succeed(); + } } diff --git a/src/main/java/net/dnorberg/rivencraft/menu/WritingDeskMenu.java b/src/main/java/net/dnorberg/rivencraft/menu/WritingDeskMenu.java index fab1c42..172b6f4 100644 --- a/src/main/java/net/dnorberg/rivencraft/menu/WritingDeskMenu.java +++ b/src/main/java/net/dnorberg/rivencraft/menu/WritingDeskMenu.java @@ -7,6 +7,14 @@ import net.dnorberg.rivencraft.registry.ModItems; import net.dnorberg.rivencraft.registry.ModMenus; import net.dnorberg.rivencraft.writing.NotebookContents; import net.dnorberg.rivencraft.writing.PageContent; +import net.dnorberg.rivencraft.writing.SymbolCatalog; +import net.dnorberg.rivencraft.writing.SymbolDisplayMetadata; +import net.dnorberg.rivencraft.writing.SymbolReference; +import net.dnorberg.rivencraft.writing.WritingDeskCatalog; +import net.dnorberg.rivencraft.network.WritingDeskCatalogPayload; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.server.level.ServerPlayer; +import net.neoforged.neoforge.network.PacketDistributor; import java.util.List; import net.minecraft.network.RegistryFriendlyByteBuf; import net.minecraft.world.Container; @@ -29,10 +37,14 @@ public final class WritingDeskMenu extends AbstractContainerMenu { private int syncedActiveCollection; private int syncedInkRemaining; private int selectedPage; + private ResourceLocation selectedSymbol; + private List catalog = List.of(); + private final ServerPlayer serverViewer; public WritingDeskMenu(int id, Inventory inventory, RegistryFriendlyByteBuf data) { this(id, inventory, inventory.player.level().getBlockEntity(data.readBlockPos()) instanceof WritingDeskBlockEntity found ? found : null); + catalog = WritingDeskCatalog.read(data); } public WritingDeskMenu(int id, Inventory inventory, WritingDeskBlockEntity blockEntity) { @@ -40,6 +52,8 @@ public final class WritingDeskMenu extends AbstractContainerMenu { this.blockEntity = blockEntity; this.desk = blockEntity == null ? new SimpleContainer(WritingDeskBlockEntity.SIZE) : blockEntity; this.clientSide = inventory.player.level().isClientSide; + this.serverViewer = inventory.player instanceof ServerPlayer serverPlayer ? serverPlayer : null; + if (blockEntity != null && !clientSide) catalog = WritingDeskCatalog.available(blockEntity); addDataSlot(new DataSlot() { @Override public int get() { return WritingDeskMenu.this.blockEntity == null ? syncedActiveCollection : WritingDeskMenu.this.blockEntity.activeCollection(); } @@ -70,14 +84,28 @@ public final class WritingDeskMenu extends AbstractContainerMenu { public int activeCollection() { return syncedActiveCollection; } public int inkRemaining() { return syncedInkRemaining; } + public List catalog() { return catalog; } + public void setCatalog(List symbols) { catalog = List.copyOf(symbols); } @Override public boolean clickMenuButton(Player player, int id) { if (blockEntity == null || !stillValid(player)) return false; if (id >= 0 && id < WritingDeskBlockEntity.COLLECTIONS) { blockEntity.setActiveCollection(id); selectedPage = 0; + selectedSymbol = null; } else if (id >= 16 && id < 16 + NotebookContents.MAX_PAGES) { selectedPage = id - 16; + selectedSymbol = null; + } else if (id >= 100 && id < 100 + catalog.size()) { + if (!catalog.equals(WritingDeskCatalog.available(blockEntity))) { + refreshCatalog(); + return false; + } + ResourceLocation requested = catalog.get(id - 100).id(); + if (!WritingDeskCatalog.available(blockEntity).stream().anyMatch(entry -> entry.id().equals(requested))) { + return false; + } + selectedSymbol = requested; } else return false; refreshOutput(); return true; @@ -118,8 +146,7 @@ public final class WritingDeskMenu extends AbstractContainerMenu { private boolean moveIntoDesk(ItemStack moving) { if (moving.is(ModItems.INK_VIAL.get())) return moveItemStackTo(moving, 4, 5, false); if (moving.is(ModItems.NOTEBOOK.get())) return moveItemStackTo(moving, 0, 4, false); - if (moving.is(Items.PAPER) || moving.is(ModItems.PAGE.get()) - && PageItem.content(moving).kind() == PageContent.Kind.BLANK) + if (moving.is(Items.PAPER)) return moveItemStackTo(moving, WritingDeskBlockEntity.PAPER, WritingDeskBlockEntity.PAPER + 1, false); if (moving.is(ModItems.PAGE.get())) return moveItemStackTo(moving, 0, 4, false); @@ -127,6 +154,14 @@ public final class WritingDeskMenu extends AbstractContainerMenu { } private ItemStack selectedSource() { + if (selectedSymbol != null) { + SymbolReference reference = new SymbolReference(selectedSymbol); + return SymbolCatalog.isKnown(reference) + && blockEntity != null + && WritingDeskCatalog.available(blockEntity).stream() + .anyMatch(entry -> entry.id().equals(selectedSymbol)) + ? PageItem.createSymbolPage(reference) : ItemStack.EMPTY; + } ItemStack collection = desk.getItem(blockEntity == null ? syncedActiveCollection : blockEntity.activeCollection()); if (collection.is(ModItems.PAGE.get())) return selectedPage == 0 ? collection : ItemStack.EMPTY; if (collection.is(ModItems.NOTEBOOK.get())) { @@ -150,7 +185,19 @@ public final class WritingDeskMenu extends AbstractContainerMenu { if (!ItemStack.matches(result.getItem(0), preview)) result.setItem(0, preview); } + private void refreshCatalog() { + if (clientSide || blockEntity == null) return; + List current = WritingDeskCatalog.available(blockEntity); + if (!current.equals(catalog)) { + catalog = current; + if (serverViewer != null && serverViewer.containerMenu == this) { + PacketDistributor.sendToPlayer(serverViewer, new WritingDeskCatalogPayload(containerId, catalog)); + } + } + } + @Override public void broadcastChanges() { + refreshCatalog(); refreshOutput(); super.broadcastChanges(); } @@ -161,6 +208,7 @@ public final class WritingDeskMenu extends AbstractContainerMenu { player.closeContainer(); return; } + refreshCatalog(); refreshOutput(); super.clicked(slotId, button, clickType, player); } diff --git a/src/main/java/net/dnorberg/rivencraft/network/ModNetworking.java b/src/main/java/net/dnorberg/rivencraft/network/ModNetworking.java index 3ea38b5..cbad872 100644 --- a/src/main/java/net/dnorberg/rivencraft/network/ModNetworking.java +++ b/src/main/java/net/dnorberg/rivencraft/network/ModNetworking.java @@ -9,6 +9,7 @@ import net.dnorberg.rivencraft.block.entity.BookStandBlockEntity; import net.dnorberg.rivencraft.client.ClientLinkPreviewHandler; import net.dnorberg.rivencraft.client.ClientBookInteractionHandler; import net.dnorberg.rivencraft.client.ClientAgeCelestialAngles; +import net.dnorberg.rivencraft.client.ClientWritingDeskCatalog; import net.dnorberg.rivencraft.event.AgeCelestialAngleSync; import net.dnorberg.rivencraft.item.DescriptiveBookItem; import net.dnorberg.rivencraft.item.LinkingBookItem; @@ -68,6 +69,8 @@ public final class ModNetworking { ClientLinkPreviewHandler::handle); registrar.playToClient(AgeCelestialAnglePayload.TYPE, AgeCelestialAnglePayload.STREAM_CODEC, ClientAgeCelestialAngles::handle); + registrar.playToClient(WritingDeskCatalogPayload.TYPE, WritingDeskCatalogPayload.STREAM_CODEC, + ClientWritingDeskCatalog::handle); } private static void requestDescriptiveBookScreen(RequestDescriptiveBookScreenPayload payload, IPayloadContext context) { diff --git a/src/main/java/net/dnorberg/rivencraft/network/WritingDeskCatalogPayload.java b/src/main/java/net/dnorberg/rivencraft/network/WritingDeskCatalogPayload.java new file mode 100644 index 0000000..d50458b --- /dev/null +++ b/src/main/java/net/dnorberg/rivencraft/network/WritingDeskCatalogPayload.java @@ -0,0 +1,26 @@ +package net.dnorberg.rivencraft.network; + +import java.util.List; +import net.dnorberg.rivencraft.Rivencraft; +import net.dnorberg.rivencraft.writing.SymbolDisplayMetadata; +import net.dnorberg.rivencraft.writing.WritingDeskCatalog; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.network.codec.StreamCodec; +import net.minecraft.network.protocol.common.custom.CustomPacketPayload; +import net.minecraft.resources.ResourceLocation; + +/** Current server-approved symbols from this open Writing Desk menu. */ +public record WritingDeskCatalogPayload(int containerId, List symbols) + implements CustomPacketPayload { + public static final Type TYPE = new Type<>( + ResourceLocation.fromNamespaceAndPath(Rivencraft.MOD_ID, "writing_desk_catalog")); + public static final StreamCodec STREAM_CODEC = + StreamCodec.of( + (buffer, payload) -> { + buffer.writeVarInt(payload.containerId()); + WritingDeskCatalog.write(buffer, payload.symbols()); + }, + buffer -> new WritingDeskCatalogPayload(buffer.readVarInt(), WritingDeskCatalog.read(buffer))); + + @Override public Type type() { return TYPE; } +} diff --git a/src/main/java/net/dnorberg/rivencraft/registry/ModCreativeTabs.java b/src/main/java/net/dnorberg/rivencraft/registry/ModCreativeTabs.java index 9a1683d..2f5891c 100644 --- a/src/main/java/net/dnorberg/rivencraft/registry/ModCreativeTabs.java +++ b/src/main/java/net/dnorberg/rivencraft/registry/ModCreativeTabs.java @@ -31,7 +31,6 @@ public final class ModCreativeTabs { .title(Component.translatable("itemGroup.rivencraft.pages")) .icon(PageItem::createLinkPanelPage) .displayItems((parameters, output) -> { - output.accept(ModItems.PAGE.get()); output.accept(PageItem.createLinkPanelPage()); }) .build()); diff --git a/src/main/java/net/dnorberg/rivencraft/writing/WritingDeskCatalog.java b/src/main/java/net/dnorberg/rivencraft/writing/WritingDeskCatalog.java new file mode 100644 index 0000000..dab7d77 --- /dev/null +++ b/src/main/java/net/dnorberg/rivencraft/writing/WritingDeskCatalog.java @@ -0,0 +1,63 @@ +package net.dnorberg.rivencraft.writing; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; +import net.dnorberg.rivencraft.block.entity.WritingDeskBlockEntity; +import net.dnorberg.rivencraft.item.PageItem; +import net.dnorberg.rivencraft.registry.ModDataComponents; +import net.dnorberg.rivencraft.registry.ModItems; +import net.minecraft.network.RegistryFriendlyByteBuf; +import net.minecraft.resources.ResourceLocation; +import net.minecraft.world.item.ItemStack; + +/** A bounded, server-derived view of symbols physically present in the desk. */ +public final class WritingDeskCatalog { + private static final int MAX_ENTRIES = WritingDeskBlockEntity.COLLECTIONS * NotebookContents.MAX_PAGES; + + private WritingDeskCatalog() {} + + public static List available(WritingDeskBlockEntity desk) { + Map unique = new TreeMap<>(); + for (int slot = 0; slot < WritingDeskBlockEntity.COLLECTIONS; slot++) { + ItemStack collection = desk.getItem(slot); + if (collection.is(ModItems.PAGE.get())) add(unique, collection); + if (collection.is(ModItems.NOTEBOOK.get())) { + List pages = collection.getOrDefault( + ModDataComponents.NOTEBOOK_CONTENTS.get(), NotebookContents.EMPTY).pages(); + pages.forEach(page -> add(unique, page)); + } + } + return unique.values().stream() + .sorted(Comparator.comparing((SymbolDisplayMetadata symbol) -> symbol.category().toString()) + .thenComparing(symbol -> symbol.id().toString())) + .toList(); + } + + private static void add(Map unique, ItemStack page) { + if (!page.is(ModItems.PAGE.get())) return; + PageContent content = PageItem.content(page).resolve(); + if (content.kind() != PageContent.Kind.SYMBOL) return; + SymbolReference reference = content.symbol().orElseThrow(); + SymbolCatalog.find(reference).ifPresent(definition -> + unique.put(reference.id(), definition.display(reference.id()))); + } + + public static void write(RegistryFriendlyByteBuf buffer, List entries) { + if (entries.size() > MAX_ENTRIES) throw new IllegalArgumentException("Desk symbol catalog exceeds limit"); + buffer.writeVarInt(entries.size()); + entries.forEach(entry -> SymbolDisplayMetadata.STREAM_CODEC.encode(buffer, entry)); + } + + public static List read(RegistryFriendlyByteBuf buffer) { + int count = buffer.readVarInt(); + if (count < 0 || count > MAX_ENTRIES) throw new IllegalArgumentException("Invalid desk symbol count " + count); + List entries = new ArrayList<>(count); + for (int index = 0; index < count; index++) { + entries.add(SymbolDisplayMetadata.STREAM_CODEC.decode(buffer)); + } + return List.copyOf(entries); + } +} diff --git a/src/main/java/net/dnorberg/rivencraft/writing/WritingInkService.java b/src/main/java/net/dnorberg/rivencraft/writing/WritingInkService.java index e81a6ed..6aaa4fb 100644 --- a/src/main/java/net/dnorberg/rivencraft/writing/WritingInkService.java +++ b/src/main/java/net/dnorberg/rivencraft/writing/WritingInkService.java @@ -29,7 +29,7 @@ public final class WritingInkService { int remaining = InkVialItem.remaining(vial); return vial.is(ModItems.INK_VIAL.get()) && remaining >= linkPanelCost() && remaining <= InkVialItem.CAPACITY - && page.is(ModItems.PAGE.get()) && PageItem.content(page).kind() == PageContent.Kind.BLANK; + && page.is(Items.PAPER); } public static boolean prepareLinkPanel(Player player, InteractionHand vialHand) { diff --git a/src/main/resources/assets/rivencraft/lang/en_us.json b/src/main/resources/assets/rivencraft/lang/en_us.json index ccaae3f..7fab302 100644 --- a/src/main/resources/assets/rivencraft/lang/en_us.json +++ b/src/main/resources/assets/rivencraft/lang/en_us.json @@ -19,8 +19,10 @@ "block.rivencraft.writing_desk": "Writing Desk", "container.rivencraft.writing_desk": "Writing Desk", "screen.rivencraft.writing_desk.ink": "Ink: %s/%s", + "screen.rivencraft.writing_desk.search": "Search", + "screen.rivencraft.writing_desk.no_symbols": "No available symbols", "item.rivencraft.ink_vial.remaining": "Ink: %s/%s", - "item.rivencraft.ink_vial.usage": "Use with a blank Page in the other hand to prepare a Link Panel.", + "item.rivencraft.ink_vial.usage": "Use with paper in the other hand to prepare a Link Panel.", "screen.rivencraft.notebook.search": "Search pages", "screen.rivencraft.notebook.move_previous": "Move selected page left", "screen.rivencraft.notebook.move_next": "Move selected page right", diff --git a/src/main/resources/assets/rivencraft/models/block/writing_desk.json b/src/main/resources/assets/rivencraft/models/block/writing_desk.json index 05530a2..84ad793 100644 --- a/src/main/resources/assets/rivencraft/models/block/writing_desk.json +++ b/src/main/resources/assets/rivencraft/models/block/writing_desk.json @@ -1,8 +1,69 @@ { - "parent": "minecraft:block/cube_bottom_top", + "parent": "minecraft:block/block", + "ambientocclusion": false, "textures": { - "top": "rivencraft:item/writing_desk", - "side": "minecraft:block/oak_planks", - "bottom": "minecraft:block/oak_planks" - } + "particle": "rivencraft:block/writing_desk", + "desk": "rivencraft:block/writing_desk" + }, + "elements": [ + { + "from": [0, 8, 0], "to": [16, 9, 16], + "faces": { + "up": {"uv": [1, 0, 3, 2], "texture": "#desk"}, + "down": {"uv": [1, 2, 3, 4], "texture": "#desk"}, + "north": {"uv": [1, 0, 3, 0.125], "texture": "#desk"}, + "south": {"uv": [1, 0, 3, 0.125], "texture": "#desk"}, + "east": {"uv": [1, 0, 3, 0.125], "texture": "#desk"}, + "west": {"uv": [1, 0, 3, 0.125], "texture": "#desk"} + } + }, + { + "from": [0, 0, 1], "to": [2, 8, 15], + "faces": { + "north": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"}, + "south": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"}, + "east": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"}, + "west": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"} + } + }, + { + "from": [14, 0, 1], "to": [16, 8, 15], + "faces": { + "north": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"}, + "south": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"}, + "east": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"}, + "west": {"uv": [5.625, 0.125, 5.875, 2], "texture": "#desk"} + } + }, + { + "from": [1, 3, 2], "to": [15, 4, 14], + "faces": { + "up": {"uv": [0, 4.25, 3.75, 6.125], "texture": "#desk"}, + "down": {"uv": [0, 4.25, 3.75, 6.125], "texture": "#desk"}, + "north": {"uv": [0, 4.25, 3.75, 4.5], "texture": "#desk"}, + "south": {"uv": [0, 4.25, 3.75, 4.5], "texture": "#desk"}, + "east": {"uv": [0, 4.25, 3.75, 4.5], "texture": "#desk"}, + "west": {"uv": [0, 4.25, 3.75, 4.5], "texture": "#desk"} + } + }, + { + "from": [1, 9, 14], "to": [15, 15, 16], + "faces": { + "north": {"uv": [8, 0, 11.75, 2], "texture": "#desk"}, + "south": {"uv": [8, 0, 11.75, 2], "texture": "#desk"}, + "east": {"uv": [8, 0, 8.25, 2], "texture": "#desk"}, + "west": {"uv": [8, 0, 8.25, 2], "texture": "#desk"}, + "up": {"uv": [8, 0, 11.75, 0.25], "texture": "#desk"} + } + }, + { + "from": [1, 12, 9], "to": [15, 13, 15], + "faces": { + "up": {"uv": [8, 3.625, 11.75, 4.375], "texture": "#desk"}, + "down": {"uv": [8, 3.625, 11.75, 4.375], "texture": "#desk"}, + "north": {"uv": [8, 3.625, 11.75, 3.75], "texture": "#desk"}, + "south": {"uv": [8, 3.625, 11.75, 3.75], "texture": "#desk"} + } + } + ] } diff --git a/src/main/resources/assets/rivencraft/models/item/writing_desk.json b/src/main/resources/assets/rivencraft/models/item/writing_desk.json index 9104ac8..7d99ef8 100644 --- a/src/main/resources/assets/rivencraft/models/item/writing_desk.json +++ b/src/main/resources/assets/rivencraft/models/item/writing_desk.json @@ -1,4 +1,3 @@ { - "parent": "minecraft:item/generated", - "textures": { "layer0": "rivencraft:item/writing_desk" } + "parent": "rivencraft:block/writing_desk" } diff --git a/src/main/resources/assets/rivencraft/textures/block/writing_desk.png b/src/main/resources/assets/rivencraft/textures/block/writing_desk.png new file mode 100644 index 0000000000000000000000000000000000000000..60bdfd98286cd9cce3db4a0ba70cfb1b62f636d8 GIT binary patch literal 101065 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⋙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 z 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%0D=FGHF7p*YD2in6IrhORJXxo#1XQ} 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/data/rivencraft/recipe/page.json b/src/main/resources/data/rivencraft/recipe/page.json deleted file mode 100644 index b90ef76..0000000 --- a/src/main/resources/data/rivencraft/recipe/page.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "type": "minecraft:crafting_shapeless", - "category": "misc", - "ingredients": [ - { - "item": "minecraft:paper" - } - ], - "result": { - "count": 1, - "id": "rivencraft:page" - } -}