ecb741140b5028eb1e23d1368601d355fb692e0c
Восьмой этап: поведение мира пустоты. Заход в пустоту пока не сделан, но все правила поведения готовы и включаются сразу, как только игрок туда попадёт. Что сделано: - режим приключений на входе и возврат прежнего на выходе. Слушается PlayerChangedWorldEvent, а не проверка каждый тик: состояние меняется только при смене мира, и событие об этом сообщает. - кровать в пустоте взрывается. Тип измерения уже запрещает сон через bed_works, но игрок всё равно получает сообщение об успешном сне и ждёт пробуждения — доводим до взрыва. - якорь возвражения взрывается. - ломать блоки нельзя. - эмбиент базальтовых дельт: AMBIENT_BASALT_DELTAS_LOOP и ADDITIONS, плюс пепельный дым и белые языки пламени. Одна задача на сервер, не на игрока. Три ошибки поймал компилятор, а не я, и все три были про выдуманные имена: 1. PlayerRespawnAnchorEvent в этом API НЕ существует. Есть только блочные данные org.bukkit.block.data.type.RespawnAnchor. Якорь ловится обычным PlayerInteractEvent со сверкой типа данных блока. 2. У PlayerChangedWorldEvent в Paper есть только getFrom(), getTo() нет. Но к моменту события игрок уже в новом мире, поэтому цель берётся из p.getWorld() — это надёжнее, чем отсутствующий геттер. 3. PlayerBedEnterEvent#getBed() возвращает Block, а не Bed. Приводим с проверкой: при неудачном входе в кровать блок может оказаться чем угодно. Имена enum проверял по jar, а не по памяти: звук называется AMBIENT_BASALT_DELTAS_ADDITIONS, со строчной s в DELTAS. Варианта без неё в enum нет. Плюс в лог при старте печатается имя найденного измерения. Оно оказалось world_delta_void_void_world, а не delta_void:void_world, как я бы угадал: сервер добавляет префикс папки мира и санитизирует путь. Угадывать имя измерения в коде было бы верным способом не заработать.
Description
BlackKnife plugin - DeltaMine
Languages
Java
100%