Рубрики: Творчество

Как достучаться до реальности из Майнкрафта

Недавно я снова начал играть в Майнкрафт. Обычный Майнкрафт кажется мне скучноватым, поэтому я всегда обращаюсь к наборам модов — модпакам. После поиска новых модпаков, я наткнулся на FT Horizons: Daybreaker. Взглянув на список модов, входящих в набор, я сразу обратил внимание на OpenComputers.

Как следует из названия, OpenComputers добавляет в Майнкрафт компьютеры. Настоящие компьютеры! И кучу модулей к ним. Можно добавлять периферийные устройства от мониторов и клавиатур, до карт расширения, таких как графические и сетевые карты. А ещё они могут выполнять, прямо в игре, программы написанные на языке Lua. Одна из карт расширения — это Internet-карта, которая, как Вы могли догадаться, может осуществлять связь с настоящим интернетом. Восхитительно.

Чего же мы можем сделать приблизительно за один час свободного времени? У меня есть пара WiFi-ламп, разве было бы плохо получить возможность управлять ими через Minecraft? Мои WiFi-лампы — это неизвестные устройства, купленные на eBay, которые используют для управления  отвратительное мобильное приложение. Мой друг Томас разобрался с тем как они работают, и я получил возможность управлять их цветом и состоянием по протоколу TCP через порт 5577. У меня есть всё, что мне нужно и… что дальше?

Не бойтесь запачкать руки

В первую очередь я запустил Майнкрафт. Потом я создал новый мир и вошёл в игру. Переключившись в творческий режим, что означает что я могу создавать в игре любой предмет или блок, который мне нужен, я построил компьютер из мода OpenComputers. По этому поводу есть много обучалок, так что пришлось потратить время на изучение того, как оно работает.  После нескольких неудач я смог установить TCP-соединение с реальным миром!

Протокол, используемый лампами очень простой. Один байт заголовка, три дополнительных байта, определяющих RGB-цвет и байт, описывающий яркость белого (это RGBW-лампа), один байт описывающий переключение между RGB и белым, а также заключительный байт. Действительно просто!

0x56 RED GREEN BLUE WHITE MODE 0xAA

В обычном Майнкрафте есть редстоун, своеобразный аналог электричества в нашем мире. По умолчанию, поддерживаются различные блоки, такие как: рычаги, поршни, компараторы и т.п. С их помощью можно создавать по-настоящему сложные схемы, такие как процессоры. Компьютеры из OpenComputers работают при помощи RedStone, так что мы можем очень просто считывать двоичное состояние обычного Майнкрафт-рычага — включен/выключен для того чтобы включать или выключать WiFi-лампу.

Вот какой компьютер, я построил в игре. У него шестиблочный монитор, дисковый накопитель и рычаг, присоединённый к нему при помощи красной пыли.

Собираем всё вместе

Итак, у нас есть компьютер, способ управлять им и входные сигналы. А ещё у нас есть способ и протокол для общения с лампой. Последняя часть головоломки — это программа, которую надо запустить на компьютере и осуществить задуманное. В первую очередь, я создал диск в Майнкрафте. Когда этот диск вставляется в дисковод, OpenComputers создает папку с уникальным идентификатором среди игровых файлов. Таким образом я получил возможность добавлять, редактировать и удалять файлы из моего компьютера на компьютере в майнкрафте. Я использую редактор Sublime и мне показалось очень утомительным использование внутри-игрового компьютера для написания кода. После ряда попыток у меня получился вот такой скрипт:

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 привязана к двум событиям: key_up и redstone_changed. Первое событие инициируется при запуске программы, а второе когда происходит изменение состояние редстоуна подключенного к компьютеру. Теперь я получил основные циклы событий и смог реализовать простейшую логику.

В результате получилась программа, которая прекращает работу когда нажата кнопка q. При инициации редстоун-события программа, на основании состояния рычага, отправляет значение 0x00 или 0xFF для WiFi-лампы. Пакет данных отправляется и лампа регирует соответственно. В заключении, отмечу что TCP-соединение открывается при запуске программы.

Всё легко и просто! И это работает!

Breaking the fourth wall with Minecraft

hashbang.gr
fromgate

Редактор и администратор проектов MinecraftMain.Ru. Познакомился с Minecraft ещё во времена бета-версий, и с тех пор успел «поиграть» в него самыми разными способами: администрирование серверов, разработка плагинов, перевод игры и создание публикаций.

Просмотреть комментарии

  • Видел статью на одном портале о том, как синхронизировать воемя майнкрафта со светодиодами: чтобы они принимали нужный цвет в зависимости от времени в игре. Тоже на таком моде. =)

    • [id10611565|Егор], класно! Я вообще когда переводил, задумался чего бы тоже такого сообразить. Пока ничего не придумал ;)

      • [id111088204|Igor], ну насколко я помню, там все было сделано на Arduino(платы такие), но могу ошибаться

        • [id10611565|Егор], про Arduino, знаю. Всё никак не обзаведусь :) Надо как-то собраться :)

          • [id111088204|Igor], в принципе применению данной технологии с ОС много, вплоть до полного управления дома прямиком из майнкрафта, но это нужно быть самым настоящим мазохистом :D

          • [id10611565|Егор], ну почему. Если у тебя дом, управляется с телефона и т.п. (я знаю примеры), то почему бы не сделать дублирующее управление из майнкрафт ;)
            Такой дополнительный забавный бонус

          • [id111088204|Igor], ну в принципе да, как паралельное управление неплохо. Возможно, если найду тему по синхронизации времени с лампой - скину ссылку в лс

Новые статьи

Муухомор станет муушрумом или мушрумом

В ближайшее время в игре изменится перевод названия моба Mooshroom. Сейчас он в русском переводе…

6 месяцев назад

Первая встреча с крипером, робинзонада в Minecraft — минутка ностальгии по любимой игре

Мне предложили принять участие в челлендже #GamePlotBucketList — отметить в чек-листе события, которые со мной…

7 месяцев назад

Что добавят в обновлении Minecraft 1.21 — итоги Minecraft Live

Завершилась ежегодная трансляция Minecraft Live, и теперь стало известно, что будет добавлено в следующей версии…

1 год назад

Почему голосование за мобов в Minecraft вызывает волну негатива

На change.org опубликована петиция с требованием отменить голосование по выбору мобов. Я согласен, с тем,…

1 год назад

За какого моба голосовать на Minecraft Live

Наконец-то объявлены все варианты мобов для традиционного голосования на Minecraft Live. В этом году пользователям…

1 год назад

Minecraft Wiki «отпочковалась» и открылась по новому адресу

Возможно, вы уже видели новость о том, что Minecraft Wiki переехала и доступна по новому…

1 год назад

This website uses cookies.