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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    173
    Skype:
    shkurovs
  8. Den_Abr

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

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

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

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

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

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

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

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

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

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

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

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

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

    Баллы:
    173
    Код:
    @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 Старожил Девелопер Пользователь

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

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

    Баллы:
    173
    Skype:
    shkurovs
    Во-во. event.getEntity().isBlocking()
     
    Shockwave нравится это.
  17. Автор темы
    Shockwave

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

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

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

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

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

    Баллы:
    103
    Да конечно, e.getEntity() instanceof Player
     
  20. serega6531

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

    Баллы:
    173
    Skype:
    shkurovs
    Лучше e.getEntity().getType() == EntityType.PLAYER
     
    ql_Nik_lp и Shockwave нравится это.
Статус темы:
Закрыта.

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