Как можно предположить из названия, модуль OpenComputers добавляет в Minecraft компьютеры. Настоящие компьютеры! При этом они тоже модульные. Вы можете добавлять периферию: от мониторов до клавиатур и карт расширения, которые добавляют возможности такие как графика и сеть. И эти компьютеры могут быть запрограммированы на языке Lua, прямо в игре. И существует такой вид карт, как Интернет-карта, которая можете себе представить, может подключаться к Интернету реального мира. Неплохо.
Итак, что мы можем сделать примерно в один час свободного времени?
У меня была парочка лампочек с WiFi, правда было бы неплохо управлять ними из Minecraft? Мои wifi-лампочки — это неизвестные девайсы, найденные на eBay, которые управлялись неуклюжим мобильным приложением. Друг мой Томас сделал реверс-инжиниринг протокола и я смог контролировать их цвет и состояние через TCP на порт 5577. Итак, у меня есть все что нужно, что дальше?
Начинаем мастерить
Прежде всего, я запустил Minecraft. Далее, я сотворил новый мир в Minecraft и вошел в игру. Переключился в творческий режим, что означает что я мог вносить в игру все что хочу, и построил OpenComputers компьютер. Имеется много инструкций на этот счет, но все же разобраться как работают такие компьютеры — это заняло некоторое время. После некоторых проб и ошибок у меня был работающий компьютер и я мог создать TCP соединение с реальным миром!
Протокол используемый лампочкой довольно прост, один байт заголовка (header byte), три дополнительных байта определяющих цвет в формате RGB, и байт определяющий яркость белого (лампочка RGBW), и один байт переключающий между режимом RGB и режимом белого, и замыкающий байт (footer byte). Достаточно просто!
0x56 RED GREEN BLUE WHITE MODE 0xAA
В ванильном Minecraft есть редстоун («красная пыль»), эквивалент электричеству в нашем мире. По умолчанию, поддерживаются различные блоки такие как рычаги, поршни, компараторы, и т.д. Люди создают реально сложные конструкции используя редстоун, такие как настоящий процессор. OpenComputers компьютеры работают от редстоуна, значит мы можем считывать бинарное значение состояния майнкрафтовского рычага: «включено» или «выключено» и переключать WHITE байт чтобы включить или выключать лампочку.
Это компьютер, который я построил в игре, у него есть 6 мониторов которые составляют один большой монитор, жесткий диск и редстоуновский рычаг подключенный справа линией «красной пыли»:
Соединяем это все вместе
Итак, у нас есть компьютер, способ управлять компьютером и входящими сигналами. Мы также имеем путь и протокол для коммуникации с лампочкой. Последний элемент паззла — программа которая запуститься на компьютере и оживит всю систему. Прежде всего я заспавнил в Minecraft жесткий диск. При записи информации на жесткий диск, OpenComputers компьютер создает директорию с уникальным идентификаторов в директории файлов Minecraft. Таким образом я могу добавлять, редактировать и удалять файлы из моего компьютера на компьютере в игре.
В качестве редактора я использовал Sublime Text, на мой взгляд писать код на компьютере в игре не слишком-то удобно. И вот после некоторых исследований и ошибок, я написал следующий скрипт:
local event = require('event')
local net = require('internet')
local myEventHandlers = {}
local running = true
local con = net.open('192.168.1.110', 5577)
function myEventHandlers.key_up(address, char, code, playerName)
if (char == 'q') then
running = false
print('Goodbye ' .. playerName .. '!')
end
end
function myEventHandlers.redstone_changed(_, address, side)
local brightness = 0xff;
if side > 0 then
brightness = 0xff
else
brightness = 0x00
end
print('Sending ' .. brightness .. ' to lamp...')
con:write(string.char(0x56))
con:write(string.char(0x00))
con:write(string.char(0x00))
con:write(string.char(0x00))
con:write(string.char(brightness))
con:write(string.char(0x0f))
con:write(string.char(0xaa))
con:flush()
end
function handleEvent(eventID, ...)
local event = myEventHandlers[eventID]
if (event) then
event(...)
end
end
if con then
print('Connected to the bulb!')
end
while running do
handleEvent(event.pull())
end
Программа на Lua при исполнении реагирует на два события (events): «key_up» и «redstone_changed». Первое имеет место, когда нажимается клавиша во время работы программы, и последнее — когда получен редстоун-сигнал.
Теперь у нас есть главный цикл событий, и можно было реализовать простую логику.
Прежде всего, если нажата клавиша 'q' — программа завершается. Когда получен сигнал редстоуна, программа преобразует положение рычага в '0x00' либо '0xFF', что означает включение и выключение wifi-лампы. Пакеты передаются по каналу и лампа реагирует соответственно. Наконец, TCP подключение открывается, когда программа запускается. Просто и работает!
Ссылки:
Комментарии (18)
meft
24.11.2015 08:53-4Нет, ну я понимаю, круто и все такое но…
Раньше старались придумать способ упростить работу:
— костер
— лампады
— свечки
— лампочки с выключателем
Сейчас придумали способ включать/выключать свет через телефон.
Вместо того чтобы встать и рукой стукнуть в стенку в оптимально расположенном месте на оптимальном уровне поднятой руки, утром, или даже ночью, нужно найти телефон, который может лежать где угодно (ребенок взял поиграть), найти там приложение, открыть, ткнуть в нужную кнопочку.
Приведенный пример еще веселее. Встал я утром. Темно. Чтобы включить свет нужно включить компьютер…
Я не говорю, что это плохо. Я хочу сказать, что найденный способ нужно доводить до ума, т.е. доводить до состояния, при котором текущие задачи станет проще выполнять.
Например: свет по Wi-FI удобен только при условии, что включается он автоматически, а доступ по WiFi — это всего лишь упрощенный доступ к лампочке для автоматизации.
А что на счет приведенного Вами примера про игрушку?
Если Вы хотели рассказать про возможности самой игрушки, то зачем такое внимание коду (код не под спойлером). Если хотели показать, что свет можно включать из игрушки, то самый главный вопрос: Зачем?semenyakinVS
24.11.2015 09:48+11Если хотели показать, что свет можно включать из игрушки, то самый главный вопрос: Зачем?
Какой вы скучный… Это же просто прикольно!
neit_kas
24.11.2015 11:45Ну, зачем же только лампочкой ограничиваться? Лампочка — это, по сути, пример. Идею то можно и развить. Вот например:
- Ставим этот мод, Industrial Craft и Nuclear Control.
- Строим в майнкрафте атомный реактор и снабжаем его датчиком температуры.
- Берём arduino (или подобное) с WiFI/Ethernet и дисплеем.
- Подключаем и располагаем её где-нибудь возле компьютера.
- Далее пишем проги для arduino и майнкрафта, которые выведут информацию с датчика температуры (честно говоря, не помню, можно ли выводить само значение, но факт увелмчения температуры больше заданной константы точно можно).
Итог: вы — маинкрафт-индустриализатор уровня «про», знакомые игроки — сгорают от зависти.
Также, в плане реактора, можно развить идею на сигнализацию о перегреве. В общем, возможности ограничиваются только фантазией и возможностями плагинов (которые сейчас довольно велики).
semenyakinVS
24.11.2015 09:50+9Круто! Даёшь открытое простое API для взаимодействие из майнкрафта с реальным миром!.. Ух, представил себе только! Можно же присобачить 3Д-принтер к игре и получать оттуда посылки!
ageyev
24.11.2015 10:37+5Даёшь открытое простое API для взаимодействия с реальным миром!
That feeling that something was wrong with the world…
Knock, knock, Neo.
EvilArcher
24.11.2015 13:45+1Было бы круто увидеть такое в играх. Например, в игре взорвалось что-нибудь, а у тебя в квартире за спиной вспыхнули лампочки. Или, например, ослепили тебя в игре светом и тут же лампа светит тебе в твое реальное лицо.
Dywar
24.11.2015 20:16+1Лампочки на схеме, контроллер подключенный к ПК, служба висит и получает сигналы от игры и передает контроллеру а он меняет напряжение на лампочках. Добавить вентилятор, брызгалку воды, перчатку боксерскую для любителей активного спорта :)
VokaMut
25.11.2015 11:13«Мисье знает толк» или отличный способ заинтересовать ребёнка на его поле боя
makcums
Вот оно, будущее! Очень круто и футуристично!