• 11 600
  • 25
  • 70

Проблемы Minecraft

Проблемы Minecraft
Проблемы MinecraftВсе мы играем в Minecraft. Это замечательная песочница с безграничным и открытыми миром. Немногие игры могут этим похвастаться, что собственно сделало Minecraft таким популярным. Бесспорно, задумка игры хороша, но реализация хромает...

К недостатку, количества контента в игре (блоки, мобы и другое) маловато, пройти игру можно всего за несколько часов. Сделать её интересной помогает моддинг, добавляющий тонны нового контента, чтобы играть было по-настоящему интересно. Сегодня я расскажу (на основе личного опыта), какие же проблемы стоят перед моддингом игры и созданием сервера с модами.

Зачем вам это знать? Это повод ответить на вопрос, почему на серверах не появляются новые моды (в том числе самописные) и почему все силы уходят на борьбу с ошибками игры.

Проблема 1: Закрытый исходный код игры.

Чтобы что-то разрабатывать под игру, хорошо бы знать как это всё работает. Да вот незадача: Minecraft в нынешнем виде – это коммерческий продукт с закрытым исходным кодом.

Существует возможность «добыть» исходники игры благодаря Mod Coder Pack (MCP). Качество полученного кода никакое, потому что исходники получаются путём деобфуксации и декомпиляции файлов игры. В коде отсутствуют какие-либо комментарии от разработчиков (они теряются при компиляции), качество деобфуксации очень сильно хромает: попробуй угадай что делает func_147108_a() и зачем нужно поле field_70170_p.

Поскольку выбора никакого нет, всем кто занимается моддингом, приходится пользоваться всем этим «добром». Учитывая большую известность MCP, вопрос необходимости обфуксации (запутывания) кода игры остаётся открытым. Кроме неудобств, пользы от неё никакой...

Проблема 2: Отсутствие официального API для моддинга.

Раз уж исходный код игры закрыт, её разработчики могли бы позаботиться о создании официального API для моддинга. Кто как не они, лучше зная устройство игры, могут предоставить исчерпывающую документацию по его использованию. Когда-то давно разработчики игры «кормили завтраками» про введение Plugin API. Как мы видим, появиться ему было не суждено.

API необходимо для того чтобы иметь возможность установить сразу несколько модов, не конфликтуя друг с другом. Эту проблему отчасти решил Minecraft Forge. Данное API от сообщества упрощает установку модификаций игры, добавление нового контента, отслеживание игровых событий и всё. В Forge не хватает набора вспомогательных утилит для выполнения рутинных действий, например работы с инвентарями. Из-за этого каждому автору мода приходится «изобретать велосипеды», что нередко приводит к багам.

В качестве примера возьмём работу с инвентарём. Допустим, нам надо поместить в сундук какой-то предмет. На первый взгляд задача кажется простой. А на деле всё обстоит куда сложнее: найти свободные слоты в инвентаре или же объединить предмет с существующими, не забыв при этом проверить идентичность и чтобы кол-во не превышало максимальный размер стопки. Мест, где можно ошибиться здесь хватает...

В некоторых случаях возможностей Forge не хватает, приходится делать костыли из-за отсутствия способа сделать это грамотно. К таким случаям я отношу: использование фейк-игроков для «автокликеров»; различные способы перемещения блоков.

Автокликеры. Повод для использования фейка, вместо игрока вызван необходимостью научить механизм или существо использовать инструменты без участия игрока, поскольку это единственный и универсальный способ, совместимый со всеми модами. При использовании, предмет (допустим, кирка) в качестве одно из параметров получает объект игрока, использующего инструмент в данный момент. Это нужно для всяких проверок связанных с игроком (зависит от мода). Если не передать этот параметр (а у нас игрока нет, если использует механизм), в подавляющем большинстве случаев произойдёт краш. Потому широко используют «фейков» (подделку) вместо настоящего игрока, дабы инструмент мог получить необходимые ему сведения об игроке. Сложность здесь доставляет ещё работа с инвентарём игрока. Очень сложно синхронизировать инвентарь фейка с инвентарём механизма.

Перемещение блоков. Все блоки в игре размещаются по сетке. Блоки можно ставить и разрушать - третьего не дано. Поршни умеют работать только с «простыми» блоками - теми, которые не имеют логики. Сундуки, печки и другие блоки с логикой поршни перемещать не могут из-за привязки логики к блоку по его координатам. Создателям модов этого мало: они придумывают различные телепорты и инструменты, дающие возможность переместить любой блок, попутно получая порцию новых багов и дюпов. А всё потому, как было сказано ранее, третьего не дано. В игре нет способа убрать блок без уведомления о разрушении: если мы «сетним» сундук, он в любом случае выбросит своё содержимое, а это уже получается дюп. Приходится делать костыли для очистки инвентаря и блокировки дропа с блока из-за отсутствия возможности уведомить блок о готовности к перемещению. А авторы модов не имеют никакой возможности запретить перемещение своих блоков (особенно это актуально для многоблочных конструкций).

Проблема 3: Целый «зоопарк» платформ.

Если разработчики игры не дают API, тогда его сделает сообщество. Так возникло множество платформ для разработки под игру начиная от: Bukkit, ModLoader, Forge, SpoutCraft, заканчивая Sponge. Недостатком является отсутствие совместимости между этими платформами, их создатели словно «живут в разных вселенных», не признавая существование других платформ. Хорошо, хоть Forge и ModLoader объединились.

Каждая из платформ имеет свои достоинства и недостатки. Bukkit очень удобен для разработки серверных плагинов, имеет хорошую документацию; Forge позволяет устанавливать моды. В итоге, чтобы создать тот самый идеальный сервер, нам приходится совмещать Forge и Bukkit. Одна платформа даёт возможность добавлять новый контент в игру при помощи модов, другая – управлять сервером при помощи плагинов.

Тут то начинаются проблемы: платформы не знают о существовании друг друга; не рассчитаны на совместную работу. При разработке ядра сервера с поддержкой этих двух API, обязательно что-нибудь да сломается. Приходится постоянно делать «фиксы» модов, чтобы те не обходили плагины привата. Недостатком Bukkit является отсутствие поддержки модов, из-за чего приходится использовать различные трюки для получения к объектам из модов. В общем, очень много ненужной работы приходится делать, чтобы вся эта «солянка» из модов и плагинов работала стабильно.

Проблема 4: Игра далеко до идеала.

Поговорив о сложностях разработки под игру, мы плавно переходим в её устройству.

Наиболее известной проблемой всех массовых серверов являются лаги. Проблема эта вызвана вовсе не плохим железом или тем что игра написана на Java. Проблема в архитектуре игры. Всё современное железо наращивает свою мощность за счёт увеличения кол-ва ядер. У нас в игре основная логика обрабатывается одним потоком, то есть игра задействует только одно ядро процессора. Это делает невозможным масштабирование сервера путём приобретения более мощного железа. В итоге приходится довольствоваться небольшим числом слотов, о тысяче говорить не приходится.

Все мы хотим новый контент и в этом нам помогают регулярно выходящие обновления игры. Игрокам хорошо, а вот для владельцев серверов и создателей модов, обновления - это боль. Если простым серверам с плагинами обновляться несложно (а для них это единственный способ получения новых возможностей), то свою идеально отлаженную сборочку с модами придётся пересобирать с нуля. Беда в том, игру с каждым обновлением переписывают чуть ли не наполовину, ломая при этом совместимость кодовой базы предыдущих версий. Инструкции по техническим изменениям для создателей модов, разработчики не предоставляют. В общем, разбирайтесь сами как хотите и наступайте на те же грабли. Потому даже у опытных создателей модов, после обновления присутствует много ошибок. Кто-то наоборот, забрасывает поддержку своего творения, из-за того что ему надоело постоянно обновляться.

Качество кода игры оставляет желать лучшего, он похож на лапшу. В игре нет разделения между логикой и игровым движком. Код GUI (интерфейсы с кнопочками) перемешан с вызовом OpenGL функций. Вот так мы получаем баги с текстурами и отрисовкой, потому что запросто можно забыть включить/отключить нужный GL-атрибут. Отсутствует какой-либо GUI фреймовик. Всё приходится рисовать вручную, рассчитывать позицию элементов управления, обрабатывать взаимодействие с ними. Потому интерфейс игры такой скудный.

Разрабатывая ядро сервера, я лучше познакомился с устройством игры. В это время я нашёл новые ошибки, которые Mojang почему-то не считают нужным исправлять:
  • Любимый всеми Java программистами NullPointerException. В игре нигде не предусмотрено защиты от передачи null-значения. Попытка исправить это, породила новые ошибки в модах, использующих «грязный хак».
  • Предмет с кол-вом 0 - это нормально. В игре нигде нет проверки на количество, везде проверка только на null. Пришлось её дописывать самому, чтобы игроки не могли ставить «багнутые» предметы в рамку.
  • Помеченные к удалению сущности, могут взаимодействовать с блоками. Но зачем? Кроме дюпов (например, бросание предмета в тигель) это ничего полезного не даёт. В итоге блокам приходится проверять валидность сущности, хотя обработчик мира просто не должен давать их. Если же проверку забыли сделать - получите дюп.
  • Возникла ошибка при сохранении мира? Не беда - мы её просто выведем в лог. Если откажет диск - сервер у нас продолжит работать дальше, а после перезапуска всех откатит обратно в каменный век. Почему не предусмотрена остановка сервера при возникновении критических ошибок!?
  • Страдайте игроки, пока сервер сохраняет карту! Mojang не умеет писать многопоточный код. Дикие лаги в старых версиях игры вынудили их сделать сохранение карты в фоне. Получилось так себе: сервер периодически фризит, пока он дожидается завершения сохранения всех чанков.


Каким должен быть идеальный майнкрафт

На этом мы заканчиваем часть, касающуюся проблемы игры. Хочется рассказать, какой хотелось бы видеть игру. В первую очередь, Minecraft должен стать не просто игрой, а платформой для моддинга. Разработчики игры должны заниматься улучшением игры, оптимизируя её и расширяя возможности API. Контент для игры пусть создаёт сообщество, оно способно дать намного больше, чем разработчики игры.

Нынешние обновления игры можно назвать бестолковыми. Игре уже 10 лет, уровень качества графики не поменялся, зато системные требования выросли. Создаётся впечатление, что разработчики сами не знают чего добавить: то новые цветные блоки добавят или мобов, то надумают поменять «надоевшие» текстуры и модель лошади. Разработчики отчасти стараются идти навстречу сообществу, но получается оно так себе: вместо API с безграничными возможностями, мы получаем костыли в виде JSON конфигов, чтобы игра у нас тормозила ещё больше.

Что в итоге

Признаюсь, я расстроен таким положением дел в игре. Для меня разработка модов - дело неблагородное. Даже если ты умеешь создавать качественный код, майнкрафт тебя всё равно обломает. Здесь если пытаешься исправить один баг, будь готов получить ещё два. Сплошной бардак, где никому ничего не надо.

Крупнейший сервер Hypixel не так давно заявил о создании собственной игры наподобие Minecraft. Это правильное решение, потому что потолок возможностей Minecraft весьма ограничен...
  • Автор: TheAndrey
  • Опубликовано:

25 комментариев

Аватар
Whisper
Чувствую закрытие Реда в недалёком будущем...
Печаль.
Аватар
RinDor
Whisper,
Не думаю что такое случится.
Аватар
KatzeCat
Хм, сервера в hytale от редсервера? boss
Аватар
Kimihito
RinDor, это неизбежно, увы. Этот пост, фактически, дал понять "потолок" кубача. Даже если некоторые игроки не признают это, но это действительно так. Потолок есть везде, просто он не всегда виден. А вот игра от Hypixel достаточно годная будет.
Аватар
FoxerPlay
За то количество лет мнимой "поддержки" Моджангами этой прекрасной игры, это можно скорее расценивать как бесконечные вытирания ног о мододелов и в принципе все сообщество этой игры.
Лично я вижу это так: игра, только набрав популярность, получила поддержку очень широко круга мододелов, на которых, собственно, эта игра сейчас еще находится на плаву, хотя и это лишь дело времени, разработчики, видимо словили хороший фидбэк и решили положить огроменный болт на все дальнейшее развитие игры, иначе я не могу понять, либо нужно быть без какого либо финансирования, либо слепым, чтоб не замечать, что на твою игру выпустили модов больше, чем на все игры серии Elder Scrolls вместе взятые. Вам было достаточно просто сделать условия для того, чтоб ваш проект вывезли другие люди, которым вы и копейки не заплатите, меркантильные крысы, жаждущие только денег.
Очень надеюсь, что Mineplex не прогадают, а этот помой, которым нас кормят сейчас, будет слит в унитаз.

Я буду очень рад, если я придерживаюсь ошибочного мнения о Mojang, но их политика, пока, показывает совершенно обратное.
Аватар
EvgeniyM
KatzeCat,
Ага, с теми же самыми модами написанными под хайтейл
Аватар
KrisAlex
EvgeniyM,
Самое смешное, мне кажется, что в новой игре уже будет половина того контента, который есть, к примеру, на Magic и Technomagic.
А вот серверов Hytale от Андрея я бы очень хотел...
Аватар
Klayrex
Майнкрафт должен, от части, выглядеть как гарис мод где нет ничего но с модами есть всё
Аватар
Bolynlial
Hytale это будет магически-рпгшный аналог майнкрафта.
Но его главный плюсы:
1) бесплатность (мы получим бесплантую а не пиратскую версию игры)
2)модификацыя игры прямо в игре (то есть моды будут больше похожи на плагины с текстурами)
ну и все таки это чтото новое но даже оно буден не без подводных камней
а майнкрафт постепенно теряет популярность (осталось анонсировать hytale на Android IOS PS Xbox Windows phone и тд)
Аватар
Arizona
Вряд ли майн так просто сдаст свои позиции, ведь он уже занял свою нишу на рынке. Ни для кого не секрет, что есть майнкрафт подобные игры, но, их популярность совсем не та, что у детища Маркуса Перссона.
Все вышеобозначенные проблемы игры, это проблемы "детского" возраста. Когда игра пишется одним разработчиком, а не профессиональной командой, такие ошибки и недоработки есть всегда.
Надежда на исправление багов была бы возможной, если бы игру сделали с открытым кодом, или продали компании, которая нацелена на качественную разработку, но, игру продали мелкомягким, а как они делают софт, все мы знаем :)
Выход таков, либо ждать, когда кто то напишет очередной клон майна, но уже с открытым кодом, либо пилить свой с блэкджэком и... ну, вы поняли :)
Причём, клон именно в таком виде, как ванилла майнкрафт, чтобы он имел возможность добавлять тематические моды, на магию, на техно. Т. е. песочница без каких либо тематик, как майн. Чем он и привлекает моддеров.
Аватар
Sheodar
FoxerPlay,
Так-то у скайрима очень мало модов. Советую глянуть куда-нибудь в сторону Space Engineers. Да и на "голых" и "плагинских" майнкрафтах играет в сотни раз больше людей (как раз из-за говноделов которые из версии в версию перекручивают игру и, собственно, отсутствия официальной поддержки модов). Так что нет. Игра не заглохнет до тех пор, пока голые версии не перестанут быть популярными. А они не перестанут.
Аватар
Grizllyi
Отдал бы и 27$ если бы хайтел был платным, и ещё бы на премку не пожалел, если бы Ред запустил там свои сервер
Аватар
lasting
Как понял? проблемы были, есть и будут! Одно остается: НАДЕЯТЬСЯ! Надеяться что "майн" не умрет, что появиться новый "майн" и что РедСервер будет жить долго!
Я все сказал!
... пойду на Хард покопаюсь.
Аватар
ed_sh
Моджанговцы сделали майнкрафт на C++ с более хорошим кодом, но моддинг не для него(
Аватар
TheAndrey Автор
Цитата: ed_sh
Моджанговцы сделали майнкрафт на C++
Сделали. Название подобрано очень точно – «Bedrock edition». Не получится его декомпилировать, как это можно сделать с Java (одно из достоинств).
Аватар
Yelqo
Arizona,
ничего, что Маркусс Перссон давно продал майнкрафт? А во-вторых, там огромная команда разработчиков, которая уже давно работает над изменением кода Маркусса.
Аватар
Arizona
Yelqo,
Внимательно читал моё сообщение? Если нет, советую перечитать.
И, да, в самом начале над концептом игры, Маркус (с одной "с" на конце) работал над игрой один.
Аватар
TOLEEEK
TheAndrey,
Статья от Рена4ки aka Eirenliel в гиперссылке в твоей статье, играл на их проекте когда он существовал. Не понимал почему отключен ад, почему отключены зельеварки, почему отключены спавнеры мобов (+- ради экономики и нагрузка), почему не было агрессивных мобов, почему они остались на 1.0 (вроде) + начали допиливать свое. А теперь понял, все ради оптимизации, их сервер, в принципе, никогда особо не падал (на закате тем более). Вспомнил про битые чанки, почему у них были битые чанки... эх...

Спасибо вам с Реной, что написали статьи, которые приоткрыли занавес страданий разработчиков
Аватар
TheLondonClown
Кто знает, будь Нотч до сих пор у штурвала, возможно майнкрафт был бы сейчас совсем другим...
Аватар
EvilGod
Расходимся, это не майнкрафт, а что то более классное. Они делают то чего всегда не хватало майну, Но мне грустно осознавать тот факт, что добавление игровых аспектов из террарии может погубить идею майна.
Аватар
Mishka
Майнкрафт - игра о которой в свое время говорил каждый, уникальная песочница с кучей возможностей.

Но сейчас.. Это медленно загнивающая игра, некий "пережиток прошлого"
Аватар
eglikeglik
Так может Андрей откроет новый проект возможно на новом движке,
или Сделает новый сервер переписав абсолютно все моды и перебрав каждую соринку мода
Надеюсь он не умрёт
Играю 3 год на этом серве и очень полюбил его за это время
Аватар
Roman_Romanich
Первый сервер, на котором я познакомился с модами на майн и сборками как таковыми. Спасибо ему за всё, но он своё отжил - нет обновлений, сборки без изменений висят уже довольно долго, сама версия майна устарела, а администрация утратила былой энтузиазм.
p.s. Press F to pay respect
Аватар
Erriour
А разве Sponge не решил проблему Forge+Bukkit? Ну а так, да, всё плохо...
Аватар
TheAndrey Автор
Цитата: Erriour
А разве Sponge не решил проблему Forge+Bukkit?
Должен, поддержка модов была заявлена в этом API.
Но есть две существенные проблемы: Sponge представляет собой надстройку над обычным сервером Minecraft, поэтому оптимизации и исправления ошибок Mojang оно дать не способно - только API. Вторая беда: Sponge не будет популярен, пока существует Spigot, а значит дело с количеством плагинов обстоит не лучшим образом.
Информация
Посетители, находящиеся в группе Гость, не могут оставлять комментарии к данной публикации.
Нашли очепятку? Выделите её и нажмите Ctrl+Enter.