Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Достать дамаг при PlayerInteractEvent.

Discussion in 'Разработка плагинов для новичков' started by Shockwave, Mar 24, 2014.

Thread Status:
Not open for further replies.
  1. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Вообщем вот такой вот код:
    Code:
    @EventHandler
    public void a(PlayerInteractEvent e)
    {
    while(e.hasBlock())
    {
    //Достать дамаг и понижать его
    }
    }
    Конечно логичнее через EntityDamagedByEntity, но там нету проверки на блокирование hasBlock()
    Прошу помочь.
    @Den_Abr
     
  2. Хостинг MineCraft
    <
  3. BeYkeR

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

    Trophy Points:
    173
    Попробуй через BlockDamageEvent
     
  4. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Вы не поняли, hasBlock() это не наличие блока в руках, а блокирование доспутим мечом как аналог RIGHT_CLICK_BLOCK'у
     
  5. BeYkeR

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

    Trophy Points:
    173
    hasBlock() это:
    Code:
     public boolean hasBlock()
      {
        //Проверка блока на null
        return this.blockClicked != null;
      }
     
  6. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Пардон, моя ошибка, но вопрос все же остается так как я могу заменить hasBlock() на while(e.getAction == Action.RIGHT_CLICK_BLOCK)
     
  7. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    while?? :eek:
     
  8. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Объясни понятнее, что ты хочешь
     
  9. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    EntityDamageByEntityEvent --> isBlocking()
    Как-то так мб?
     
  10. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Пока игрок зажимает пкм с предметом которым можно блокировать, например меч, нужно снижать получаемый урон
     
  11. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Эвент клика мышкой вызывается разово, тоесть нельзя узнать, что вот игрок зажал мышь. На голову ничего больше не приходит кроме записи времени последнего интеракта и сравнения его со временем удара
     
  12. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Мне нужно реализовать что то на подобие щитов, но если использовать ваш метод, то игрокам придется подбирать точное время когда происходит удар и успеть ставить щит, хотелось бы что бы можно было зажать и держать и блочить удары, но я так понял теперь придется прибегать реализации через мод
     
  13. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Если зажать мышь, эвент вызывается раз в пол секунды, каждый раз записывать время...
     
  14. BeYkeR

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

    Trophy Points:
    173
    Code:
    @EventHandler
    public void onPlayerDamage(EntityDamageByEntityEvent e){
    if(event.getEntity().getType() == EntityType.PLAYER){
    Player player = (Player)event.getEntity();
    ItemStack item = player.getItemInHand();
    if(item == null) return;
    if(item.getType() == Material.DIAMOND_SWORD){
    if(player.isBlocking()){
    
    int damage = event.getDamage();
    int minus = 5;
    
    event.setDamage(damage - minus);
    }
    }
    }
    }
    }
    Мб сработает.
     
  15. Den_Abr

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

    Trophy Points:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Возможно тс хочет такое не только с мечом, но и с досками, например, где уже ванильные методы не помогут.
     
  16. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Во-во. event.getEntity().isBlocking()
     
    Shockwave likes this.
  17. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Во, вы выручили меня, спасибо! Сделал вот так
    if (((HumanEntity) e.getEntity()).isBlocking()){}
     
  18. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Не забудьте проверять entity на игрока.
     
  19. Автор темы
    Shockwave

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

    Trophy Points:
    103
    Да конечно, e.getEntity() instanceof Player
     
  20. serega6531

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

    Trophy Points:
    173
    Skype:
    shkurovs
    Лучше e.getEntity().getType() == EntityType.PLAYER
     
    ql_Nik_lp and Shockwave like this.
Thread Status:
Not open for further replies.

Share This Page