Runic Tome

Runic Tome gives every player one permanent magical book that automatically absorbs guide books and manuals the moment they enter your inventory, replacing clutter with a single clean library. Open the tome at any time to browse all collected books.

File Details

Runic Tome 0.1.3 (Forge 1.20.1)

  • R
  • Apr 19, 2026
  • 78.54 KB
  • 214
  • 1.20.1
  • Forge

File Name

runictome-0.1.3.jar

Supported Versions

  • 1.20.1

Curse Maven Snippet

Forge

implementation fg.deobf("curse.maven:runic-tome-1515114:7952670")
Curse Maven does not yet support mods that have disabled 3rd party sharing

Learn more about Curse Maven

[0.1.3] — 2026-04-19

Fixed

  • Unlock toasts showed the book ID instead of its name. When a book was absorbed, the toast displayed the raw ResourceLocation (e.g. patchouli:book_of_the_dead) instead of the human-readable title. ClientDataCache.acceptUnlock now resolves the display name through RunicTomeAPI.adapterFor(systemId).displayName(key) — matching what the tome's library screen already did. Patchouli books render their real localized titles; item-based books render their item display component.

Added

  • ui.showUnlockToast (bool, default true) — mutes the unlock toast per client.
  • performance.sweepIntervalTicks (int, default 20, range 1..1200) — how often the server sweeps player inventories for unabsorbed books. Set to 1 to restore the previous per-tick behaviour. Pickup/craft/smelt/container-close events remain handled separately and are unaffected.
  • items.grantTomeOnFirstJoin (bool, default true) — disable the auto-grant for servers that distribute the tome via quest rewards or starting kits.
  • com.otectus.runictome.api.NameFormat public helper — titleCase(String) extracted from PatchouliGuideAdapter so third-party adapters can reuse the same fallback formatter.
  • Nicer default GuideSystemAdapter.displayName. The interface default now returns titleCase(key.bookId().getPath()) instead of the raw ResourceLocation string. Adapters that don't override displayName get readable fallbacks for free.

Changed

  • Per-tick inventory sweep is now throttled to once per second by default (configurable via sweepIntervalTicks). Pickup, craft, smelt, and container-close are still event-driven and absorb books immediately — the timer sweep exists only as a safety net for /give, hopper inserts, and other paths that bypass Forge's pickup events. This partially reverts the v0.1.0 change that dropped the interval knob; the trade-off of up-to-one-second latency on the fallback path is worth the ~95% reduction in per-player per-tick work on large servers.

Removed

  • CapabilityEvents.onJoinLevel handler. It fired a full-NBT sync on every dimension transition alongside the dedicated onPlayerChangedDimension / onPlayerRespawn / onPlayerLoggedIn handlers — a duplicate sync with no behavioural benefit.