- Поддерживаемые версии
- 1.21
- Ядра и Прокси
- Paper
- Минимальная версия Java
- 21
SNSpawners
Спавнеры, которые не спавнят мобов
Бесплатно · Открытый исходный код · MIT
────────────────────────────────────────────────────────────
Спавнеры, которые не спавнят мобов
Бесплатно · Открытый исходный код · MIT
────────────────────────────────────────────────────────────
В чём проблема
На SkyBlock спавнеры — это вся экономика. И они же — источник лагов номер один.
Обычная ферма работает так:
спавнер тикает → создаёт мобов (Entity) → мобы тикают, ищут путь, толкаются
→ умирают → роняют предметы (снова Entity) → воронка засасывает (снова тики)
Пятьсот спавнеров в приватах, помноженные на эту цепочку, — это 8 TPS и «сервер лагает» в чате каждые пять минут.
Что делает SNSpawners
Вырезает цепочку целиком. Ванильный спавн глушится, а лут рассчитывается математически и складывается в виртуальный склад спавнера. Игрок забирает его из меню или включает автовыгрузку в привязанный сундук.
Мобов нет. Предметов на земле нет. Воронки под фермой не нужны.
Чем отличается от бесплатных стакеров
Стакеры вроде WildStacker или RoseStacker уменьшают количество сущностей: вместо 200 зомби — один со счётчиком. Это помогает, но сущности остаются: они тикают, их надо убивать, лут всё равно падает на землю.
Режим «спавнер вообще не спавнит мобов, а сразу выдаёт лут по вероятностям» до сих пор встречается только в платных плагинах. Здесь он есть, и он бесплатный.
Главное инженерное решение
Наивная реализация стакающихся спавнеров бросает кубик на каждого моба. Стак из 2048 спавнеров × 4 моба за цикл × 180 пропущенных циклов = 1.5 миллиона бросков на один спавнер при загрузке чанка. Это и есть тот фриз, за который ругают стакеры.
SNSpawners не перебирает — он берёт выборку из распределения целиком:
- сколько раз выпал предмет — биномиальное распределение
B(n, p) - сколько всего штук — сумма
nравномерных величин
Пока попыток мало (по умолчанию до 64) — считается честным перебором, результат математически неотличим от ванильного. Выше порога включается аппроксимация: нормальная при большом среднем, пуассоновская при редких событиях.
Замеры производительности и точности
Скорость — 200 000 вызовов, прогретый JIT:
стак ×1 (n = 1 000) 29 нс на вызов
стак ×100 000 (n = 100 000 000) 29 нс на вызов
Стоимость расчёта не зависит от размера стака.
Точность — отклонение среднего от теоретического:
n=1e6 p=0.025 среднее 24999.6 ожидалось 25000 отклонение 0.002 %
n=1e6 p=0.000005 среднее 4.98 ожидалось 5 отклонение 0.5 %
n=32 p=0.5 среднее 15.99 ожидалось 16 отклонение 0.085 %
- Производство ленивое. Спавнер не тикает вообще. Он помнит момент последнего расчёта, и догон считается одной формулой — час простоя или месяц стоят одинаково.
- Жёсткий тик-бюджет. Обход идёт кольцевым курсором по плоскому массиву:
max-per-tickспавнеров за запуск, остальные достанутся следующему. Время одного тика не зависит от количества спавнеров на сервере — растёт только время полного круга. - Удаление за O(1) — перестановка с последним элементом, без сдвига хвоста.
- Данные лежат в блоке (PersistentDataContainer), внешней базы нет: ни I/O при выключении, ни миграций, ничего не разъезжается при откате бэкапа мира.
- Компактный склад. Ванильный дроп не имеет NBT, поэтому склад хранится строкой
id=количество, а не Base64 от сериализованного инвентаря — в десятки раз меньше и быстрее. - Голограммы на TextDisplay — без ИИ и физики, помечены непостоянными: в файл чанка не пишутся, дубли после рестарта невозможны. Текст пересобирается только при реальном изменении.
Возможности
- Стакинг с автослиянием при установке рядом; лимит выдаётся правом
snspawners.stack.<число> - Виртуальный склад с вместимостью по уровню и поведением при переполнении: STOP / VOID / REPLACE
- Оффлайн-накопление с потолком — защита от «выключил сервер на месяц»
- 5 уровней улучшений: скорость, удача (аналог Looting), вместимость склада
- Автовыгрузка в привязанный сундук, бочку или шалкер
- Автопродажа — лут сразу в деньги, с настраиваемой комиссией сервера
- Три GUI-меню: спавнер, постраничный склад, лестница улучшений — всё редактируется в gui.yml
- Голограммы над спавнером с произвольными строками
- Защита: только владелец, иммунитет к взрывам и поршням, чёрный список миров
- HEX и градиенты во всех текстах
- Каждое сообщение настраивается отдельно: канал доставки, префикс, звук, тайминги
Конфигурация
| файл | что настраивает |
|---|---|
config.yml | производительность, стакинг, защита, склад, голограммы, звуки |
spawners.yml | 16 типов мобов с таблицами лута и ценами, 5 уровней улучшений |
messages.yml | 45 сообщений — каждое со своим каналом, префиксом и звуком |
gui.yml | все предметы всех меню: слоты, материалы, имена, описания |
Ядра
Поддерживаются:
- Paper 1.21+
- Purpur
- Pufferfish
- Leaf, Gale и любые другие форки Paper
Не поддерживаются:
- Spigot, CraftBukkit, Bukkit — используются Paper-only API (Adventure, RegistryAccess, Display-сущности)
- Folia — региональная многопоточность требует отдельного планировщика
Совместимость с другими плагинами
- Работает поверх любых плагинов приватов (WorldGuard, GriefPrevention, ASkyBlock и прочих): обработчики стоят на HIGHEST с ignoreCancelled, поэтому отмена защитой срабатывает раньше.
- Не конфликтует со стакерами сущностей — мобов просто нет.
- Ванильные спавнеры из подземелий подхватываются при первом взаимодействии (отключается в
stacking.adopt-natural-spawners).
- Скачай
SNSpawners-1.0.0.jar - Положи в папку
plugins/ - Перезапусти сервер
- При желании поставь Vault и любой экономический плагин
Конфиги создадутся сами при первом запуске.
────────────────────────────────────────────────────────────
Somikyy
You must be logged in to see this link.
Разработка плагинов и 3D-моделей
В канале выходят новые плагины линейки SN — все бесплатные и с открытым исходным кодом.
Там же можно заказать плагин или модель под свой проект.
Лицензия MIT: используй на коммерческих серверах, включай в сборки, правь под себя.
Атрибуция приветствуется, но не обязательна.
Понравился плагин? Загляни в You must be logged in to see this link.
Somikyy
You must be logged in to see this link.
Разработка плагинов и 3D-моделей
В канале выходят новые плагины линейки SN — все бесплатные и с открытым исходным кодом.
Там же можно заказать плагин или модель под свой проект.
Лицензия MIT: используй на коммерческих серверах, включай в сборки, правь под себя.
Атрибуция приветствуется, но не обязательна.
Понравился плагин? Загляни в You must be logged in to see this link.
- Зависимости
- Обязательных нет. Плагин самодостаточен: ни одной библиотеки внутри, ни одного хард-депенда снаружи.
- Команды и права
- Команды
Основная команда: /snspawners · Алиасы: /snsp, /spawners
команда описание право /snsp help список команд — /snsp give <игрок> <тип> [кол-во] [стак] выдать спавнеры игроку snspawners.command.give /snsp info статистика и реальное время обхода в мс snspawners.command.info /snsp types список доступных типов — /snsp reload перезагрузить все конфиги без рестарта snspawners.command.reload
У всех аргументов работает автодополнение по Tab.
Права
право по умолчанию что даёт snspawners.use все открывать меню своих спавнеров snspawners.place все ставить спавнеры snspawners.stack.<число> — персональный лимит стака; берётся максимальное из выданных, но не выше stacking.max-stack snspawners.autosell — доступ к переключателю автопродажи snspawners.bypass оператор обход проверки владельца спавнера snspawners.command.give оператор выдача спавнеров snspawners.command.info оператор просмотр статистики snspawners.command.reload оператор перезагрузка конфигов snspawners.admin оператор всё вышеперечисленное сразу