Changelog
Version history and release notes for LumenSmith.
v0.1.5: Brewing, Quick Actions & Hardening
May 14, 2026 (Latest release)
New Features
Brewing Recipe Type
- New
brewingrecipe type, the 10th supported station - Custom (ingredient, bottle) pairs produce custom potions, including non-vanilla pairs (e.g.
OAK_LOG + POTION) - For vanilla-valid pairs, the existing
BrewEventpath overrides the vanilla result - For non-vanilla pairs, a new
BrewingManagerruns its own 20-second brewing animation, consumes blaze powder, and replaces bottles. It works for any material as ingredient. - New
potion_typefield onresultsets the bottle's BukkitPotionType(e.g.STRENGTH,LONG_NIGHT_VISION,STRONG_REGENERATION) - Brewing recipes are rejected at save time if ingredient, bottle, or result aren't set or aren't valid potion materials. No more silently broken recipes.
Quick Actions in the Recipe Browser
- Nether Star button: opens the creator with a chat-prompt for the recipe key
- TNT button (admin): toggles Delete Mode; shift-click a recipe to remove it from
config.ymlinstantly - Barrier button: switch to a Blocked Outputs view of
remove_by_output. Admins can click a blocked material to unblock it, or click an item in their inventory to add it.
Reorganised Recipe Creator
- Five category icons in the top-level menu (Crafting / Cooking / Stonecutting / Smithing / Brewing) instead of nine flat icons
- Sub-menus drill into Crafting (shaped / shapeless / adjacent_pair) and Cooking (furnace / blasting / smoking / campfire)
- Back button preserves your session across menu transitions
- All menus centered visually with no gaps between icons
Custom Unlock Triggers
- New Knowledge Book button in the editor lets you pick the materials that auto-unlock the recipe in the recipe book
- "Auto" (no triggers picked) keeps the historical behaviour. The trigger list is derived from ingredients.
- Pick one or many trigger materials to override; right-click clears back to Auto
Faster Top-Level Command
/lswith no arguments now opens the recipe browser directly. No need to type/ls recipes./ls helpmoved fromlumensmith.admintolumensmith.guiso new users can see the command list
Instant Auto-Unlock
- Recipe-book unlocks now fire the same tick the trigger item enters the player's inventory
- Listener checks the cursor as well as inventory contents, catching the just-crafted "result on cursor" case
- Inventory-click events (shift-click out of chests, villager trades, furnace extracts) trigger the rescan immediately. No more "I closed the chest and then it appeared".
/givedetection now handles namespaced forms like/minecraft:give
Bug Fixes
- Campfire interaction fix: right-clicking a lit campfire with a custom recipe's ingredient now places the item correctly. Paper's vanilla interaction routing didn't always pick up plugin-added
CampfireRecipeobjects; we handle the placement ourselves. - Recipe-key collision: a strict
NamespacedKeymap prevents vanilla recipes from accidentally inheriting a custom recipe's permission or cooldown when short keys collided. - Cooldown save race: the 5-minute autosave now builds a snapshot on the main thread and writes async; no more
ConcurrentModificationExceptionrisk. - Reload restores vanilla recipes: deleting a custom recipe with
replace_existingand reloading brings the original vanilla recipe back without a server restart. - Adjacent-pair alternates: every placement of an
adjacent_pairrecipe is now auto-unlocked together (shared recipe group), so all rotations appear in the recipe book. - Per-cooking-type fuel index: furnace, blast furnace, and smoker recipes can share the same input material with different
allowed_fuelswithout overwriting each other. - Result-slot bypass: cooldown, permission, and max-craft checks now also fire for SWAP_OFFHAND (F) and drop (Q) clicks on the crafting result slot.
Security Hardening
- GUI delete permission aligned with
/ls delete: both requirelumensmith.admin - Tab completion respects permissions; non-admins no longer leak recipe keys via
/ls delete <TAB> - Inventory routing migrated from title-string matching to
InventoryHolder-based dispatch, which is future-safe against the deprecatedview.getTitle()API - CooldownManager cleanup: player entries are dropped on quit when no craft count needs to persist, keeping the in-memory map bounded
Compatibility
- Paper API target bumped to
26.1.2.build.63-stable - Separate build for the 1.21.x line still available (
lumensmith-0.1.5-mc1.21.jar) - Single source tree, so the jar that fits your server is the only thing that changes
Config Changes
New brewing recipe shape:
custom_recipes:
- key: "speed_brew"
type: "brewing"
ingredient: "SUGAR" # top brewing-stand slot
input: "POTION" # POTION / SPLASH_POTION / LINGERING_POTION
result:
item: "POTION"
potion_type: "SWIFTNESS" # any Bukkit PotionType
name: "&bSwift Brew"
auto_unlock_on: ["SUGAR"]
Wiki link added to the top of config.yml as a comment for new installs.
v0.1.4: Major Update
February 17, 2026
New Features
In-Game Recipe Creator (/ls create <key>)
- Full click-based GUI recipe builder, no YAML editing needed
- Supports all 9 recipe types: shaped, shapeless, furnace, blasting, smoking, campfire, stonecutting, smithing transform, and adjacent pair
- Click a slot, then click any item in your inventory to assign materials
- Type selector: pick your recipe type visually, change it anytime
- Result amount control: set output amount from 1–64 with +/- buttons (always starts at 1 when picking an item)
- Cooking controls: adjust cooking time (+/-50 ticks) and experience (+/-0.1) directly in the GUI
- Fuel selector: restrict which fuels are allowed for cooking recipes (click to add fuels, right-click to clear)
- Direction option: for adjacent pair recipes, choose horizontal, vertical, or both placement directions
- Auto-generates
auto_unlock_onfrom ingredients - Saves directly to
config.ymland reloads instantly
Recipe Editing
- Edit button in recipe detail view (writable book icon): loads existing recipe into the creator with all data pre-filled
- Supports editing all recipe types including shaped grid layout, cooking settings, fuel restrictions, and direction
- Saves changes in-place (replaces old config entry)
Recipe Deletion
- Delete button in recipe detail view (TNT icon) removes recipe from config with one click
- Instantly reloads after deletion
Adjacent Pair Direction
- New
directionconfig field for adjacent pair recipes:horizontal,vertical, orboth(default) - Controls which placement orientations are registered
- Fully configurable from both YAML and the in-game creator
Bug Fixes
- Smelting Output Fix: Fixed critical bug where custom cooking recipe outputs were blocked by
remove_by_output. Example: custom "Crying Obsidian → Obsidian" recipe was blocked because OBSIDIAN was in the blocked outputs list. Custom recipes now correctly bypass the vanilla output blocker. - Fuel Enforcement Fix: Switched from
FurnaceSmeltEventtoFurnaceBurnEventfor fuel checking.FurnaceBurnEventfires before fuel is consumed, makinggetFuel()reliable. Prevents infinite smelting loops when wrong fuel was used. - Ingredient Display Deduplication:
/ls recipesbrowser and detail view now groups duplicate ingredients. ShowsSTONE x9instead of listing STONE nine separate times.
Performance Optimizations
- O(1) Fuel Index Lookup: Pre-built
cookingFuelIndexmap in RecipeLoader. Direct map lookup instead of iterating all recipes. Reduces furnace burn event processing from O(n) to O(1). - Memory Leak Prevention: Creator sessions cleaned up on
PlayerQuitEvent. Prevents session map from growing unbounded. - Pre-computed Messages: No string processing on hot paths
- Debounced Rescanning:
pendingRescanset + 2-tick delay to reduce event spam - O(1) Material Checks:
boolean[]indexed byMaterial.ordinal()for material presence checks - Immutable Collections:
List.copyOf/Map.copyOffor cached recipe data
Config Changes
New optional fields for cooking recipes:
custom_recipes:
- key: "my_smelt"
type: "furnace"
input: "CRYING_OBSIDIAN"
experience: 1.0
cooking_time: 200
allowed_fuels: # NEW - restrict fuel types
- COAL
- LAVA_BUCKET
result:
item: "OBSIDIAN"
amount: 1
New optional field for adjacent pair recipes:
- key: "my_pair"
type: "adjacent_pair"
items: ["DIAMOND_BLOCK", "GOLD_BLOCK"]
direction: "horizontal" # NEW - horizontal, vertical, or both (default)
result:
item: "NETHERITE_BLOCK"
amount: 1
v0.1.3
October 21, 2025
Added
- Instant recipe unlocks: players now automatically unlock custom recipes the moment they obtain any item listed in
auto_unlock_on /ls rescancommand instantly refreshes all players' recipe books without reloading the plugin- World filter improvements bring more stable handling when switching between
whitelistworldoff: true/false
Fixed
- Fixed a bug where players had to rejoin the server or restart to see newly unlocked recipes
- Fixed delayed unlocks when using
/give, crafting, or picking up trigger items - Fixed rare cases where crafting events didn't update the recipe book correctly
Improved
- Refined UnlockListener for smoother and faster detection of inventory changes
- Small cleanup and safety checks for reload and recipe validation
- Polished internal logs and better formatting for
/ls list
This version focused entirely on real-time recipe unlocking and smoother gameplay. No more relogs, no restarts.
v0.1.2
October 14, 2025
- Added full support for
world_filter: features can now be enabled globally or restricted to specific worlds - Added
adjacent_pairrecipe type: two items crafted side-by-side or vertically anywhere on the 3×3 grid produce a result - Added
auto_unlock_onfix: recipes now appear correctly in the green book once a player obtains any listed items - Added
/ls rescancommand to re-check all online players' inventories and unlock missing recipes instantly - Added
/ls fixbookcommand to clean duplicate or outdated recipe entries in players' books - Improved
/ls listoutput for better readability and detailed recipe status - Improved configuration comments and layout for a clearer, beginner-friendly setup
- Minor internal cleanup and stability improvements on Paper / Spigot 1.21.x
v0.1.1
October 13, 2025
- Added full protection for
remove_by_outputitems: blocked items can no longer be clicked, shift-crafted, or taken from the crafting table - Ingredients are not consumed, and the result slot stays empty
- Added extra safety checks for drag and result slot interactions
- Updated
/ls helpversion info to v0.1.1 - Improved overall crafting event handling for Paper & Spigot 1.21.x
v0.1.0: Initial Release
October 12, 2025
- Added support for custom shaped and shapeless recipes via
config.yml - Added
remove_by_outputto block crafting of vanilla items (e.g., TNT, TNT Minecart) - Added
auto_unlock_onso recipes appear automatically in the recipe book when a trigger item is obtained - Added
/lumensmithcommand (alias/ls)/ls help: show available commands/ls list: list blocked outputs and custom recipes/ls reload: reload all recipes and configuration
- Added beginner-friendly configuration layout with clear comments
- Added automatic replacement of vanilla recipes when custom ones use the same key
- Added colored console summary of loaded recipes
- Added permission system (
lumensmith.admin) - Fully reload-safe and compatible with Paper, Spigot, and Purpur (1.20.x – 1.21.x)
LumenSmith