COWMODSКаталог модов

Wizards of Lua

Unlock the Magic of Lua Scripting in Minecraft 🌟 WoL adds the /lua command, allowing you to cast spells and interact with the game using the Lua programming language.

Автор: mickkay5,8 тыс.22обновлён 15 окт. 2026 г.
Механики игрыБиблиотекиУтилиты

Описание

Wizards of Lua is a server-side Fabric mod that lets you write spells in Lua and cast them inside Minecraft. No Java or modding experience needed, no server restarts, no client mods.

Type a one-liner in the chat to change something on the spot:

/lua spell:move("down"); spell.block = Block:new("gold_block")

Turns the block at your feet into gold.

Or start a long-running spell that reacts to everything happening in your world:

/lua require "midas"

Starts the spell in config/wizards-of-lua/midas.lua which turns every block a player hits into gold:

local queue = spell:collect("PlayerAttackBlockEvent")
while true do
  local event = queue:next()
  spell.pos = event.pos
  spell.block = Block:new("gold_block")
end

Browse the Examples to see what else you can build with a few lines of Lua.

Get Started

The Quickstart Video walks you through installing the mod and casting your first spell in under two minutes. The Getting Started Guide covers the same ground in writing, and goes on from there.

What You Can Do

  • Run Lua in-game: Cast spells with the /lua command, either as inline code or from files in config/wizards-of-lua. Edited files are recompiled the next time they're used, so no server restart is needed.
  • Change the world: Place blocks, summon mobs, edit items and entities, all through an extensive Lua API.
  • Give mobs orders: Send any mob walking to a spot, following or fleeing from someone, standing guard or attacking a target. An order only borrows the mob's attention: when it's done, the mob goes back to its own business.
  • Play with bots: Spawn bot players that join like real players and that spells control: they walk, fight, dig, build and chat, so you can play-test a mini-game alone or have companions at your side.
  • React to events: Respond when players join, break blocks or swing tools, and cancel or extend what happens next.
  • Add your own commands: Register Brigadier commands at runtime, with typed arguments and auto-completion.
  • Code with autocompletion: Write spells in Visual Studio Code with full type support.
  • Stay in control: Spells run on a per-tick budget and yield automatically, so a busy spell doesn't freeze your server. Access is controlled by permission levels and nodes, compatible with LuckPerms. Use /wol spell list all to see what's running and /wol spell break all to stop it.
  • Install on the server only: Works in singleplayer and multiplayer. Players don't need to install anything.

What People Build

  • Safe zones where PvP is disabled
  • Minecarts that climb ladders
  • A magic wand that strikes hostile mobs with lightning
  • A spider bodyguard that stays at your side and attacks whoever hurts you
  • Piglin guards who hold their posts against hostile mobs without chasing them too far
  • A squire, a bot player who follows you, fights at your side behind its shield, and holds a spot when you tell it to
  • A piglin miner who digs a tunnel, lights it with torches, and fetches a fresh pickaxe from a chest when his breaks
  • A lumberjack spell that makes the whole tree fall when any player breaks a single log
  • A magic hoe that harvests a whole wheat field with one swing
  • Mini-games like Journey

Versioning

Versions follow the format MAJOR.MINOR.PATCH-MCVERSION, for example 7.0.0-1.21.11. The first part follows Semantic Versioning and describes compatibility with your scripts. The part after the - is the Minecraft version.

Updates that raise MINOR or PATCH are safe. If MAJOR increases, check the changelog first, because your scripts may need changes.

Learn More

This mod is a complete rewrite for Fabric of the original Wizards of Lua for Forge, which is no longer maintained. The two APIs differ, and scripts written for the Forge version won't run unchanged.

New here? Watch the Quickstart Video, then find guides, examples and the full API reference at wizards-of-lua.net.

Галерея

Editing Spells

Последние версии

Все версии →
release

Wizards of Lua 7.0.0-26.3

7.0.0-26.3
15 окт. 2026 г.138Minecraft: 26.3fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-26.2

7.0.0-26.2
15 окт. 2026 г.28Minecraft: 26.2fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-26.1.2

7.0.0-26.1.2
15 окт. 2026 г.26Minecraft: 26.1.2fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-26.1.1

7.0.0-26.1.1
15 окт. 2026 г.10Minecraft: 26.1.1fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-1.21.11

7.0.0-1.21.11
15 окт. 2026 г.60Minecraft: 1.21.11fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-1.21.10

7.0.0-1.21.10
15 окт. 2026 г.4Minecraft: 1.21.10fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-1.21.9

7.0.0-1.21.9
15 окт. 2026 г.4Minecraft: 1.21.9fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-1.21.8

7.0.0-1.21.8
15 окт. 2026 г.6Minecraft: 1.21.8fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-1.21.7

7.0.0-1.21.7
15 окт. 2026 г.6Minecraft: 1.21.7fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**
release

Wizards of Lua 7.0.0-1.21.6

7.0.0-1.21.6
15 окт. 2026 г.2Minecraft: 1.21.6fabric
Скачать
Что нового
- **Breaking Change: Structures save and load themselves: `structure:save` and `Structure:load`** - They replace `Server:saveStructure` and `Server:loadStructure`. The returned path has "/" between the folders on every system. ```lua struct:save("mickkay:tower") -- before: spell.server:saveStructure("mickkay:tower", struct) local loaded = Structure:load("mickkay:tower") -- before: spell.server:loadStructure("mickkay:tower") ``` - **Breaking Change: A skin is a `Skin` object** - `player.skin` is the `Skin` a player wears (`nil` for a default skin), no longer an account name. Assign a `Skin` to put it on, `nil` for a default skin. `Player:setSkin` and `Player:getSkin` are gone. - `Skin:lookup(account)` gets an account's skin from Mojang; `skin:save(path)` and `Skin:load(path)` keep it in the world folder. ```lua local skin = Skin:lookup("jeb_") -- before: player:setSkin("jeb_") if skin then player.skin = skin end ``` - **Breaking Change: `MobEntity.lookAt` is now `MobEntity.watchTarget`** - `lookAt` is now a function that turns any entity once, see below. - **Breaking Change: A mob's attack task counts `task.hits` and `task.shots` apart** - `task.hits` counts the hits that hurt the target, `task.shots` the shots fired. `task.hits` counted both. - **Breaking Change: `ChatMessageEvent` also fires for `/say` and `/me` of anyone** - `evt.sender` is the `Entity` or `Spell` that sent the message (`nil` for a command block or the console), not always a player. New: `evt.senderName` and `evt.kind` ("chat", "say" or "emote"). - **New: Bot players: players without a client that spells control** - `Bot:spawn(name, pos)` makes a bot that joins like a player, so every event fires as for a player. Use bots to play-test a mini-game, or as companions. - A bot acts like a player at the keyboard. Tasks let it walk along paths it finds, follow, flee, fight, stay, break and place blocks, and fill or empty containers. `BotMessageEvent` and `BotSoundEvent` tell what it sees and hears. See [Bot](https://wizards-of-lua.net/api/Bot/). - **New: The Squire example** - A bot that follows you, fights at your side and holds a spot: `/squire hire <name>`. - **New: `Entity:lookAt(target)` turns any entity once to a position or another entity** - `spell:lookAt` takes an entity too. - **New: `Player.flying` tells and sets whether a player flies** - **New: An interceptor doesn't get the events it causes itself** - So a callback that answers each chat message in the chat doesn't call itself without end. - **Fix: The Journey example works on Minecraft 1.21.5, and `/journey cancel` says when there is no journey to cancel** - **Fix: An invalid value for `sneaking` names `sneaking` in the error message**