SashegDev 285bcbc282 feat(voidexit): stab a sharp item from a jump to open a one-way exit
Десятый этап: выход из пустоты. Теперь пустоту можно посмотреть и покинуть без
рестарта.

Как работает: в пустоте берёшь любой острый предмет, прыгаешь и жмёшь ЛКМ по
воздуху. Пол ищется верхним твёрдым блоком в колонке, а не лучом от глаз: пол
пустоты плоский, а луч при быстром падении проходит мимо. Дыра работает в одну
сторону — из пустоты выкидывает, снаружи это только метка, войти нельзя.

Три решения, которые стоит зафиксировать:

1. Высота при выходе берётся с поверхности ОБЫЧНОГО мира, а не из пустоты.
   Пустота стоит на барьере внизу диапазона, и прямой перенос высоты уронил бы
   игрока в камень. X и Z пересчитываются по соотношению 1:2.

2. Коэффициент берётся из getCoordinateScale, а не константой 2.0. Если
   coordinate_scale поменяется в датапаке, пересчёт последует за ним сам.

3. Живёт дыра по факту использования, как в условии, но с потолком в 5 минут.
   Иначе дыра, о которой владелец забыл, висит до рестарта и продолжает
   выкидывать людей из пустоты. Это моё добавление, не из описания.

Войти может только владелец: дыра сделана в пустоте, а по условию такая пускает
лишь открывшего.

Острый предмет определяется по суффиксу в имени материала: _SWORD, _AXE,
_PICKAXE, _SHOVEL, _HOE. Проверяется по всему инвентарю, а не только по руке:
в пустоте игрок в приключениях, и предмет в руке держать не обязательно.

Мелочь с API: слушатель не может принимать лишний параметр, Bukkit создаёт
его сам, поэтому плагин берётся из инстанса.

Проверено: плагин грузится без ошибок, измерение находится. Сам перенос не
проверялся — нужен игрок.
2026-10-19 04:07:25 +00:00
S
Description
BlackKnife plugin - DeltaMine
611 KiB
Languages
Java 100%