The World/Placeholders·

Placeholders

With PlaceholderAPI installed, Cultivation registers a cultivation expansion. Anything that runs text through PlaceholderAPI — chat formats, scoreboards, tab lists, holograms, signs — can show a cultivator's standing.

Nothing needs configuring: installing PlaceholderAPI is the whole setup. Run /papi info cultivation in game for the live list.

{: .note }

Names are English. A placeholder returns plain text and PlaceholderAPI carries no language, so every name here is the English one. Where you want to localise it yourself, the matching _key placeholder returns the server.lang key instead — %cultivation_realm% gives "Golden Core Formation", %cultivation_realm_key% gives the key that translates to it.

Progression

PlaceholderExample
%cultivation_realm%Golden Core Formation
%cultivation_realm_key%the server.lang key for it
%cultivation_realm_id%GOLDEN_CORE_FORMATION
%cultivation_realm_index%4 (1-based)
%cultivation_stage%Late-Stage
%cultivation_stage_key% · %cultivation_stage_id%key / LATE
%cultivation_rank%Golden Core Formation Late-Stage
%cultivation_level% · %cultivation_max_level%14 / 27
%cultivation_is_max_level%yes / no
%cultivation_qi%1240
%cultivation_qi_required%2000, or - at max level
%cultivation_qi_percent%62
%cultivation_qi_bar%`\\\\\\......`
%cultivation_ready%yes / no
%cultivation_ready_type%breakthrough, advancement, or empty

%cultivation_rank% is the one most chat formats actually want.

State

PlaceholderExample
%cultivation_meditating%yes / no
%cultivation_ritual%breakthrough, advancement, none
%cultivation_ritual_percent%41
%cultivation_qi_flow%Qi per second being drawn

Race, Dao and the skill tree

PlaceholderExample
%cultivation_race% · _key · _idDemon
%cultivation_dao% · _key · _idLightning
%cultivation_has_dao%yes / no
%cultivation_yin% · %cultivation_yang%62 / 38
%cultivation_karma%blood on the ledger
%cultivation_path% · _key · _idRighteous / Devil / Unaligned
%cultivation_skill_points%unspent points
%cultivation_skill_debt%points owed after a demotion

Sect

PlaceholderExample
%cultivation_sect%the sect's name, or empty
%cultivation_in_sect%yes / no
%cultivation_sect_rank% · _idLeader / Elder / Disciple
%cultivation_sect_members%roster size
%cultivation_sect_motto%the sect's motto
%cultivation_sect_has_hall%yes / no

Sect placeholders answer from a UUID-keyed registry rather than the player's entity, so they work for offline players too.

Companion, home and the ground underfoot

PlaceholderExample
%cultivation_has_beast% · %cultivation_beast%yes / the species
%cultivation_beast_level% · %cultivation_beast_summoned%12 / yes
%cultivation_has_abode% · %cultivation_abode_spring%yes / banked Qi
%cultivation_vein_qi% · %cultivation_vein_max%the chunk you are standing in
%cultivation_vein_percent%74
%cultivation_vein_tier%Normal / Rich / Dragon

The vein_* set reads the chunk without creating or writing anything, so a scoreboard polling it every second costs nothing and seeds no data.

Rankings — no player needed

PlaceholderExample
%cultivation_top_name_1%the highest cultivator's name
%cultivation_top_level_1% · %cultivation_top_qi_1%their level / banked Qi
%cultivation_top_realm_1% · %cultivation_top_stage_1%their rank

The trailing number is the position, 1-based — %cultivation_top_name_3% is third place. These answer with no player context at all, which is what makes a leaderboard sign possible. A position beyond the number of ranked cultivators returns empty rather than an error, so a top-10 board on a three-player server renders blank rows.

Relational

Used by formats that compare a speaker to a viewer:

PlaceholderExample
%rel_cultivation_same_sect%yes / no
%rel_cultivation_sect_relation%same / rival / none
%rel_cultivation_realm_difference%+3 levels between them
%rel_cultivation_higher_realm%yes / no
%rel_cultivation_dueling%whether they are duelling right now

For developers

Placeholders are read on the world thread of the player being asked about — PlaceholderAPI's own documentation puts that obligation on the caller, via player.getWorld().execute(). Cultivation's expansion never writes and guards every lookup, so a careless caller gets a stale read rather than a crash, but it is still worth getting right.

To check the expansion is live before writing a format that depends on it:

if (CultivationAPI.isPlaceholderApiRegistered()) { ... }