lua
luaj
pacmine.*
Lua-плагины
Выделенный сервер можно расширять скриптами на Lua: NPC, автоответчики, мини-игры, кастомные команды —
всё через один глобальный стол pacmine.
▶Как включить
- В
server.properties поставь plugins=true
- Запусти сервер — он создаст папку
plugins/ с этой же документацией внутри (README.txt)
- Положи в неё
.lua-файлы — они грузятся по алфавиту при старте
Только исходный текст Lua. Скомпилированный байткод .luac отклоняется — проверка идёт
не по расширению файла, а по сигнатуре \x1bLua в начале, так что просто переименовать не получится.
Ошибка в одном плагине не роняет сервер — она просто пишется в лог, и сервер работает дальше.
📖Справочник pacmine.*
Основное
| Функция | Описание |
pacmine.log(msg) | напечатать строку в консоль/server.log с префиксом [plugin] |
pacmine.say(from, text) | отправить сообщение в чат всем игрокам от произвольного имени |
pacmine.players() | таблица имён всех игроков онлайн |
pacmine.kick(name) | отключить игрока по нику, вернёт true/false |
pacmine.seed() | сид мира |
pacmine.is_infinite() | бесконечный ли мир |
События — pacmine.on(event, fn)
| Событие | Аргументы функции | Когда срабатывает |
"join" | name, premium, licensed | игрok зашёл на сервер |
"leave" | name | игрок вышел |
"block" | x, y, z, id | игрок сломал/поставил блок |
"chat" | name, text | сообщение в чате от игрока |
"tick" | seconds | раз в секунду, с момента старта сервера |
Мир и блоки
| Функция | Описание |
pacmine.get_block(x, y, z) | id блока в указанных координатах |
pacmine.set_block(x, y, z, id) | поставить блок; синхронизируется всем клиентам сразу |
pacmine.surface_y(x, z) | высота поверхности в этой колонке (первый твёрдый блок сверху + 1) |
NPC
NPC выглядят для клиентов как обычные игроки — с телом и ником над головой.
| Функция | Описание |
pacmine.spawn_npc(name, x, y, z) | создать NPC, вернёт его id |
pacmine.move_npc(id, x, y, z [, yaw]) | переместить NPC, вернёт true/false |
pacmine.remove_npc(id) | убрать NPC, вернёт true/false |
pacmine.player_pos(name) | таблица {x=, y=, z=} или nil, если игрока нет онлайн |
Id блоков
| Id | Блок | Id | Блок |
0 | воздух | 8 | уголь |
1 | трава | 9 | железо |
2 | земля | 10 | вода |
3 | камень | 11 | лава |
4 | дерево | 12 | доски |
5 | листва | 13 | печка |
6 | песок | 14 | стекло |
7 | бедрок | 16 | железный слиток (предмет, не ставится) |
✨Примеры
Приветствие при входе
pacmine.on("join", function(name, premium)
pacmine.log("Welcome, " .. name .. (premium and " *" or ""))
end)
NPC-страж на спавне, который патрулирует и здоровается
local bot = nil
local CX, CZ = 56.5, 56.5
pacmine.on("tick", function(sec)
if bot == nil then
local y = pacmine.surface_y(CX, CZ)
bot = pacmine.spawn_npc("PacBot", CX, y, CZ)
else
local a = sec * 0.5
local x = CX + math.cos(a) * 5
local z = CZ + math.sin(a) * 5
pacmine.move_npc(bot, x, pacmine.surface_y(x, z), z, math.deg(a) + 90)
end
end)
pacmine.on("join", function(name)
pacmine.say("PacBot", "Добро пожаловать, " .. name .. "!")
end)
Чат-бот, отвечающий на ключевое слово
pacmine.on("chat", function(name, text)
if text == "hello" then
pacmine.say("Parrot", "hello " .. name .. "!")
end
end)
См. также: настройка сервера — как включить plugins=true
и что ещё есть в server.properties.