Reference: JSON Datapack Paths
All JSON-driven registry types load files from data/<namespace>/<type_id>/. The <type_id> is
the full ExileRegistryType id, which is modid + "_" + shortName.
Built-in type folders
| Registry type | Folder under data/<namespace>/ |
|---|---|
MAP_DATA_BLOCK |
library_of_exile_map_data_block/ |
MOB_LIST |
library_of_exile_mob_list/ |
MOB_AFFIX |
library_of_exile_mob_affix/ |
MAP_FINISH_RARITY |
library_of_exile_map_finish_rar/ |
MAP_CONTENT |
library_of_exile_map_content/ |
RELIC_STAT |
library_of_exile_relic_stat/ |
RELIC_TYPE |
library_of_exile_relic_type/ |
RELIC_AFFIX |
library_of_exile_relic_affix/ |
RELIC_RARITY |
library_of_exile_relic_rarity/ |
ITEM_MOD |
library_of_exile_item_modification/ |
ITEM_REQ |
library_of_exile_item_requirement/ |
CURRENCY |
library_of_exile_currency/ |
ORB_EDIT |
library_of_exile_orb_edit/ |
LEAGUE has no JSON folder — leagues are hardcoded only.
File placement
Files can be placed at any depth inside the folder. Subdirectories are supported:
data/my_mod/library_of_exile_mob_affix/fire_affixes/burn.json
data/my_mod/library_of_exile_mob_affix/burn.json
Both are loaded. The file name (excluding .json) is not used as the id — the "id" field
inside the JSON is the authoritative GUID.
In-mod resources vs external datapacks
Files inside your mod jar at src/main/resources/data/ are loaded as part of the built-in
datapack. Players and server admins can override or extend them with external datapack folders
in the world's datapacks/ directory using the same path structure.
Loader control fields
Every JSON file may contain these top-level fields to control how the entry is loaded:
"loader"
| Value | Behaviour |
|---|---|
"REPLACE_FULLY" (default) |
The JSON fully replaces/adds the entry |
"REPLACE_FIELDS" |
Only the fields present in the JSON are merged into an existing hardcoded entry |
Use "REPLACE_FIELDS" when you want to override specific values of an entry that is registered
in Java by another mod, without needing to copy the full JSON:
{
"id": "library_of_exile:common",
"loader": "REPLACE_FIELDS",
"affixes": 2
}
This adds 2 affixes to the built-in common relic rarity without touching any other field.
"enabled"
{ "id": "some_mod:unwanted_entry", "enabled": false }
Forces the entry to be unregistered even if it was previously added by Java code or another datapack. Useful for removing content from other mods without editing their files.
JSON validation
After each entry is loaded, the library re-serializes it and compares it with the original JSON
(a round-trip check). Entries that fail this check are stored in
JsonExileRegistry.INVALID_JSONS_MAP.
On player login, if any invalid entries were detected, a chat message lists them. This helps mod authors catch typos and missing fields during development.
To investigate: check the server log for [LibraryOfExile] warnings after a reload.
Hot-reload
All JSON entries support hot-reload via /reload. After reloading:
- All JSON entries are cleared and re-read from disk.
- Hardcoded (Java) entries are re-registered via
EXILE_REGISTRY_GATHER. - Sync packets are re-cached for
ON_LOGINtypes. - Online players receive updated sync packets immediately (same as a login sync).
Hardcoded entries (non-JSON) cannot change without a server restart.