MAKE YOUR OWN SOUL
A Human SOUL in Soulverse is one small JSON file. Put files like it in a datapack and the SOULs show up in character creation, the Soulverse menu, names, hearts and the server's SOUL settings, with no code. The base mod's own seven SOULs and the built-in Additional Souls pack (fourteen more) are made exactly like this.
DATA PACK GENERATOR
Make your SOULs without writing a file: as many as you like, each with its name, colour, quirks and sound, then download the packs ready to use.
DATA PACK GENERATOROR BY HAND, FROM THE TEMPLATES
Each a zip to unpack and change: the data pack adds one SOUL (Hopeful), the sound pack its select sound.
THE PACK
my_pack/
pack.mcmeta
pack.png
data/<your_namespace>/soulverse/human_soul/<soul_id>.jsonThe data pack template is a pack to copy. The SOUL's id is <your_namespace>:<soul_id> (the file name).
pack.mcmeta
{
"pack": {
"description": "What the pack adds, in a line or two.",
"min_format": 121,
"max_format": 121
}
}121 is the data pack format of Minecraft 26.3 (pack_version.data_major in the game's version.json).
YOUR SOUL
The SOUL itself is one file, data/. It starts with its name, and each step below adds to it (or let the Data Pack Generator write yours).
The example SOUL's file so far, this step's line lit:
EVERY FIELD, EXPLAINED
* required: every SOUL needs these; the rest are optional.
| field | what it is |
|---|---|
name* | what it is called: { "text": "Hopeful" }, or a translation with the text to show when there is none: { "translate": "mypack.soul.hopeful", "fallback": "Hopeful" } |
color* | "#RRGGBB": the colour of its heart, the name's heart, the hotbar glow, the locator and the ghost's aura |
order* | where it comes in lists and round the ring in character creation (lower first; same number: by id; negative is fine). The SOULs go round the colour wheel, red to pink, 5 apart (see below) |
passive | optional: a text describing a passive it grants |
selectable | optional, true by default: false keeps it out of character creation and Random (a SOUL come to some other way); admins can still give it |
select_sound | optional: the sound played when it is picked in character creation: the id of a sound event, e.g. "mysouls:soul.select.hopeful" (see Sounds below). Without it: the plain chime |
quirks | optional: the quirks everyone with this SOUL has, e.g. ["soul_sharing"] (see Quirks below). An admin can still take one from a single player, or give them others |
priority | optional, 0 by default: when several datapacks have a file at the same place (the same SOUL id), the highest priority is used (see Changing a SOUL below) |
Use fallback (or plain text) so the name shows without a language file; add the translate key to your own resource pack's lang/ as well to have it translated.
ITS COLOUR AND PLACE
Colours that are too close to another SOUL are hard to tell apart on a heart, in chat and on the locator: keep yours clearly apart from the SOULs nearest it in colour, as the fourteen Additional Souls are kept apart from each other and from the original seven. Very dark colours are hard to see on dark menus: keep them above about 45% brightness.
Every SOUL, the base seven and Additional Souls alike, stands round the colour wheel, from red through orange, yellow, green, cyan, blue and purple to pink, 5 apart, so the lists and the ring in character creation run as one rainbow:
Give yours a number between the two SOULs nearest it in colour (one between Bravery's orange and Confidence's cream: 12), or 105 or more to put it after them all.
TRY A COLOUR
Pick one: the big heart below takes it, and its number moves to where that colour goes on the ring.
WHERE IT LANDS IN CHARACTER CREATION
Try a number: the row is the SOUL ring of the selection screen, in order, and the big heart is where a SOUL with that number ends up.
WHERE EVERY SOUL STANDS ON THE RING
| order | SOUL | order | SOUL | order | SOUL |
|---|---|---|---|---|---|
| 0 | Determination | 35 | Creativity | 70 | Regret |
| 5 | Arrogance | 40 | Kindness | 75 | Loyalty |
| 10 | Bravery | 45 | Faith | 80 | Perseverance |
| 15 | Confidence | 50 | Patience | 85 | Compassion |
| 20 | Paranoia | 55 | Curiosity | 90 | Love |
| 25 | Justice | 60 | Discipline | 95 | Pride |
| 30 | Generosity | 65 | Integrity | 100 | Hate (not offered) |
The example SOUL's file so far, this step's lines lit:
ITS QUIRKS
Give it quirks with "quirks": every player with your SOUL has them.
An id this version doesn't know is ignored. A server can switch each quirk off on the Server tab (Quirks).
The example SOUL's file so far, this step's line lit:
EVERY QUIRK YOU CAN GIVE
| id | description |
|---|---|
soul_drain | Soul-Drain: take a life from a player brought down to half a heart; one life fewer, and after each drain half their health for 30 min and 5 hours of play before the next |
ghost_writer | Ghost-Writer: as a ghost, their chat is read by the living too |
soul_bound | Soul-Bound: the ghosts of players they kill are kept near them |
soul_sharing | Soul-Sharing: give one of their own lives to another player (asked yes or no first) |
loving_touch | Loving-Touch: up to three Loved Ones (a heart over them, regeneration near them); grief when one falls |
heart_strings | Heart-Strings: their Loved Ones always on their locator bar as hearts, however far or hidden; they show on the Loved Ones' bars the same way |
faithful_paws | Faithful-Paws: their tamed animals take a fifth less damage and follow them further on foot before teleporting; wild animals don't run from them |
shake_it_off | Shake-It-Off: R shakes off harmful effects (the quirks' own only lose a quarter of their time) and gives a moment of Resistance; costs food, then a wait |
final_resolve | Final-Resolve: a killing blow leaves them on 2.5 hearts instead (Strained Soul after: 5 hearts fewer for 30 min); again after 2 hours of play |
perfect_parry | Perfect-Parry: R takes up a 2 s parrying stance: a blow parried staggers its striker, a shot parried gives Resistance II and Speed II, a blow from it puts the one struck Off-Balance |
iron_focus | Iron-Focus: hold right-click with a sword to ready it (15% slower): projectiles from the front sent back, blows and explosions 75% less; tires after 5 charged blows; no shields; projectiles that reach them hurt 25% more |
steady_hand | Steady-Hand: shots charged and loosed, and critical hits, while standing still deal 1.5 times the damage |
trip_wire | Trip-Wire: R at two walls (up to 5 blocks apart) stretches a hidden wire; a player or ghost passing through pings its setter, who sees which way they are |
sixth_sense | Sixth-Sense: whatever has them in its sights from behind shows round their crosshair; no sleeping with monsters within 24 blocks |
soul_veil | Soul-Veil: hidden from ghosts (they can't see, hear in chat, teleport to or possess them), and every ghost is always seen |
stand_guard | Stand-Guard: R wakes the armor stands they placed nearby (up to five) as guards for 15 minutes; fire and axes hurt them twice |
friendly_mark | Friendly-Mark: R marks a player as a Friendly-Foe, spared their harmful quirks and their pets (Loved Ones are too) |
verdict_strike | Verdict-Strike: R throws a bolt of lightning that strikes as hard as its target is guilty; a few shots, then a wait |
bear_witness | Bear-Witness: players who strike other players near them are outlined in yellow for them; whoever they strike first sees them so |
mark_of_retribution | Mark-of-Retribution: shows who struck first; striking first themselves makes their blows weaker, striking them first sends part back |
tether_line | Tether-Line: R strings up a player (they can't move for 8 s) or pulls them to a block along a line (R again: thrown on) |
stubborn_will | Stubborn-Will: hurt and under half health, they heal faster at the cost of food |
second_wind | Second-Wind: a long sprint gives them food back now and then; their sprinting costs more hunger |
shelter_bloom | Shelter-Bloom: R raises a dome for 30 s that keeps out projectiles and mobs and heals their Friendly-Foes inside (its own healing, not an effect) |
save_point | Save-Point: a night slept through is saved (a gold star over the bed); at night, resting by a lit campfire slowly heals and feeds them |
gentle_hands | Gentle-Hands: peaceful for a minute, the players around them slowly heal |
calming_presence | Calming-Presence: animals and neutral mobs never turn on them, hostile ones notice them later; their first blow at a player is weaker |
open_book | Open-Book: invisible players (48 blocks) and nearby ghosts (16) show as outlines, possessed mobs have a mark, everyone is on their locator bar; they can't be invisible and their name tag shows through walls |
heavy_soul | Heavy-Soul: R turns the looked-at player's (8 s, 2 min wait) or mob's (5 s, 45 s wait) SOUL blue: heavy gravity, barely a jump, a quarter slower (not effects) |
side_step | Side-Step: R while moving left or right dashes them to that side, projectiles passing through them; a short wait, longer in a fight |
mended_soul | Mended-Soul: R marks a player missing a life (or yourself): after 6 hours of their play without dying, a life comes back; waits share a clock with Waning-Soul |
waning_soul | Waning-Soul: R marks another player: after 2 hours of their play, two hearts fewer for an hour (Waned Soul), unless the holder dies first |
cold_shoulder | Cold-Shoulder: others' holds (Heavy-Soul, Tether-Line) last half as long on them, a Waning-Soul twice as long to ripen; no one else's healing or gifts reach them |
bitter_end | Bitter-End: every life they are below the server's number of lives makes their blows stronger, up to a limit |
prying_spirit | Prying-Spirit: R at a mob possesses it for 30 s while your body stays behind, still and open to attack |
sneaky_peek | Sneaky-Peek: containers opened while crouching open quietly (no sound, the lid stays shut, no vibration) |
lucky_find | Lucky-Find: an unopened loot chest may offer its loot shown first and a re-roll, which may lose half of the new loot |
shared_burden | Shared-Burden: R at a player: for 5 minutes half of every blow at them comes to the holder |
mourners_watch | Mourners-Watch: where a player near them fell is marked on both their locator bars for 10 min; they grieve until that player is back |
tender_heart | Tender-Heart: healing taken and given 20% stronger; their blows 10% weaker |
stepping_stone | Stepping-Stone: R sets a faint glass foothold under them over a drop; it cracks and crumbles after 8 s; 3 stacks, one back every 5 s |
pack_up | Pack-Up: crouch + right-click with an empty hand picks up stations and storage whole (a toggle in the R ring); storage picked up full stays in the inventory until placed |
gentle_touch | Gentle-Touch: glass, leaves, bookshelves and other cosmetic blocks come away whole by hand (tag soulverse:gentle_touch) |
bountiful_craft | Bountiful-Craft: more from crafting stairs, doors, panes and the like, blocks crafted back into their parts; stonecutter and loom a 50% chance of twice as many |
free_climb | Free-Climb: crouching against a wall, cling to it and climb it like a spider (switched off and on in the R ring) |
helping_hand | Helping-Hand: R at a player heals them 2.5 hearts over 5 s, for 3 food points |
good_fortune | Good-Fortune: their Friendly-Foes within 16 blocks have Luck (better fishing and chest loot; needs Friendly-Mark) |
sworn_oath | Sworn-Oath: half a heart of absorption per Friendly-Foe near (2.5 at most); alone, blows 10% weaker |
never_alone | Never-Alone: half an armor point per Friendly-Foe near (1.5 at most; needs Friendly-Mark) |
open_hand | Open-Hand (a toggle in the R ring): whenever they eat, their Friendly-Foes within 32 blocks get a food point and half a heart, at a small cost to the meal |
first_strike | First-Strike: R marks a player or mob (48 blocks): whoever of the two strikes the other first deals double damage, the one struck is Outpaced (+10% damage taken, 5 s) |
hot_streak | Hot-Streak: kills in a row make their blows up to 15% harder; a hit ends the streak and they take 10% more for 3 s |
high_spirits | High-Spirits: at full health their blows do 10% more damage and they move 10% faster; under half health their blows do 10% less |
scornful_duel | Scornful-Duel: R at a player starts a 30 s duel: 20% more damage to each other, no quirk healing or gifts for either |
looking_down | Looking-Down: their blows at players with fewer lives left hurt more; players with more lives hit them harder |
small_fry | Small-Fry: small mobs hurt them less and are hurt more by them; bigger mobs hit them harder |
last_word | Last-Word: their next blow at a player who just hit them (within 3 s) hurts 15% more; unanswered, that player hits them 15% harder for 3 s |
into_the_breach | Into-the-Breach: R charges them about 6 blocks ahead, striking what's in the way, and draws hostile mobs onto them |
last_stand | Last-Stand: under 3 hearts their blows do 25% more damage and nothing knocks them back; blows at them do 10% more meanwhile |
lion_heart | Lion-Heart: creepers' fuses burn at half speed near them and Endermen don't mind their stare; hostile mobs notice them from further off |
saving_grace | Saving-Grace: R shows them the ghosts near and brings one back on one life (12 h of play to wait); with lives off, saves one who just fell near them |
silent_vigil | Silent-Vigil: standing still for 5 s they fade from everyone's sight (players, ghosts, mobs) until they walk upright or strike; their first blow from hiding does double damage |
WHICH SOUL HAS WHICH
| SOUL | pack | its quirks |
|---|---|---|
| Determination | The original seven | shake_it_off final_resolve save_point |
| Arrogance | Additional Souls | scornful_duel looking_down last_word small_fry |
| Bravery | The original seven | into_the_breach last_stand lion_heart |
| Confidence | Additional Souls | first_strike high_spirits hot_streak |
| Paranoia | The original seven | trip_wire soul_veil soul_bound sixth_sense |
| Justice | The original seven | verdict_strike mark_of_retribution bear_witness |
| Generosity | The original seven | helping_hand open_hand good_fortune soul_sharing friendly_mark |
| Creativity | Additional Souls | stepping_stone pack_up gentle_touch bountiful_craft free_climb |
| Kindness | The original seven | soul_sharing friendly_mark shelter_bloom gentle_hands calming_presence faithful_paws |
| Faith | Additional Souls | saving_grace leap_of_faith blind_faith |
| Patience | The original seven | silent_vigil mended_soul waning_soul |
| Curiosity | Additional Souls | prying_spirit sneaky_peek lucky_find |
| Discipline | Additional Souls | perfect_parry iron_focus steady_hand |
| Integrity | The original seven | heavy_soul side_step open_book |
| Regret | Additional Souls | rewind_step heavy_heart hindsight |
| Loyalty | The original seven | stand_guard sworn_oath never_alone friendly_mark |
| Perseverance | The original seven | tether_line stubborn_will second_wind |
| Compassion | The original seven | shared_burden tender_heart mourners_watch soul_sharing faithful_paws |
| Love | The original seven | loving_touch heart_strings faithful_paws soul_sharing |
| Hate | Additional Souls | soul_drain cold_shoulder bitter_end |
A SOUND OF ITS OWN
Optional: the sound played when your SOUL is picked in character creation.
my_sound_pack/
pack.mcmeta
assets/mysouls/sounds.json
assets/mysouls/sounds/soul/select_hopeful.ogg- In a resource pack,
assets/defines the event and points at an Ogg file:<namespace>/ sounds.json "soul.select.hopeful": { "sounds": ["mysouls:soul/, the file beingselect_hopeful"] } assets/(mono Ogg Vorbis, a second or less is best). The sound pack template is a pack to copy.mysouls/ sounds/ soul/ select_hopeful.ogg - In the SOUL's JSON:
"select_sound": "mysouls:soul.select.hopeful".
The example SOUL's file so far, this step's line lit:
THE SOUND PACK'S FILES
assets/mysouls/sounds.json
{
"soul.select.hopeful": { "sounds": ["mysouls:soul/select_hopeful"] }
}pack.mcmeta
{
"pack": {
"description": "The sounds of My SOULs.",
"min_format": 97,
"max_format": 97
}
}The player needs the resource pack (a server can offer it with resource-pack= in server.properties). Without it the SOUL still works, just silently. The player's "SOUL sounds" setting turns these off like the others. The sounds of Additional Souls need no resource pack: they are part of the mod itself, so they are always there.
ITS PRIORITY
Optional, 0 by default: "priority" only matters when two packs have a SOUL with the same id (the same namespace and file name), and then the higher one is used. Soulverse's own are 0. With it, the file is whole.
The example SOUL's file so far, this step's line lit:
PUT IT IN A WORLD
- In a new world: Data Packs on the Create World screen, move the pack to the right.
- In a world that exists:
/(a folder or zip in the world'sdatapack enable "file/ my_pack" datapacks/folder). - A dedicated server can also switch Additional Souls on in the SV menu (Server tab, Expansions) or
soulverse-server.json("datapacks": { "additional_souls": true }); it is read when the server starts, so it needs a restart. - A server's SV menu lists the new SOULs on the Souls page; each can be set to enabled, unavailable, hidden or disabled there.
- A mod can ship the pack inside its jar (
resourcepacks/with the files above) and register it with Fabric's<name>/ ResourceLoader.registerBuiltinPack(...); it is then in the datapack list, off until switched on, like Additional Souls (Soulverse.registerBuiltinPack). The menus' heart colours find SOULs indata/and inresourcepacks/of every mod.*/ data/
GOOD TO KNOW
CHANGING ONE OF SOULVERSE'S OWN SOULS
To change one of Soulverse's SOULs (or another pack's), put a file at the same place in your pack, with a higher priority: e.g. data/ with "priority": 1 replaces Love's own file (priority 0), whatever order the packs are in. Your file is used whole, so copy every field you want to keep. Two files with the same priority: the pack loaded last wins, as for any datapack file.
THINGS TO KNOW
- Take a SOUL away (the pack switched off) and the players who had it keep their character; their SOUL shows white and can't be chosen until the pack is back. An admin can give them another one from the menu.
- A SOUL without a
select_soundchimes plainly. There is no world song disc for SOULs of packs: the discs are items, which are made when the game starts, before any datapack is read. - Random picks from every SOUL the server has turned on, so a pack with many SOULs makes each less likely.
- A mistake in a SOUL file (a colour that isn't
#RRGGBB) usually stops the world from loading its data: the log names the file.