ComputerCraft Wake Nodes
Мод для Forge, добавляющий wake-узлы для компьютеров CC: Tweaked с динамическим управлением загрузкой чанков, позволяющий удалённо будить далёкие компьютеры CC.
- Загрузчики
- Forge
- Скачиваний на Modrinth
- 1 тыс.
- Подписчиков на Modrinth
- 2
- версии
- 2
- Обновлён
- 16 апреля 202616 апр.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
ComputerCraft Wake Nodes
ComputerCraft Wake Nodes — это мод для Forge на Minecraft 1.20.1, добавляющий небольшую сеть загрузки чанков для компьютеров CC: Tweaked (ComputerCraft), особенно полезную для автоматизации.
Он добавляет три периферийных устройства ComputerCraft:
wake_node: прикрепляется к компьютеру ComputerCraft и регистрируется под строковым ID, фактически выполняя роль загрузчика чанков.wake_node_advanced: улучшенная версияwake_node, позволяющая пользователю выбрать загружаемую область (1×1, 3×3 или 5×5 чанков).wake_controller: используется другим компьютером для просмотра списка, загрузки, выгрузки и проверки зарегистрированных узлов.
Основной сценарий использования — пробуждение удалённых компьютерных установок на время, достаточное для загрузки и тика их чанка, чтобы их логика запуска могла выполниться.
Также добавляет Wake Chip — компонент для крафта, используемый другими блоками.
Если установлен Create, предоставляются пользовательские рецепты Create для Wake Chip, Wake Node, Advanced Wake Node и Wake Controller.
Возможности
- Регистрация удалённых точек пробуждения путём прикрепления Wake Node к компьютеру ComputerCraft.
- Загрузка чанка удалённого компьютера по требованию с Wake Controller.
- Постоянная загрузка чанков до ручной выгрузки либо временная с автоматическим тайм-аутом.
- Сохранение регистраций узлов между перезапусками сервера.
- Кратковременность загрузки чанков: загруженные чанки не восстанавливаются автоматически после перезапуска.
- Простой API ComputerCraft для обоих блоков.
Требования
- Minecraft 1.20.1
- Forge 47.2.0+
- Java 17
- CC: Tweaked 1.108.4+
Добавленный контент
Wake Chip
Компонент для крафта, используемый другими блоками.
Рецепт:

Креативная вкладка: Ingredients
Wake Node
Тонкий периферийный блок, который необходимо разместить непосредственно вплотную к блоку компьютера CC: Tweaked.
Что он делает:
- предоставляет тип периферии
wake_node - хранит ID узла, назначенный из Lua
- регистрирует измерение и чанк прикреплённого компьютера в постоянном реестре
- автоматически ломается, если поддерживающий его компьютер удалён
Важное правило размещения:
- размещение отклоняется, если опорный блок не является блоком компьютера ComputerCraft
Рецепт:

Креативная вкладка: Functional Blocks
Advanced Wake Node
Улучшенный Wake Node, позволяющий пользователю выбрать загружаемую область вокруг прикреплённого компьютера:
- 1×1 — 1 чанк (так же, как у базового Wake Node)
- 3×3 — 9 чанков
- 5×5 — 25 чанков
Он наследует все возможности базового Wake Node и добавляет методы setRange(), getRange() и listAvailableRanges().
Рецепт (та же форма, что у Wake Node, но с незеритом вместо железа):

Креативная вкладка: Functional Blocks
Wake Controller
Периферийный блок, используемый компьютером-контроллером для управления зарегистрированными узлами пробуждения.
Что он делает:
- предоставляет тип периферии
wake_controller - выводит список зарегистрированных узлов
- загружает и выгружает чанки узлов
- сообщает, загружены ли узлы в данный момент и сколько времени осталось у временных загрузок
Рецепт:

Креативная вкладка: Functional Blocks
Как это работает
- Разместите Wake Node на грани компьютера CC: Tweaked.
- На этом компьютере вызовите
setId("some_name")у периферииwake_node, чтобы зарегистрировать узел.
Компьютер, выполнивший эту регистрацию, становится владельцем узла. - Авторизуйте компьютеры-контроллеры с помощью
grantController(computerId). - Разместите Wake Controller рядом с другим компьютером.
- С авторизованного компьютера-контроллера вызовите
loadNode("some_name")илиloadFor("some_name", seconds).
Загруженный чанк — это чанк компьютера, а не чанк блока Wake Node.
У каждого узла есть компьютер-владелец и список контроля доступа (ACL) из ID компьютеров-контроллеров, которым разрешено управление.
Методы контроллера работают только с теми узлами, которыми вызывающему компьютеру разрешено управлять.
Регистрации узлов сохраняются, а активные принудительно загруженные чанки — нет. После перезапуска сервера узлы всё ещё есть в реестре, но ни один из них не остаётся загруженным, пока его не запросят снова.
ComputerCraft API
Типы периферии
- Тип периферии Wake Node:
wake_node - Тип периферии Advanced Wake Node:
wake_node_advanced - Тип периферии Wake Controller:
wake_controller
API Wake Node
Найти периферию можно стандартными вызовами ComputerCraft, например:
local wake = peripheral.find("wake_node")Более компактная версия документации по API есть в файле API.md на GitHub.
setId(id)
Регистрирует этот Wake Node под указанным строковым ID.
idдолжен быть непустой строкой- при первой успешной регистрации вызывающий компьютер становится владельцем узла
- если тот же ID уже зарегистрирован на этом же узле, вызов принимается
- если ID уже используется другим узлом, вызов вызывает ошибку
Пример:
local wake = peripheral.find("wake_node")
assert(wake, "wake_node not found")
wake.setId("remote_factory")grantController(computerId)
Разрешает компьютеру-контроллеру с указанным ID управлять этим узлом.
- этот метод может вызывать только компьютер-владелец
computerIdдолжен быть положительным целым числом- идемпотентно: повторное разрешение того же ID принимается
revokeController(computerId)
Удаляет ID компьютера-контроллера из списка разрешённых для этого узла.
- этот метод может вызывать только компьютер-владелец
- идемпотентно: отзыв отсутствующего ID принимается
listControllers()
Возвращает отсортированный список ID авторизованных компьютеров-контроллеров.
getPermissions()
Возвращает владельца и ACL контроллеров для этого узла:
{
owner = 17,
controllers = { 42, 73 }
}getId()
Возвращает текущий ID узла или nil, если он ещё не назначен.
Пример:
print(wake.getId())getChunk()
Возвращает таблицу с описанием чанка подключённого компьютера:
{
dimension = "minecraft:overworld",
chunk_x = 12,
chunk_z = -4
}getInfo()
Возвращает таблицу с ID узла и информацией о чанке:
{
id = "remote_factory",
dimension = "minecraft:overworld",
chunk_x = 12,
chunk_z = -4
}Если ID ещё не назначен, id возвращается как пустая строка.
API Advanced Wake Node
Advanced Wake Node предоставляет тип периферии wake_node_advanced. Он наследует все методы базового Wake Node и добавляет следующее:
local wake = peripheral.find("wake_node_advanced")setRange(size)
Задаёт загружаемую область вокруг компьютера.
sizeдолжен быть1,3или5- этот метод может вызывать только владелец узла
- если узел сейчас загружен, набор чанков обновляется на лету (если это не отключено в конфиге)
- вызывает ошибку, если диапазон превышает серверный максимум или вызывающий не является владельцем
Пример:
wake.setRange(5) -- загрузить область 5×5 (25 чанков)getRange()
Возвращает текущий размер диапазона (1, 3 или 5).
print(wake.getRange()) -- 3listAvailableRanges()
Возвращает массив допустимых значений диапазона на основе конфигурации сервера.
local ranges = wake.listAvailableRanges()
-- { 1, 3, 5 }getInfo() (переопределён)
Возвращает ту же таблицу, что и базовый getInfo(), плюс два дополнительных поля:
{
id = "remote_factory",
dimension = "minecraft:overworld",
chunk_x = 12,
chunk_z = -4,
range = 3,
loaded_chunks = 9
}API Wake Controller
Найди периферию стандартными вызовами ComputerCraft, например:
local ctl = peripheral.find("wake_controller")listNodes()
Возвращает список ID зарегистрированных узлов, доступных вызывающему компьютеру-контроллеру.
Пример:
for _, id in ipairs(ctl.listNodes()) do
print(id)
endgetNodeInfo(id)
Возвращает информацию об узле для доступного узла.
Выбрасывает ошибку, если узел не существует или если вызывающий контроллер не авторизован.
Возвращаемая таблица:
{
id = "remote_factory",
dimension = "minecraft:overworld",
chunk_x = 12,
chunk_z = -4,
loaded = false,
expires_at = 90
}Примечания:
loaded— булево значениеexpires_atприсутствует только для временных загрузокexpires_atуказывается в оставшихся секундах, а не как абсолютная метка времени
loadNode(id)
Принудительно загружает чанк узла бессрочно, пока не произойдёт одно из следующего:
- вызван
unloadNode(id) - вызван
unloadAll() - сервер остановлен
Выбрасывает ошибку, если узел не существует.
Также выбрасывает ошибку, если вызывающий контроллер не авторизован для этого узла.
loadFor(id, seconds)
Принудительно загружает чанк узла на ограниченное число секунд.
secondsдолжно быть положительнымsecondsне должно превышать настроенноеmax_load_duration_seconds
Выбрасывает ошибку, если узел не существует или длительность недопустима.
Также выбрасывает ошибку, если вызывающий контроллер не авторизован для этого узла.
unloadNode(id)
Выгружает указанный узел, если он сейчас загружен.
unloadAll()
Выгружает все текущие загруженные узлы, доступные вызывающему контроллеру.
isNodeLoaded(id)
Возвращает true, если узел сейчас загружен, иначе false.
Выбрасывает ошибку, если вызывающий контроллер не авторизован для этого узла.
getLoadedNodes()
Возвращает список ID текущих загруженных узлов, доступных вызывающему контроллеру.
Пример настройки
Удалённый компьютер
Присоедини Wake Node к компьютеру и зарегистрируй его:
local wake = peripheral.find("wake_node")
assert(wake, "wake_node not found")
wake.setId("remote_factory")
wake.grantController(42) -- controller computer ID
print(textutils.serialize(wake.getInfo()))Компьютер-контроллер
Загрузи удалённый чанк на две минуты:
local ctl = peripheral.find("wake_controller")
assert(ctl, "wake_controller not found")
print("Known nodes:")
for _, id in ipairs(ctl.listNodes()) do
print(" - " .. id)
end
ctl.loadFor("remote_factory", 120)
print(textutils.serialize(ctl.getNodeInfo("remote_factory")))Конфигурация
Ключи серверного конфига:
chunk_loading.max_loaded_nodes: максимальное число узлов, которые могут быть загружены одновременно. По умолчанию:16chunk_loading.max_load_duration_seconds: максимальная длительность, принимаемаяloadFor. По умолчанию:300chunk_loading.default_load_radius: радиус чанков вокруг целевого компьютера.0означает только собственный чанк компьютера. По умолчанию:0chunk_loading.chunk_ops_per_tick: максимальное число операций загрузки/выгрузки в очереди, обрабатываемых за каждый тик сервера. Меньшие значения сглаживают скачки, но пробуждают узлы медленнее. По умолчанию:3
Ключи общего конфига:
logging.enable_node_logs: включает сообщения в логе сервера для событий регистрации, загрузки, выгрузки и истечения срока. По умолчанию:true
Примечания по поведению
- Регистрации разделяются через реестр уровня мира.
- У каждого узла есть ID компьютера-владельца и ACL из ID авторизованных компьютеров-контроллеров.
- Методы контроллера работают только с узлами, которыми вызывающий контроллер авторизован управлять.
- Если Wake Node сломан, его регистрация удаляется.
- Если поддерживающий компьютер удалён, Wake Node ломается автоматически.
- Временные загрузки чанков истекают на тике сервера и очищаются автоматически.
- При остановке сервера все активные тикеты чанков освобождаются.
Примеры скриптов
В репозитории есть примеры скриптов на Lua в sampleScripts/recallCreateTrains/, показывающие, как Wake Nodes могут будить удалённые компьютеры станций Create и координировать отзыв поездов через Rednet.
Лицензия
Код распространяется по лицензии MIT.
Некоторые входящие в комплект ресурсы (текстуры) распространяются по ComputerCraft Public License v1.0.0 (CCPL).
Подробности смотрите в файлах LICENSE и LICENSE-CCPL на GitHub.
Частые вопросы
Как установить ComputerCraft Wake Nodes?
Установите Forge под свою версию Minecraft, скачайте ComputerCraft Wake Nodes под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть ComputerCraft Wake Nodes?
У ComputerCraft Wake Nodes есть сборки для Minecraft 1.20.1–1.20.6.
Нужен ли ComputerCraft Wake Nodes на сервере?
Нужен и в игре, и на сервере