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

Помогите Проблема с увеличением урона арбалету.

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

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

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

    Баллы:
    61
    Всем привет! Я хочу добавить урон арбалету. Делаю это с помощью двух Event'ов:
    Код:
    @EventHandler
        public void crossbowEvent(EntityDamageByEntityEvent e) {
            if (e.getEntityType() == EntityType.PLAYER && e.getDamager().hasMetadata("plusDamage") ) {
                Projectile p = (Projectile) e.getDamager();
                Player player = (Player) e.getEntity();
                player.damage(10);
            }
        }
    
        @EventHandler
        public void crossbowTag(ProjectileLaunchEvent e) {
            if (e.getEntityType() == EntityType.FIREWORK && e.getEntity().getShooter() instanceof Player ) {
                Player shooter = (Player) e.getEntity().getShooter();
    
                ItemMeta crossbowMeta = shooter.getInventory().getItemInMainHand().getItemMeta();
                if(crossbowMeta.getDisplayName().equals(ChatColor.LIGHT_PURPLE + "Мушкет")) {
                    e.getEntity().setMetadata("plusDamage", new FixedMetadataValue(plugin, true));
                }
            }
        }
    По задумке первый ивент должен наносить дополнительный урон, если тот, в кого попали - игрок и если у снаряда есть метадата "plusDamage". Второй же эту самую метадату задает, если снаряд - фейерверк и если он был запущен из конкретного арбалета(мушкета).

    Знающие наверно уже поняли в чем проблема, но я совсем новичок и особо не понимаю в этих типах энтити, уверен, что ошибка именно в этом. Помогите пожалуйста разобраться с этими дамагерами и шутерами. Огромное спасибо)
     
  2. mirrerror

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

    Баллы:
    76
    Имя в Minecraft:
    mirrerror
    Есть ошибки в консоли?
    Зарегистрировал Listener?

    Вместо player.damage(10); используй e.setDamage(e.getDamage()+10);
     
  3. Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Насколько я знаю игрок не может получить урон от 2х источников одновременно. А так как ты просто дамажиш игрока сразу после ивента то твой урон не проходит из за кд на урон. Выше mirrerror показал правильное решение но можно еще отменить ивент и выдать урон, тоже должно сработать.
     
  4. alexandrage

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

    Баллы:
    173
    Ну и вторая проблема, если арбалет в другой руке). Ведь можно ходить с мечем и арбалетом одновременно например.
     
  5. Bezobrazie

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

    Баллы:
    46
    Имя в Minecraft:
    MySoulIsCry
    Это не баг а фича:good:
     
  6. alexandrage

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

    Баллы:
    173
    Не фича, а выбор неверного ивента.
    Код:
        @EventHandler
        public void crossbowTag(EntityShootBowEvent e) {
            if(e.getHand()==EquipmentSlot.HEAD) {
               
            } else {
               
            }
        }
     
  7. Автор темы
    MarinCod

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

    Баллы:
    61
    Спасибо! Проблема и правда была в этом)
     

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