Create: Logic
Безопасный скриптовый язык для автоматизации Create вместо Redstone.
- Загрузчики
- NeoForge
- Скачиваний на Modrinth
- 574
- Подписчиков на Modrinth
- 3
- версий
- 11
- Обновлён
- 15 июля 202615 июл.
- Опубликован
- в 2026
Коротко о моде
Нужен и в игре, и на сервере
Автоматизация для Create с использованием собственного языка программирования под названием "Metal". Поставь компьютер, кликни правой кнопкой, введи код, нажми сохранить, shift+правый клик для переключения запуска.
Программирование: Объяви 2 системы (System — это как функция), "INIT" и "TICK" вот так:
SYSTEM(INIT): START;
код инициализации здесь
END_SYSTEM;
SYSTEM(TICK): START;
код тика (цикла) здесь
END_SYSTEM;
API: Есть несколько функций для работы с Metal.
встроенные функции:
MAKE_VAR(VAR_TYPE,$name,start_value); - создаёт глобальную переменную (глобальная переменная ДОЛЖНА начинаться с '$', ТОЛЬКО в INIT)
MAKE_ITEM_VAR($name,item_id); - создаёт переменную типа INT по числовому id предмета из minecraft (ТОЛЬКО в INIT)
SET($name,value); - задать новое значение переменной
ADD/SUB/MUL/DIV($name,value); - операции с переменными
WAIT(ms); - задержка скрипта (ТОЛЬКО в TICK)
CONTINUE(); - вернуться к началу текущей системы (ТОЛЬКО в TICK)
RERUN(); - вернуться к главной системе текущего скрипта (ТОЛЬКО в TICK), УДАЛЕНО с 0.0.7
EXIT_STACK(); - выйти из всего стека вызовов систем и вернуться к точке начала стека. УДАЛЕНО с 0.0.7
RETURN(); - выйти из 1 системы в стеке вызовов систем, с 0.0.7 может возвращать значения в вызов SYSTEM
ABORT(); - принудительно завершить текущий скрипт (не выключает компьютер)
CALL_SYSTEM(name, args...); - вызвать систему (максимальный размер стека — 16), нельзя вызывать системы-точки входа (INIT, TICK), args ТОЛЬКО в версии мода 0.0.3+, с 0.0.7 может возвращать значения
IF(condition): START; - базовый оператор IF (закрытие — "END_IF;")
ELSE(): START; - базовый оператор ELSE (между IF и END_IF), с 0.0.7 можно вызывать без "()"
BIND_ARGS_TO_SYSTEM(name, args...); ТОЛЬКО в INIT, args должны быть вида "#var:INT", задаёт аргументы для вызова системы (CALL_SYSTEM), ТОЛЬКО в версии мода 0.0.3+
MAKE_LOCAL_VAR(VAR_TYPE,#name,start_value); - создаёт локальную переменную (локальная переменная ДОЛЖНА начинаться с '#') ТОЛЬКО в версии мода 0.0.3+
ACCEPT_INVOKES(); - разрешить вызов нерезервированных систем интеграциями ТОЛЬКО в INIT, для версии мода 0.0.4+
PRINT(args...); - вывод INFO (белый) ТОЛЬКО в версии мода 0.0.6+
WARN(args...); - вывод WARN (жёлтый) ТОЛЬКО в версии мода 0.0.6+
ERROR(args...); - вывод ERROR (красный) ТОЛЬКО в версии мода 0.0.6+
EVALUATE(str); - вычисляет выражение, добавлено с 0.0.7
EVAL(code); - выполняет код как новую SYSTEM, добавлено с 0.0.7
FUNC((args),{ body }); - создаёт MetalFunction, можно вызвать через .invoke(args), добавлено с 0.0.7
CAUSE_HARD_ERROR(message); - останавливает скрипт, логирует стек и информацию в консоль. добавлено с 0.0.7
WHILE(condition, { body }); выполняется, пока условие истинно, добавлено с 0.0.7
FOR(#i,start,end, { body }); Выполняется от #i = start до end - 1, добавлено с 0.0.7
LIST(TYPE); - создаёт MetalList, лимит элементов — 1024, добавлено с 0.0.7
SET_CATCH_MODE(); ТОЛЬКО в INIT, теперь некоторые ошибки не останавливают скрипт, а просто логируются с "Error catched!", добавлено с 0.0.7.
SENDER($name,"item1", "item2"); - ТОЛЬКО в INIT, создаёт RedstoneLinker (MetalObject) в режиме отправки, лучше старого функционального метода (CONNECT_LINK_SENDER), добавлено с 0.0.7.
RECEIVER($name,"item1", "item2"); - ТОЛЬКО в INIT, создаёт RedstoneLinker (MetalObject) в режиме приёма, лучше старого функционального метода (CONNECT_LINK_RECEIVER), добавлено с 0.0.7.
MAKE_PROCESS(SYSTEM_NAME); - создаёт вторую точку входа тика, можно вызвать один раз. ТОЛЬКО в INIT. добавлено с 0.0.7.
конец встроенных функций
Java-функции (регистрируются вне Metal):
CONNECT_LINK_SENDER(id,item1,item2); - создаёт соединение передатчика (для двух последних аргументов рекомендуется использовать MAKE_ITEM_VAR, id — любое значение, раньше не использовалось), ТОЛЬКО в INIT. ПРИМЕЧАНИЕ: с 0.0.7 используй SENDER($sender,item1name,item2name) вместо этого.
CONNECT_LINK_RECEIVER(id,item1,item2); - создаёт соединение приёмника (для двух последних аргументов используй переменные MAKE_ITEM_VAR) ТОЛЬКО в INIT. ПРИМЕЧАНИЕ: начиная с 0.0.7 используй RECEIVER($receiver,item1name,item2name) вместо этого.
SEND_LINK(id,power); - отправляет питание в Create Redstone Link (используй с id, применённым в CONNECT_LINK_SENDER). ПРИМЕЧАНИЕ: начиная с 0.0.7 используй $sender.send(power) вместо этого.
RECEIVE_LINK(id); - принимает питание от Create Redstone Link (используй с id, применённым в CONNECT_LINK_RECEIVER). ПРИМЕЧАНИЕ: начиная с 0.0.7 используй $receiver.receive() вместо этого.
RANDOM(min,max); - возвращает случайный INT между min и max
RAND(); - возвращает случайный DOUBLE между 0.0 - 1.0
SIN(value); - возвращает sin значения (используй радианы)
COS(value); - возвращает cos значения (используй радианы)
TAN(value); - возвращает tan значения (используй радианы)
SQRT(value); - возвращает sqrt значения
DTR(value); - градусы в радианы
RTD(value); - радианы в градусы
GET_PI(); - возвращает PI
MIN(args...); - возвращает MIN из всех аргументов
MAX(args...); - возвращает MAX из всех аргументов
CLAMP(value,min,max); - возвращает ограниченное значение в диапазоне
ABS(value); - возвращает модуль значения
POW(value,pow); - возвращает возведение значения в степень
GET_OPS(); - возвращает выполненные операции этого скрипта - 0.0.5+
конец Java Functions;
Советы:
ADD,SUB и т.д. используются ТОЛЬКО при изменении значения например:
ADD($x,1); = x += 1;
В скобках:
IF($x + 1 > $y): START;
code
END_IF;
И, ": START" не обязателен, но рекомендуется, также можно использовать
SYSTEM(INIT); ...
IF(condition); ...
и т.д.
Текущие типы переменных: INT, DOUBLE, POWER, BOOL. Начиная с 0.0.7 - STRING, OBJECT.
TICK EntryPoint (System) выполняется в другом потоке 1000 раз в секунду.
ИНТЕГРАЦИЯ: Начиная с 0.0.4 можно вызывать нерезервированные системы из мода Computer Craft, это выглядит так: Metal: SYSTEM(INIT): START; ACCEPT_INVOKES(); BIND_ARGS_TO_SYSTEM(SUM,#first:DOUBLE,#second:DOUBLE); END_SYSTEM; SYSTEM(SUM): START; RETURN(#first + #second); END_SYSTEM; SYSTEM(TICK): START;
END_SYSTEM;
CC Lua: local metal = peripheral.find("metal"); if metal then print(metal.callSystem("SUM",5,10)); -- output: 15 else print("Cannot find Metal Computer"); end
Начиная с 0.0.5 можно использовать SYSTEM(NAME,args...): START; вместо BIND_ARGS_TO_SYSTEM
пример:
SYSTEM(SET_POWER,#f:POWER,#s:POWER): START;
SEND_LINK(1,#f);
SEND_LINK(2,#s);
END_SYSTEM;
"**" вместо "POW(val,pow);" оператор "%"
Начиная с 0.0.6, в функциях вывода можно использовать литералы, вот так:
PRINT(~Hello World);
Hello World
или, с переменной:
MAKE_VAR(INT,$test,150);
PRINT(~counter: ,$test);
counter: 150
ОБЪЕКТЫ:
MetalList: $list.add(value); $list.get(index); $list.getFirst(); $list.getLast(); $list.remove(index); $list.removeFirst(); $list.removeLast(); $list.clear(); $list.size(); $list.maxSize(); $list.hasIndex(index); $list.forEach(MetalFunction);
MetalFunction: $func.invoke(args); $func.getTypes();
RedstoneLinker: SENDER: $sender.send(power); $sender.toggle(active); RECEIVER: $receiver.receive(); $receiver.isActive();
начиная с 0.0.8 переменные можно присваивать так:
TYPE $global_var = ...;
TYPE #local_var = ...;
изменение:
var++; (инкремент)
var--; (декремент)
var+=...; (сложение)
var-=...; (вычитание)
var%=...; (остаток)
var*=...; (умножение)
var/=...; (деление)
var**=...; (возведение в степень)
var=...; (присваивание)
Частые вопросы
Как установить Create: Logic?
Установите NeoForge под свою версию Minecraft, скачайте Create: Logic под ту же версию и загрузчик, положите файл в папку mods и запустите игру с профилем загрузчика.
Для каких версий Minecraft есть Create: Logic?
У Create: Logic есть сборки для Minecraft 1.21.1.
Нужен ли Create: Logic на сервере?
Нужен и в игре, и на сервере