upgrades.yml
The upgrade configuration is stored at:
plugins/KaFurnace/upgrades.yml
KaFurnace extracts this file on first startup. Later versions only add missing leaf keys and do not overwrite existing prices or multipliers. /kf reload parses and validates the complete new file before publishing it. A validation error keeps the new upgrade configuration from becoming active; correct the console error and reload again.
Price format#
Every priced entry uses:
provider: "vault"
price: 1000.0
Supported providers are:
| Value | Requirement |
|---|---|
vault |
Vault is enabled and an Economy service is registered |
playerpoints |
PlayerPoints is enabled; price must be an integer from 0..2147483647 |
A price must be finite and non-negative. 0 still runs the transaction but does not reduce the balance. Vault and PlayerPoints are soft dependencies. If a configured provider is unavailable, KaFurnace rejects the purchase instead of treating it as free.
Furnace purchases#
furnace_purchase.prices.2 through .10 are the prices for furnaces 2 through 10. The first regular furnace is created for free and has no level-1 price.
Type switches#
type_switch.furnace, type_switch.blast_furnace, and type_switch.smoker are charged each time the furnace changes to that target type. Selecting the current type does not charge. A successful switch requires every virtual slot to be empty and active fuel to be exhausted.
Permanent abilities#
Each entry under unlocks is purchased once per furnace:
| Key | Effect |
|---|---|
offline_smelting |
Continue processing offline |
auto_output_delivery |
Deliver output and experience while the owner is online |
completion_notification |
Notify once after all valid input is complete |
Five level upgrades#
upgrades contains input_slot, fuel_slot, output_slot, fuel_efficiency, and smelting_speed. Level 1 is the initial state, so every property must define target levels 2..6. Example:
upgrades:
smelting_speed:
levels:
2:
speed_multiplier: 1.2
provider: "vault"
price: 1500.0
The price is the one-time cost to move from the previous level to that target level. Players cannot skip levels.
burn_duration_multiplier under fuel_efficiency and speed_multiplier under smelting_speed must be finite positive values and cannot decrease from the previous level. Level 1 always uses 1.0. A multiplier applies only to newly ignited fuel or newly started cooking cycles; neither reload nor purchase rewrites an active duration.
Transaction and refund behavior#
A purchase validates domain state and balance, withdraws payment, then waits for the critical database write. If the database fails, KaFurnace restores the in-memory state and attempts one compensating refund through the original provider. If the refund also fails, a SEVERE entry records the player UUID, provider, amount, and reason. KaFurnace cannot force an unavailable economy backend to restore the balance, so an administrator must reconcile that audit entry manually.
See the Upgrade System for the player workflow, exact ability triggers, and administrator boundaries.