Files & storage

Scripta splits its state in two: quest content, which is global and comes from datapacks, and per-world data — progress, editor changes, theme and uploaded icons.

The big picture

Kind of dataScopeSource
Quests & categories Global — shared by every world and server the mod runs on Datapack JSON files
Editor changes, tables, presets Per world The editor store
Player progress Per world, per player World SavedData
Theme Per world, all players World config JSON
Why it matters Because content is global and progress is per world, the same datapack works on a public survival server and a single-player testing world without duplicating files — and players do not carry their completed quests between worlds.

Quest content (global)

Read from any datapack — your world's datapacks/ folder or a mod's own data folder:

data/<namespace>/quests/quests/**/*.json ← quest definitions data/<namespace>/quests/categories/**/*.json ← category definitions

Content is read on start and on /reload. See Quests & categories for the file format.

Editor store

Saves from the web and in-game editors go to a single file per world:

<world>/serverconfig/scripta_custom.json

Its shape is:

{
  "quests":            { "<quest id>": "<raw quest JSON as a string>" },
  "categories":        { "<category id>": "<raw category JSON as a string>" },
  "removedQuests":     [ "<quest id>" ],
  "removedCategories": [ "<category id>" ],
  "rewardPresets":     { "<preset name>": "<rewards JSON array as a string>" },
  "rewardTables":      { "<table id>": "<reward table JSON as a string>" }
}
Documents are stored as strings Quest, category, table and preset bodies are JSON strings inside the store, not nested objects. That is intentional — it lets unknown future fields and reward types round-trip untouched. Be careful if you hand-edit: the inner values are escaped.

The overlay

The store is applied as an overlay on top of datapack content:

Reward tables live here Reward tables exist only in this store. They are not read from datapack folders, so /reload will not pick up a hand-written table file. Create tables in an editor.

Player progress

Progress is stored in the overworld's SavedData:

<world>/data/scripta_progress.dat

Per player it holds three things:

FieldHolds
completedIds of quests the player has finished.
countersObjective progress, keyed by objective target.
claimedWhich reward indexes the player has already claimed, per quest.
Counters are shared across quests counters is keyed by objective target, not by quest. If two quests both require minecraft:oak_log, they read the same counter — and deliberately so, since breaking logs satisfies both.

Progress is sent to a client when they join and whenever it changes.

Theme

<world>/serverconfig/scripta_theme.json

Saved from the theme panel or written by hand. See GUI theme for the format.

Uploaded icons

<world>/serverconfig/scripta_icons/

PNGs uploaded through the web editor. Each becomes a texture at scripta:web_icons/<name>.png and is pushed to every connected client, so the files only need to exist on the server.

Quick reference

Path (relative to the world)Contents
datapacks/*/data/*/quests/quests/Hand-authored quest JSON (global).
datapacks/*/data/*/quests/categories/Hand-authored category JSON (global).
serverconfig/scripta_custom.jsonEditor store: quests, categories, tables, presets, deletions.
serverconfig/scripta_theme.jsonGUI theme.
serverconfig/scripta_icons/Uploaded PNG icons.
data/scripta_progress.datPer-player quest progress.
Backing up a world Copying the world folder copies everything Scripta owns — the store, theme, icons and progress all live inside it.