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 stations42
%emakicooking_recipe_count_chopping_board%Chopping board recipe count8
%emakicooking_recipe_count_wok%Wok recipe count12
%emakicooking_recipe_count_grinder%Grinder recipe count5
%emakicooking_recipe_count_steamer%Steamer recipe count6
%emakicooking_recipe_count_oven%Oven recipe count4
%emakicooking_recipe_count_juicer%Juicer recipe count3
%emakicooking_recipe_count_fermentation_barrel%Fermentation barrel recipe count4

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 type60
%emakicooking_nutrition_<type>_max%Upper bound of a nutrition type100
%emakicooking_nutrition_<type>_min%Lower bound of a nutrition type0
%emakicooking_nutrition_combo_count_<ruleId>%Number of nutrition types currently qualifying for a combo threshold rule3

<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 (the block the player cooks with), 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 nameChopping Board
worldStation world nameworld
xStation block X coordinate100
yStation block Y coordinate64
zStation block Z coordinate-200
locationCombined coordinate string world,x,y,z for whole-string matchingworld,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 burningtrue
burning_secondsRemaining burn seconds of the heat source40
heatHeat (oven) / heat level (wok)60
moistureMoisture (steamer)80
steamSteam (steamer)30
inputPlain text name of the main input itemApple
input_sourceMain input item source shorthandminecraft-apple
input_amountMain input item amount16
ingredient_countNumber of input item types3
recipeDisplay name of the matched / in-progress recipeApple Juice
recipe_idCurrent recipe idapple_juice
progressCurrent progress value2
progress_targetTarget progress value5
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 nameSteve

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 IDgrilled_steak
%recipe_name%Recipe display nameGrilled Steak
%station_type%Station type (folder name)oven
%phase%Current cooking phasecooking
%output_source%Output item source shorthandminecraft-cooked_beef
%output_amount%Output amount1
%output_chance%Output chance100%
%output_amount_min%Minimum of output amount range. Present only when the outcome declares amount_range1
%output_amount_max%Maximum of output amount range. Present only when the outcome declares amount_range3

%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 nameSteve
%player_uuid%Player UUID00000000-0000-0000-0000-000000000000
%world%World nameworld
%x%Station block X coordinate100
%y%Station block Y coordinate64
%z%Station block Z coordinate-200
%recipe_id%Current recipe IDgrilled_steak
%recipe_name%Recipe display nameGrilled 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 settlement3

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:
  - 'send_message 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