← Soulverse

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 GENERATOR

OR 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>.json

The 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/<your_namespace>/soulverse/human_soul/<soul_id>.json. 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.

fieldwhat 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)
passiveoptional: a text describing a passive it grants
selectableoptional, 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_soundoptional: 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
quirksoptional: 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
priorityoptional, 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/en_us.json 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
orderSOULorderSOULorderSOUL
0Determination35Creativity70Regret
5Arrogance40Kindness75Loyalty
10Bravery45Faith80Perseverance
15Confidence50Patience85Compassion
20Paranoia55Curiosity90Love
25Justice60Discipline95Pride
30Generosity65Integrity100Hate (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
iddescription
soul_drainSoul-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_writerGhost-Writer: as a ghost, their chat is read by the living too
soul_boundSoul-Bound: the ghosts of players they kill are kept near them
soul_sharingSoul-Sharing: give one of their own lives to another player (asked yes or no first)
loving_touchLoving-Touch: up to three Loved Ones (a heart over them, regeneration near them); grief when one falls
heart_stringsHeart-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_pawsFaithful-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_offShake-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_resolveFinal-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_parryPerfect-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_focusIron-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_handSteady-Hand: shots charged and loosed, and critical hits, while standing still deal 1.5 times the damage
trip_wireTrip-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_senseSixth-Sense: whatever has them in its sights from behind shows round their crosshair; no sleeping with monsters within 24 blocks
soul_veilSoul-Veil: hidden from ghosts (they can't see, hear in chat, teleport to or possess them), and every ghost is always seen
stand_guardStand-Guard: R wakes the armor stands they placed nearby (up to five) as guards for 15 minutes; fire and axes hurt them twice
friendly_markFriendly-Mark: R marks a player as a Friendly-Foe, spared their harmful quirks and their pets (Loved Ones are too)
verdict_strikeVerdict-Strike: R throws a bolt of lightning that strikes as hard as its target is guilty; a few shots, then a wait
bear_witnessBear-Witness: players who strike other players near them are outlined in yellow for them; whoever they strike first sees them so
mark_of_retributionMark-of-Retribution: shows who struck first; striking first themselves makes their blows weaker, striking them first sends part back
tether_lineTether-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_willStubborn-Will: hurt and under half health, they heal faster at the cost of food
second_windSecond-Wind: a long sprint gives them food back now and then; their sprinting costs more hunger
shelter_bloomShelter-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_pointSave-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_handsGentle-Hands: peaceful for a minute, the players around them slowly heal
calming_presenceCalming-Presence: animals and neutral mobs never turn on them, hostile ones notice them later; their first blow at a player is weaker
open_bookOpen-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_soulHeavy-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_stepSide-Step: R while moving left or right dashes them to that side, projectiles passing through them; a short wait, longer in a fight
mended_soulMended-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_soulWaning-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_shoulderCold-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_endBitter-End: every life they are below the server's number of lives makes their blows stronger, up to a limit
prying_spiritPrying-Spirit: R at a mob possesses it for 30 s while your body stays behind, still and open to attack
sneaky_peekSneaky-Peek: containers opened while crouching open quietly (no sound, the lid stays shut, no vibration)
lucky_findLucky-Find: an unopened loot chest may offer its loot shown first and a re-roll, which may lose half of the new loot
shared_burdenShared-Burden: R at a player: for 5 minutes half of every blow at them comes to the holder
mourners_watchMourners-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_heartTender-Heart: healing taken and given 20% stronger; their blows 10% weaker
stepping_stoneStepping-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_upPack-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_touchGentle-Touch: glass, leaves, bookshelves and other cosmetic blocks come away whole by hand (tag soulverse:gentle_touch)
bountiful_craftBountiful-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_climbFree-Climb: crouching against a wall, cling to it and climb it like a spider (switched off and on in the R ring)
helping_handHelping-Hand: R at a player heals them 2.5 hearts over 5 s, for 3 food points
good_fortuneGood-Fortune: their Friendly-Foes within 16 blocks have Luck (better fishing and chest loot; needs Friendly-Mark)
sworn_oathSworn-Oath: half a heart of absorption per Friendly-Foe near (2.5 at most); alone, blows 10% weaker
never_aloneNever-Alone: half an armor point per Friendly-Foe near (1.5 at most; needs Friendly-Mark)
open_handOpen-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_strikeFirst-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_streakHot-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_spiritsHigh-Spirits: at full health their blows do 10% more damage and they move 10% faster; under half health their blows do 10% less
scornful_duelScornful-Duel: R at a player starts a 30 s duel: 20% more damage to each other, no quirk healing or gifts for either
looking_downLooking-Down: their blows at players with fewer lives left hurt more; players with more lives hit them harder
small_frySmall-Fry: small mobs hurt them less and are hurt more by them; bigger mobs hit them harder
last_wordLast-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_breachInto-the-Breach: R charges them about 6 blocks ahead, striking what's in the way, and draws hostile mobs onto them
last_standLast-Stand: under 3 hearts their blows do 25% more damage and nothing knocks them back; blows at them do 10% more meanwhile
lion_heartLion-Heart: creepers' fuses burn at half speed near them and Endermen don't mind their stare; hostile mobs notice them from further off
saving_graceSaving-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_vigilSilent-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
SOULpackits quirks
DeterminationThe original sevenshake_it_off final_resolve save_point
ArroganceAdditional Soulsscornful_duel looking_down last_word small_fry
BraveryThe original seveninto_the_breach last_stand lion_heart
ConfidenceAdditional Soulsfirst_strike high_spirits hot_streak
ParanoiaThe original seventrip_wire soul_veil soul_bound sixth_sense
JusticeThe original sevenverdict_strike mark_of_retribution bear_witness
GenerosityThe original sevenhelping_hand open_hand good_fortune soul_sharing friendly_mark
CreativityAdditional Soulsstepping_stone pack_up gentle_touch bountiful_craft free_climb
KindnessThe original sevensoul_sharing friendly_mark shelter_bloom gentle_hands calming_presence faithful_paws
FaithAdditional Soulssaving_grace leap_of_faith blind_faith
PatienceThe original sevensilent_vigil mended_soul waning_soul
CuriosityAdditional Soulsprying_spirit sneaky_peek lucky_find
DisciplineAdditional Soulsperfect_parry iron_focus steady_hand
IntegrityThe original sevenheavy_soul side_step open_book
RegretAdditional Soulsrewind_step heavy_heart hindsight
LoyaltyThe original sevenstand_guard sworn_oath never_alone friendly_mark
PerseveranceThe original seventether_line stubborn_will second_wind
CompassionThe original sevenshared_burden tender_heart mourners_watch soul_sharing faithful_paws
LoveThe original sevenloving_touch heart_strings faithful_paws soul_sharing
HateAdditional Soulssoul_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
  1. In a resource pack, assets/<namespace>/sounds.json defines the event and points at an Ogg file: "soul.select.hopeful": { "sounds": ["mysouls:soul/select_hopeful"] }, the file being assets/mysouls/sounds/soul/select_hopeful.ogg (mono Ogg Vorbis, a second or less is best). The sound pack template is a pack to copy.
  2. 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: /datapack enable "file/my_pack" (a folder or zip in the world's 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/<name>/ with the files above) and register it with Fabric's ResourceLoader.registerBuiltinPack(...); it is then in the datapack list, off until switched on, like Additional Souls (Soulverse.registerBuiltinPack). The menus' heart colours find SOULs in data/ and in resourcepacks/*/data/ of every mod.

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/soulverse/soulverse/human_soul/love.json 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_sound chimes 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.