Я никогда раньше не играл в Minecraft. Скажу даже больше, мне он был не особо интересен. Скорее все, по причине того, что я не понимал его идеи. Да, я видел, что в нем можно строить бесконечное множество сооружений, выращивать разного вида растения и животных, строить механизмы. Но я все еще не мог понять, как за этой игрой с примитивной графикой мои дети могут проводить целые дни напролёт.
Но вот в один прекрасный день, восьмилетний сын пожаловался, что у него мало друзей и ему почти не с кем играть в Minecraft. Особенность стандартной бесплатной сетевой игры в Minecraft является то, что друзья могут играть на твоей карте только тогда, когда она запущена у тебя на компьютере или мобильном устройстве. Но если ты выходишь из игры, друзья тоже не могут подключиться. Поэтому всегда приходилось ждать, когда друг освободится, либо играть самому.
Я начал думать, как ему помочь найти больше друзей и решить проблему с игрой по сети. Я знал, что есть альтернативная версия сетевой игры от Minecraft, которая называется Realms. Это платная подписка, по которой ты можешь создавать свой сервер, а Minecraft выступает хостером. Недостаток этого варианта в том, что играть на таком сервере может до 10 человек. Так же нет возможности устанавливать моды — дополнения от сторонних разработчиков, которые изменяют или дополняют оригинальный контент Minecraft. Такие сервера без модов еще называют ванильными.
Таким образом, изучив немного тему, я предложил ребенку поднять сервер с какой нибудь интересной картой и разместить его IP адрес в интернете, что бы на него заходили другие игроки. Таков был план по поиску друзей для совместной игры.
Я знал, что существует две версии Майнкрафа. Одна — это Pocket Edition, предназначена для мобильных устройств и Windows 10, вторая — Java Edition, для ПК. Как оказалось они не совместимые друг с другом, поэтому я выбрал Java Edition, так как в игровом мире этой версии больше возможностей, в добавок под нее существует более широкий выбор плагинов. Ну и еще потому, что я Java разработчик.
Следующие пару часов я занимался тем, что создавал дроплет на digitalocean.com и разбирался, как запустить сервер Minecraftа.
Оказалось, что помимо нативного Vanilla сервера, существуют так же сторонние имплементации API для взаимодействия с игровым миром. Одна из них, Spigot — модификация оригинального сервера, позволяющая помимо прочего запускать плагины сторонних разработчиков, существенно расширяя возможности игрового мира. Такие плагины позволяют создавай мини-игры, вводить ограничения для игроков, объединять сервера в сеть и многое другое. Я остановился именно на этой реализации сервера, так как под него было множество плагинов и огромное комьюнити как разработчиков, так и пользователей.
Для нашего с сыном первого сервера нужна была карта мира. Можно было создать ее самостоятельно, но я решил взять готовую и при необходимости ее доработать. Выбирая среди множества доступных бесплатно карт я понял, что мне они не нравятся. Тогда я решил посмотреть карты на платных сайтах. Они оказались совершенно другого качества, очень креативные, красочные и реалистичные. Я остановился на одной из них, пиратском острове. Мне она так понравилась, что я решил ее купить. Так я потратил первые $20. Тогда я еще не подозревал, что это было только начало.
Совсем скоро я понял, что одной картой не обойдусь.
Я знал, что сын играет в мини игры и я хотел попробовать установить одну из его любимых. Называется она Murder Mystery. Эта игра с довольно простыми правилами. Есть детектив, который должен найти маньяка. Маньяк должен убить всех игроков. Все остальные — мирные жители, они могут собирать золото, которое обеспечит их защитой в виде лука. В начале игры неизвестно, кто маньяк, пока в его руке не появится меч.
Таким образом нам нужны были две карты, первая — для так называемого лобби, куда попадают все только что подключившиеся к серверу игроки. Вторая карта — непосредственно для самой мини-игры. Так же мне нужно было найти сам плагин игры и разобраться, как реализовать переход из лобби в игру и назад. Я посмотрел, как это реализовано на популярных серверах и понял, что есть несколько вариантов. Самых распространённых два — переход при нажатии на табличку и при нажатии на игрового персонажа, так называемого npc. Первый способ мне показался более примитивным и менее привлекательным. Вариант с персонажем был более интересным, с возможностью менять внешний вид npc, создавать голографические надписи и т.д.
Следущим этапом был поиск и установка соответствующих плагинов, которые позволяли бы переходить между картами, назначать команды для npc, отключать возможность наносить урон игрокам и многое другое. Сервер начал обрастать функционалом, а меня начал затягивать это процесс. Становилось понятно, что существуют огромные возможности по модификации игрового мира и мне, как Java разработчику, было интересно больше узнать про процесс разработки плагинов, которые также в большинстве своих случаев написаны на Java.
Мы с сыном разделили обязаности, я занимался в основном серверной частью, он доработкой и улучшением карт. Я тоже, ради интереса, начал подключаться к этому процессу и заметил для себя, что строительство песочного пляжа и пещер с водопадами позволяют отлично отдохнуть после трудового дня.
Но прежде чем размещать информацию о сервере в интернете, я решил, что одной мини-игры мало, сервер выглядит пустоватым и занялся поиском и установкой еще одной популярной мини-игры SkyBlock.
В этой игре тебе дается небольшой остров и ты должен на нем выживать, расширяя его и защищаясь от различных монстров. В процессе конфигурации плагина игры пришлось даже связываться с разработчиками, что бы они исправили найденый мною баг, который не позволял создаваться автоматически острову при первом запуске игры.
Настраивая сервер и устанавливая различные плагины, я всегда руководствовался мыслью, что все взаимодействия игрока с миром должны быть максимально упрощены и автоматизированы. Если ты зашел на карту с мини-игрой, она должна по возможности начаться автоматически, игрок не должен ни чего нажимать, не должен вводить ни каких команд. Давалось мне это с большим трудом, подолгу разбираясь в длинных файлах конфигураций плагинов, а иногда обращаться за помощью к разработчикам и даже покупать плагины с более широким функционалом. Но, не смотря на все трудности, пока мне удалось все настроить так, как мне этого хотелось.
Естественно, я ориентировася на лидеров этой индустрии и статался перенять их подходы в организации взаимодействия игрока с игровым меню. В Minecraftе это реализовано спецефически в силу особенностей игры. Так, все элементы меню — это блоки или другие игровые предметы и даже персонажи. Все это накладывает определенные ограничения на разработчиков, но и добавляет особенного шарма игре.
В итоге, я довел сервер до более-менее презентабельного состояния и опубликовал IP на одном из популярных сайтов. Он находился на первой странице в списке новых серверов пару часов и за это время его посетили десятки игроков. Многие хорошо отзывались о сервере, но так же было видно, что такого количества посетителей мало, что бы им было интересно оставаться на сервере продолжительное время. Но, не смотря на это, у нас появились первые постоянные игроки, а так же желающие помогать в развитии сервера. Как правило, это были дети и подростки, один из которых предложил создать и настроить Discord — сервис для голосового, видео- и текстового общения. Он очень популярный в игрово сообществе, но совершенно мне не знакомый. Так же у нас появился один постоянный игрок в SkyBlock, который был для нас как бета-тестировщик, терпеливо сообщал о багах, недочетах, которые я старался оперативно исправлять.
Что в итоге? Сейчас на сервере установлены две карты для Murder Mystery, добавлена мини-игра AcidIsland — вариация SkyBlock, добавлена очень популярная игра BedWars, но пока она ждет фикса от разработчиков. Добавлены внутриигровые деньги, магазин для SkyBlock и AcidIsland, зарегистрирован домен, установлен Discord бот для синхронизации внутриигрового чата с чатом в Discord. В планах расширить разнообразие игр, добавить внутриигровые ранги, запустить сайт. Количество дроплетов растет постоянно. На данный момент их уже четыре, суммарно на 8 CPU и 16 Gb RAM. Да, это занятие не дешевое, но для меня оказалось очень увлекательным. Надеюсь, в будущем, получится монетизировать сервер и вернуть потраченые средства. А пока мы с сыном с удовольствием играем на созданых нами картах, улучшаем и дополняем их. У него появились друзья, а я полюбил Minecraft за его безгарничные возможности для игроков любого возраста.
Если вы так же, как и мы, любите Minecraft и вам понравилась наша история, заходите в гости и посмотрите, что и как у нас получилось. Если у вас есть вопросы по технической части, добавляйтесь в Discord.
Сервер: mc.piratebayserver.net
Discord: discord.gg/QjWSQhx
polearnik
Вы наверное молодец что потратили сколько то своег овремени на сына но этот опус даже на обмен опытом не тянет. Не описаны какие-ошибки, не даны советы. Нет инструкций для того чтоб ктото поднял свой minecraft сервер. Вы написали очень хороший пост для соцсетей но очень плохой пост для хабра
dinikin Автор
Спасибо за ваш содержательный комментарий. Я давно на хабре и отлично знаю, какие статьи полезны и интересны для хабра. Так же я вижу, как многие родители по просьбе своих детей занимаются тем же, чем и я. Технических деталей достаточно и на сайтах разработчиков, цель этого поста описать простым языком, что хотят их дети и с чего нужно начать.