Русский
Русский
English
Статистика
Реклама

Minecraft server

Быстрое разворачивание Minecraft-сервера

24.11.2020 18:14:36 | Автор: admin


Играя в Minecraft в одиночку, всегда настаёт тот момент, когда хочется добавить к себе друзей в свой мир. Построить с ними вместе различные строения, отправиться в путешествие, вместе убить дракона или открыть новые миры. И тогда встаёт логичный вопрос: как создать свой сервер? До сего момента для игрищ использовал только сервера linux. А тут решил попробовать готовый сервер из Маркетплейса на Windows без графического интерфейса (чистый PowerShell). Мне кажется были собраны все грабли, которые только можно, но из битвы с Windows Server я вышел победителем.

Разворачиваем сервер


У меня есть некоторый опыт создания серверов Minecraft под linux, да и вообще администрирования linux, но совершенно не представлял как же быть с Windows. Возможно даже расскажу некоторые капитанские вещи, но для меня они были открытием. Самое большое откровение для меня был PowerShell. Даже не могу передать всех эмоций, использования Windows в консольном режиме. Microsoft сделало максимально неудобным всё. Почему нельзя было взять лучшее у *nix систем, внедрить у себя и улучшить? Почему нельзя сделать поддержку ssh, posix-совместимую систему команд, для чего этот велосипед?
Но спустя некоторое время даже начал получать некоторое удовольствие от интерфейса, и видеть даже какую-то логику. В общем, перейти с Windows на linux было сильно проще, чем сделать это обратно.
Итак, сервер я создавал в нашем :



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



Моя практика создания серверов показала, что для Minecraft-сервера необходимо не менее двух ядер, лучше больше 4-х ГБ ОЗУ. В целом, всё может работать на одном ядре, даже с 2 ГБ ОЗУ, но при большом количестве объектов, могут быть тормоза и пропуски хода.
Лично я такое наблюдал на куриной ферме, когда количество куриц у меня было более нескольких сотен. Тогда сервер реально начинал тормозить.


Корпус для аккумулятора

После создания сервера, спустя несколько минут у нас будет IP-адресс сервера, его логин и пароль.



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

Подключение к удалённому серверу из Windows


В Windows всё просто. Жмём Пуск->Выполнить и вводим mstsc. Вводим параметры нашего сервера.



Если мы хотим копировать данные на сервер и с сервера (а я хочу), то идём во вкладку Локальные ресурсы, и там нажимаем клавишу Подробнее.



И далее указываем какие жёсткие диски мы хотим подключить. Нам это будет необходимо, если мы захотим копировать различные моды или какой-то дополнительный софт на наш сервер.



После этого мы можем подключиться к нашему серверу и увидим одно единственное окно PowerShell.



Содержимое диска C: нашего компьютера будет доступно в сетевой папке:

\\TSCLIENT\c



Думаю тут всё очевидно, и проблем возникнуть не должно.

Подключение к удалённому серверу из Linux


Вот подключение из Linux немного коварнее и сложнее, а главное работает не очень стабильно (особенно монтирование удалённых дисков). Но деваться некуда, поэтому будем использовать его. Для того, чтобы подключаться к удалённому рабочему столу машины с Windows, нам нужно установить программу Remmina.

sudo apt-get updatesudo apt-get install libfreerdp-plugins-standard remmina remmina-plugin-rdp

После установки запускаем remmina, и конфигурируем подключение к удалённому серверу.



Обратите внимание на глубину цвета, если выбрать некорректную глубину цвета (большую, чем поддерживает сервер), будет ошибка подключения. Чтобы мы могли обмениваться файлами, необходимо выбрать общую папку. В моём случае это rdpfiles. В результате, наша папка на сервере будет доступна по адресу:

\\TSCLIENT\rdpfiles



Стартуем ванильный сервер


Для того, чтобы стартовать базовый сервер, не требуется каких-то высоких материй. Для начала нам необходимо согласиться с лицензионным соглашением. Делается это командой

Approve-MinecraftEULA



Всё, с этого момента сервер готов к работе. Мы можем его запустить командой

Start-Minecraft

И всё, ваш сервер готов к работе, он создаёт новый мир и идёт загрузка, но дьявол кроется в мелочах. Сам сервер очень старый, версии 1.15.2 (тогда как на момент написания этой статьи была версия Minecraft 1.16.4).



Но, продемонстрирую, что сервер в действительности работает. Надо только в лаунчере поставить запуск старой версии (1.15.2), и указать при сетевом подключении IP-адресс нашего сервера.


Подключение успешно состоялось.

Как же обновить сервер, спросите вы? Оказывается очень просто. Последняя версия сервера у. Там нужно будет скопировать ссылку на данный файл.
Все файлы этого Minecraft-сервера (кроме стартовых скриптов) обитают в папке C:\Minecraft\ . Поэтому переходим в неё, и все процедуры делаем в ней.

cd C:\Minecraft\#удаляем старый серверrm C:\Minecraft\server.jar

Для того, чтобы скачать файл, в PowerShell есть аналог wget.

Invoke-WebRequest -Uri "http://www.contoso.com" -OutFile "C:\path\file"

Поэтому копируем ссылку на наш файл, и подставляем в эту команду. У меня получилось вот так (обратите внимание, что в вашем случае будет другая ссылка, так как наверняка будет уже другая версия Майнкрафта).

Invoke-WebRequest -Uri "https://launcher.mojang.com/v1/objects/35139deedbd5182953cf1caa23835da59ca3d7cd/server.jar" -OutFile "./server.jar"

Всё, мы обновили наш ванильный сервер, и он готов к работе. Пробуем запустить.

Start-Minecraft

И видим, что у нас обновлённая версия сервера вполне себе работает.



Устанавливаем моды


Эта часть попила у меня чудовищное количество крови, и я с ней очень долго бодался, пытаясь понять что же не так. Для того, чтобы работали моды, необходимо установить дополнение Forge. Не смотря на то, что скрипт запуска Forge есть на данном сервере, сам Forge не установлен! И это главная беда.
Обращаю ваше внимание, что для каждого мода требуется своя версия Forge! Поэтому ищите детальное описание на вашу модификацию, и подбирайте совместимость версии Forge и версии мода. Поскольку у меня не хватило терпения на этот квест подбора соответствующих модулей, то рассказываю основной принцип. Нет, forge с модулями завёлся, но не совсем так как от него ожидалось.
Нам необходимо скачать (выбирайте подходящую версию под ваш мод). Для этого создадим временую папку C:\tmp:

mkdir c:\tmp cd c:\tmp#скачиваем forgeInvoke-WebRequest -Uri "https://files.minecraftforge.net/maven/net/minecraftforge/forge/1.16.3-34.1.0/forge-1.16.3-34.1.0-launcher.jar" -OutFile "forge-1.16.3-34.1.0-launcher.jar"#запускаем инсталятор.\forge-installer.jar


Выбираем Install server и выбираем папку куда ставить (C:\Minecraft) жмём ОК. И дожидаемся загрузки.



После окончания установки, будет выведено такое окно.



Успешность установки, можно проверить командой.

Start-Minecraft -Type Forge -LogFile "C:\Minecraft\stdout.txt" -MinecraftPath "C:\Minecraft"


Если всё запускается без ошибок, всё, ваш сервер готов к запуску модов. Дальше вы можете моды скопировать в вашу сетевую папку, в моём случае rdpfiles и затем скопировать все моды в папку C:\Minecraft\mods\ (предварительно её создав).

mkdir C:\Minecraft\mods\cd \\TSCLIENT\rdpfilescp *.jar C:\Minecraft\mods\

Для того, чтобы был создан новый мир, не забываем удалять предварительно старый.

rm C:\Minecraft\world\ 

Соглашаемся со всем, нажимая букву А на латинской клавиатуре. Всё, можем стартовать новый мир с модами.

Start-Minecraft -Type Forge -LogFile "C:\Minecraft\stdout.txt" -MinecraftPath "C:\Minecraft"

Удалять моды можно точно так же удаляя файлы в папке C:\Minecraft\mods\.

Белые списки и другие настройки сервера


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

whitelist on



Можно даже попробовать зайти на сервер и убедиться, что никто теперь на него не зайдёт.



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

whitelist add dlinyj 



Всё, теперь я могу заходить на данный сервер.

Для того, чтобы конфигурировать сервер, нужно править файл server.properties. Завершить работу сервера можно комбинацией ctrl-c. Далее можно открыть этот файл обычным блокнотом.

.\notepad.exe C:\Minecraft\server.properties



Расписывание всех полей конфигурации сервера выходит за рамки этой статьи, поэтому вы можете ознакомиться с этим самостоятельно . Некоторые параметры можно менять прямо в консоли сервера, и они автоматически сохраняться в файле server.properties. Пример такого параметра это создание белых списков. Что-то можно менять вручную. Экспериментируйте.

Выводы


Для меня был интересный опыт работы с серверной виндой, после linux. И каждый раз сталкивался с тем, что каждую команду надо было искать заново. Например, чтобы перезагрузить сервер, будет команда:

Restart-Computer 

Если случайно закрыть окно PowerShell, то запустить его можно комбинацией Ctrl-Shift-Esc. Затем там выполнить PowerShell.





В общем, открытий чудных Windows нам таила.
Можно много чего рассказать, и про установку Far-менеджера, и то где лежат настроечные скрипты. Но мне кажется, что эта статья даст понимание как же быстро и просто развернуть свой игровой сервер.



Подробнее..

Бесплатный minecraft сервер на AWS с нулевым знанием linux

02.07.2020 18:23:23 | Автор: admin

Привет, Хабр! Точнее, проходимцы, которые ищут, как поднять minecraft сервер для игры с друзьями.


Статья рассчитана на непрограммистов, несисадминов, в общем, не на основную аудиторию Хабра. В статье пошаговая инструкция по созданию minecraft сервера с выделенным IP, адаптированная для людей, далёких от IT. Если это не про вас статью лучше пропустить.

Что такое сервер?


Итак, что такое сервер? Если опираться на понятие "сервер" как на компонент программного обеспечения, то сервер представляет из себя программу, которая может принимать, обрабатывать и передавать данные, принимаемые от пользователей (клиентов), который к этому серверу подключены. На примере сайта сайт находится на некотором веб-сервере, к которому вы получаете доступ через браузер. В нашем случае сервер minecraft генерирует мир, к которому подключаются игроки (клиенты), которые могут ходить, ломать блоки и т.д. За подключение игроков и любые их действия отвечает minecraft сервер.


Очевидно, что сервер должен быть запущен на компьютере (машине). Можно поднять сервер на своём домашнем компьютере, но в таком случае:


  • Вы ставите под угрозу безопасность собственного компьютера, открывая на нём порты
  • Сервер будет нагружать ваш компьютер, что может мешать работе с ним
  • Вы не можете поддерживать домашний компьютер в рабочем состоянии 24/7: иногда вы его выключаете, иногда ваш компьютер теряет подключение к интернету и т.д.
  • Для доступа к вашему серверу из внешнего мира придётся обращаться к компьютеру по IP-адресу, который у "домашних" интернет-провайдеров является динамическим, то есть он может изменяться каждые 2-3 дня по причинам, от вас не зависящим.

И как мы решим эти проблемы?


Решением всех перечисленных проблем является использование виртуальной машины со статическим, то есть неизменяемым IP-адресом.


Сложная терминология? Давайте разбираться.
Обратимся к Википедии.


Виртуальная машина (VM, от англ. virtual machine)  программная и/или аппаратная система, эмулирующая аппаратное обеспечение некоторой платформы...

Если объяснять совсем грубым языком это компьютер в компьютере. На него так же можно поставить операционную систему и работать с ним, как с обычным компьютером.


Где мы её возьмём?


Ответ прост AWS. Это такая платформа, которая предоставляет много разных облачных сервисов, полезных для всех, кто работает с вебом и не только. Для создания сервера minecraft отлично подойдет один из продуктов AWS Amazon EC2 облачная виртуальная машина, которая доступна 24/7. AWS предлагает минимальную виртуальную машину (10GB SSD, 1GB RAM) бесплатно на год, к тому же, даёт возможность привязать бесплатный выделенный (статический) IP-адрес для постоянного доступа к вашей ВМ (виртуальной машине) по одному и тому же адресу.


Создаём и настраиваем ВМ


Перейдите на сайт AWS и зарегестрируйтесь. Затем перейдите в консоль управления.

В консоли среди сервисов найдите EC2 и перейдите к нему.


Важно выбрать дата-центр, проще говоря, место, где находятся сервера amazon. Выбирать следует в зависимости от вашего местоположения, ведь скорость общения в сети интернет разная, и выбирать следует дата-центр, с которым общение из вашего города будет максимально быстрым.



Для выбора дата-центра рекомендую воспользоваться сервисом WonderNetwork, измеряющем скорость передачи пакетов с другими городами.
В моём случае (г.Москва) мне подошёл ирландский дата-центр.


Пришло время создать виртуальную машину. Для этого перейдите на вкладку Launch instance



Начнём конфигурирование ВМ.


1) Выберем образ операционной системы. Для поднятия серверов очень удобен linux, мы будем использовать дистрибутив CentOS7


Следует отметить, что графической среды на вашей виртуальной машине не будет, доступ к машине будет осуществляться через консоль. Она предполагает управление ВМ при помощи команд, а не компьютерной мыши. Не бойтесь этого: это не должно остановить вас уже сейчас или отказаться от идеи поднятия своего minecraft-сервера, так как это "слишком сложно". Работать с машиной через консоль несложно скоро вы сами в этом убедитесь.


2) Теперь определим техническую конфигурацию ВМ. Для бесплатного использования Amazon предлагает конфигурацию t2.micro, маловато для полноценного большого minecraft сервера, но с друзьями поиграть достаточно.

3) Остальные пункты настроек оставляем по умолчанию., но останавливаемся на вкладке Configure Security groups.

Здесь нам необходимо настроить доступ к портам для сервера minecraft.


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

Для minecraft серверов де-факто стандартом является использование порта 25565. Добавим правило, указывающее, что доступ к вашей ВМ через этот порт допустим.


Переходим к окну завершения создания ВМ, нажав кнопку Review and Launch


Настройка пары ключей SSH для ВМ


Итак, подключение к машине будет осуществляться по протоколу SSH.


Протокол SSH работает следующим образом: генерируется пара ключей (открытый и закрытый), на ВМ хранится открытый ключ, на компьютере человека, осуществляющего подключение к ВМ (клиента) закрытый. При подключении ВМ проверяет наличие подходящего закрытого ключа у клиента.

Нажмите кнопку Launch. Перед вами появится следующее окно:

Введите название пары ключей (для вашего удобства) и нажмите Download key pair. У вас должен скачаться .pem файл, содержащий в себе ваш закрытый ключ. Нажмите кнопку Launch instances. Только что вы создали виртуальную машину, на которой будет поднят сервер.


Получаем статический IP


Теперь нам нужно получить и привязать статический IP к нашей ВМ. Для этого меню находим вкладку Elastic IPs и переходим по ней. На вкладке нажимаем кнопку Allocate Elastic IP address и получаем статический IP.

Теперь полученный IP-адрес надо привязать к нашей ВМ. Для этого выберем её из списка и в меню Actions выберем Associate IP address

Далее, привяжем ВМ к нашему IP-адресу


Готово!


Заходим на ВМ


Теперь, когда ВМ настроена и IP-адрес привязан, подключимся к ней и установим наш minecraft сервер.


Для подключения к ВМ по SSH воспользуемся программой PuTTY. Сразу установите PuTTYgen с этой же страницы
После установки PuTTY откройте его. Теперь необходимо настроить подключение.


  1. Во вкладке Session выберете тип подключения SSH, порт 22. Укажите имя для подключения. Имя хоста для подключения по SSH представляет из себя строку типа: имя_пользователя@публичный_dns.
    Имя пользователя в AWS для CentOS по умолчанию centos. Ваш публичный DNS можно посмотреть здесь:

У меня получилась строка centos@ec2-54-246-186-12.eu-west-1.compute.amazonaws.com


  1. Во вкладке SSH -> Auth укажите ваш закрытый SSH-ключ. Он хранится в файле .pem, который мы скачивали ранее. Но PuTTY не умеет работать с файлами .pem, ему нужен формат .ppk. Для конвертации воспользуемся PuTTYgen. Инструкция по конвертации с сайта PuTTYgen. Полученный файл .ppk Сохраним и укажем здесь:


  2. Соединяемся с ВМ, открыв соединение кнопкой Open.
    Поздравляю! Только что мы подключились к консоли вашей ВМ. Осталось поднять на неё наш сервер.



Установка и настройка minecraft сервера


Начнём настройку нашего сервера. Для начала, нужно установить несколько пакетов на нашу ВМ.


sudo yum install -y wget mc iptables iptables-services java screen

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


  • wget утилита для загрузки файлов в linux. С помощью неё мы скачаем файлы сервера.
  • mc консольный текстовый редактор. Отличается простотой и удобством в использовании для неподготовленного пользователя.
  • iptables утилита для управления и настройки firewall'a, с помощью неё мы откроем порт для сервера на нашей ВМ.
  • java на java работает minecraft, поэтому она необходима для работы сервера
  • screen оконный менеджер для linux. Он позволит продублировать нашу консоль для поднятия сервера. Дело в том, что сервер должен быть запущен через консоль, если вы отключитесь от своей ВМ, то процесс сервера будет остановлен. Поэтому мы будем запускать его в отдельном окне консоли.

Теперь настроим firewall.


Межсетевой экран (firewall) программный или программно-аппаратный элемент компьютерной сети, осуществляющий контроль и фильтрацию проходящего через него сетевого трафика в соответствии с заданными правилами. (Wikipedia)

Объясняя простым языком: представьте себе город-крепость. Его всё время атакуют извне, при этом в городе течёт обычная жизнь. Для доступа в город в стене крепости есть ворота, у которых стоят охранники и проверяют по спискам, можно ли пустить этого человека в крепость. Роль стены и ворот в компьютерных сетях выполняет firewall.


sudo mcedit /etc/sysconfig/iptables

Только что мы создали и файл конфигурации firewall'a. Заполним его стандартными данными конфигурации, включив туда правило для порта 25565, являющегося стандартным портом для сервера minecraft.


*filter:INPUT ACCEPT [0:0]:FORWARD ACCEPT [0:0]:OUTPUT ACCEPT [0:0]-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT-A INPUT -p icmp -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 25565 -j ACCEPT-A INPUT -i lo -j ACCEPT-A INPUT -p tcp -m state --state NEW -m tcp --dport 22 -j ACCEPT-A INPUT -j REJECT --reject-with icmp-host-prohibited-A FORWARD -j REJECT --reject-with icmp-host-prohibitedCOMMIT

Закроем файл нажатием F10, сохранив изменения.


Теперь запустим firewall и включим его в автозагрузку:


sudo systemctl enable iptablessudo systemctl restart iptables

Файлы сервера будем хранить в отдельной папке, создадим её, перейдём в неё и скачаем файлы сервера. Для этого следует использовать wget


mkdir minecraftcd minecraftwget <ссылка_на_jar>

Необходимо найти прямую ссылку на скачивание .jar файла сервера. Для примера, ссылка на файл сервера версии 1.15.2:


wget https://launcher.mojang.com/v1/objects/bb2b6b1aefcd70dfd1892149ac3a215f6c636b07/server.jar

Просмотрите содержимое папки при помощи команды ls, убедитесь, что файлы скачаны.



Запустим файл сервера. Сейчас сервер не будет работать: он создаст все необходимые для работы файлы, и поругается на то, что вы не согласились с условиями лицензии EULA. Примем условия, открыв файл eula.txt


sudo mcedit eula.txt

Подтвердите свое согласие, изменив запись на:


eula=true

Откройте файл server.properties: это файл конфигурации вашего сервера. Подробнее о настройках сервера


В него обязательно нужно внести следующее изменение:


online-mode=false

Остальные настройки на ваше усмотрение.


Запуск сервера


Пришло время запускать сервер. Как я уже сказал, сервер запускается прямо из консоли, но если мы закроем основную консоль процесс сервера будет остановлен. Поэтому создадим ещё одну консоль:


screen

В этой консоли запустим сервер:


 sudo java -Xms512M -Xmx1024M -jar <название_файла_сервера>.jar --nogui

Сервер запускается около 45 секунд, не прерывайте процесс. Когда сервер будет инициализирован и запущен, вы увидите что-то вроде:

Поздравляю! Только что вы подняли и запустили свой minecraft сервер. Теперь важно правильно выйти из второй консоли, чтобы она продолжила работу с запущенным сервером. Для этого нажмите Ctrl+A, затем D. Вы должны оказаться в основной консоли и увидеть сообщение типа [detached from 1551.pts-0.ip-172-31-37-146]. Если вам потребуется вернуться в консоль, в которой запущен сервер, используйте screen -r
Теперь вы можете отключаться от своей ВМ. Ваш сервер будет доступен по статическому IP-адресу, который мы получали ранее, на порту 25565.

Получается, адрес для входа на сервер будет <ваш_статический_IP>:25565.


Заключение


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

Подробнее..

Оптимизация сервера Minecraft

09.07.2020 14:06:35 | Автор: admin

В нашем блоге мы уже рассказывали, как создать свой сервер Minecraft, однако с тех пор прошло 5 лет и многое поменялось. Делимся с вами актуальными способами создания и оптимизации серверной части столь популярной игры.

За свою 9-летнюю историю (если считать от даты релиза) Minecraft заработал потрясающее количество поклонников и хейтеров как среди обычных игроков, так и среди гиков. Простая концепция мира из кубиков превратилась из обычного развлечения в универсальную среду для общения и создания различных объектов из реального мира.

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


Но не будем дальше говорить о том, что именно игроки создают, а посмотрим на серверную часть приложения и осветим проблемы (порой весьма сложные), которые могут возникнуть в процессе работы под нагрузкой. Сразу оговоримся, что речь пойдет только о Java Edition.

Виды серверов


Самым простым вариантом является сервер, встроенный в клиент игры. Создали мир, нажали на одну кнопочку, и вот сервер стал доступен по локальной сети. Никакой серьезной нагрузки такой вариант выдержать не может, а поэтому мы не будем его даже рассматривать.

Vanilla


Компания Mojang Studios распространяет серверную часть игры в виде Java-приложения бесплатно на официальном сайте. Это позволяет создать свой собственный выделенный сервер и персональный мир, сделав его доступным для подключения из любой точки планеты. Для тех, кто делает это впервые, есть отличный туториал, доступный в соответствующей игровой Wiki.

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

Bukkit


Созданное энтузиастами на базе Vanilla-версии серверное приложение Bukkit значительно расширяло возможности игры за счет поддержки плагинов и модов (модификаций). Оно позволило не только добавлять в игровой процесс новые блоки, но и выполнять различные манипуляции, недоступные ванильному ПО. Что интересно, памяти это приложение требовало значительно меньше.

Установить Bukkit не составляет особого труда, соответствующая инструкция есть на ресурсе GamePedia. Но это не имеет смысла, так как с 2014 года команда Bukkit распалась, разработчики проекта стали сотрудниками Mojang Studios, а репозиторий заброшен. Таким образом, Bukkit фактически мертв, и имеет смысл обратить внимание на два следующих проекта.

SpigotMC


Для облегчения жизни разработчиков плагинов была необходимость в API для взаимодействия с игровым миром. Именно эту задачу и решили создатели Spigot, взяв за основу ядро Bukkit и переработав его для достижения лучшей надежности и производительности. Тем не менее, Git-репозиторий проекта был заблокирован в связи с Законом об авторском праве в цифровую эпоху (DMCA), и скачать оттуда исходники невозможно.

На текущий момент SpigotMC активно развивается и используется. Он поддерживает все плагины, созданные под Bukkit, однако с ним обратно не совместим. Чтобы обойти запрет DMCA Takedown, был придуман элегантный способ под названием BuildTools. Этот инструмент избавляет от необходимости дистрибуции скомпилированного приложения и позволяет пользователям выполнить компиляцию Spigot, CraftBukkit и Bukkit из исходного кода. Все это делает запрет DMCA бесполезным.

PaperMC


Казалось бы, все круто, и Spigot стал прекрасным вариантом. Но некоторым энтузиастам этого показалось мало, и они запилили свой собственный форк Spigot на стероидах. На странице проекта ключевым достоинством указано, что It's stupid fast. Развитое коммьюнити позволяет оперативно решать возникающие вопросы, а расширенное API делать интересные плагины. Запустить PaperMC можно одной простой командой, приведенной в документации.

С совместимостью у PaperMC все прекрасно, так что написанные плагины под SpigotMC легко заработают и на PaperMC, но без официальной поддержки. Обратная совместимость со SpigotMC также присутствует. Теперь, когда мы перечислили различные варианты создания сервера, перейдем к тем проблемам производительности, которые могут возникать.

Проблемы и решения


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

Что касается вопроса об объеме оперативной памяти, тут следует исходить из следующих показателей:

  • планируемое количество игроков;
  • планируемое количество миров на сервере;
  • размер каждого мира.

Следует помнить, что Java-приложению всегда нужен запас по оперативной памяти. Если вы рассчитываете на потребление памяти в 8 гигабайт, то фактически надо иметь 12. Цифры условные, но суть от этого не меняется.

Для запуска серверной части рекомендуем воспользоваться флагами, указанными в статье Tuning the JVM G1GC Garbage Collector Flags for Minecraft. Эта черная магия позволяет серверу грамотно настроить сборщик мусора и оптимизирует использование оперативной памяти. Не стоит выделять памяти больше, чем реально потребляет сервер при пиковом наплыве игроков.

Генерация карты блоков

Вы действительно считаете, что Луна существует, только когда вы на неё смотрите? (Альберт Эйнштейн)
Абсолютно новый сервер. Как только игрок первый раз успешно подключается, игровой персонаж появляется на общей точке сбора (спаун). Это единственное место, где игровой мир предварительно генерируется сервером. В этот же момент клиентская часть смотрит в настройки, и ключевым параметром является дальность прорисовки. Измеряется она в чанках (область карты 16x16 и высотой в 256 блоков) Сколько чанков там указано, именно столько и будет запрошено у сервера.

На сервере хранится глобальная карта мира, и если в ней еще нет сгенерированных блоков в точке появления игрового персонажа, то сервер их динамически генерирует и сохраняет у себя. Мало того, что это требует больших вычислительных ресурсов, так еще и постоянно увеличивает размер карты мира. На одном из старейших анархических серверов 2b2t (2builders2tools) размер карты уже превысил 8 Tb, а граница мира проходит на отметке в 30 млн блоков. С этим сервером связаны тысячи историй, и он заслуживает отдельной статьи серии статей.

Генерация мира вокруг одного игрока не проблема. Генерация мира вокруг сотни игроков вызовет незначительные тормоза сервера на протяжении короткого времени, после чего нагрузка снизится. Генерация мира на дальность прорисовки клиента вокруг тысячи игроков уже способна уронить сервер и повыбрасывать с него всех клиентов по таймауту.
В серверном ПО имеется такое значение, как TPS (Ticks per Server тактов в секунду). Штатно 1 такт равен 50 мс. (1 секунда реального мира равна 20 тактам игрового мира). Если обработка одного такта вырастет до 60 секунд серверное приложение будет закрыто, выкинув всех игроков.
Выход ограничить мир определенными координатами и выполнить предварительную генерацию блоков. Тем самым мы снимаем необходимость динамической генерации в процессе игры, и серверу будет достаточно прочитать уже существующую карту. Оба вопроса решаются одним-единственным плагином WorldBorder.

Проще всего задать границу мира в виде окружности относительно точки спауна (хотя можно ее сделать любой формы) одной командой:

/wb set <радиус в блоках> spawn

Если игровой персонаж попытается пересечь границу, то будет отброшен на несколько блоков назад. Если это проделать несколько раз за ограниченное время, то нарушитель будет принудительно телепортирован на точку спауна. Предварительная генерация мира выполняется еще проще, командой:

/wb fill

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

/wb confirm

В общей сложности на то, чтобы сгенерировать мир радиусом в 5000 блоков (~40 млрд блоков) ушло примерно 2 часа на процессоре Intel Xeon Gold 6240. Поэтому, если хотите запустить прегенерацию большей карты, учитывайте, что этот процесс займет приличное количество времени, а TPS сервера будет серьезно снижено. Кроме того, помните, что даже радиус в 5000 блоков потребует примерно 2 Гб места на дисковом накопителе.

Несмотря на то, что крайняя версия плагина была разработана для Minecraft версии 1.14, опытным путем выяснено, что она прекрасно работает и на последующих версиях. Полный список команд с пояснениями доступен на форуме плагина.

Проблемные блоки


Разновидностей блоков в Minecraft великое множество. Однако мы бы хотели остановить внимание читателей на таком блоке, как TNT. Как следует из названия, этот блок представляет собой взрывчатку (примечание редакции это игровой предмет виртуального мира и ничего с настоящими ВВ этот предмет не имеет). Его особенность такова, что в момент активации на него начинает действовать сила гравитации. Это заставляет сервер обсчитать все координаты, если в этот момент блок начинает падать.

Если блоков TNT несколько, то детонация одного блока вызывает детонацию и включение гравитации у соседних блоков, разбрасывая их во все стороны. Вся эта красивая механика на стороне сервера выглядит как множество операций по подсчету траектории каждого из блоков, а также взаимодействия с соседними блоками. Задача крайне ресурсоемкая, что легко может проверить каждый. Сгенерируйте и подорвите куб из блоков TNT, размером хотя бы 30x30x30. И если вы думали, что у вас хороший мощный игровой компьютер, то сильно заблуждались ;)

/fill ~ ~ ~ ~30 ~30 ~30 minecraft:tnt


Подобный эксперимент на сервере с Intel Xeon Gold 6240 привел к серьезной просадке TPS и 80% нагрузке на CPU в течение всего времени детонации блоков. А следовательно, если кто-либо из игроков сможет проделать подобное, то проблема с производительностью затронет всех находящихся на сервере игроков.

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

Избежать этого сценария можно, только полностью запретив использование данных блоков в игровом мире. Например, с помощью плагина WorldGuard. Обратите внимание, что сам по себе этот плагин не работает без другого плагина WorldEdit. Так что устанавливаете вначале WorldEdit, а затем WorldGuard.

Заключение


Грамотное управление игровым сервером задача не из простых. Сложности и снижение производительности будут поджидать на каждом шагу, особенно если не брать в расчет саму механику игрового процесса. Предусмотреть все невозможно, ведь игроки порой бывают очень изобретательны в попытках заставить сервер выполнить то, для чего он не был предназначен. Только разумный баланс между рисками и устанавливаемыми ограничениями позволит серверу работать в непрерывном режиме и не снижать свою производительность до критичных значений.

На карантине некоторые наши сотрудники соскучились по любимым офисам и решили воссоздать их внутри Minecraft. У вас тоже есть шанс заглянуть к нам в гости, не рискуя своим здоровьем и не тратя время на дорогу.
Для этого мы приглашаем всех желающих на наш сервер minecraft.selectel.ru (версия клиента 1.15.2), где воссозданы дата-центры Цветочная-1 и Цветочная-2. Не забудьте согласиться со скачиванием дополнительных ресурсов, они необходимы для корректного отображения некоторых локаций.

Вас ждут квесты, промокоды, пасхалки и приятное общение.
Подробнее..

Категории

Последние комментарии

  • Имя: Макс
    24.08.2022 | 11:28
    Я разраб в IT компании, работаю на арбитражную команду. Мы работаем с приламы и сайтами, при работе замечаются постоянные баны и лаги. Пацаны посоветовали сервис по анализу исходного кода,https://app Подробнее..
  • Имя: 9055410337
    20.08.2022 | 17:41
    поможем пишите в телеграм Подробнее..
  • Имя: sabbat
    17.08.2022 | 20:42
    Охренеть.. это просто шикарная статья, феноменально круто. Большое спасибо за разбор! Надеюсь как-нибудь с тобой связаться для обсуждений чего-либо) Подробнее..
  • Имя: Мария
    09.08.2022 | 14:44
    Добрый день. Если обладаете такой информацией, то подскажите, пожалуйста, где можно найти много-много материала по Yggdrasil и его уязвимостях для написания диплома? Благодарю. Подробнее..
© 2006-2024, personeltest.ru