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

Помогите Получить урон предмета

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

  1. Автор темы
    SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Доброго времени суток, форумчане.
    Я использую ивент EntityDamageByEntityEvent. Хотел получить урон предмета, который игрок держит в руке, но ,к сожалению, у getItemInHand нет метода getDamage.

    Как можно по другому решить мою задачу?
     
  2. imDaniX

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

    Баллы:
    96
    Имя в Minecraft:
    imDaniX
    Судя по гуглу - это можно сделать лишь вручную. Сделать какой-нибудь метод, который по Material будет определять урон. Геймпедия в помощь.
    Не забудь про nbt-атрибуты и зачарования, если есть нужда в их просчете.
    Если нужно конкретно в EntityDamageByEntityEvent - есть метод EntityDamageEvent#getDamage(), который возвращает урон до калькуляций брони. Но это неточно.
     
  3. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    У события есть getDamage(), а есть getFinalDamage() уже со всеми подсчётам
     
  4. Автор темы
    SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    В обоих случаях метод возвращает значение после совершения действия. Мне нужно достать значение до самого действия.
    К примеру, если в руках у игрока алмазный меч, то я должен получить число 7, если имеет какое-либо зачарование, то это число будет больше.
     
  5. alexandrage

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

    Баллы:
    173
    Там вроде был getOriginalDamage.
     
  6. Автор темы
    SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Не, все равно возвращает урон со всеми фичами. Мне нужно достать урон именно предмета, а не урон, который нанес игрок.
     
  7. alexandrage

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

    Баллы:
    173
    Тогда нет идей.
     
  8. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ну проверяй если дамагер именно игрок, а не стрела какая-нить, значит, что он нанес урон рукой/мечом/еще каким-т предметом => можно просто взять предмет в основной руке и смотреть аттрибут его дамага.
     
  9. Dymeth

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

    Баллы:
    98
    Имя в Minecraft:
    Dymeth
    Расскажи, что хочешь сделать в итоге - возможно подскажем другое решение твоей задачи
     
  10. kungermu

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    p.getPlayer - слови сначало плеера
    Scavenger API (плагин) - проверь итем и отправь на обработку
    Все как-бы кек, проблема решена...
     
  11. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Бред, зачем для этого апи какое-то)
     
  12. kungermu

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

    Баллы:
    66
    Имя в Minecraft:
    kungermu
    Человек видно что не очень шарит, так-что пока API его спасет только
     
  13. Автор темы
    SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    Зелья силы достаточно имбовые, поэтому хочу немного изменить их.
    Хотел сделать следующее: брать урон предмета, который находится в руке+ прибавлять некоторое значение(для каждой мощности зелья оно свое)
     
  14. IlyaHaker

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

    Баллы:
    76
    если выпито зелье, то
    e.setDamage(e.getDamage() + bonus);
     
  15. Автор темы
    SergK35

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

    Баллы:
    76
    Имя в Minecraft:
    Sergk35
    и в итоге e.getDamage() вернет значение урона(которое уже с выпитым зельем(с дефолт майна)) и мы еще накинем сверху бонус
     
  16. IlyaHaker

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

    Баллы:
    76
    e.getDamage() / (1.3 * n), где n - уровень эффекта зелья.
    Я, конечно, не уверен в формуле - 1й уровень зелья повышает урон на 130%, 2й - на 260, за уровни выше сказать не могу
    Повешай 3й, 4й уровень зелья на себя и отправь себе сообщение, в котором придет нанесенный урон и сравни с изначальным, без зелья. Наверное, так
    Но это костыль, да

    Наверное, лучше брать урон от меча из руки, как говорилось выше
     
    Последнее редактирование: 24 мар 2019

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