Scripta (Fabric, Architectury + OwoLib)
Global, data-driven questing mod for Minecraft 1.21.1, currently shipping on Fabric. Only three starter categories ship by default — quests are authored by you (hand-written JSON or the web).
Authoring quests
- Category:
id,display_name,icon {id, count},sort_order,number - Quest:
id,category,title,description,icon,objectives[],rewards[],prerequisites[],auto_claim(defaulttrue) - Objective
type:break_block|kill_entity|collect_item|grant_advancement|reach_stat(custom stats only, e.g.minecraft:jump)
Rewards (FTB Quests style)
Each reward is { "type": ..., ... }. Types:
| Type | Fields | Notes |
|---|---|---|
item |
item, amount |
Overflow stacks drop at your feet |
xp |
amount |
Legacy experience alias still loads |
xp_levels |
levels |
|
command |
command |
Runs as the player |
advancement |
id |
Awards every criterion |
toast |
message |
Client-side toast |
choice |
table or inline options[], count |
Interactive — picked in the quest book |
random |
table |
Weighted roll from a reward table |
all_table |
table |
Grants every entry |
loot_crate |
table |
Gives a physical crate item (right-click rolls) |
empty |
— | Placeholder (table padding) |
- Reward tables are weighted pools:
{id, name, entries:[{reward, weight}], crate:{enabled, name}}. Edit them in the web editor's Reward tables panel; quests reference them by id. Achoicereward inside a table is refused — choices live on quests directly. - Auto-claim (
auto_claim, default true): non-interactive rewards are granted the moment the quest completes. Turn it off (or usechoicerewards) to require Claim / Choose buttons in the quest book. Claim state is stored per player and synced. - Unknown reward types and legacy JSON round-trip instead of failing the quest; one bad entry in a rewards array is skipped, not fatal.
- Reload with
/reload; definitions sync to clients on join and via tick broadcast.
Playing
/quests(client command) orGkeybind opens the quest book: categories tab, quest list (name + icon), detail overview/questeditopens the full in-game editor (op level 2 enforced server-side): quests, categories, reward tables, presets, and theme controls share the same save/cancel flow as the web editor. Icon upload remains web-only.- Web editor: when any world/server runs, operators receive a clickable
link on join;
/scripta websends the link again on demand. Edit quests, categories, reward tables, presets, theme, and upload PNG icons from the browser — changes apply instantly and sync to every player. Port override:-Dscripta.webport=<port>. The token is a fresh random value on every server start and is only delivered in chat to operator level 2 players (on join and via/scripta web) — it is never written to the server log, so keep the link secret.- Editor layout: sidebar sections for Quests, Categories, Reward tables, Presets, Icons, and GUI theme. A dirty-state bar keeps Save/Discard actions visible while editing.
- Structured objectives: each objective has a type dropdown, target autocomplete, and count field; targets autocomplete from the live item, block, entity, and advancement registries.
- Prerequisite chips: add or remove prerequisite quest IDs without editing a comma-separated string.
- Structured rewards and table entries: reward types come from the server registry, reward tables expose weighted structured entries, and inline/unknown rewards remain editable as raw JSON.
- Quest categories are a dropdown — pick one, don't type IDs.
- Numbered categories (set a number on the category) give hierarchical
quest IDs: category 1's quests become
1.1,1.2, … (use the Auto button or leave the ID free-form; unnumbered categories keep classic IDs). - Structured reward builder with server-provided type metadata; inline
choiceoptions and unknown future types remain editable as raw JSON. - Reward tables panel: create/edit/delete weighted tables and toggle their loot-crate mode.
- Reward presets (Starter Kit, Monster Hunter, Treasure + your own): insert one into any quest with a click, manage them in their own panel.
- Quest icons are either a block/item (
"icon": {"id": "...", "count": 1}) or a texture path ("icon": "scripta:web_icons/dragon.png") from a resource pack or a web-uploaded PNG (auto-synced to clients). /scripta listshows all quests with your completion state/scripta web(operator level 2) sends the clickable web-editor link in chat; operators also receive it automatically on join/scripta syncre-syncs your progress + definitions/scripta reset [<player>]clears progress (op level 2)- Completing a quest sends a chat message + level-up sound; item rewards that don't fit are dropped at your feet instead of voided. Auto-claimed rewards are granted immediately; manual-claim / choice rewards show Claim, Choose (picker screen) and Claim All buttons in the quest detail.
- Progress persists per player via
SavedData(scripta_progress); only progress is per-world, quests are global. - Removing a quest JSON prunes it from everyone's completed list on the next tick.
- GUI theme (web console → GUI theme): per-pane surfaces (
PANEL,DARK_PANEL,PANEL_INSET,VANILLA_TRANSLUCENT,BLANK, orimage:<texture>backgrounds), title/text/accent colors, text shadow, tab + icon sizes, pane widths, and widget colors for buttons, fields, selection, muted text, focus, and danger states. Stored per-world (serverconfig/scripta_theme.json), applied to every player's screens the moment you save. Fonts are intentionally excluded — owo renders labels with Minecraft's global fonts, which only resource packs can change.

