Files
DeltaZern/paper-server
SashegDev e6a95a0f85
Build Delta / Build paperclip jar (push) Successful in 8m22s
feat(delta): let plugins send particles beyond the vanilla 32-block cut
Частицы не долетали дальше 32 блоков, при том что механика способностей бьёт
на 120. Игрок дальше 32 блоков не видел прицела вообще, но удар приходил.

Причина оказалась на стороне сервера, а не клиента. В ServerLevel есть
    if (blockPos.closerToCenterThan(pos, longDistance ? 512.0 : 32.0))
где longDistance это параметр alwaysShow. По умолчанию он false, то есть 32
блока. Но Bukkit-API этот флаг не открывает: в CraftWorld.spawnParticle он
захардкожен в false, а параметр force уходит в overrideLimiter. То есть ни
один плагин на Paper не мог отправить частицу дальше 32 блоков.

Само поле alwaysShow сериализуется в ClientboundLevelParticlesPacket, поэтому
клиент со своей стороны отсечку тоже снимает — тем же механизмом, что и
ванильная команда /particle в режиме display.

Что сделано:

1. World#spawnParticleLongDistance(...) — default-метод, а не абстрактный.
   Причина: абстрактный метод в интерфейсе World ломает бинарную совместимость
   с любой сторонней реализацией. Фолбэк здесь ведёт себя как обычный
   spawnParticle, то есть деградация — «слишком короткая дальность», а не
   «частиц нет».

2. CraftWorld переопределяет его. Дистанция применяется фильтрацией списка
   получателей ДО вызова ServerLevel, а не патчем самого ServerLevel:
   sendParticlesSource принимает готовый receivers, поэтому достаточно отсечь
   его самим. Ванильная проверка остаётся нетронутой. Это принципиально —
   меньше правок в ванильных патчах, меньше риска конфликтов.

3. Конфиг extended-particle-distance перестал быть мёртвым. Раньше он был
   объявлен в DeltaConfig и выводился в /delta, но нигде не читался при отправке
   частиц, поэтому переключатель не делал ничего. Теперь он работает как
   потолок: плагин запрашивает сколько нужно, сервер режет до 128.
   extendedParticleDistanceEnabled=false возвращает стоковые 32.

Замер: /delta теперь показывает "extended distance 128.0 blocks" вместо "off".
2026-10-05 17:30:57 +00:00
..
…