Global Settings

update_checker: true
cooldown_storage: file
KeyTypeDefaultDescription
update_checker boolean true Check for new versions on startup
cooldown_storage string "file" "file" = persistent across restarts, "session" = memory-only (resets on restart)

World Filter

Control which worlds LumenSmith's rules apply in.

world_filter:
  whitelistworldoff: true
  worlds:
    - world
    - world_nether
    - world_the_end
KeyTypeDefaultDescription
whitelistworldoff boolean true true = features active in ALL worlds. false = only in listed worlds.
worlds list none World names where rules apply (only used when whitelistworldoff: false)
Most servers should keep whitelistworldoff: true to apply rules everywhere. Only change this if you need per-world control.

Blocked Outputs

Any material listed under remove_by_output will be completely uncraftable. The recipe book shows no output, clicks are blocked, and ingredients are not consumed.

remove_by_output:
  - TNT
  - TNT_MINECART
  # - ENDER_CHEST
  # - TRIDENT
Material names use Bukkit's Material enum. See the Spigot JavaDocs for a complete list.

Deny Message

Shown when a player tries to craft a blocked output. Supports color codes and the %item% placeholder.

deny_message: '&cCrafting of &e%item% &cis disabled on this server.'

Custom Recipes

Each recipe is an entry under the custom_recipes list. Here are all available fields:

Required Fields

FieldTypeDescription
keystringUnique recipe ID (letters, numbers, underscores only)
typestringRecipe type (see Recipe Types)
resultobjectThe output item (see below)

Result Object

FieldTypeDefaultDescription
itemstringnoneMaterial name (required)
amountint1Output amount (1–64)
namestringnoneCustom display name (supports & color codes)
lorelistnoneLore lines (supports & color codes)
enchantmentslistnoneEnchantments in "NAME:LEVEL" format
custom_model_dataintnoneCustom model data for resource packs
potion_typestringnone(Brewing only) Bukkit PotionType enum value, e.g. STRENGTH, LONG_FIRE_RESISTANCE, STRONG_REGENERATION. Only meaningful when item is POTION / SPLASH_POTION / LINGERING_POTION.

Optional Fields

FieldTypeDefaultDescription
auto_unlock_onlist(auto)Materials that trigger recipe book unlock. If omitted, the plugin auto-derives the list from the recipe's ingredients. Provide your own list to override; you can list as many materials as you like.
replace_existingbooleantrueReplace conflicting vanilla recipes
permissionstringnonePermission required to craft
permission_deny_messagestringnoneMessage shown when permission is missing
cooldownintnoneSeconds between crafts (per-player)
max_craftsintnoneLifetime craft limit (per-player)
cooldown_messagestringnoneMessage on cooldown (%remaining% placeholder)
max_crafts_messagestringnoneMessage when limit is reached

Effects (Optional)

Play a sound and/or particle effect when the recipe is successfully crafted.

effects:
  sound: "ENTITY_PLAYER_LEVELUP"
  sound_volume: 1.0
  sound_pitch: 1.2
  particle: "ENCHANT"
  particle_count: 50
FieldTypeDescription
soundstringBukkit Sound enum name
sound_volumefloatVolume (0.0 – 1.0)
sound_pitchfloatPitch (0.5 – 2.0)
particlestringBukkit Particle enum name
particle_countintNumber of particles

Brewing-Specific Fields NEW v0.1.5

Brewing recipes use a different ingredient layout than crafting/cooking. Instead of ingredients or input, they take two separate fields plus a potion-aware result.

FieldTypeDescription
ingredientMaterialWhat goes in the brewing stand's top slot. Any material is allowed; the plugin handles non-vanilla pairs by driving the brewing process itself.
inputMaterialThe bottle material in the bottom slots. Must be POTION, SPLASH_POTION, or LINGERING_POTION.
result.itemMaterialMust also be one of the three potion materials.
result.potion_typestringBukkit PotionType: the potion effect on the resulting bottle. See Brewing.

Full Example Config

# ── Global ──────────────────────────────────────────────────────────────
update_checker: true
cooldown_storage: "file"   # "file" = persistent, "session" = memory-only

# ── World filter ────────────────────────────────────────────────────────
# whitelistworldoff: true  -> features run in every world
# whitelistworldoff: false -> only the worlds listed below
world_filter:
  whitelistworldoff: true
  worlds: ["world", "world_nether", "world_the_end"]

# ── Blocked outputs ─────────────────────────────────────────────────────
# Any result listed here is uncraftable. Recipe book hides the output,
# clicks are blocked, ingredients are NOT consumed.
remove_by_output:
  - TNT
  - TNT_MINECART

# ── Custom recipes ──────────────────────────────────────────────────────
custom_recipes:

  # SHAPED — every-option showcase
  - key: "excalibur"
    type: "shaped"
    shape: [" D ", " D ", " S "]
    ingredients:
      D: "DIAMOND"
      S: "STICK"
    result:
      item: "DIAMOND_SWORD"
      amount: 1
      name: "&6Excalibur"
      lore:
        - "&7A blade of legend"
        - "&5+10 Attack Damage"
      enchantments:
        - "SHARPNESS:5"
        - "UNBREAKING:3"
        - "FIRE_ASPECT:2"
      custom_model_data: 1001
    permission: "lumensmith.craft.excalibur"
    permission_deny_message: "&cYou need VIP rank to forge Excalibur!"
    cooldown: 3600
    max_crafts: 3
    cooldown_message: "&cExcalibur needs &e%remaining%s &cto recharge."
    max_crafts_message: "&cYou have forged all the Excaliburs fate allows."
    effects:
      sound: "ENTITY_PLAYER_LEVELUP"
      sound_volume: 1.0
      sound_pitch: 1.2
      particle: "ENCHANT"
      particle_count: 50
    auto_unlock_on: ["DIAMOND"]

  # SHAPELESS
  - key: "cheap_torch"
    type: "shapeless"
    ingredients: ["STICK", "COAL"]
    result: { item: "TORCH", amount: 8 }
    auto_unlock_on: ["COAL", "CHARCOAL"]

  # ADJACENT PAIR — two items next to each other in any 2x2 area
  - key: "glowing_ink_sac_craft"
    type: "adjacent_pair"
    items: ["GLOWSTONE_DUST", "INK_SAC"]
    result: { item: "GLOW_INK_SAC", amount: 1 }
    auto_unlock_on: ["GLOWSTONE_DUST", "INK_SAC"]

  # FURNACE / BLASTING / SMOKING / CAMPFIRE all share the same shape
  - key: "blast_raw_iron"
    type: "blasting"
    input: "RAW_IRON"
    result:
      item: "IRON_INGOT"
      amount: 2
      name: "&fRefined Iron"
    experience: 1.0
    cooking_time: 100        # ticks
    auto_unlock_on: ["RAW_IRON"]

  # STONECUTTING
  - key: "cut_stone_bricks"
    type: "stonecutting"
    input: "STONE"
    result: { item: "STONE_BRICKS", amount: 2 }
    auto_unlock_on: ["STONE"]

  # SMITHING TRANSFORM
  - key: "infernal_pickaxe"
    type: "smithing_transform"
    template: "NETHERITE_UPGRADE_SMITHING_TEMPLATE"
    base: "DIAMOND_PICKAXE"
    addition: "NETHERITE_INGOT"
    result:
      item: "NETHERITE_PICKAXE"
      amount: 1
      name: "&4Infernal Pickaxe"
      enchantments: ["EFFICIENCY:5"]
    auto_unlock_on: ["NETHERITE_INGOT"]

  # BREWING — works even with ingredients vanilla normally refuses
  # `input` can be a plain string ("POTION") or a map that pins the base
  # potion type (WATER, AWKWARD, etc.). `result` carries the new potion.
  - key: "spruce_night_vision"
    type: "brewing"
    ingredient: "SPRUCE_LOG"
    input:
      item: "POTION"
      potion_type: "AWKWARD"
    result:
      item: "POTION"
      potion_type: "NIGHT_VISION"
      name: "&9Sylvan Night Vision"
    auto_unlock_on: ["SPRUCE_LOG"]

# ── Deny message ────────────────────────────────────────────────────────
# Shown when a blocked output is attempted. Only %item% is supported.
deny_message: "&cCrafting of &e%item% &cis disabled on this server."