Folio icon

Folio -----

Modular fluent paginated inventory GUI framework — pagination, animations, async loading, anvil-sear




✨ What's new in v1.1

Built-in i18n
Folio is now bilingual out of the box — every demo message, nav button label, search title and empty-result fallback ships in English and German. Language is picked per player from their MC client locale.

Code (Java):

// Programmatic override:
Messages. setForcedLanguage ( "de" ) ;     // force German for everyone
Messages. setForcedLanguage ( "auto" ) ;   // restore per-player behaviour
 
Drop-in language files
Add a new language without recompiling — just drop a YAML in plugins/Folio/lang/:

  1. Copy lang/en.yml to lang/<code>.yml (e.g. lang/fr.yml for French)
  2. Translate the values (keep %s and %d placeholders intact)
  3. Restart the server

The console confirms:
Code (Text):

[Folio] Loaded language 'fr' (45 keys) from fr.yml
 
The bundled en.yml and de.yml are auto-extracted on first run — edit them to retext without ever touching the jar.

Region-aware lookup
Folio resolves a player's language as: forced (config) → <lang>_<country> → <lang> → en

Client locale Tries Wins (with files)
de_DE de_de → de → en de.yml
de_AT "Deitsch (Österreich)" de_at → de → en de_at.yml if present, else de.yml
pt_BR pt_br → pt → en pt_br.yml if present, else en.yml
fr_CA fr_ca → fr → en fr.yml if present


So a region-specific file (e.g. Bavarian/Austrian variant) always wins over the generic language file when the player's client matches that region. Missing keys fall through the chain — never crashes.

⚙️ config.yml
First start now writes plugins/Folio/config.yml:

Code (YAML):

language
: auto

demo
:
  enabled
: true
  disabled-subs
: [ ]
 
Key Effect
language: auto Per-player from client locale (default)
language: en / de / <code> Force one language for everyone
demo.enabled: false Disable /foliodemo entirely — Folio still loads as a library
demo.disabled-subs: [persist, shared] Hide individual sub-demos


Demo improvements
  • /foliodemo shared now shows a live click counter on the Nether Star — stack size + name + lore update for all viewers in real time (binding-driven, 100 ms tick)
  • Reset button (Barrier) added to the shared demo
  • All demo strings flow through the i18n system — change them by editing the lang files

Fixes
  • Fixed ArithmeticException: / by zero in SlotMap when a layout had 0 item-slots (e.g. 3-row bordered grid with reserved tail row)
  • Search prompt now uses the proper Paper 1.21 MenuType.ANVIL API (the old openAnvil(loc, true) was opening a generic chest in 1.21.11 instead of an actual anvil)
  • Repair-cost set to 0 on the search anvil so players don't need XP to confirm
  • Demo anim/shared layouts now use GridLayout(true, 0) so they actually have item slots

Updating
Drop the new jar over the old one and restart — config + lang files are written automatically. Existing PDC-persisted page state is preserved. No API breaking changes; existing builder calls continue to work as-is.
----------, Apr 26, 2026

Resource Information
Author:
----------
Total Downloads: 9
First Release: Apr 26, 2026
Last Update: Apr 26, 2026
Category: ---------------
All-Time Rating:
0 ratings
Version -----
Released: --------------------
Downloads: ------
Version Rating:
----------------------
-- ratings