UI Customization
Menu files are stored at:
plugins/KaFurnace/ui/main.yml
plugins/KaFurnace/ui/furnace.yml
plugins/KaFurnace/ui/upgrade.yml
Menus are not extracted automatically on first startup. An administrator installs missing templates with /kf ui zh_CN or /kf ui en_US; existing files are not overwritten. Run /kf reload after editing. Updates only add missing keys.
Layout rules#
Every row must contain exactly 9 characters, with 1 to 6 rows total. Every non-space character needs a matching button.<character> definition.
The furnace menu uses i, f, and o for input, fuel, and output. Each category must have 1 to 6 positions. Positions map to logical slots from left to right and top to bottom; the corresponding slot level controls how many are active.
The main menu uses:
| Character | Purpose |
|---|---|
f |
Up to 10 furnace-list positions |
u |
Select a furnace to upgrade |
b |
Purchase the next furnace |
The upgrade menu must contain n, b, s, and r for furnace, blast furnace, smoker, and return. Each upgrade character below may appear at most once. Omitting one from a custom layout hides that purchase entry:
| Character | Feature key |
|---|---|
i / f / o |
input_slot / fuel_slot / output_slot |
e / v |
fuel_efficiency / smelting_speed |
l / a / c |
offline_smelting / auto_output_delivery / completion_notification |
Button format#
button:
"P":
dynamic: cook
display:
material: CLOCK
amount: 1
name: "&bCooking Progress"
lore:
- "&7[{cook_progress_bar}&7] &f{cook_progress}% &7- &f{cook_remaining_seconds}s left"
UI text is written directly in menu files; lang: references are not supported. Titles, names, and lore support & color codes and arbitrary %placeholders% when PlaceholderAPI is installed. See PlaceholderAPI.
Furnace-state variables#
| Variable | Description |
|---|---|
{furnace_index} / {furnace_type} / {furnace_type_name} |
Furnace number, type enum, and localized type name |
{state} / {state_id} |
Localized state and raw state enum |
{input_amount} / {fuel_amount} / {output_amount} |
Total amount across all unlocked slots in that category |
{input_type} / {fuel_type} / {output_type} |
Material in the first non-empty unlocked slot |
{completed} |
Completed cooking cycles |
{fuel_efficiency_level} / {smelting_speed_level} |
Fuel-efficiency and smelting-speed levels |
{input_slot_level} / {fuel_slot_level} / {output_slot_level} |
Slot levels and unlocked counts |
{offline_smelting_enabled} |
Whether this furnace can process offline |
{auto_output_delivery_enabled} |
Whether online output delivery is active |
{completion_notification_enabled} |
Whether completion notification is active |
Progress and time variables#
| Variable | Description |
|---|---|
{cook_progress} / {cook_progress_bar} |
Current percentage and a filling 20-segment colored bar |
{cook_elapsed_seconds} / {cook_total_seconds} / {cook_remaining_seconds} |
Current-cycle elapsed, total, and remaining time |
{cook_all_remaining_seconds} / {estimated_remaining_seconds} |
Estimated remaining seconds for all valid input |
{cook_all_finish_time} |
Estimated all-input completion time in the server time zone |
{burn_progress} / {burn_remaining_percent} |
Burned and remaining percentages |
{burn_progress_bar} |
A draining 20-segment colored fuel bar |
{burn_elapsed_seconds} / {burn_total_seconds} / {burn_remaining_seconds} |
Time for the currently ignited fuel |
{fuel_all_remaining_ms} / {fuel_all_remaining_seconds} |
Active remainder plus all fuel stored in unlocked slots |
{fuel_sufficient_for_all_input} |
Whether all available fuel can finish all current valid input |
Both bar variables include their own colors. Remaining-second values round up to whole seconds; millisecond and elapsed/total second values keep their actual precision. The all-input estimate assumes an unchanged recipe, enough fuel, and unblocked output and is display-only.
Price and upgrade-menu variables#
The main menu provides {owned}, {max}, {remaining_slots}, {next_furnace_index}, and:
{furnace_purchase_price}
{furnace_purchase_provider}
{furnace_purchase_provider_available}
Each of the five level keys provides {<key>_level}, {<key>_next_level}, {<key>_maxed}, {<key>_price}, {<key>_provider}, and {<key>_provider_available}. Each permanent unlock provides {<key>_enabled} plus the same price, provider, and availability variables. Type-switch price prefixes are type_furnace, type_blast_furnace, and type_smoker.