NeoForge data files
This is a scoped audit of server data, not a claim that carrying a file into a package executes it. The paths and examples below identify the readers and fixtures checked; the modifier gaps are tracked separately.
From the modding book of arismoko/horizonbfbda6a
Convention item tags
- Result and reader
- Loaded for content roots:
mod_incontent:: build crates/merges tag files;horizon-client/ src/ mod_ content.rs content_innamespaces:: tag_ namespaces crates/includeshorizon-items/ src/ content_ namespaces.rs cfor content roots, anditems::inload_ tag_ lists crates/reads and resolves them. Unknown item entries are filtered byhorizon-items/ src/ items.rs Known::inkeeps mod_.content.rs - Example or evidence
data/:c/ tags/ item/ gems/ glint.json {"values":["minecraft:diamond"]}. Theglint_fixture andmod a_test indata_ mod_ loads_ unloads_ and_ loads_ again crates/check the resultinghorizon-client/ src/ mod_ content_ tests.rs c:gems/membership.glint
Structure modifiers
- Result and reader
- Not loaded by any reader found today.
mod_copies ordinary files to its overlay;content:: build worldgen_in that file recognizes worldgen bundles, not structure modifiers. A workspace search forentry structure_found no reader. Copying is not applying.modifier - Example or evidence
- No verified in-tree example. #1269 tracks loading and applying them.
Global loot modifiers
- Result and reader
- Not loaded by any reader found today.
mod_copies ordinary files to its overlay, but a workspace search forcontent:: build loot_found no loader. Themodifiers native_code hook inloot_ drops crates/is not a data-file reader.horizon-mod-vocab/ src/ hooks/ base.rs - Example or evidence
- No verified current-format in-tree example. #1270 tracks loading and applying them. The old
global.jsonincarry::is a carry classification fixture, not proof of current-format loading.tests:: claims_ the_ namespaces_ its_ files_ name
The shared load-condition evaluator in crates/horizon-world/src/conditions.rs applies to recipes, loot tables, item modifiers, predicates, enchantments, jukebox songs, instruments, damage types, advancements, synchronized registry JSON, world-table tags (including the direct loot and damage readers, synchronized registry tags and function tags), and native item/block data maps. The conditional-data contract describes these file types and their reload lifetimes.
Ordinary JSON resources select the winning pack file before evaluating its conditions. A false or unsupported condition omits that winner without exposing a lower pack's file. Tag resources and data maps evaluate each layer before merge, replace, or remove; an omitted layer cannot clear lower entries. Content-root composition follows the same tag rule, including block/biome tag bundles. The damage registry remains frozen after world open; reloads reevaluate its tags. Generated item default components retain their prototype lifetime.
Supported forms are neoforge:mod_loaded, neoforge:true, neoforge:not (value), and neoforge:and / neoforge:or (values), inside a neoforge:conditions array. Every condition must hold; an unknown kind anywhere in a nested tree omits the file, including beneath not or or. Files without the array load normally.
mod_loaded reads an immutable snapshot of the owning generation's server-enabled mod IDs, including code-only native and WebAssembly mods, plus minecraft. Client-only, disabled and refused packages are absent. Namespaces do not imply a loaded mod. Changed enabled IDs participate in cache identity and are published with successful reloads; failed preparation preserves the old generation, and retained readers keep their old snapshot. Recipe condition behavior is unchanged. This shared contract does not add readers for the two modifier kinds above.
Edit this page on GitHub · Spotted something wrong? Open an issue .