Skip to content

Datapack Guide

For server owners and pack authors. Tune via datapack / resource pack; you cannot invent new mechanics—effects[].type and spell type must be registered. Canonical samples: data/fatepath/ in the MOD jar.

ChannelContentApplies
Datapacktalents/, skills/, spells/, recipe/, tags/, destiny_lines/, passive_effect_types//reload
Resource packassets/<ns>/lang/*.jsonReload resources
config/fatepath-common.tomlTXP / mana / talent roll count, etc.Restart

Later same id wins. Logs: Loaded N … / Failed to load ….


Layout

data/<ns>/
├── talents/**/*.json            # Innate talents; never set type
├── skills/<category>/*.json
├── spells/*.json
├── recipe/*.json                # includes fatepath:talent_gated
├── destiny_lines/*.json
├── passive_effect_types/*.json  # attribute types only
└── tags/block|item/<name>.json  # use fatepath ns to patch mod tags

Prefer your own namespace; to override builtins keep the same id under data/fatepath/....


Talents talents/

FieldNotes
ide.g. mypack:talent/foo
max_levelrequired
effects{ type, value?, scope?, range? }
weight / graderoll weight; common / extra / unique / ultimate
mutually_exclusivetalent IDs
hidden / toggleable / grant_on_join
grant_skills[{ "id", "level"? }] or skill ID string
prerequisites[{ "id", "level" }]
growth_*developmental (see poison / heat tolerance JSON)

Do not set type (folder implies talent). Unknown effects[].typeload fails.


Skills skills/<category>/

category: combat | mining | farming | fishing | crafting | exploration

FieldNotes
ide.g. mypack:combat/foo
max_level / cost_per_levelcosts length must cover upgrades
prerequisitesid + level only
effectsunknown type → load fails
on_death{ lose_levels, min_level } or { lose_all: true }
mutually_exclusive / hidden / toggleable / grant_on_join
summon_masterysee builtin summon_mastery.json
evoker_fangs{ base_fang_count, base_row_count, fang_spacing, start_distance }

Active unlocks: skill effect type + matching spell required_skill.

json
{
  "id": "mypack:combat/arcane_bolt",
  "category": "combat",
  "max_level": 3,
  "cost_per_level": [25, 50, 100],
  "prerequisites": [],
  "effects": [{ "type": "fatepath:fireball" }]
}

Spells spells/

FieldNotes
id / typespell ID; type from table below
required_skilllinked skill (required for most types)
tierbeginnergod
color / icon / hiddenwheel
radius / duration_ticks / cast_ticks / angular_speed / mana_costtop-level, type-dependent
levels[]each needs damage, cooldown_ticks, mana_cost
summonsee summon_undead.json

levels[] extras: scale, sets_fire, pierce, speed, explosion_radius, target_range, splash_radius, splash_ratio, undead_multiplier, debuff_duration_ticks, duration_ticks, cast_ticks.

Spell type

typeNotes
projectile_fireballFireball
projectile_ice_coneIce cone
cast_projectileCast projectile (Radiant Lance)
channel_beamChannel (Hydro Jet)
thunder_strikeThunder Strike
lightning_boltLightning Bolt
flame_dashFlame Dash
area_firestormFirestorm
swift_surgeSwift Surge
encourageEncourage
wither_mistWither Mist
evoker_fangsEvoker Fangs
summon_undead / summon_creatureSummon
igniteEmpty-hand; not on wheel
infinite_gachaHidden-style

Namespace fatepath:. New logic needs Java (RegisterSpellTypesEvent).

json
{
  "id": "mypack:arcane_bolt",
  "type": "fatepath:projectile_fireball",
  "tier": "intermediate",
  "required_skill": "mypack:combat/arcane_bolt",
  "color": "#AA44FF",
  "icon": "minecraft:ender_pearl",
  "levels": [
    { "damage": 5.0, "scale": 0.4, "cooldown_ticks": 40, "speed": 1.5, "mana_cost": 10, "explosion_radius": 0.0 }
  ]
}

Passive effects[].type

Attribute: attack_damage, armor, max_health, luck, mining_speed, movement_speed (last two multipliers).

Event (subset): night_vision, water_breathing, fire_resistance, mining_fortune, farming_fortune, fishing_speed, fishing_loot_tier, auto_reel, crop_plant_*, catalyst_smelting, cobblestone_refine, imbued_ash, magma_armor, block_counter, view_others_talents (scope / range), growth poison_resistance_* / heat_tolerance_*, curse damage_taken / mana_regen_penalty / neutral_aggro / villager_trade_*, plus spell unlock types (fireball, hydro_jet, summon, thunder_strike_lock, …).

Source of truth: PassiveEffectType. Attribute types can be added via passive_effect_types/ (application + attribute); event types need Java.


Gated recipes

type: fatepath:talent_gated (legacy serializer name). required_skill must be owned and enabled.

json
{
  "type": "fatepath:talent_gated",
  "group": "cobblestone_refine",
  "category": "building",
  "required_skill": "fatepath:crafting/cobblestone_refine",
  "ingredients": [{ "item": "minecraft:blackstone" }],
  "result": { "id": "minecraft:cobblestone", "count": 1 }
}

Tags

Mod reads fixed fatepath: tag IDs. Patch with:

data/fatepath/tags/block|item/<name>.json

TagUse
#fatepath:mining_txp_blocks / mining_txp_excludedMining TXP
#fatepath:catalyst_smelting_ores / catalyst_smelting_meatCatalyst smelting
#fatepath:poison_resistance_training_foodPoison growth

Destiny lines

data/<ns>/destiny_lines/*.json: id, roll_chance, grant_talents, spawn_at, …. See Destiny.


Localization

ObjectKey
Talenttalent.<ns>.<dotted path> + .description
Skillskill.<ns>.<dotted path> + .description
Spellspell.<ns>.<path> + .description
Effect templateeffect.fatepath.<name> (overridable)

Debug

  • /reload, then check logs
  • /fatepath talent list|give · /fatepath skill list|give · /fatepath spell cast <id> · /fatepath txp give
  • Full commands: Commands; knobs: Config

Override same id to retune or "hidden": true. New event effects / spell logic require MOD or addon code.