1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Как можно задать характеристику тнт для опознования

Тема в разделе "Разработка плагинов для новичков", создана пользователем JayRoon, 29 авг 2022.

Статус темы:
Закрыта.
  1. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Извините за странное название в шапке, не знаю как по другому написать, суть такая:
    Хочу сделать разные виды динамита, к примеру один дефолтный, второй посильнее который больше блоков просто взорвёт, а третий довольно сильный, как я собираюсь добавлять новые виды, я создаю новые предметы через ItemStack, и выдаю игроку их, но, есть один нюанс, как сделать что бы именно такой новый динамит выполнял код специальный, то-есть его можно было отличить от обычного тнт.
    Я начало думал через BlockExplodeEvent проверять, если взорвался тнт специальный выполнять код, то-есть отличать его по признакам, но по-сути это взрыв блока, а не сущности, как мы знаешь, Динамит - сущность(Entity), и надо юзать EntityExplodeEvent, но по каким данным у сущности сравнивать с обычным кастомным предметом который создан через ItemStack и ItemMeta? Я начало думал по MetaData, искал в интернете как её указывать, но не понял нечего про неё.. Буду рад если поможете.
     
  2. HauserGrim

    HauserGrim Активный участник Пользователь

    Баллы:
    96
    Так как не понимаешь как это работает, у тебя могут возникнуть сложности.
    Ниже опишу своё виденье того, как это можно реализовать, но в чём-то могу ошибиться.

    При установке блока, не важно какой был предмет, установится обычный блок без данных предмета. (есть исключения типа шалкеров, но не суть)
    Так что где-то сохраняй локацию и нужные данные при BlockPlaceEvent.

    При поджигании, спаунится тнт тоже не связанный с блоком.
    По этому нужно отслеживать все варианты поджигания тнт (не само поджигание, а только то, как должно поджигаться, типа клик игрока (PlayerInteractEvent) огнивом по блоку), проверять локацию блока, которую сохранял при BlockPlaceEvent, удалять блок, спаунить подожженный тнт и куда-то сохранять uuid этого энтити.

    При взрыве (EntityExplodeEvent) проверяешь хранится ли у тебя uuid энтити там, где ты их сохраняешь и уже выполняешь какой хочешь код.

    Сложно? Могу предложить избавиться от части с поджиганием и сразу спаунить подожжённый при установке, так как способов поджечь не мало. Только придётся отменить BlockPlaceEvent, проверить и удалить предмет из инвентаря, заспаунить и сохранить подожженный тнт и его параметры и проверить их при взрыве.
     
  3. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    0_0......
     
  4. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    По первому пути, если сохранять в мапу location данные? Если можно, не уверен в этом. Если туда скинуть в одну точку 2 тнт? Локации разные будут?
     
  5. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Вообще не имею представления о uuid сущности что это такое, типо как у игроков ууид который имеет свой порядковый номер обозначения?
     
  6. HauserGrim

    HauserGrim Активный участник Пользователь

    Баллы:
    96
    У тебя технически не получится два одинаковых ключа (локации) хранить в хэшмапе, да и после поджигания, локацию нужно удалять и уже смотреть за энтити, а два блока в одну локацию не убрав другой не поставить.
    Получаешь тем же методом, что и у игрока (getUniqueId).
    Уникальный id, то есть, не может быть двух одинаковых, нужны для опознавания кто есть кто. Конечно можешь в мапу пихать и сам энтити, но это не правильно, например после перезапуска, если будешь сохранять на диск данные, у обьектов твоих энтити будут доугие адреса в памяти, от чего их не опознает.
     
    Последнее редактирование: 29 авг 2022
  7. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    С uniqueId я разобрался вчера, на самом деле.. Спасибо большое! Я давно ломал голову как это волпатить, и первый ваш способ помог и всё сработало, на самом деле я очень рад :cool:
    Но ещё один вопрос, каким образом я могу хотя бы какую то часть проверить, поджёг ли игрок его? Как я знаю, есть такие способы поджога:
    - Поджёг от взрыва динамита соседнего
    - Поджёг от редстоун сигнала
    - Поджёг от лука или арбалета(арбалет не точнооо) с зачарованием "Воспламенение"
    - Поджёг зажигалкой
    - Поджёг от удара молнией по динамиту(не уверен что так может быть :nerd:)
    - Поджёг от огня который распространился, к примеру от удара грозы зажглись деревья и пошло дальше до тнт
    Пока это всё, больше не знаю, можно ли хотя бы что то из ник проверить, если да - то как?
     
  8. HauserGrim

    HauserGrim Активный участник Пользователь

    Баллы:
    96
    Отслеживать ивенты, гугли, желательно на английском. Каждый случай за тебя гуглить не буду.
     
  9. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Можно просто через ивент ExplosionPrimeEvent проверять, если сущность - взрывающийся динамит, то выполнять действие? или надо по другому проверять на поджиг?
     
  10. HauserGrim

    HauserGrim Активный участник Пользователь

    Баллы:
    96
    Конечно, нужно проверять, что это зажженный динамит, но тебе же ещё и надо проверить твой ли это и его "тип" (ты же хочешь новые типы динамита), по этому ты и спаунишь и сохраняешь ююид и тип своего тнт , а при взрыве проверяешь.
     
  11. Автор темы
    JayRoon

    JayRoon Участник Пользователь Заблокирован

    Баллы:
    31
    Имя в Minecraft:
    Krongss_FUR
    Мм, я понял, надо начало найти ивенты которые соответствуют - активации от редстоуна, активации от выстрела с лука/арбалета, активации от молнии, активации от взрыва чего то, мда.. Долго и нудно, ладно, вопрос решили, спасибо большое.
     
Статус темы:
Закрыта.

Поделиться этой страницей