5.6 KiB
Delta
Экспериментальное серверное ядро на базе Paper для 1.21.8.
Сделано под узкие задачи: PvP-сервер с большим количеством кастомных способностей, тяжёлыми визуальными эффектами (Display-сущности, частицы, звуки) и ограниченным железом. Основная цель — выжать больше производительности с 4 vCPU / 8 ГБ RAM, не ломая совместимость плагинов.
Не для публичного использования. Ядро собирается под конкретный сервер и не имеет ни стабильности, ни гарантий безопасности. Не публикуйте его и не стройте на нём публичные проекты.
Совместимость — это приоритет
Delta — не форк с поломанным API. Плагины видят ровно то же, что и на Paper:
| Что | Значение | Почему |
|---|---|---|
| Группа артефакта | io.papermc.paper |
Versioning читает pom.properties по пути группы — смена ломает Bukkit.getBukkitVersion() |
| Версия | 1.21.8-R0.1-SNAPSHOT |
плагины парсят эту строку под API-фичи |
Brand-Id |
papermc:paper |
по нему работает ServerBuildInfo#isBrandCompatible |
| Пакеты | io.papermc.paper.*, net.minecraft.*, Bukkit API |
не трогаем вообще |
| Порядок тиков | стоковый | многопоток не трогает семантику |
Отличие только в отображении: Brand-Name = Delta, поэтому в F3 видно
server: Delta. Это единственное пользовательское отличие.
Что добавлено
/delta — инспекция и тюнинг
/delta status текущие значения конфигурации
/delta displayrange <блоки|0> дальность трекинга Display, 0 = стоковая
/delta reload перечитать конфиг
Периметр delta.admin.
Бюджет Display-сущностей
В ChunkMap.TrackedEntity#updatePlayer добавлен кламп дальности трекинга для
Display. Display-сущности не имеют физики и коллизий, поэтому их отсечение по
дальности безопасно: клиент просто их не видит, серверное состояние остаётся
корректным. Это снимает основную нагрузку от способностей, спавнящих
десятки BlockDisplay с viewRange=64.
Отключено по умолчанию — включается в paper-global.yml:
delta:
display-tracking-range-enabled: false
display-tracking-range: 64
particle-budget-per-player-per-tick: 0
sound-budget-per-player-per-second: 0
extended-particle-distance-enabled: false
extended-particle-distance: 128.0
decoupled-sound-range-enabled: false
Баннер при старте
При запуске печатается блок с версией, коммитом, веткой, списком включённых Delta-фич и предупреждением о статусе ядра.
Конфигурация сервера
Готовые тюнинг-конфиги под 4 vCPU лежат в zernmc-config/ —
трекинг сущностей, активация, хопперы, чанковая система, редстоун. Это
партиальные файлы: Paper мержит их с дефолтами.
Сборка
Требуется JDK 21. Две фазы, обязательно отдельными вызовами — при объединении
падает с ошибкой неявной зависимости applyResourcePatches -> processResources:
./gradlew applyPatches
./gradlew createMojmapPaperclipJar
Артефакты: paper-server/build/libs/paper-paperclip-*.jar
CI
Gitea Actions, воркфлоу .gitea/workflows/build.yml. Раннер живёт на отдельной
машине с 4 vCPU — на слабом хосте сборка невозможна.
Джобы выполняются в образе delta-builder:jdk21 (JDK 21 + node + git identity).
Node обязателен для actions/checkout, git identity — для applyFeaturePatches,
который делает commit.
Планируется
- Раздельные громкость и дальность звука (сейчас это один и тот же параметр — чтобы было слышно за 150 блоков, приходится делать volume=10, и в упор всё клиппит)
force/alwaysShowв публичном API частиц (сейчас недоступны плагинам)- Вынос симуляции «безопасных» чанков в worker-треды Moonrise — с чек-листом, исключающим BlockEntity и плагинные блоки, чтобы не сломать совместимость
Лицензия
Код ядра наследует лицензию Paper (GPLv3). Все изменения в
me.sashegdev.delta — тоже GPLv3.