- Fix:
LuaEntity.namenow returnsgetName().getString()as intended. - Fix:
Vec3:floor()now correctly converts all components to integers.
-
Fix
/wol extract examples:
Modified files from the extracted Journey example are now loaded correctly. Previously, the mod loaded the bundled copy from the JAR instead of the filesystem, so user edits had no effect. -
Fix (Journey Mini-Game):
- The Journey spell now terminates properly when a player disconnects from the server.
- Disabled verbose log output by default in the Journey mini-game.
You can re-enable it by editingconfig/wizards-of-lua/examples/journey/log_extensions.logand settinglogEnabled = true.
- New Command for Extracting Examples
/wol extract examplespopulatesconfig/wizards-of-lua/examples/with example projects; currently includes the mini-game “Journey.”- After extraction run
/wol startupto register the example’s dynamic commands.
- Command Changes
- Extraction syntax updated: use
/wol extract api(replaces the old/wol extract-api).
- Extraction syntax updated: use
- New Fields on
SpelltickLimit— Per-tick execution budget (in Lua operations). Default 50,000; higher values do more work per tick (potential TPS impact), lower values yield more often for smoother pacing.biome— read-only biome ID atspell.pos(e.g.,"plains","forest"); updates as the spell moves.
- Fix: Resolved a NullPointerException in
Spell:copyStructure(oppositeCorner [, includeEntities, ignoreBlockId])whenignoreBlockIdwas not specified.
-
Fix:
LivingEntity:getItemInHand(hand)no longer throws a NullPointerException when the specified hand is empty. -
API Docs: Adjusted example code that handles NBT data to use the new Minecraft 1.21.5 NBT syntax in:
BlockEntityEntityItemSpell
-
Note: Run
/wol extract-apito update theconfig/wizards-oflua/apifolder with the latest API documentation.
- Fix: Setting
spell.visible = trueno longer throws an exception.
-
New Function:
Server:getWorld(dimension)
Returns a reference to theWorldfor the given dimension name (e.g.,"the_nether","overworld"). -
New Property:
Spell.id
Read-only numeric ID of the spell. -
Updated Methods:
Spell:execute(...)andSpell:executeSilent(...)
Both now return the command result value (typically the number of affected entities/blocks). -
Fix:
World:isLoaded(pos)
Corrected a bug where this function could incorrectly returntruein some cases; behavior now matches the documentation. -
Fix:
EventInterceptor:stop()
This method now actually stops the interceptor from receiving further events. -
New Events
Added hooks to observe or intercept more gameplay actions:
AfterLivingEntityDamageEvent,BeforeLivingEntityDamageEvent,EntityDespawnEvent,EntitySpawnEvent,PlayerAttackBlockEvent,PlayerChangeWorldEvent,PlayerDisconnectedEvent,PlayerDropSelectedItemEvent,PlayerUseEntityEvent.
- New Field:
Server.players
APlayer[]@Read-Only list of references to all currently online players. - New Function:
Player:sendCommandTree()
Sends the current command tree to the player's Minecraft client, forcing Brigadier to rebuild and resend the set of available commands (useful after permission changes). - Dynamic Commands: permission-based suggestion filtering
Fixed an issue where Brigadier suggestions for dynamic commands could appear even if the player lacked permission. Suggestions are now correctly filtered by the player’s permission level. Thanks to Nurio for reporting this issue.
-
Docs: Field Annotations Reviewed (revised)
Re-reviewed and updated documentation for every field to ensure clarity on whether accessing a value returns a reference or a copy. No fields missing this time. -
Fix: Client crash upon dropping an item (#21)
Resolved the crash that occurred when dropping an item on the client. Thanks to Nurio for reporting this issue.
-
Docs: Class Section Formatting
Updated all API docs so that each class description appears above the---@classtag, in accordance with our documentation standards. -
Docs: Field Documentation Reviewed
- Reviewed and revised documentation for every field to clearly indicate whether accessing it returns a reference or a copy.
- Added missing
@Read-Onlytags for all immutable properties.
-
Docs: Example Code
Added more illustrative code snippets throughout the API docs to demonstrate common usage patterns and clarify behavior. -
Note: Run
/wol extract-apito update theconfig/wizards-of-lua/apifolder with the latest API documentation.
-
Dynamic Commands: New Enum-String Placeholder
Added support for an enum-string placeholder (%s[opt1|opt2|…]) that restricts string inputs to a given set, enabling built-in tab-completion and automatic validation of allowed values. -
Standard
ioModule Support
Wizards of Lua now officially supports Lua’s standardiomodule, allowing scripts to create, read, and update files in the server’s world folder. -
New Class:
Structure
Represents a captured box-shaped region of the world. -
New Class:
Server
Provides server-level operations:Server:loadStructure(name)— Load a savedStructureby name.Server:saveStructure(name, structure)— Save aStructureto disk.
-
New Functions on
SpellSpell:copyStructure(oppositeCorner [, includeEntities, ignoreBlockId])— Captures a box-shaped region into aStructureobject.Spell:pasteStructure(structure [, originPos, ignoreBlockIds])— Pastes aStructureat the spell’s position.Spell:setYaw(direction)— Sets the spell’s yaw to face a given compass direction ("north","south","west","east").
-
New Properties on
SpellSpell.facing— Read-only compass direction the spell is oriented toward ("north","east","south","west").Spell.server— Reference to theServerobject for accessing server-level operations (filesystem, version, structures).
-
Updated Method:
Spell:move
Now accepts relative directions ("forward","back","left","right") in addition to absolute directions to execute relative movement. -
New Property:
Entity.facing
Exposes the entity’s current compass direction. -
New Event:
SpellFinishEvent
Fired immediately before a spell completes execution, allowing interceptors to perform cleanup tasks. -
Refactoring:
Under-the-hood refactoring of the internal spell lifecycle management for improved stability and consistency.
-
New Feature: Dynamic Commands
Register, inspect and remove custom commands at runtime via theWizardsOfLuamodule API:WizardsOfLua.setCommand({ id, level, pattern, code })to add a command.WizardsOfLua.listCommands()to list all dynamic commands.WizardsOfLua.removeCommand(id)to unregister a command.
Patterns use Brigadier-style syntax with named or unnamed placeholders—see the API docs for full details and examples.
-
Fix: PrintRedirector & LogRedirector now strip carriage return characters from their output.
-
Fix: Wol commands updated to include intermediate permission checks.
-
Fix: Examples section: bug in Auto-Toggle Gamemode Field fixed.




