promotional bannermobile promotional banner

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
  • 783
  • 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.