Конфигурация сервера

Конфигурация выделенного сервера:

  • CPU: Ryzen 9 7950x, разгон до 5,7 Ghz на водяном охлаждении.

  • RAM: 32 GB

  • SSD: 560GB NVME от компании Samsung

  • ОС: Debian 11

  • Местоположение: Россия, Москва.

Ядро сервера:

У нас стоит Purpur

Статья очень старая. Настройки ядра здесь указаны только для мира построек.

В мире ферм никаких изменений не было.

Ограничение по мобам:

Ограничение интеллекта жителей:

В ядре PurpurMC есть функция lobotomize, которая используется для "лоботомизации" жителей, если они не могут двигаться (например, если они застряли в стене или блоках). Эта функция не отключает возможность торговли с жителем. Функция lobotomize реализована в классе EntityVillager и содержит следующий код:

if (!this.isAlive() && !this.world.isClient) {
    // Lobotomize the villager if it cannot move
    this.setVillagerData(this.getVillagerData().withProfession(VillagerProfession.NONE));
}

Как вы можете видеть, функция проверяет, жив ли житель

(isAlive())

и может ли он двигаться. Если житель мертв или не может двигаться, то его профессия устанавливается на VillagerProfession.NONE, что приводит к его "лоботомии". Чтобы предотвратить лоботомию жителей, необходимо обеспечить им достаточно пространства для передвижения. Жители могут быть лоботомизированы, если они застревают в блоках или находятся в узких пространствах, где нет возможности свободного движения. Чтобы избежать этого, рекомендуется обеспечить жителям достаточное пространство, чтобы они могли ходить и перемещаться по своим домам и рабочим местам. Также стоит избегать строительства домов и сооружений с очень узкими проходами, которые могут препятствовать движению жителей. Если вы обнаружили лоботомизированного жителя, то можно попробовать переместить его в более просторное место, где он сможет свободно передвигаться. Если это не помогает, то единственный способ восстановить жителя - заменить его на другого жителя той же профессии.

Почему это сделано? Жители могут создавать некоторую нагрузку на сервер, особенно если на сервере находится большое количество жителей, тем более нужно учитывать что за этот сезон посетило более 3500 игроков. Однако, есть различные способы оптимизации сервера, которые могут помочь справиться с этой нагрузкой, такие как использование плагинов для управления жителями, ограничение количества жителей на сервере и т.д. Но это не дает никаких плюсов, потому что мы тогда ограничим в использовании всех жителей по серверу. Поэтому мы прибегли к мере лоботомии и ничего сложного в этом нет.

Ограничение остальных мобов:

Если вы играете на сервере, то необходимо знать, что в каждом чанке может быть установлено ограничение на количество мобов, которые могут появляться. Обычно это ограничение составляет 25 мирных мобов и 25 монстров в каждом чанке, а также 25 жителей. Эти ограничения были введены для обеспечения более стабильной игровой производительности и снижения нагрузки на сервер.

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

Знание этих ограничений поможет вам избежать проблем с производительностью игры и гарантировать более приятный игровой процесс на сервере.

Конфиг сервера:

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

bukkit.yml

Подробнее о каждом параметре https://bukkit.fandom.com/wiki/Bukkit.yml/ru

spawn-limits: # Количество мобов на игрока
  monsters: 20 # Монстры 
  animals: 5 # Животные
  water-animals: 2 # Водные животные (Дельфины, спруты, ...) 
  water-ambient: 2 # Водные животные (Рыбы)
  water-underground-creature: 3 # Водные животные (Светящийся спрут)
  axolotls: 3 # Оксылотл 
  ambient: 1 # Окружение (Летучие мыши)
ticks-per: # Количество тиков на спавн моба
  animal-spawns: 400 # 20 сек
  monster-spawns: 10 # 0,5 сек
  water-spawns: 100 # 5 сек
  water-ambient-spawns: 400 # 20 сек
  water-underground-creature-spawns: 400 # 20 сек
  axolotl-spawns: 400 # 20 сек
  ambient-spawns: 400 # 20 сек

spigot.yml

Подробнее о каждом параметре https://www.spigotmc.org/wiki/spigot-configuration/

world-settings:
  default:
    hanging-tick-frequency: 200 # Время проверки декоративных сущностей (стойки/рамки/картины и т.д.)
    arrow-despawn-rate: 300 # 15 секунд на даспавн
    trident-despawn-rate: 1200 # 60 секунд на даспавн
    mob-spawn-range: 3 # Радиус в чанках от игрока, где будут спавнится мобы
    entity-activation-range: # Радиус в котором ентити будут активничать
      animals: 24
      monsters: 24
      raiders: 48
      misc: 8
      water: 8
      villagers: 20
      flying-monsters: 48
    tick-inactive-villagers: false # Инактивные жители не тикают
    entity-tracking-range: # Радиус в котором ентити будут видны
      players: 128 # Игрок
      animals: 48 # Жители, обычные/водные животные
      monsters: 48 # Монстры, рейдеры и фантомы
      misc: 32  # Таблички, картины, рамки, дроп итемов, опыт
      other: 64 # Все остальное (Например: Стойки для брони)

paper-global.yml

Подробнее о каждом параметре https://docs.papermc.io/paper/reference/global-configuration

item-validation: 
  book-size:
    page-max: 1280 # Ограничение в байтах на резмер книг
unsupported-settings:
  allow-headless-pistons: true
  allow-permanent-block-break-exploits: true
  allow-piston-duplication: true
  perform-username-validation: true

paper-world-defaults.yml

Подробнее о каждом параметре https://docs.papermc.io/paper/reference/world-configuration

chunks:
  auto-save-interval: 6000 # Авто сейв чанков на диск
  delay-chunk-unloads-by: 10s # Время через которое выгружаются неактивные чанки из ОЗУ сервера
  entity-per-chunk-save-limit:
    area_effect_cloud: 8
    arrow: 16
    dragon_fireball: 3
    egg: 8
    ender_pearl: 8
    experience_bottle: 3
    experience_orb: 16
    eye_of_ender: 8
    fireball: 8
    firework_rocket: 8
    llama_spit: 3
    potion: 8
    shulker_bullet: 8
    small_fireball: 8
    snowball: 8
    spectral_arrow: 16
    trident: 16
    wither_skull: 4
  max-auto-save-chunks-per-tick: 8
  prevent-moving-into-unloaded-chunks: true
collisions:
  max-entity-collisions: 4 # Количество ентити которое  сможет толкаться если они слишком близко
entities:
  behavior:
    pillager-patrols:
      disable: true
  spawning:
    creative-arrow-despawn-rate: 400
    despawn-ranges:
      ambient:
        hard: 54
        soft: 32
      axolotls:
        hard: 54
        soft: 32
      creature:
        hard: 54
        soft: 32
      misc:
        hard: 54
        soft: 32
      monster:
        hard: 54
        soft: 32
      underground_water_creature:
        hard: 54
        soft: 32
      water_ambient:
        hard: 54
        soft: 32
      water_creature:
        hard: 54
        soft: 32
    duplicate-uuid:
      mode: SAFE_REGEN
      safe-regen-delete-range: 32
    iron-golems-can-spawn-in-air: false
    non-player-arrow-despawn-rate: 400
    per-player-mob-spawns: true
fixes:
  disable-unloaded-chunk-enderpearl-exploit: true
  fix-curing-zombie-villager-discount-exploit: true
hopper:
  cooldown-when-full: true
misc:
  redstone-implementation: ALTERNATE_CURRENT # Достаточно ванильное поведение редстоуна, но могут быть отличия
  update-pathfinding-on-block-update: false
spawn:
  keep-spawn-loaded: false # Спавн чанки тключены, то есть они не прогружаются 24/7
tick-rates:
  behavior:
    villager:
      validatenearbypoi: -1
  container-update: 1
  grass-spread: 4
  mob-spawner: 2
  sensor:
    villager:
      secondarypoisensor: 40
unsupported-settings:
  fix-invulnerable-end-crystal-exploit: true

pufferfish.yml

Подробнее о каждом параметре https://docs.pufferfish.host/setup/pufferfish-fork-configuration/

enable-suffocation-optimization: true
enable-async-mob-spawning: true
projectile:
  max-loads-per-tick: 10
  max-loads-per-projectile: 8
dab:
  enabled: true
  start-distance: 12
  max-tick-freq: 20
  activation-dist-mod: 7
  blacklisted-entities: 
  - VILLAGER
inactive-goal-selector-throttle: true
misc:
  disable-method-profiler: true
  disable-out-of-order-chat: false
enable-async-entity-tracker: true
enable-async-pathfinding: true

Спавн и деспавн мобов:

Ниже приведен график, который показывает, как работает механика спавна мобов в игре. Это является стандартным поведением игры, которое называется "ванильной механикой". Однако, мы внесли изменение в значение Hard Despawn с 128 до 54 блоков.

Ниже приведено пояснение графика:

  • На графике изображены две сферы и цилиндр, которые определяют диапазон появления и активации мобов в игровом мире.

  • Красная сфера показывает зону появления мобов, которая находится между 24 и 54 блоками от игрока. Если игрок находится в этой зоне, он может столкнуться с мобами.

  • Зеленая сфера указывает на безопасную зону, свободную от мобов. Эта зона находится до 24 блоков от игрока, и мобы не будут появляться так близко к нему.

  • Цилиндр является областью, где мобы находятся в состоянии активности. Любой моб, находящийся в этом диапазоне до 32 блоков (измеряемых от центра игрока), будет двигаться и взаимодействовать с окружающей средой в нормальном режиме.

  • Если моб находится между кольцом из 32–54 блоков, его скорость тикания будет замедлена. И, наконец, если моб находится за пределами 54-го блока, он мгновенно исчезает.

После обновления до версии 1.19, почему моя ферма, построенная в более старой версии, теперь работает медленнее, хотя ничего не менялось?

В Minecraft происходит проверка спавна между самым нижним и самым высоким блоком (от Y0 до Y265 в версии 1.17), чтобы убедиться, что блок соответствует требованиям для возможной попытки спавна. Затем есть 24% шанс успеха спавна на этой конкретной высоте Y. Фермы рассчитываются на основе этого правила, и их оптимальное местоположение выбирается соответствующим образом.

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

Ферма эндерменов на высоте Y0 - советуется строить фермы эндерменов на высоте Y0, так как это наиболее эффективное место.

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

С этим в виду, ваша ферма может быть менее эффективной из-за изменения высоты мира. Вместо проверки возможности спавна от Y0 до Y265, теперь она происходит от Y-64 до Y320 для поиска самого низкого и самого высокого блока для выполнения попыток спавна. Ваша ферма из версии 1.17, расположенная на высоте Y0, теперь имеет дополнительно 64 блока ниже, что замедляет спавн мобов.

КАК РЕШИТЬ ПРОБЛЕМЫ...

Перестройте вашу ферму в самом низком месте мира, которое теперь находится на высоте Y-64. (Это наиболее идеальное решение, но также и самое болезненное).

Выкопайте еще больший периметр и очистите все ниже фермы от Y-64 до Y0 (только блоки воздуха).

Примите и поймите, что спавн мобов в многопользовательских серверах по своей природе содержит недостатки, и более подробное объяснение будет представлено в per-player-mob-spawns позже.

Кратко: наиболее эффективным местом для фермы является самый низкий уровень Y с пустыми блоками сверху. Из-за изменения высоты мира ваша ферма больше не находится в наиболее подходящем месте.

Last updated