lua luaj pacmine.*

Lua-плагины

Выделенный сервер можно расширять скриптами на Lua: NPC, автоответчики, мини-игры, кастомные команды — всё через один глобальный стол pacmine.

Как включить

  1. В server.properties поставь plugins=true
  2. Запусти сервер — он создаст папку plugins/ с этой же документацией внутри (README.txt)
  3. Положи в неё .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.