Skip to content

Placeholder Reference

PlaceholderAPI Placeholders

Expansion identifier: emakicooking

When PlaceholderAPI is installed, EmakiCooking registers the following placeholders.

PlaceholderDescriptionExample
%emakicooking_recipe_count%Total recipe count across all stations.42
%emakicooking_recipe_count_chopping_board%Chopping board recipe count.8
%emakicooking_recipe_count_wok%Wok recipe count.12
%emakicooking_recipe_count_grinder%Grinder recipe count.5
%emakicooking_recipe_count_steamer%Steamer recipe count.6
%emakicooking_recipe_count_oven%Oven recipe count.4
%emakicooking_recipe_count_juicer%Juicer recipe count.3
%emakicooking_recipe_count_fermentation_barrel%Fermentation barrel recipe count.4

Nutrition placeholders

Nutrition placeholders also use the emakicooking identifier. See Nutrition System for the gameplay.

PlaceholderDescriptionExample
%emakicooking_nutrition_<type>%Current value of a player's nutrition type.60
%emakicooking_nutrition_<type>_max%Upper bound of a nutrition type.100
%emakicooking_nutrition_<type>_min%Lower bound of a nutrition type.0
%emakicooking_nutrition_combo_count_<ruleId>%Number of nutrition types currently qualifying for a combo threshold rule.3

<type> is a nutrition type id (such as fruit or protein), and <ruleId> is a combo threshold rule id. Nutrition placeholders depend on player state and require an online player context.

Station Runtime Placeholders

Station runtime placeholders read the live state of the player's currently associated station, also using the emakicooking identifier. There are two forms:

  • %emakicooking_station_<field>%: automatically uses the player's currently associated station.
  • %emakicooking_station_<type>_<field>%: only returns a value when the player's associated station matches the given type, otherwise an empty string. The type is a folder name (chopping_board, wok, grinder, steamer, oven, juicer, fermentation_barrel).

Association order: the player's most recently used station first (the player must still be in the same world and within a built-in distance limit), then the station GUI session the player currently has open (steamer / oven / juicer / fermentation barrel). Returns an empty string when the player has no associated station or the station is empty.

FieldDescriptionExample
typeStation type (folder name).chopping_board
type_nameStation display name.Chopping Board
worldStation world name.world
xStation block X coordinate.100
yStation block Y coordinate.64
zStation block Z coordinate.-200
locationCombined coordinate string world,x,y,z for whole-string matching.world,100,64,-200
blockStation block id (custom block id or vanilla Material name).minecraft:oak_log
heat_blockHeat source block id (below the station; empty when none).minecraft:furnace
burningWhether the heat source is burning.true
burning_secondsRemaining burn seconds of the heat source.40
heatHeat (oven) / heat level (wok).60
moistureMoisture (steamer).80
steamSteam (steamer).30
inputPlain text name of the main input item.Apple
input_sourceMain input item source shorthand.minecraft-apple
input_amountMain input item amount.16
ingredient_countNumber of input item types.3
recipeDisplay name of the matched / in-progress recipe.Apple Juice
recipe_idCurrent recipe id.apple_juice
progressCurrent progress value.2
progress_targetTarget progress value.5
progress_percentProgress percentage (one decimal place).40.0
completedWhether it is completed (collectable).false
fluidFluid name (juicer).Apple Juice
fluid_amountFluid amount in ml (juicer).500
playerOperating / viewing player name.Steve

Fields that do not apply to the current station return an empty string or 0 (for example a chopping board has no heat source, so heat_block is empty and burning is false).

Condition Recipe Gameplay Example

Combined with a recipe's availability_condition / condition, station coordinates can distinguish specific stations of the same type. For example, place two identical chopping boards and let only the one at a specific coordinate complete a recipe (the combined coordinate string contains commas, so quote it for string comparison):

yaml
availability_condition:
  type: all_of
  entries:
    - '%emakicooking_station_location% == "world,100,64,-200"'

You can also match a single coordinate field:

yaml
availability_condition:
  type: all_of
  entries:
    - '%emakicooking_station_x% == 100'
    - '%emakicooking_station_z% == -200'

See Condition System for the full condition block syntax (type / entries / on_fail, etc.).

Usage Example

yaml
lore:
  - '<gray>Total recipes: <white>%emakicooking_recipe_count%'
  - '<gray>Wok recipes: <white>%emakicooking_recipe_count_wok%'

Internal Template Variables

The following variables are available in recipe structured_presentation (name and lore action templates) using the %variable% format.

VariableDescriptionExample
%recipe_id%Recipe ID.grilled_steak
%recipe_name%Recipe display name.Grilled Steak
%station_type%Station type (folder name).oven
%phase%Current cooking phase.cooking
%output_source%Output item source shorthand.minecraft-cooked_beef
%output_amount%Output amount.1
%output_chance%Output chance.100%
%output_amount_min%Minimum of output amount range. Present only when the outcome declares amount_range.1
%output_amount_max%Maximum of output amount range. Present only when the outcome declares amount_range.3

%output_source% uses the CoreLib ItemSource shorthand form, for example minecraft-cooked_beef.

Template Example

yaml
structured_presentation:
  lore_actions:
    - action: "append"
      content:
        - ""
        - "<gray>Recipe: <white>%recipe_name%"
        - "<gray>Station: <white>%station_type%"
        - "<gray>Output: <white>%output_amount%x %output_source%"

Action Context Variables

When cooking reward actions (CookingRewardService) are triggered, the following variables are injected into the action context:

VariableDescriptionExample
%player%Player name.Steve
%player_uuid%Player UUID.00000000-0000-0000-0000-000000000000
%world%World name.world
%x%Station block X coordinate.100
%y%Station block Y coordinate.64
%z%Station block Z coordinate.-200
%recipe_id%Current recipe ID.grilled_steak
%recipe_name%Recipe display name.Grilled Steak
%station_type%Station type (folder name).oven
%cooking_recipe_id%Prefixed form of %recipe_id%.grilled_steak
%cooking_recipe_name%Prefixed form of %recipe_name%.Grilled Steak
%cooking_station_type%Prefixed form of %station_type%.oven
%input_count%Number of input ingredient entries in this settlement.3

Some stations inject additional variables when they settle a result:

VariableInjected byDescription
%outcome%WokThe matched outcome branch name.
%slot_index%Oven, steamer, juicerThe slot index being settled.

Output-level templates (structured_presentation) additionally receive %phase%, %output_source%, %output_amount%, %output_chance%, %output_amount_min%, and %output_amount_max%.

Action Example

Recipe outcome actions are CoreLib action strings:

yaml
actions:
  - 'sendmessage text="<green>%player% finished cooking %recipe_id% at the %station_type%!</green>"'

Notes

  • PAPI placeholders do not depend on player state for the recipe_count series, which are global values suitable for admin panels or scoreboards. Nutrition placeholders require an online player context.
  • CoreLib built-in context variables (%player_name%, %player_uuid%, etc.) are also available.