Оптимизация DAB и асинхронного трекинга сущностей в Pufferfish / Purpur 1.21.4
1. Почему на классических серверах Анархии падает TPS
При 250+ игроках на одной ноде Anarchy Grief 1.21.4 в загруженных чанках одновременно присутствуют десятки тысяч сущностей: мобы в фермах опыта, рамки, стойки брони, выбрасываемые предметы и воронки. В стандартном Paper обсчёт AI (`PathfinderGoal`) для моба в 48 блоках от игрока тратит ровно столько же процессорного времени, сколько и для моба прямо перед игроком.
2. Динамическая активация по расстоянию (Distance-based Activation)
Ядро Pufferfish / Purpur 1.21.4 применяет нелинейное снижение частоты тиков AI в зависимости от квадрата расстояния до ближайшего игрока. Если скелет находится на расстоянии 40 блоков, его интеллект обновляется не 20 раз в секунду, а 4–5 раз в секунду, при этом физика падения и получение урона обрабатываются без искажений.
3. Производственная конфигурация `pufferfish.yml`
dab:
enabled: true
start-distance: 12
max-tick-freq: 20
activation-dist-mod: 7
blacklisted-entities:
- minecraft:villager
- minecraft:ender_crystal
entity-timeouts:
enable-async-mob-spawning: true
allow-async-entity-tracker: true
В сочетании с асинхронным трекингом видимости сущностей (`allow-async-entity-tracker`) это снизило нагрузку на главный поток ноды Анархии с 28.5 мс до 12.1 мс MSPT.