- **Breaking Change: `PlayerInventory` restructured** ([#40](https://codeberg.org/mickkay/Wizards-of-Lua-Fabric/issues/40))
- Item slots moved from the inventory object itself into a new `slots` table: `inventory[i]` is now `inventory.slots[i]` (indices 0–40, copy semantics unchanged, assign `nil` to clear a slot).
- `PlayerInventory.selectedSlot` was renamed to `PlayerInventory.selected`.
- **Migration:**
```lua
-- Before:
local item = player.inventory[20]
player.inventory[20] = item
player.inventory.selectedSlot = 3
-- After:
local item = player.inventory.slots[20]
player.inventory.slots[20] = item
player.inventory.selected = 3
```
- **Breaking Change: `Spell:sleep()` removed** ([#28](https://codeberg.org/mickkay/Wizards-of-Lua-Fabric/issues/28))
- Sleeping is only meaningful for the running spell, so the method was removed from `Spell` and can no longer be called on a foreign spell. Use the global `sleep(ticks)` instead, which behaves as before.
- **New: `Server.dedicated`** ([#37](https://codeberg.org/mickkay/Wizards-of-Lua-Fabric/issues/37))
- Read-only boolean, `true` on a dedicated server and `false` on an integrated server (singleplayer or LAN).
- **New: Magic Hoe example**
- A chain-harvesting tool that intercepts `BeforePlayerBlockBreakEvent` and flood-fills through a connected wheat field. Installed by `/wol extract examples`; see `examples/magic-hoe/MagicHoe.md`.
- **Change: `/wol extract examples` no longer overwrites existing files**
- The command now refuses to extract into a non-empty target directory instead of silently deleting player-placed files. Use `/wol extract examples overwrite` to force the previous behaviour.
- **Fix: `%v` placeholder in dynamic commands shifted integer X/Z coordinates by +0.5** ([#39](https://codeberg.org/mickkay/Wizards-of-Lua-Fabric/issues/39))
- **Fix: `MobEntity:startFollowPathTo(target)` did not move the mob when `targetRadius` was omitted**
- The default `targetRadius` was 50, which made the pathfinder treat any target within 50 blocks as already reached. The default is now 1 (vanilla convention).
- `targetRadius`, `searchRange`, and `speed` are now documented as optional with their defaults (1, 50, 1).
- **Fix: `World.time` stopped advancing when the `advance_time` gamerule was off (MC 26.x only)**
- The 26.x port had mapped `World.time` to the day clock instead of game time. It is now the game-tick counter again, as on the 1.21.x versions. `World.timeOfDay` is unchanged.
Developer information
Projects on Modrinth are automatically available through a Maven repository for use with JVM build tools such as Gradle.
maven { name = "Modrinth"; url = "https://api.modrinth.com/maven" }