Помогите Как проверить сгенерирован ли блок?

0xLairon1

Активный участник
Пользователь
Баллы
76
Имя в Minecraft
0xLairon1
Мне нужно проверить при ивенте ломания блока сгенерирован ли он миром или его проставил игрок? Вопрос стоит именно про средства Bukkit. Так как понятное дело можно костыльно кешировать установку блока и забивать этим ОЗУ.
 
Ну, по большей части никак. Разве что генерировать нетронутую копию мира (или иметь таковую заранее) и сравнивать блоки.
 
Ну, по большей части никак. Разве что генерировать нетронутую копию мира (или иметь таковую заранее) и сравнивать блоки.
Плохо, придется кеши делать хотябы темповые(
 
если на сервере есть CoreProtect то можно юзать его
 
> разработка плагинов
> "средства Bukkit"
> CoreProtect
Понял.
У CoreProtect есть апи.

Просто ставится плагин и затем при необходимости программно проверяется наличие взаимодействий с блоком.
Единственное - решение "из коробки" не очень оптимальное, поэтому при большом кол-ве взаимодействий метод их получения начинает вызываться крайне долго. Я для решения проблемы я написал вот такой класс: https://pastebin.com/xENR3VYP
 
Последнее редактирование:
Есть еще костыльный вариант, может подойти в зависимости от контекста задачи.
Если игрок ставит блок, вешаешь на него метку. Затем проверяешь наличие таковой у блока где тебе там нужно: есть - блок поставил игрок, нет - мир
 
Да действительно, можно использовать CoreProtect, но одна проблема, мне нужно делать действие именно в момент ломания блока, тоесть отменять его или не отменять, а ждать пока там CP загрузит данные из БД не очень
 
Есть еще костыльный вариант, может подойти в зависимости от контекста задачи.
Если игрок ставит блок, вешаешь на него метку. Затем проверяешь наличие таковой у блока где тебе там нужно: есть - блок поставил игрок, нет - мир
Разве у блока есть контейнер для этого? Вроде только у предметов и сущностей он есть
 
Разве у блока есть контейнер для этого? Вроде только у предметов и сущностей он есть
У чанков есть контейнер, можно его использовать при желании.

Да действительно, можно использовать CoreProtect, но одна проблема, мне нужно делать действие именно в момент ломания блока, тоесть отменять его или не отменять, а ждать пока там CP загрузит данные из БД не очень
Тот код, что я скинул, работает достаточно быстро. Хотя, конечно, это не самый идеальный вариант.
В теории можно отменять разрушение блока в любом случае, и уже асинхронно выполнять проверку, после чего уже при необходимости удалять блок и спаунить земле его дроп
 
Разве у блока есть контейнер для этого? Вроде только у предметов и сущностей он есть
Да, извиняюсь, контейнеров оно не имеет.
Тогда варианта два:
1) хранить локацию и овнера каждого блока у себя в бд
2) как и писали выше, использовать сторонние апишки, например, coreprotect.
Или можно через nbtapi вешать на блоки нбтшки. Правда, я с этим практически не работал, поэтому не могу гарантировать надежность и работоспособность такого варианта, но он имеет место быть
 
Да, извиняюсь, контейнеров оно не имеет.
Тогда варианта два:
1) хранить локацию и овнера каждого блока у себя в бд
2) как и писали выше, использовать сторонние апишки, например, coreprotect.
Или можно через nbtapi вешать на блоки нбтшки. Правда, я с этим практически не работал, поэтому не могу гарантировать надежность и работоспособность такого варианта, но он имеет место быть
MetaData есть, можно её
 
Назад
Верх