3458 Commits

Author SHA1 Message Date
SashegDev 1a2f3bbde7 feat(delta): void dimension at 2:1 coordinate scale, plus World#convertLocation
Build Delta / Build paperclip jar (push) Successful in 7m57s
Мир пустоты как кастомное измерение датапаком и пересчёт координат между
мирами с разным масштабом.

Механизм масштаба — тот же, что у Незера: поле coordinate_scale в типе
измерения, а пересчёт при переходе равен делению масштаба источника на
масштаб назначения. Для пустоты нужно ровно 2.0, то есть один блок пустоты
на два блока оверворлда. Проверено на сервере: coord scale overworld=1.0
void=2.0.

Биом сделан своим (delta_void:void), а не переопределением ванильного
minecraft:the_void. Переопределение трогало бы данные Mojang и конфликтовало
с любыми другими датапаками. Отличия от ванильного — только цвета:
sky_color и fog_color в ноль, плюс выключенный туман и вода.

Что потребовалось по дороге, все три ошибки поймал сервер, а не я:

1. У типа измерения в 1.21.8 обязательное поле logical_height. Без него
   сервер отказывается стартовать: "No key logical_height".

2. Файл измерения не принимает дискриминатор "type": "minecraft:dimension".
   Кодек LevelStem читает поле type как ССЫЛКУ на тип измерения, и мой
   дискриминатор уходил в неё как имя типа. Правильно — "type" со значением
   delta_void:void.

3. getAllLevels() живёт на MinecraftServer, а не на DedicatedServer, который
   отдаёт CraftServer#getHandle(). И dimensionType() в Paper уже разворачивает
   Holder, так что .value() там не нужен и ломает компиляцию.

Отдельно: World#getCoordinateScale() в Paper УЖЕ есть, причём реализован
ровно так, как я собрался писать. Для чтения масштаба ядро менять не нужно.
А вот пересчёта координат в API нет ни в Paper, ни в Bukkit: Player#teleport
его не делает, потому что телепорт не портал. Добавлен default-метод
World#convertLocation с той же формулой, что и ванильная, и без изменения Y.

Хорошая новость про отказ сервера: на битый датапак он не стартует, а
падает в safeMode. Тихая загрузка сломанной генерации была бы хуже.

Диагностика частиц всё ещё в CraftWorld, снимается после проверки прицела.
2026-10-15 21:55:19 +00:00
SashegDev e6a95a0f85 feat(delta): let plugins send particles beyond the vanilla 32-block cut
Build Delta / Build paperclip jar (push) Successful in 8m22s
Частицы не долетали дальше 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
SashegDev 0817a57065 feat(delta): playSoundAttenuated - wave propagation + normalized decay, one packet per player
Build Delta / Build paperclip jar (push) Failing after 5m24s
2026-09-30 10:39:11 +00:00
SashegDev 0373806e25 feat(delta): config persistence via Configurations.saveGlobalSection + decoupled sound range API
Build Delta / Build paperclip jar (push) Failing after 5m52s
2026-09-30 10:00:20 +00:00
Lulu13022002 19156cdd3b Give the right amount of experience after mending (#13047) 2025-09-06 13:49:56 -07:00
Emil 49ca2d2d76 chore: remove experimental status from Damageable#damage (#13021) 2025-08-29 18:15:29 +01:00
Jason Penilla 9d1d0ef3f3 Add and call RegionizedServerInitEvent from Folia (#13034) 2025-08-28 18:09:09 -07:00
Aeltumn 614e9acfca Improve APIs around riptide tridents (#12996)
Co-authored-by: Bjarne Koll <git@lynxplay.dev>
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
2025-08-23 21:12:30 +00:00
MCdragonmaster 52d9a2216c [ci skip] Fix typo in Display javadoc (#13010) 2025-08-23 20:59:05 +00:00
Strokkur24 42b653b197 Expose more argument types (#12665)
Co-authored-by: Bjarne Koll <git@lynxplay.dev>
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
2025-08-23 21:10:41 +01:00
Strokkur24 5622c9dd73 Expose attribute sentiment (#12974)
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
2025-08-23 17:15:16 +00:00
Pedro a9e7674933 Support for showNotification in PlayerRecipeDiscoverEvent (#12992) 2025-08-23 17:53:46 +01:00
Lulu13022002 1922be9074 Update custom tags (#12183) 2025-08-23 16:53:07 +01:00
Pedro b0da38c278 Repository details in RuntimeException for MavenLibraryResolver#addRepository (#12939) 2025-08-22 11:25:08 +01:00
Esophose 616a8795ea Add LootTable to BlockDispenseLootEvent (#12917) 2025-08-17 15:53:00 +01:00
Pedro b200237c7d Fix clone return for Paper PlayerProfile (#12984) 2025-08-15 21:56:54 +01:00
David a22447a555 Added getWorldPath to World API (#12952) 2025-08-15 21:39:09 +01:00
Warrior a743e6b1c7 [ci skip] Clarify tab completion ordering in event jd (#12965) 2025-08-15 21:33:10 +01:00
Warrior 2456ff26ed [ci skip] Update javadoc for tinted leaves particle (#12962) 2025-08-15 21:30:16 +01:00
Pedro abf6b6c228 Allow replace effects in Consumable Component Builder (#12938) 2025-08-08 18:17:34 +02:00
Emily 846c64f4d1 Allow for sending plugin messages during configuration stage (#12915) 2025-08-04 15:06:52 +02:00
Théo SZANTO 4d44b5fd55 Remove @Experimental annotation from the org.bukkit.damage package (#12898) 2025-07-29 20:22:46 -04:00
David a57636189a Add WorldDifficultyChangeEvent (#12471) 2025-07-26 23:38:16 +02:00
David Mayr 57c13137e4 Allow to change despawnInPeaceful (#12880) 2025-07-26 14:13:42 -07:00
Lulu13022002 840dd9e1f8 Fix dialog preconditions (#12895) 2025-07-26 21:35:19 +02:00
Emil c8a8c0ef89 feat(plugin): make Plugin extend Namespaced (#12867)
Co-authored-by: Bjarne Koll <git@lynxplay.dev>
Co-authored-by: Jake Potrebic <jake.m.potrebic@gmail.com>
2025-07-20 22:01:22 +00:00
Fisher 782ce950b8 Allow forcing break effects when using breakNaturally (#12734) 2025-07-18 22:17:38 +02:00
Umbre11as 0dad7f150b Add Bee#set/getTimeSinceSting() methods (#12792) 2025-07-18 22:17:06 +02:00
Tamion 1f93f56670 [ci-skip] Improve getPotentialBedLocation deprecation (#12857) 2025-07-17 17:59:36 +02:00
Bjarne Koll 6db4bc01a6 1.21.8 generators 2025-07-17 15:48:06 +02:00
David e792779dd8 Allow AreaEffectCloud#setColor to reset color for null (#12760) 2025-07-16 22:00:54 +02:00
David a6e0c08fdf Add getRotation to Location (#12799) 2025-07-16 21:52:05 +02:00
Clexus bda84069b4 [ci skip] fix typo in AttributeInstance (#12843) 2025-07-14 17:57:12 +02:00
Brokkonaut d9b5003fa1 Dried Ghast events and Happy Ghast spawn reason (#12788) 2025-07-14 17:56:44 +02:00
Jake Potrebic ba7c982605 Add missing Range annotations to dialog types
Closes #12825
2025-07-12 09:01:14 -07:00
Lach 25d358cf01 [ci skip] javadoc: Fix grammatical error for getState (#12817) 2025-07-12 17:44:23 +02:00
David 4000fcc3d7 Fix typo in PluginBootstrap javadocs (#12821) 2025-07-12 17:43:49 +02:00
caramel fcfc6c3fe8 Expose HexColor argument type (#12833) 2025-07-12 17:41:21 +02:00
Bjarne Koll 40764534a2 Specify the class loader when loading services (#12829) 2025-07-11 18:05:07 -07:00
Nassim Jahnke a939945148 Fixup sendAllDataToRemote calls
Reduces unnecessary item copies by a lot
2025-07-11 17:43:05 +02:00
Jake Potrebic b4466ec981 Dialog API (#12671) 2025-07-06 20:49:43 +02:00
Nassim Jahnke 3fec37a9c1 Move the double call into the dispatch method
At some point later,
2025-07-01 21:44:24 +02:00
Owen 6ea679eb07 Allow listening to plugin messages during configuration phase (#12775) 2025-07-01 15:40:50 +02:00
Newwind 51d28af8fa [ci skip] Typo in CartographyInventory (#12777) 2025-06-30 19:17:27 -07:00
Pedro 5661fbbab9 Add registry builder for Instrument (#12682)
Co-authored-by: Lulu13022002 <41980282+Lulu13022002@users.noreply.github.com>
2025-06-30 21:33:02 +02:00
masmc05 00e79dfb22 Fix wrong size in InventoryType#PLAYER (#12758) 2025-06-30 19:32:05 +02:00
Jake Potrebic 4cdcf00dca Only namespaced reload (#12773) 2025-06-30 10:27:30 -07:00
Nassim Jahnke 4045339e4c 1.21.7 2025-06-30 16:16:56 +02:00
Jake Potrebic 371a422567 Remove a bunch more experimental annotations (#12712) 2025-06-30 11:49:19 +02:00
Owen 7f60924390 Configuration API (#12301)
This implements a solution that preemptively exits the tick loop if we have already marked the connection as disconnecting. This avoids changing the result of Connection#isConnected in order to avoid other possibly unintentional changes. Fundamentally it should be investigated if closing the connection async is really still needed.

This also additionally removes the login disconnecting logic for server stopping, as this was also a possible issue in the config stage but also shouldn't be an issue as connections are closed on server stop very early.

Additionally, do not check for isConnecting() on VERIFYING, as that seemed to be an old diff originally trying to resolve this code, however isConnected is not updated at this point so it pretty much was useless.
2025-06-30 11:49:15 +02:00