Files
DeltaZern/README.md
T
2026-09-30 09:16:06 +00:00

103 lines
5.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Delta
Экспериментальное серверное ядро на базе [Paper](https://github.com/PaperMC/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`:
```yaml
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/`](zernmc-config/) —
трекинг сущностей, активация, хопперы, чанковая система, редстоун. Это
партиальные файлы: Paper мержит их с дефолтами.
## Сборка
Требуется JDK 21. Две фазы, **обязательно отдельными вызовами** — при объединении
падает с ошибкой неявной зависимости `applyResourcePatches -> processResources`:
```bash
./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](LICENSE.md)). Все изменения в
`me.sashegdev.delta` — тоже GPLv3.