RE:NODE

Minecraft11 мин чтения

Хардкорный сервер Minecraft: дезбаны и воскрешения

Как запустить хардкорный сервер Minecraft для компании: hardcore=true, что происходит после смерти, жизни и дезбаны через небольшой датапак, воскрешения, вайпы и честные правила.

0 прочтений

Чтобы сделать сервер Minecraft хардкорным, укажите hardcore=true в server.properties до того, как будет сгенерирован мир. После этого сложность фиксируется на hard, у игроков появляются хардкорные сердечки, а каждый погибший вместо возрождения переходит в режим наблюдателя - навсегда, если только оператор не вернёт его командой /gamemode survival <name>. Это и есть вся встроенная функция. Всё, о чём на самом деле спорит компания, - сколько жизней, могут ли мёртвые наблюдать, бывают ли воскрешения, что делать, если игрока убил лаг сервера, - решаете вы сами, и большую часть этого можно собрать из нескольких игровых правил и датапака на двадцать строк. Ниже разобраны сама настройка, альтернативы ей и правила, которые сохраняют интерес к хардкорному серверу после первой смерти.

Что на самом деле делает hardcore=true#

На выделенном сервере хардкор - это свойство мира, и оно меняет три вещи:

  • Сложность фиксируется на hard. Параметр difficulty в server.properties и команда /difficulty больше на неё не влияют.
  • Смерть для этого игрока окончательна. Вместо кнопки возрождения экран смерти предлагает наблюдать. Игрок остаётся подключённым в режиме наблюдателя, может летать сквозь стены и смотреть.
  • Меняются сердечки. Игроки видят хардкорный стиль сердец - это чисто визуальная деталь, но она сразу сообщает всем, в каком мире они находятся.

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

Чего хардкор не делает: он не удаляет мир, когда умирают все (сервер продолжает работать с миром, полным наблюдателей), не мешает операторам менять режим игры и не меняет ни одного игрового правила. Операторы могут воскресить кого угодно в любой момент, поэтому список операторов - самая важная настройка хардкорного сервера.

server.properties
hardcore=truedifficulty=hardpvp=truewhite-list=trueenforce-whitelist=truespawn-protection=0level-seed=

difficulty=hard избыточен при hardcore=true, но фиксирует намерение для того, кто откроет файл следующим. spawn-protection=0 позволяет всем строить и ломать блоки рядом со спавном; значение по умолчанию 16 оставляет эту зону операторам, что выглядит произвольно в мире, где всё остальное честно. Белый список важен больше обычного: случайный человек, который зашёл и умер, ничего не испортил, а случайный человек, который поджёг чужую базу на последней жизни владельца, закончил сезон. Настройка описана в статье белый список и права.

Настройка на новом или существующем мире#

Флаг hardcore записывается в level.dat мира при его создании. Надёжный способ получить хардкорный мир - указать hardcore=true до первого запуска нового мира:

  1. Остановите сервер.
  2. Укажите hardcore=true в server.properties.
  3. Переименуйте или удалите папки существующего мира (world, а на Paper ещё world_nether и world_the_end), сохранив бэкап, если старый мир вам нужен.
  4. При желании укажите в level-seed выбранный сид или оставьте поле пустым для случайного.
  5. Запустите сервер. Будет сгенерирован новый хардкорный мир.

Превращение существующего мира менее предсказуемо. Делает ли старый мир хардкорным одно лишь изменение параметра, зависело от версии и серверного ПО. Если нужно конвертировать мир, остановите сервер, откройте level.dat в NBT-редакторе, установите байт hardcore в его составе Data в 1 и укажите hardcore=true в server.properties, чтобы оба значения совпадали. Предварительно сделайте бэкап level.dat.

В RE:NODE серверы Minecraft выдаются с уже сгенерированным миром, поэтому чтобы начать хардкорный мир, нужно остановить сервер, изменить server.properties в редакторе файлов, удалить сгенерированные папки мира через файловый менеджер и запустить сервер снова. Это занимает пару минут. Остальная часть файла разобрана в статье все параметры server.properties.

Игровые правила, которые определяют хардкорный сервер#

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

code
gamerule keepInventory falsegamerule naturalRegeneration truegamerule showDeathMessages truegamerule spectatorsGenerateChunks falsegamerule playersSleepingPercentage 50gamerule announceAdvancements true
ПравилоПо умолчаниюПочему это важно здесь
keepInventoryfalseНе играет роли в чистом хардкоре, важно при системе жизней
naturalRegenerationtruefalse превращает сервер в UHC: лечат только зелья и золотые яблоки
spectatorsGenerateChunkstruefalse не даёт мёртвым игрокам исследовать и генерировать ландшафт
playersSleepingPercentage100Снизьте, иначе один AFK-игрок оставит всех в темноте
showDeathMessagestrueОставьте; смерть, которую видят все, - половина драмы

spectatorsGenerateChunks false заслуживает внимания. Мёртвому игроку нечем заняться, кроме полётов, а наблюдатель, летящий на полной скорости по прямой, генерирует новый ландшафт так быстро, как сервер успевает. Это стоит ресурсов CPU ровно в тот момент, когда живые игроки стараются не умереть от лагов. Если отключить правило, наблюдатели будут видеть только чанки, которые уже кто-то загрузил или сгенерировал. Предварительная генерация мира внутри границы снимает проблему полностью - порядок действий описан в статье граница мира и предгенерация.

Жизни вместо одной смерти#

Многие компании считают одну жизнь слишком жестокой для долгого сервера и останавливаются на трёх. В vanilla есть всё, что нужно для этого: цель скорборда deathCount и функции, которые выполняются каждый тик. Хитрость в том, чтобы оставить hardcore=false, указать difficulty=hard и позволить небольшому датапаку решать, когда игрок выбывает.

Структура для Minecraft 1.21 и новее (в старых версиях папки называются functions и tags/functions):

code
world/datapacks/lives/  pack.mcmeta  data/lives/function/load.mcfunction  data/lives/function/tick.mcfunction  data/minecraft/tags/function/load.json  data/minecraft/tags/function/tick.json
pack.mcmeta
{ "pack": { "pack_format": 48, "description": "Three lives" } }

48 - формат датапака для 1.21 и 1.21.1; используйте значение для своей версии. Два файла тегов регистрируют функции в игре:

data/minecraft/tags/function/tick.json
{ "values": ["lives:tick"] }

load.json такой же, только с lives:load. Затем сами функции:

load.mcfunction
scoreboard objectives add deaths deathCount "Deaths"scoreboard objectives setdisplay list deaths
tick.mcfunction
execute as @a[scores={deaths=3..},tag=!out] run tellraw @a [{"selector":"@s"},{"text":" is out of lives."}]tag @a[scores={deaths=3..}] add outgamemode spectator @a[tag=out,gamemode=!spectator]

Цель deathCount считает смерти автоматически. Когда у игрока их становится три, функция тика один раз объявляет об этом, помечает его тегом out и держит в режиме наблюдателя, даже если он возродится. Счётчик смертей виден в списке по Tab, так что оставшиеся жизни каждого становятся частью игры. После установки пака выполните minecraft:reload (на Paper обычный reload - это перезагрузка плагинов Bukkit, которая вам не нужна) и проверьте, что datapack list показывает пак включённым. Правила папок и отладка пака, который ничего не делает, описаны в статье руководство по датапакам.

При системе жизней снова встаёт выбор keepInventory. Со значением false каждая смерть по-прежнему обходится дорого; со значением true смерть стоит только жизни. Большинство компаний оставляют false.

Дезбаны и стоит ли мёртвым оставаться#

Когда игрок умирает в чистом хардкоре, он остаётся на сервере наблюдателем. Отсюда вопрос, на который каждая компания отвечает по-своему: могут ли мёртвые наблюдать и разговаривать?

  • Наблюдатели разрешены. Мёртвые игроки остаются в сообществе, а на сервере для друзей это важно. Цена - информация: наблюдатель может пролететь сквозь землю и рассказать живым, где алмазы и крепости. Большинство компаний решают это правилом, а не кодом.
  • Дезбан. Мёртвые удаляются с сервера до конца сезона. Жёстче и чище. В датапаке выше можно заменить строку с gamemode на ban @a[tag=out], но ban - команда операторского уровня выше того, что функции могут выполнять по умолчанию. Функции работают на уровне, заданном function-permission-level в server.properties, по умолчанию 2, а ban требует 3, так что поднимите значение до 3, если используете этот вариант.
  • Временный дезбан. Бан на определённое время - день, неделю. В vanilla нет временных банов; для этого нужен плагин модерации на Paper с поддержкой временных банов или ручная процедура.

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

Воскрешения и кому их разрешено делать#

Воскрешение - это просто /gamemode survival <name> от оператора. Игрок переходит в режим выживания там, где находится его камера наблюдателя, с пустым инвентарём, потому что всё, что он нёс, выпало на месте смерти.

Именно в этой простоте и опасность. На хардкорном сервере аккаунт оператора - это кнопка воскрешения, а «только в этот раз» - именно так хардкорный сезон превращается в обычный SMP. Договоритесь о правилах воскрешения заранее:

  1. Никаких воскрешений. Единственное честное правило для соревновательного сервера.
  2. Воскрешения только при сбоях сервера. Краш, скачок лагов, откат. Самый частый выбор и самый трудный для оценки - поэтому и существует следующий раздел.
  3. Заработанные воскрешения. Живые игроки платят цену - редкий предмет, убийство босса, ритуал на спавне, - а оператор выполняет воскрешение. Несколько плагинов и датапаков реализуют алтари воскрешения или головы игроков, возвращающие человека; проверьте, что выбранный поддерживает именно вашу версию, и протестируйте его на копии мира.

Если у вас система жизней, воскрешение также означает сброс счёта и тега:

code
scoreboard players set Alex deaths 0tag Alex remove outgamemode survival Alex

Держите список операторов коротким. На хардкорном сервере люди с правами оператора в идеале не должны играть в сезоне или должны пользоваться всеобщим доверием, что не применят их для себя. Более широкий взгляд на роли персонала - в статье правила сервера, модерация и персонал.

Смерти от лагов, краши и откаты#

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

Предотвратите, что можно:

  • Сгенерируйте мир заранее. Генерация чанков во время игры - главная причина скачков лагов, а на хардкоре скачок лагов может убить. Сгенерируйте игровую зону до начала сезона.
  • Держите дальность прорисовки и симуляции умеренными. view-distance=8 и simulation-distance=6 разумны для небольшой компании. Больше - в статье оптимизация Paper.
  • Оставляйте запас памяти. Сервер, упёршийся в лимит памяти, останавливается извне. В RE:NODE контейнер останавливается и чисто перезапускается, а не уходит в swap - это лучше, чем сервер, который минутами еле ворочается, но мир теряет всё, что произошло после последнего сохранения, а на хардкоре это может быть и смерть, и спасение от неё.
  • Следите за графиками во время активных сессий. Консоль показывает CPU и память относительно лимитов тарифа. CPU жёстко ограничивается купленной долей, так что сервер на 100% работает медленно, а не сломан, - но именно медленный сервер и убивает людей на хардкоре.

А затем заранее решите, что делать, если всё равно что-то пойдёт не так:

  • Смерти от лагов: воскрешают ли игрока, умершего от заметного лага сервера? Кто решает и на основании чего? Правило вроде «если в логе сервера есть предупреждение Can't keep up! в минуту смерти - воскрешаем» объективно и легко проверяется.
  • Краши и откаты: если сервер падает и мир откатывается, мёртвый игрок может снова оказаться живым, а живой - потерять час прогресса. Большинство компаний принимают за истину состояние мира после перезапуска.
  • Восстановление из бэкапа: восстановление мира ради исправления повреждения заодно воскрешает всех, кто умер после этого бэкапа. Договоритесь, засчитываются ли эти смерти.

Бэкапы на хардкорном сервере по-прежнему важны, пожалуй, даже больше обычного: мир - это и есть сезон, и повреждение данных заканчивает его так же верно, как крипер. В каждом игровом тарифе RE:NODE есть слоты для бэкапов, которые хранятся вне машины, - по запросу или по расписанию. Как снять согласованную копию и восстановить одного игрока или участок, рассказано в статье бэкап и восстановление мира.

Сезоны и вайпы#

Хардкорные серверы обычно живут сезонами: мир существует, пока все не умрут, до определённой даты или пока не падёт дракон. Конец сезона - это вайп мира:

  1. Объявите о нём. Дайте игрокам последний день на скриншоты.
  2. Остановите сервер и снимите финальный бэкап, а затем скачайте его. Игроки позже захотят получить мир; предложите его для скачивания.
  3. Удалите папки мира. Оставьте server.properties, белый список и плагины.
  4. Сбросьте счёт, если использовали датапак с жизнями. Скорборд хранится в папке data/ мира, так что новый мир в любом случае начнётся с чистого листа.
  5. Выберите новый сид или оставьте случайный, сгенерируйте мир внутри границы и запускайте.

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

FAQ#

Что происходит после смерти на хардкорном сервере Minecraft?

Вы переходите в режим наблюдателя и не можете возродиться. Вы можете оставаться подключённым, летать сквозь блоки и смотреть за другими игроками. Оператор может вернуть вас командой /gamemode survival <name>, и вы появитесь с пустым инвентарём там, где находится ваша камера наблюдателя.

Можно ли превратить существующий мир в хардкорный?

Иногда, но от версии к версии это ненадёжно. Надёжный путь - новый мир с hardcore=true, указанным до генерации. Чтобы конвертировать существующий, помимо параметра установите байт hardcore в level.dat в 1 с помощью NBT-редактора и предварительно сделайте бэкап.

Можно ли автоматически банить игроков после смерти?

Ванильный хардкор в современных версиях этого не делает. Небольшой датапак может банить игроков, чей deathCount достиг лимита, но ban требует уровня прав 3, поэтому укажите function-permission-level=3 в server.properties. Если нужны временные баны, альтернатива - плагин модерации.

Можно ли изменить сложность на хардкорном сервере?

Нет. Хардкор фиксирует сложность на hard, а параметр и команда difficulty игнорируются. Если вам нужна сложность hard с возрождениями, укажите hardcore=false и difficulty=hard и используйте систему жизней.

Сколько жизней должно быть на хардкорном SMP?

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


Комментарии

Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.

0/2000