Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

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

Статус
Закрыто для дальнейших ответов.

vladF

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


Шаг второй:
Введи его в строку поиска
253c62465e.png


Шаг третий:
Добавь в любом месте запроса слово Bukkit
57d7d950c8.png


Среди кучи результатов видим:
a7ad48686e.png

Изучаем.
Теперь мы знаем что наши теги называются NBT-Теги.

Шаг 4:
Применяем полученные знания дабы дополнить исходный вопрос:
13752f24ce.png


Шаг 5:
Поздравляю - вы восхитительны.
28a841feec.png


Теперь было бы не плохо научится делать так самому.
 
Пособие по гуглу для начинающих плагин-девелоперов
Шаг первый:
Переведи свой вопрос через гугл переводчик.
0347da5f11.png


Шаг второй:
Введи его в строку поиска
253c62465e.png


Шаг третий:
Добавь в любом месте запроса слово Bukkit
57d7d950c8.png


Среди кучи результатов видим:
a7ad48686e.png

Изучаем.
Теперь мы знаем что наши теги называются NBT-Теги.

Шаг 4:
Применяем полученные знания дабы дополнить исходный вопрос:
13752f24ce.png


Шаг 5:
Поздравляю - вы восхитительны.
28a841feec.png


Теперь было бы не плохо научится делать так самому.
:good:
 
Есть плагин PowerNBT от нашего соотечественника. Воспользуйтесь его API для чтения nbt пребмета.
 
А можно вообще все это лором запилить и не париться.
 
Тут есть два момента.
1-й отловить момент "съедания". Упомянутое событие:

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

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


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

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

Если всё осталось как было, но недостаточно контролировать наличие/отсутствие печеньки по времени. Нужно проверять не выбросил ли он её, не умер ли игрок, не переложил ли в другой слот и т.п. Иначе игроки быстро научатся их дюпать.
 
Спасибо всем! Пока вопросов нет. Скоро пойду пробовать, но пока тему не закрываю, ибо возникнут другие вопросы
 
Тут есть два момента.
1-й отловить момент "съедания". Упомянутое событие:


выстреливается в момент начала поглощения предмета (т.е. когда на экране появляется первая анимация). Если в этот момент мышку отпустить - то, событие-то пройдёт, а печеньку никто не съест.
Фактически тут нужно городить огород с проверкой пропала ли печенька (заменилась ли бутылка на пустую) и т.п.
Я однажды на это плюнул и просто по правому клику убирал предмет, а на игроку проигрывал звуковой эффект поедания предмета.
Ну что вы такое говорите? Сколько живу, всегда этот эвент кидался в момент окончания поедания. Иначе бы это был бы ИнтерактЭвент с другим названием.
А вот по поводу нбт тегов - есть моменты, когда при модификации предмета через BukkitApi теги стираются.
 
Ну что вы такое говорите? Сколько живу, всегда этот эвент кидался в момент окончания поедания. Иначе бы это был бы ИнтерактЭвент с другим названием.
Вот если бы я как-то часа два не промучался с этим, я бы не говорил. Может мне просто не повезло, что именно с тем билдом и именно в то время была проблема. Кстати, был соответствующий тикет на баг-трекере баккита. Поскольку это событие мне было нужно лишь однажды, позднее я его не проверял.
 
Все, я решил эти вопросы. Использовал ивент PlayerItemConsumeEvent. А там просто проверил, что у печеньки есть описание (lore) и все) Спасибо всем
Вот если бы я как-то часа два не промучался с этим, я бы не говорил. Может мне просто не повезло, что именно с тем билдом и именно в то время была проблема. Кстати, был соответствующий тикет на баг-трекере баккита. Поскольку это событие мне было нужно лишь однажды, позднее я его не проверял.
Вы не правы. Только что проверил, что он вызывается после поедания еды
 
Все, я решил эти вопросы. Использовал ивент PlayerItemConsumeEvent. А там просто проверил, что у печеньки есть описание (lore) и все) Спасибо всем

Вы не правы. Только что проверил, что он вызывается после поедания еды

Ну и отлично. Я поэтому несколько раз заострял внимание на том, что нужно проверить.
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх