Note: если каких-то изображений нет — ваш браузер не поддерживает webp. Это печально
Note 2: В конце будет листинг всего кода и файл с исходником.
База
- Minecraft 1.12.2
- Мод OpenComputers
- Мод Storage Drawers
- Сервер, на котором это всё дело будет вариться
- Бот в телеграме
Если кто не знает: OpenComputers (а так же его соперник Computer craft) — это мод, которой добавляет компьютеры, сервера и, самое главное, роботов. Все эти штуки можно программировать под свои нужды: робот-копатель, компьютер-контроллер-драконьего-реактора, . Программируются они на языке Lua.
Lua — замечательный язык — работает поверх чистого си (есть другие реализации интерпретаторов, но мы сейчас не об этом), обладает динамической типизацией, прост в освоении, даже при полном незнании никаких других языков. А ещё,в сталкере на нём скрипты пишутся, воть.
Проблема
В чём, собственно, заключается проблема? А вот: наше развитие на севере в текущей сборке подходит к концу, совсем немного остаётся изучить/попробовать. На мои плечи упал мод EnvironmentalTech. Если кто играл — знает, что там есть замечательные void-майнеры. И хотя никаких проблем с ресурсами не наблюдалось, хочется же замутить классный сетап, а если ещё там что-нибудь автоматизировать.
Майнкрафт, но робот делает всё за меня!
Ух!
Вот отсюда и растут ноги проблемы: майнеры на начальных уровнях очень медленные. И вроде бы, чёрт с этим, бери да апгрейдь, так нет — каждый следующий тир требует Кристал, который может добыть предыдущий тир.таким образом, ты не можешь с самого начала сделать себе самую крутую сборку и тащить ресурсы из воздуха. К очень маленькой скорости начальных майнеров добавляется расширение списка добываемых руд у каждого последующего тира. Таким образом, чем выше тир, тем больше разных руд; чем больше разных руд, тем меньше шанс, что Майнер добудет Кристал нужного тира.
Вот они слева направо
Мучить себя постоянными заходами на сервер не очень хочется, в конце-концов — есть другие дела, поэтому было решено дополнить сборку модом OpenComputers и сделать бота, который бы раз в час оповещал о наличии различных руд в нашей системе (я рядом с майнерами поставил контроллер из Storage Drawers и к нему присобачил кучу ящиков, чтобы автоматом сортировалось; данные ресурсы не идут в систему Refined Storage, просто стоят рядом, гыгы).
А это — сам массив ящиков
Решение проблемы
Разделим решение проблемы на три этапа:
- Создание телеграм-бота
- Создание робота на сервере
- Написание программы
1. Создание телеграм-бота
Это довольно просто:
ОН СДЕЛАЛ НАСТОЯЩЕГО РОБОТА В CREATE
Такого бота уже нет, токен не работает
Выдёргиваем токен и записываем куди-нибудь. Главное — никому его не показывать!
Note: начните диалог с ботом первым — боты не могут инициировать диалог с незнакомым пользователем
2. Создание робота на сервере
В OpenComputers роботы делаются в ассемблере.
Вот примерно такая базовая сборка у меня. Буквально — необходимый для работы минимум:
- CPU (у меня — Tier 3)
- Memory x2 (у меня — Tier 3.5)
- EEPROM (Lua BIOS)
- HDD (у меня — Tier 3)
- GPU (у меня — Tier 3)
- Inventory Upgrade
- Inventory Controller Upgrade
- Screen (только Tier 1)
- Computer Case (у меня — Tier 3)
Note: я использую Tier 3 элементы для демонстрации (и потому что ресурсов много), можно обойтись меньшим ресурсопотреблением, потому что в действительности роботу не нужно будет столько дисковой и оперативной памятию
3. Написание программы
Программу можно писать в интерфейсе робота, а можно на локальном компьютере (потом залить через copy+paster либо pastebin). Всё зависит от ваших предпочтений.
Начнём с улучшения методов ходьбы. Бот может ходить прямо/назад/вверх/вниз. Нам нужно сделать сдвиг влево/вправо (чтобы постоянно не повторяться).
— Этот импорт нам нужен для управления роботом local robot = require(«robot») . — Данная функция передвинет бота на блок враво local function right() robot.turnRight(); robot.forward(); robot.turnLeft(); end — Данная функция передвинет бота на блок влево local function left() robot.turnLeft(); robot.forward(); robot.turnRight(); end
Вернёмся к обзорному изобраажению массива ящиков и запишем, сколько у нас ящиков в ряду. В моём случае их 13.
Напишем функцию, которая будет проходить роботом по ряду и как-то с этим рядом взаимодействовать.
— Мы можем писать в виде целых чисел, но куда — удобнее пользоваться той библиотекой local sides = require(«sides») . — Данная функция пройдёт раз в направлении — и применит на каждый блок функцию local function scan_row(direction, times, fn) local mf = nil — и — это функции, которые мы описали выше if direction == sides.left then mf = left elseif direction == sides.right then mf = right end — В lua цикл for идёт [start, end], не как в C++: [start, end) — Поэтому и (хотя можно начать с 1 и проходить до times, да) for i=0,times-1 do fn() mf() end end
Почему я решил передавать функцию fn ? Потому что это делает систему более гибкой. Данную функцию можно будет просто запихать в любой другой скрипт и просто передавать нужную функцию взаимодействия.
Теперь нам нужна эта самая функция-взаимодействия.
— Библиотека взаимодействия с компонентам local component = require(«component») . — Номер слота ящика. Всегда 2 :shrug: local slot = 2 — Запишем нужный компонент в переменную, для простоты доступа local ic = component.inventory_controller — Здесь будем хранить данные о состоянии предметов в массиве local data_table = <> . — А вот и сама функция local function get_drawer_data(side) — Пытаемся получить доступ к слоту через сторону local slot_data = ic.getStackInSlot(side, slot) — Если получилось, то записываем имя [modid:itemname], надпись — и кол-во предметов в слоте, затем записываем в таблицу if slot_data then local item_data = <> item_data.name = slot_data.name item_data.label = slot_data.label item_data.size = slot_data.size data_table[slot_data.name] = item_data end end
Теперь, когда у нас есть (пока не совсем) рапорт о состоянии нашего массива ящиков, нам надо бы привести это к человеко-читаемому виду и отправить в телеграмм.
Note: os.date() возвращает текущее время с момента старта мира, не настоящее время
И в завершим скрипт функцией, которая будет объединять всё то, что написали выше.
— Почему бы не использовать глобальную переменную для цикла работы? — Можно будет придумать какое-то внешнее действие, переключающее — переменную в False, но об этом я сейчас говорить не буду local running = true . — Основная функция local function main() — Будем считать итерации — просто для удобства local iterations = 0 while running do print(«Iteraion», iterations) iterations = iterations + 1 — Можно было бы как-то по-другому сделать, но так тоже хорошо — Тут в качестве передаётся анонимная функция, которая будет вызывать — функцию получения данных из слота scan_row(sides.right, row_width, function() get_drawer_data(sides.front) end) robot.up() scan_row(sides.left, row_width, function() get_drawer_data(sides.front) end) robot.up() scan_row(sides.right, row_width, function() get_drawer_data(sides.front) end) robot.up() scan_row(sides.left, row_width, function() get_drawer_data(sides.front) end) robot.down() robot.down() robot.down() local report = form_report() send_data(report) print(«Sleeping for 1 hour. «) os.sleep(60 * 60) data_table = <> end end — И естественно — надо вызвать нашу функцию main()
Note: os.sleep(seconds) зависит от TPS сервера.
В общем-то на этом и всё. Осталось зарядить робота, залить файл (если писали не на роботе) и запустить скрипт — робот пойдёт.
После каждого прохода бот будет отправлять вам отчёт и засыпать на час.
Сообщения будут такого вида:
Блок-дополнение
- Следующая статья
- Предыдущая статья
Источник: blog.nuark.xyz
Roboticraft [1.12.2]
Roboticraft необычный способ попробовать себя в программировании прямо в майнкрафт, модификация позволит вам создавать роботов с применением чипов и управлять ими при помощи языка программирования Python.
P.S. Чтобы мод работал в системе должен быть установлен Python, в некоторых операционных системах он установлен поумолчанию.
Скриншоты
Рецепты
Как установить Roboticraft
- Скачай и установи Minecraft Forge
- Скачай архив
- Разархивируй его в .minecraftmods
- Готово
Скачать Roboticraft
https://minecraft-inside.ru/download/84134/ | 2,26 МБ | 20 мая 2018 |
Источник: minecraft-inside.ru
ComputerCraftEdu для Майнкрафт 1.8.9
Это новый способ ознакомится с вычислительным мышлением в Майнкрафте. Новый мод от создателей ComputerCraft и MinecraftEdu.
Игрок контролирует мощного, но медлительного робота-черепаху. Открываются новые возможности для исследования мира: робот может построить для вас мост из блоков через лаву.
Возводите необыкновенные структуры и учитесь программировать робота в Майнкрафт 1.8.9. Поднимите творчество в Майнкрафте на совершенно новый уровень.
Если вы новичок в программировании или имеете некоторый опыт, вам будет интересно провести время, управляя роботом-черепахой. Он будет легко добывать ресурсы, даже в труднодоступных местах.
Как установить модификацию:
Первый шаг: скачайте и установите Minecraft Forge (В лаунчере можно выбрать версию с ним).
Второй шаг: скачайте пакет с модификацией.
Третий шаг: скопируйте пакет мода ComputerCraftEdu в раздел .minecraft/mods (если данной папки не существует, установите Forge ещё раз или создайте её сами).
Источник: tlauncher.org