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

Помогите Как отловить съедение игроком айтема с определённым nbt телом?

Тема в разделе "Разработка плагинов для новичков", создана пользователем vladF, 14 июл 2015.

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

    vladF Старожил Пользователь

    Баллы:
    103
    Привет друзья! Решил попробовать написать плагин, но опыта нет. Надеюсь, вы поможете.
    Суть в том, чтобы добавить крафт особой печеньки. Т.Е игрок выкладывает крафт в верстаке, получает печеньки. А дальше, если он её съест, то выполняется код. Если съест другую печеньки(обычную), то код не выполняется.
    Помогите, как такое реализовать? Пытался искать ивент съедания чего-либо, но не нашёл.
    Заранее спасибо
     
  2. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
  3. Автор темы
    vladF

    vladF Старожил Пользователь

    Баллы:
    103
  4. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    1) Взять предмет
    2) Посмотреть его теги
    3) ???
    4) Profit.
     
  5. Автор темы
    vladF

    vladF Старожил Пользователь

    Баллы:
    103
    Я спрашивал, как определить тег через плагин
     
  6. MrTrojan

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

    Баллы:
    98
    Имя в Minecraft:
    BlackTrojan
    Ну раз тут про теги, то спрошу: чо за теги и как их использовать?
     
  7. ql_Nik_lp

    ql_Nik_lp Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    q-nik-p
    Имя в Minecraft:
    ql_Nik_lp
    Пособие по гуглу для начинающих плагин-девелоперов
    Шаг первый:
    Переведи свой вопрос через гугл переводчик.
    [​IMG]

    Шаг второй:
    Введи его в строку поиска
    [​IMG]

    Шаг третий:
    Добавь в любом месте запроса слово Bukkit
    [​IMG]

    Среди кучи результатов видим:
    [​IMG]
    Изучаем.
    Теперь мы знаем что наши теги называются NBT-Теги.

    Шаг 4:
    Применяем полученные знания дабы дополнить исходный вопрос:
    [​IMG]

    Шаг 5:
    Поздравляю - вы восхитительны.
    [​IMG]

    Теперь было бы не плохо научится делать так самому.
     
  8. Rider3217

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

    Баллы:
    98
    Имя в Minecraft:
    Planet0111
    :good:
     
  9. saharin94

    saharin94 Старожил Пользователь Заблокирован

    Баллы:
    173
    Есть плагин PowerNBT от нашего соотечественника. Воспользуйтесь его API для чтения nbt пребмета.
     
  10. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    А можно вообще все это лором запилить и не париться.
     
  11. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Тут есть два момента.
    1-й отловить момент "съедания". Упомянутое событие:
    выстреливается в момент начала поглощения предмета (т.е. когда на экране появляется первая анимация). Если в этот момент мышку отпустить - то, событие-то пройдёт, а печеньку никто не съест.
    Фактически тут нужно городить огород с проверкой пропала ли печенька (заменилась ли бутылка на пустую) и т.п.
    Я однажды на это плюнул и просто по правому клику убирал предмет, а на игроку проигрывал звуковой эффект поедания предмета.

    2-й работа с NBT-тегами.
    Тут я рекомендую вот такую библиотеку: https://github.com/aadnk/AttributeS.../java/com/comphenix/attribute/NbtFactory.java
    Мне она очень понравилась, я уже взял себе в один плагин.
    Другое дело, что nbt-теги в данной ситуации нафиг не нужны. Достаточно в lore к печеньке добавить "Печенька с вареньем" и искать при поедании эту строку в lore предмета. Это проще, это работает и больше вероятность, что плагин "не сломатеся" при выходе новой версии сервера.
    P.S. Воообще сейчас к описанию PlayerItemConsumeEvent указано, что срабатывает при окончани поедания. Надо перепроверить. Но если будете им пользоваться - проверьте обязательно тоже. Возможно на разных серверах это по разному.
     
  12. energy455

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

    Баллы:
    78
    Skype:
    vlad_street
    а если сделать таймером?
    Например, начал есть печеньку запустился таймер(столько же времени сколько плеер ест печенку 1-2с) и сохранил сколько было у тебя печенек, как таймер досчитал до 0 , снова проверяем iteminHand and колво печенек
     
  13. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @energy455
    Вы проверьте как оно сейчас это событие работает. Я опираюсь на опыт с какой-то старой версией. Возможно уже всё не так (если верить описанию по ссылку приведенной @Den_Abr).

    Если всё осталось как было, но недостаточно контролировать наличие/отсутствие печеньки по времени. Нужно проверять не выбросил ли он её, не умер ли игрок, не переложил ли в другой слот и т.п. Иначе игроки быстро научатся их дюпать.
     
  14. Автор темы
    vladF

    vladF Старожил Пользователь

    Баллы:
    103
    Спасибо всем! Пока вопросов нет. Скоро пойду пробовать, но пока тему не закрываю, ибо возникнут другие вопросы
     
  15. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Ну что вы такое говорите? Сколько живу, всегда этот эвент кидался в момент окончания поедания. Иначе бы это был бы ИнтерактЭвент с другим названием.
    А вот по поводу нбт тегов - есть моменты, когда при модификации предмета через BukkitApi теги стираются.
     
  16. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Вот если бы я как-то часа два не промучался с этим, я бы не говорил. Может мне просто не повезло, что именно с тем билдом и именно в то время была проблема. Кстати, был соответствующий тикет на баг-трекере баккита. Поскольку это событие мне было нужно лишь однажды, позднее я его не проверял.
     
  17. Автор темы
    vladF

    vladF Старожил Пользователь

    Баллы:
    103
    Все, я решил эти вопросы. Использовал ивент PlayerItemConsumeEvent. А там просто проверил, что у печеньки есть описание (lore) и все) Спасибо всем
    Вы не правы. Только что проверил, что он вызывается после поедания еды
     
  18. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    Ну и отлично. Я поэтому несколько раз заострял внимание на том, что нужно проверить.
     
  19. Автор темы
    vladF

    vladF Старожил Пользователь

    Баллы:
    103
    Ладно, закрываю тему
     
Статус темы:
Закрыта.

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