From c5e04b249e6aef1d47d092eb94abc95414b8cc91 Mon Sep 17 00:00:00 2001 From: XxFran10xX <318299142+XxFran10xX@users.noreply.github.com> Date: Mon, 19 Oct 2026 20:08:16 +0200 Subject: [PATCH 1/4] docs: TFMCCore book copies Co-Authored-By: Claude Opus 5.5 --- projects/TFMCCore/overview.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/projects/TFMCCore/overview.md b/projects/TFMCCore/overview.md index 6317fff..2ddac1c 100644 --- a/projects/TFMCCore/overview.md +++ b/projects/TFMCCore/overview.md @@ -34,3 +34,21 @@ ProtocolLib, this feature logs a warning and leaves the appearance unchanged. Change the setting and run `/tcore reload config` to apply it. Validate books in inventories, hands, item frames and dropped items with the intended resource pack. + +## Book copies + +`allow-book-copies` in `config.yml` defaults to `true`. Players copy a written +book by crafting it with a Book and Quill (the vanilla recipe). On the TFMC +servers every Book and Quill is the MMOItems `BOOKS.WRITABLE_BOOK`, which has +`disable-crafting`, and books signed from it keep that tag. MMOItems therefore +cancels the craft: the copy shows in the result slot but cannot be taken. + +TFMCCore notes whether a book copy craft is cancelled at `LOW` priority. At +`HIGH` it undoes the cancel only if the craft was cancelled in between (MMOItems +runs at `NORMAL`) and an ingredient has MMOItems' disable-crafting tag. Cancels +from earlier handlers, and from `HIGHEST` handlers such as character freezes, +still apply. Vanilla rules are unchanged: copies are Copy of Original or Copy of +a Copy, and Copy of a Copy and Tattered books cannot be copied. A copy keeps +every component of the original, including book skins. + +Change the setting and run `/tcore reload config` to apply it. From 22ba9762d622e5a047ee093d3a62c56ad9f03f56 Mon Sep 17 00:00:00 2001 From: XxFran10xX <318299142+XxFran10xX@users.noreply.github.com> Date: Mon, 19 Oct 2026 20:36:50 +0200 Subject: [PATCH 2/4] docs: describe the MMOItems handler wrap for book copies Co-Authored-By: Claude Opus 5.5 --- projects/TFMCCore/overview.md | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/projects/TFMCCore/overview.md b/projects/TFMCCore/overview.md index 2ddac1c..ee812a0 100644 --- a/projects/TFMCCore/overview.md +++ b/projects/TFMCCore/overview.md @@ -43,12 +43,17 @@ servers every Book and Quill is the MMOItems `BOOKS.WRITABLE_BOOK`, which has `disable-crafting`, and books signed from it keep that tag. MMOItems therefore cancels the craft: the copy shows in the result slot but cannot be taken. -TFMCCore notes whether a book copy craft is cancelled at `LOW` priority. At -`HIGH` it undoes the cancel only if the craft was cancelled in between (MMOItems -runs at `NORMAL`) and an ingredient has MMOItems' disable-crafting tag. Cancels -from earlier handlers, and from `HIGHEST` handlers such as character freezes, -still apply. Vanilla rules are unchanged: copies are Copy of Original or Copy of -a Copy, and Copy of a Copy and Tattered books cannot be copied. A copy keeps -every component of the original, including book skins. +One tick after startup, TFMCCore wraps MMOItems' `DisableInteractions` +registrations in the `InventoryClickEvent` handler list (which `CraftItemEvent` +shares). For a book copy craft, the wrapper undoes a cancel only when that +MMOItems handler call made it. Cancels from every other plugin, at any priority, +still apply, such as character freezes. The wrapped handler keeps its plugin +and `NORMAL` priority, but now runs last among `NORMAL` handlers. The console +logs `Book copies: wrapped MMOItems click handlers`, or a warning when +MMOItems is enabled and no handler is found. + +Vanilla rules are unchanged: copies are Copy of Original or Copy of a Copy, and +Copy of a Copy and Tattered books cannot be copied. A copy keeps every component +of the original, including book skins. Change the setting and run `/tcore reload config` to apply it. From 0efb445659124da3ecc325a00db0c38b150a5e17 Mon Sep 17 00:00:00 2001 From: XxFran10xX <318299142+XxFran10xX@users.noreply.github.com> Date: Mon, 19 Oct 2026 21:39:24 +0200 Subject: [PATCH 3/4] docs: book copy wrap timing and reload cleanup Co-Authored-By: Claude Opus 5.5 --- projects/TFMCCore/overview.md | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/projects/TFMCCore/overview.md b/projects/TFMCCore/overview.md index ee812a0..7a17cb6 100644 --- a/projects/TFMCCore/overview.md +++ b/projects/TFMCCore/overview.md @@ -43,9 +43,11 @@ servers every Book and Quill is the MMOItems `BOOKS.WRITABLE_BOOK`, which has `disable-crafting`, and books signed from it keep that tag. MMOItems therefore cancels the craft: the copy shows in the result slot but cannot be taken. -One tick after startup, TFMCCore wraps MMOItems' `DisableInteractions` -registrations in the `InventoryClickEvent` handler list (which `CraftItemEvent` -shares). For a book copy craft, the wrapper undoes a cancel only when that +TFMCCore wraps MMOItems' `DisableInteractions` registrations in the +`InventoryClickEvent` handler list (which `CraftItemEvent` shares). It does this +when TFMCCore enables if MMOItems is already enabled, and otherwise when MMOItems +enables. Wrappers are never wrapped again, and disabling TFMCCore puts MMOItems' +own registrations back. For a book copy craft, the wrapper undoes a cancel only when that MMOItems handler call made it. Cancels from every other plugin, at any priority, still apply, such as character freezes. The wrapped handler keeps its plugin and `NORMAL` priority, but now runs last among `NORMAL` handlers. The console From fb418893c5da97f7626e3cf030b0dd5307e3513d Mon Sep 17 00:00:00 2001 From: XxFran10xX <318299142+XxFran10xX@users.noreply.github.com> Date: Mon, 19 Oct 2026 22:42:44 +0200 Subject: [PATCH 4/4] docs: wrapped MMOItems handler keeps its place Co-Authored-By: Claude Opus 5.5 --- projects/TFMCCore/overview.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/projects/TFMCCore/overview.md b/projects/TFMCCore/overview.md index 7a17cb6..de38503 100644 --- a/projects/TFMCCore/overview.md +++ b/projects/TFMCCore/overview.md @@ -49,8 +49,8 @@ when TFMCCore enables if MMOItems is already enabled, and otherwise when MMOItem enables. Wrappers are never wrapped again, and disabling TFMCCore puts MMOItems' own registrations back. For a book copy craft, the wrapper undoes a cancel only when that MMOItems handler call made it. Cancels from every other plugin, at any priority, -still apply, such as character freezes. The wrapped handler keeps its plugin -and `NORMAL` priority, but now runs last among `NORMAL` handlers. The console +still apply, such as character freezes. The wrapped handler keeps its plugin, +`NORMAL` priority and place among the `NORMAL` handlers. The console logs `Book copies: wrapped MMOItems click handlers`, or a warning when MMOItems is enabled and no handler is found.