Спавн мобов в UltraMine

Механика спавна мобов в ядре UltraMine полностью переписана (однако ванильную механику легко вернуть: spawnEngine: OLD в worlds.yml). В данной статье будут рассмотрены причины изменения механики, подробно описана новая механика и способы ее конфигурирования.

Что в ванилле не так с животными?

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

Что в ванилле не так с монстрами?

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

Чем отличается подход UltraMine (тезисно)

Конфигурация

Конфигурация спавна мобов задается в секции mobSpawn файла worlds.yml. Полное содержимое данной секции:

    mobSpawn:
        allowAnimals: true
        spawnAnimals: true
        spawnMonsters: true
        allowNPCs: true
        spawnEngine: NEW
        newEngineSettings:
            monsters:
                enabled: true
                minRadius: 2
                maxRadius: 2
                minPlayerDistance: 0
                performInterval: 20
                localCheckRadius: 1
                localLimit: 3
                nightlyLocalLimit: 5
            animals:
                enabled: true
                minRadius: 5
                maxRadius: 6
                minPlayerDistance: 0
                performInterval: 401
                localCheckRadius: 5
                localLimit: 3
            water:
                enabled: true
                minRadius: 3
                maxRadius: 5
                minPlayerDistance: 0
                performInterval: 400
                localCheckRadius: 4
                localLimit: 3
            ambient:
                enabled: true
                minPlayerDistance: 8
                performInterval: 1203
                localCheckRadius: 4
                localLimit: 10

Сначала перечислены ванильные опции: allowAnimals, spawnAnimals, spawnMonsters, allowNPCs. Опции allowAnimals и allowNPCs немного выделяются из остальных, т.к. запрещают животным или NPC в принципе находиться в мире, т.е. удаляют мобов. Опции spawnAnimals и spawnMonsters работают как с ванильный спавнилкой, так и UltraMine, отключая спавн животных и монстров соответственно.

Следующая опция, spawnEngine, позволяет выбрать, какую спавнилку использовать. Если переставить на OLD (капс обязателен), будет использована ванильная спавнилка.

Далее самое интересное - настройки спавнилки UltraMine. Они делятся на 4 независимые секции, для каждого класса мобов. monsters - все монстры, animals - все животные, water - водные, в ванилле только спруты, ambient - в ванилле только летучие мыши. Набор опций в каждой секции может немного различаться.

Опции minRadius и maxRadius задают минимальный и максимальный радиус (включительно) в чанках от игрока, на котором будут спавниться мобы данного типа. Примеры (P - чанк, в котором находится игрок, O - чанк, в котором не спавнятся мобы, # - чанк, в котором спавнятся мобы):

minRadius: 0     minRadius: 2     minRadius: 2
maxRadius: 1     maxRadius: 2     maxRadius: 3
                                    #######
                    #####           #######
    ###             #OOO#           ##OOO##
    #P#             #OPO#           ##OPO##
    ###             #OOO#           ##OOO##
                    #####           #######
                                    #######

Если minRadius установлен в 0, то мобы будут спавниться в т.ч. на том же чанке, где находится игрок. Обратите внимание, мобы в любом случае спавнятся только в активных чанках.

Опция minPlayerDistance задает минимальное расстояние (в блоках) от игрока, на котором могут спавниться мобы. Имеет смысл, когда minRadius <= 1, чтобы мобы не спавнились прямо перед игроком.

Опции localLimit и localCheckRadius задают локальный лимит на количество мобов. localCheckRadius - радиус в чанках, на котором производится подсчет количества мобов. Если количество мобов данного типа в данном радиусе превышает число, заданное опцией localLimit, мобы данного типа не будут спавниться на этом чанке. Для монстров также доступна опция nightlyLocalLimit, которая задает лимит, действующий в ночное время суток.

Опция performInterval задает промежуток времени (в тиках) между запусками спавна мобов.

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

Достоинства новой механики спавна мобов UltraMine

Возможные недостатки данной механики

Назад