Editors
Scripta ships two ways to edit content: a browser-based editor served by the running server, and a full editor built into the game. Both write to the same store, and both apply changes to every connected player instantly.
Web editor
The server hosts a small web server that serves an editor page. Operators get a clickable link in chat.
Getting the link
- On join — operators receive the link automatically when they connect.
- On demand — run
/scripta weband click the link in chat.
The link looks like this:
http://localhost:25566/?token=<token>- It is regenerated every time the server starts, so old links stop working.
- It is only ever shown in chat to operator level 2 players — it is never written to the server console or log.
- Anyone holding the token can edit your quests. Anyone without it gets
403 Bad or missing token.
Changing the port
The editor listens on port 25566 by default. Override it with
a JVM property:
java -Dscripta.webport=8080 -Xmx4G -jar server.jar nogui
If the port cannot be bound, Scripta logs
[scripta] Could not start web editor on port … and
/scripta web replies The web editor is not running.
Layout
The editor has a sidebar of panels and a dirty-state bar:
| Panel | What you do there |
|---|---|
| Quests | Create and edit quests: id, category, title, description, icon, objectives, rewards, prerequisites, auto-claim. |
| Categories | Create and edit categories: id, display name, icon, sort order, number. |
| Reward tables | Weighted pools, entry weights, and the loot-crate toggle. |
| Presets | Manage reusable reward bundles; insert one into any quest with a click. |
| Icons | Upload and manage PNG icons (the only web-only feature). |
| GUI theme | Colours, surfaces, sizes and widget styles. See GUI theme. |
Helpful details:
- Unsaved edits keep a Save / Discard bar visible at the top, so you cannot lose work by switching panels.
- Objective target fields autocomplete from the live item, block, entity and advancement registries of your server — including modded content.
- Reward types come from the server's reward registry, so the dropdown always matches what the server understands.
- Prerequisites are edited as chips rather than a comma-separated string.
- A quest's category is a dropdown — pick one, do not type an id.
- Unknown or inline reward JSON stays editable as raw text, so future content is never locked out.
In-game editor
Run /questedit to open the same editor inside Minecraft. It
covers quests, categories, reward tables, presets and theme controls, with
the same save/cancel flow as the web editor.
The command opens for any player, but the server re-checks
operator level 2 on every edit and rejects the rest with
You need operator level 2 to edit quests.
Icon uploads
The web editor's Icons panel uploads PNGs. Constraints are enforced server-side:
| Constraint | Limit |
|---|---|
| Format | Real PNG files only (signature is verified) |
| File size | 8 bytes – 256 KB |
| Dimensions | 1×1 – 256×256 |
| Stored as | scripta:web_icons/<sanitised-name>.png |
Uploaded icons are pushed to every connected client automatically, so you can reference them straight away:
"icon": "scripta:web_icons/dragon.png"
File names are lower-cased and stripped of anything outside
a-z 0-9 . _ -, so two uploads differing only in case collapse
to the same name.
How saves work
Editor changes are not written into your datapack folders. They are stored separately in the world (see Files & storage) and overlaid on top of whatever the datapacks define. This is why:
- Saving applies immediately — no
/reloadneeded. - Every connected player sees the change within about a second.
- Quests you delete in an editor stay deleted, even after
/reload— the deletions are remembered. - Edits are per-world, so a single-player world and a survival server can hold different quest content.
/reload. The two approaches coexist; the editor store
simply wins where the two overlap.
HTTP API
The editor is a small JSON API. Every request requires the
?token= query parameter — without it you get
403.
| Endpoint | Method | Purpose |
|---|---|---|
/ | GET | The editor page itself. |
/api/state | GET | All quests, categories, tables, reward types and objective types. |
/api/items | GET | Item registry ids. |
/api/blocks | GET | Block registry ids. |
/api/entities | GET | Entity type ids. |
/api/advancements | GET | Loaded advancement ids. |
/api/theme | GET / POST | Read or write the GUI theme. |
/api/presets | GET | All presets plus the built-in names. |
/api/preset | POST | Create or update a preset. |
/api/preset/delete | — | Delete a preset (?name=). |
/api/quest | POST | Create or update a quest. |
/api/quest/delete | — | Delete a quest (?id=). |
/api/category | POST | Create or update a category. |
/api/category/delete | — | Delete a category (?id=). |
/api/table | POST | Create or update a reward table. |
/api/table/delete | — | Delete a table (?id=). |
/api/icons | GET | List uploaded icons. |
/api/icon | GET / POST | Read or upload a PNG (?name=). |
Mutating requests are executed on the server thread with a 30 second timeout, so an edit cannot block the game indefinitely.