Placeholder A P I

MythicSeasons registers its own PlaceholderAPI expansion when PlaceholderAPI is installed, for scoreboards, tab lists and other plugins. Nothing extra needs downloading.

  • The identifier is ms: every placeholder starts with %ms_. Write names in lowercase, exactly as listed.
  • A placeholder answers for its player and that player's world, unless a table says otherwise.

In MythicMobs skills, use the MythicMobs placeholders instead. Names and fallbacks differ, see Differences from the MythicMobs placeholders.

When a placeholder can't resolve

  • An unknown name returns nothing. The Celsius identifier is spelled celcius: temperature_int_celcius.
  • Without a player, as in event files, everything except the world form returns nothing.
  • For an offline player, everything except the world form returns Player is offline!, unknown names included.
  • The world form returns nothing for a world that never had a season.

Where MythicSeasons resolves them itself

The commands.start and commands.stop lines of event files resolve PlaceholderAPI placeholders without a player, so only the world form works there, such as %ms_season_survival%. The %season%, %world%, %day%, %month%, %month_asname%, %year% and %weekday% tokens in those lines are MythicSeasons' own (see Event Options).

World identifiers

These answer for the player's world, or for a named world with the world form.

Identifier Returns Nothing to report
%ms_season% The world's season id in lowercase, such as winter. DISABLED in a world without a season, the Nether and the End
%ms_season_id% The world's season id. Player form: none in the Nether, the End and worlds without a season. World form: disabled
%ms_next_season% The id (not the display name) of the next season in season-cycle of config.yml. DISABLED, also when the current season is not in the list
%ms_days_until_next_season% Whole calendar days until the next season starts. DISABLED while automatic-season-cycling is false, and in the player form in a world without a season. Otherwise 0 when there is no next season or no date
%ms_seasonlength% The length of the current season in calendar days. 0
%ms_day% The day of the month, from 1. 0
%ms_month% The month number, 1 for the first month under months in calendar.yml. 0
%ms_month_asname% The month name from calendar.yml. none
%ms_year% The calendar year. 0
%ms_weekday% The weekday name from week-days in calendar.yml. none
%ms_time% The in-game clock in the time.format of calendar.yml, such as 06:05. None. A world without a season shows the plain world time
%ms_active_events% The display names of the active events, separated by , . -
%ms_next_event% The display name of the next event to start, or of every event starting that day, separated by , . -
%ms_days_until_next_event% Whole calendar days until that event starts. - when no event is coming up. DISABLED while automatic-season-cycling is false or the world has no season

%ms_day%, %ms_month%, %ms_month_asname%, %ms_year% and %ms_weekday% return their fallback while enabled is false in calendar.yml or the world has no date. The values in the table follow the MythicMobs placeholders of the same meaning.

World form

Add an underscore and the exact, case-sensitive world name (underscores allowed) to any identifier in the table above: %ms_<identifier>_<world>%, such as %ms_season_survival% or %ms_time_resource_world%. The world must have had a season at some point. Other identifiers have no world form: %ms_temperature_survival% returns nothing.

Inside a season area, the player form of %ms_season%, %ms_season_id%, %ms_season_display% and %ms_sub_season% reports the area's season, with the phase MIDDLE.

Season and time

These identifiers answer only for a player.

Identifier Returns Nothing to report
%ms_season_display% The season's display-name with its MiniMessage tags, such as <#B0E0E6>Winter, or else the id with a capital first letter. none in the Nether, the End and worlds without a season
%ms_sub_season% The phase: START, EARLY, MIDDLE, LATE or END. none. MIDDLE while sub-seasons.enabled is false in config.yml
%ms_progress% Percent of the season passed, a whole number from 0 to 99 (rounded down). 0 when the world has no date or the calendar is disabled
%ms_season_blend% How far the weather has blended into the next season, 0.00 to 1.00. 0.00 in a world without a season
%ms_next_season_display% The next season's display name, written like %ms_season_display%. none
%ms_hours% The in-game hour, 0 to 23, even with the 12-hour clock. 0 in the Nether, the End and worlds without a season
%ms_minutes% The in-game minute, 0 to 59, without a leading zero. 0 in the Nether, the End and worlds without a season

%ms_progress% and %ms_season_blend% do not check that the world has a season.

Temperature

Identifier Returns
%ms_temperature%, %ms_body_temperature% The player's body temperature with its unit, such as 20°C or 68°F.
%ms_temperature_int%, %ms_body_temperature_int% The same number without the unit, in the player's unit.
%ms_temperature_int_celcius% The same number, always in Celsius.
%ms_temperature_int_fahr% The same number, always in Fahrenheit.
%ms_air_temperature% The air temperature at the player in the player's unit, number only, with BlockHeat lines that have air=true. In the Nether and the End: modifiers.other-dimensions.nether (shipped 25) or modifiers.other-dimensions.end (shipped 0), no blocks added.
%ms_atmosphere_temperature% The air temperature from the weather sources with air=true block lines, in Celsius, never converted. With no source, the temperature system's air temperature, or 0 while that system is disabled.
%ms_bottle_icon% A test tube character (U+1F9EA) while the player is hydrated, else empty text.

All temperature values are whole numbers. A player is hydrated for hydration-seconds (default 300) after drinking any potion item, water bottles included, see Temperature Options.

The body temperature updates every temperature-update-interval ticks (default 40, in temperature.yml), only in worlds with temperature on, and stops changing in Creative and Spectator mode, so test as a Survival player. A player who switched temperature off with /toggletemperature still has a value. See Where temperature applies.

Celsius and Fahrenheit

With display.convert-to-fahrenheit: true in temperature.yml, a player sees Fahrenheit unless they have used /togglefahrenheit. With false, only after using it. This sets the number and unit of %ms_temperature%, %ms_body_temperature%, %ms_temperature_int%, %ms_body_temperature_int% and %ms_air_temperature%.

The conversion is (celsius * 9) / 5 + 32 in whole numbers, so 20 becomes 68 and -3 becomes 27. The unit text follows with no space: display.temperature.celcius (default °C) or display.temperature.fahrenheit (default °F) of temperature.yml.

Body temperature while burning

While a player is on fire, the body temperature identifiers add 100 degrees before converting the unit. Burning from heat (marked with SetRSBurn at 50 degrees and above) does not count.

Temperature colours

%ms_temperaturecolor% and %ms_air_temperaturecolor% were removed. Use %mythic_var_mstempcolor%, the colour tag the bundled readout keeps in the MythicMobs variable mstempcolor. It shows [Undefined] until the readout has run once for the player.

%mythic_var_mstempcolor%, %ms_season_display%, %ms_next_season_display%, %ms_active_events% and %ms_next_event% can contain MiniMessage tags, which a plugin that only reads & codes shows as plain text.

Weather and clouds

These answer only for a player and give the same value as the MythicMobs placeholder in the second column, see Weather and Clouds. While enabled is false in atmosphere.yml, every identifier below except %ms_wind_speed%, %ms_storm% and %ms_in_cloud% returns its fallback.

Identifier Same as Format Nothing to report
%ms_wind_speed% <mythicseasons.windspeed> Metres per second, always one decimal 0.0
%ms_wind_direction% <mythicseasons.winddirection> Whole degrees from 0 to 360 0
%ms_wind_x% <mythicseasons.windx> Two decimals, -1.00 to 1.00 0
%ms_wind_z% <mythicseasons.windz> Two decimals, -1.00 to 1.00 0
%ms_humidity% <mythicseasons.humidity> Grams per kilogram, one decimal 0. 0.0 where the simulation has no data for the position
%ms_precipitation% <mythicseasons.precipitation> Two decimals, 0.00 to 8.00 0. 0.00 where the simulation has no data for the position
%ms_storm% <mythicseasons.storm> true or false Vanilla thunder where no weather source answers
%ms_in_cloud% <mythicseasons.incloud> true or false false
%ms_cloud_cover% <mythicseasons.cloudcover> Two decimals, 0.00 to 1.00 0
%ms_cloud_base% <mythicseasons.cloudbase> Block height -1
%ms_cloud_top% <mythicseasons.cloudtop> Block height -1
%ms_atmosphere_profile% <mythicseasons.atmosphereprofile> Profile names separated by commas without spaces none

Decimals always use a dot.

Biome

Identifier Returns
%ms_biome% The biome the world stores at the player's position, without its namespace, such as plains. void when there is none.

Season particles

Identifier Returns
%ms_particles% true while the player has season particles on, false after /toggleseasonparticles turned them off.

Cloud layers

Identifier Returns
%ms_cloudlayer_<name>% true while the player shows the cloud layers with the toggle name <name>, such as %ms_cloudlayer_fog%, false after /togglecloudlayer hid them.

<name> is the toggle value of the layer files (see Player toggles). The shipped layers use cumulus, fog, cirrus and dust. It may contain underscores, and case does not matter. A world name after it counts as part of the name: there is no world form.

Before a player chooses, a name gives true, or false when its layer files set toggle-default: hidden. The rest works as for <mythicseasons.cloudlayer.name>.

Differences from the MythicMobs placeholders

"a against b" means a in MythicMobs and b in PlaceholderAPI.

MythicMobs PlaceholderAPI What differs
<mythicseasons.season> %ms_season% Without a season, also in the Nether and the End: none against DISABLED. %ms_season_id% gives none in the player form.
<mythicseasons.season.display> %ms_season_display% Same text. Both give none without a season.
<mythicseasons.nextseason> %ms_next_season_display% Same display name and fallback none. %ms_next_season% is the id.
<mythicseasons.nextseason.id> %ms_next_season% Same id. none against DISABLED.
<mythicseasons.subseason> %ms_sub_season% Same values.
<mythicseasons.progress> %ms_progress% PlaceholderAPI does not check that the world has a season.
<mythicseasons.daysuntilnextseason> %ms_days_until_next_season% Fallback 0 in MythicMobs. PlaceholderAPI gives DISABLED while automatic-season-cycling is false and in a world without a season.
<mythicseasons.seasonblend> %ms_season_blend% Without a season: 0 against 0.00.
<mythicseasons.temperature> %ms_air_temperature% Both air with air=true block lines, which PlaceholderAPI leaves out in the Nether and the End. PlaceholderAPI converts to Fahrenheit for players who use it. Only MythicMobs works for any entity.
<mythicseasons.bodytemperature> %ms_temperature% PlaceholderAPI adds 100 while the player is on fire, MythicMobs only the degrees after its name (<mythicseasons.bodytemperature.100>).
<mythicseasons.playertemperature> %ms_temperature_int_celcius% PlaceholderAPI adds 100 while the player is on fire.
<mythicseasons.airtemperature> %ms_atmosphere_temperature% Same value.
<mythicseasons.day>, <mythicseasons.month>, <mythicseasons.month.name>, <mythicseasons.year>, <mythicseasons.weekday> %ms_day%, %ms_month%, %ms_month_asname%, %ms_year%, %ms_weekday% PlaceholderAPI answers in any world that has a date, with or without a season.
<mythicseasons.hours>, <mythicseasons.minutes> %ms_hours%, %ms_minutes% Same values.
<mythicseasons.time> %ms_time% Without a season: 00:00 against the plain world time.
<mythicseasons.events> %ms_active_events% Nothing active: - in both. A world that does not answer: none against -.
<mythicseasons.nextevent> %ms_next_event% The same fallbacks as above.
<mythicseasons.daysuntilnextevent> %ms_days_until_next_event% No event coming: -1 against -. PlaceholderAPI gives DISABLED while automatic-season-cycling is false or the world has no season.
<mythicseasons.humidity>, <mythicseasons.windspeed>, <mythicseasons.winddirection>, <mythicseasons.windx>, <mythicseasons.windz>, <mythicseasons.precipitation>, <mythicseasons.storm>, <mythicseasons.incloud>, <mythicseasons.cloudcover>, <mythicseasons.cloudbase>, <mythicseasons.cloudtop>, <mythicseasons.atmosphereprofile> %ms_humidity%, %ms_wind_speed%, %ms_wind_direction%, %ms_wind_x%, %ms_wind_z%, %ms_precipitation%, %ms_storm%, %ms_in_cloud%, %ms_cloud_cover%, %ms_cloud_base%, %ms_cloud_top%, %ms_atmosphere_profile% PlaceholderAPI has no fallback for a missing entity, and %ms_wind_speed% always has one decimal.
<mythicseasons.particles> %ms_particles% Same value.
<mythicseasons.cloudlayer.name> %ms_cloudlayer_<name>% The toggle name follows a dot in MythicMobs and an underscore in PlaceholderAPI. MythicMobs gives false for an entity that is not a player.

These identifiers have no MythicMobs counterpart: %ms_seasonlength%, %ms_biome%, %ms_bottle_icon%, %ms_temperature_int%, %ms_body_temperature_int%, %ms_temperature_int_fahr% and the world form.

Examples

Season: %ms_season_display%
Date: %ms_weekday%, %ms_month_asname% %ms_day%
Time: %ms_time%
Temperature: %mythic_var_mstempcolor%%ms_temperature%
Wind: %ms_wind_speed% m/s

%mythic_var_mstempcolor% colours the temperature while the bundled readout runs for the player.

commands:
  start:
    - "/say The harvest festival begins. The next season starts in %ms_days_until_next_season_survival% days."

Event files have no player, so this uses the world form for a world named survival.

  - actionmessage{m="<caster.var.mstempcolor><caster.var.mstempwarn><caster.var.mstemplead>[ <mythicseasons.bodytemperature> ] %ms_season_display%<caster.var.mstempicon>"} @Self ?!burning

The first actionmessage line of MS_TemperatureReadout in skills/TemperatureReadout.yml, with the season added. Change the other three the same way, then run /mm reload.

Updated Nov 11, 2026