Minecraft
November 19, 2019

Майнкрафт vs Lineage 2

Автор не несёт ответственность за приведённые факты, так как они могут отличаться от реального положения дел и/или быть результатом домыслов воспалённой фантазией автора. Специально для https://vk.com/osterhelps

В начале 2000х годов была дико популярна MMORPG - Lineage II, меня, слава Богу так сильно она не затянула, но мои друзья и соседи в неё рубились - дай Бог!

Lineage II

Я был малым пацантрэ, но уже тогда меня тянуло к компьютерам, программированию на Basic и всё в таком духе.

Тогда только-только зарождался ADSL, ещё много кто сидел на Dial-UP, и интернет тарифицировался помегабайтно.

Однажды, ясным, свежим, сентябрьским днём мне предложили интересную идею - сделать свой собственный сервер Lineage II и собирать донатики. По правде сказать, тогда ещё мир не знал слово "Донатики" в контексте, в котором оно существует сейчас, мы говорили: "Будем продавать адену и шмот за реал".

Особо в подробности создания сервера вдаваться не буду, скажу лишь, что началось всё с поиска системного блока, он был на процессоре Пентиум 4 и около 1Гб ОЗУ.

ЦП Pentium 4

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

Далее была долгая настройка самой сборки, запись "патча" (клиента) на диски, ведь в те времена поди-ка попробуй вытянуть 1,5Гб на скорости 64kbps.

У меня на тот момент был уж совсем ужасный ПК, монитор ЭЛТ, в общем в Линейдж я поиграть так и не смог, да это впрочем и неважно.

Результатом нашей работы был полу-кривой сервер, с багами и всем прочим. Причём, помнится, сборка именно самого сервера занимала около 20-40Мб. Время шло, сервер быстро набирал обороты, и, через месяц на нём уже был онлайн 500-600 человек. Да, безусловно, большим ограничением была дисковая подсистема, так как на худой конец два HDD, объединённые в RAID1, работали бы куда лучше. Так же ширина интернет-канала оставляла желать лучшего.

Дальнейшая судьба данного проекта мне неизвестна, но. Теперь поговорим о Майнкрафте.


Многопользовательская песочница, самая продаваемая игра в мире на сегодняшний день, которую написал Маркус Перссон в одно лицо за пару недель. Мне полюбилась эта игра в 2014 году, но я до сих пор не могу понять как так получается.

Minecraft

Серверное ядро Netty, которое используется для создания серверов Майнкрафт написано на Java, так же как и серверное ядро Lineage II. Проблема в другом.

Во-первых - вплоть до версии 1.13 (Java edition) сервера Майнкрафт не поддерживали многопоточность! Во это да, вы только представьте, как переполненные сервера со всеми энтити, генерацией чанков просчитываются одним ядром процессора.

Читал статью, и мной одолевала злость - ну, слушайте, хотя бы после приобретения Mojang компанией Microsoft наверное можно было переписать с нуля сервер для Java Edition. Можно. Было. БЫ. Но зачем? "Майнкрафтеры сожрут!". Люди вынуждены самостоятельно писать серверные ядра для более-менее нормальной работы вышеупомянутой игры.

За окном шёл 2019 год, Mojang снисходит до пользователей и добавляет многопоточность. Проблемы с производительностью всё же остаются, хоть и их как-то пытаются парировать создатели Spigot, Paper итд.

Серверное ядро Spigot

Про "благоприятные условия" для создания плагинов и модов для Майнкрафта - это вообще отдельный цирк. Только представьте себе. Разработчики вынуждены декомпилировать обфусцированный байт-код Майнкрафта, и добавлять туда свои классы.

В то время как премногоуважаемые Джеб (разработчик Майнкрафт) спокойно смотрит на эту ситуацию, а если у сторонних разработчиков появляется на его взгляд "что-то годненькое", он с большим удовольствием добавляет это в ванильный Майнкрафт (прим. Кони, щит, поршни итд.). Но это, пожалуй, тема для другой статьи.

Подытожить хотелось бы тем, что на мой взгляд, разработчиков нужно призывать к ответу и настойчиво требовать добавления официального API в функционал серверных ядер на всех существующих версиях. © Ваш покорный слуга