LuaMine 1.3
Крупный релиз по стабильности и функционалу. LuaMine прошёл через несколько
бета-циклов доработки (утечки памяти, потокобезопасность, защита от зависших
скриптов) и получил большой пакет новых возможностей — это первая версия, которую мы
называем Stable.
Добавлено
- Fluent-билдер команд:
mc.command(name):execute():description():usage():tabComplete():permission():register() — добавляет автодополнение и команды с проверкой прав. mc.registerCommand(...) по-прежнему работает без изменений для простых случаев.
require("json") — кодирование/декодирование Lua-таблиц в/из JSON, плюс json.save(name, table) / json.load(name) для сохранения данных в plugins/LuaMine/config/.
- Работа с миром:
mc.setBlock(x, y, z, type), mc.getBlock(x, y, z), mc.spawnEntity(type, x, y, z).
player:giveItem(item, amount), player:hasItem(item, amount).
mc.hasPermission(sender, node).
- 12 новых событий:
onPlayerDeath, onPlayerRespawn, onPlayerQuit, onBlockPlace, onEntityDeath, onInventoryClick, onWeatherChange, onWorldChange, onSneakToggle, onItemMend, onPickup, onDrop.
- Защита от зависших скриптов — скрипт, ушедший в бесконечный цикл или зависание, теперь прерывается автоматически вместо подвисания всего сервера.
Исправлено
- Серьёзная утечка памяти при
/minelua reload — запланированные таймеры (Minecraft.wait) и зарегистрированные команды продолжали работать со старым, уже отброшенным состоянием скриптов после каждого reload, накапливаясь со временем. Теперь reload корректно их заменяет.
- Команды, зарегистрированные через
mc.registerCommand/mc.command, теперь надёжно отражают актуальную версию скрипта при каждом reload.
- Исправлена гонка в обработке чата —
onChat теперь безопасно выполняется в основном потоке, а не конкурирует с остальными событиями скриптов.
- Снижена нагрузка на сборщик мусора на частых событиях (
onPlayerInteract, onBlockBreak) — объект игрока больше не пересоздаёт свои методы при каждом вызове.
- Исправлена ситуация, когда
Minecraft.getName/kick/sendMessage тихо не срабатывали (возвращали "Unknown" / ничего не делали) при вызове с объектом игрока из колбэка события.
- Аддоны, зависящие от LuaMine (например
require("re2")), теперь гарантированно готовы к моменту первой загрузки скриптов, а не соревнуются с порядком запуска плагинов.
Безопасность
- Убран
LuaMineAPI.loadScript() — он позволял любому установленному плагину внедрять произвольный Lua-код в окружение LuaMine без какой-либо проверки источника. Для открытия Java-функциональности скриптам используйте
registerFunction/
registerModule.
Известное ограничение
- Команда, однажды зарегистрированная за текущую сессию сервера, продолжает предлагаться в автодополнении и отображаться в
/help, даже если скрипт перестал её определять — при этом она корректно сообщает о своей недоступности при попытке выполнения. Это осознанный компромисс ради надёжного обновления команд на Paper.