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

Помогите Как сделать удочку-хук

Статус
Закрыто для дальнейших ответов.
Как сделать так, чтоб удочкой 1 игрок мог притянуть другого игрока к сибе?
Бери событие PlayerInteractEvent, проверяй, чтобы это событие было кликание правой кнопкой мыши по блоку или воздуху ( if(e.getAction.equals(Action.RIGHT_CLICK_BLOCK) || if(e.getAction.equals(Action.RIGHT_CLICK_AIR)) ). Затем проверяешь, чтобы у игрока в руке был придмет удочка ( e.getPlayer.getItemInHand.getType.equals(Material.FISHING_ROD) ). И если все проходит, то берешь Велоушити человека и добавляешь к нему вектор.

(35 мин)
 
Последнее редактирование:
И если все проходит, то берешь Велоушити человека и добавляешь к нему вектор.
А как тут достать человека, которого ударил крюк удочки (Через евент дамага?). Поскольку ему вектор надо добавить, который притянет его к человеку с удочкой.
 
Последнее редактирование:
А как тут достать человека, которого ударил крюк удочки (Через евент дамага?). Поскольку ему вектор надо добавить, который притянет его к человеку с удочкой.
Во-первых, чтобы это был именно ХУК-удочка, тебе надо сначала создать его. Через ItemStack. Metadat'u и.т.д. (Посмотри в инете про это).
Во-вторых, сначала проверяешь, что игрок получил домаг (EntityDamageByEntityEvent), смотришь, был ли это человек (e.getEntity().getType().equals(EntityType.PLAYER))? Таким же образом проверяешь, был ли доммагер человеком. Затем берешь доммагера, конвентируешь его в игрока ( ((Player)e.getDamager()) ) и проверяешь у него в руках удочку, с метадатой (именем), которую ты дал хуку. Если все проходит берешь велоушети Entity и добавляешь ему мнвентированный вектор доммагера.
 
О, плагиатик с плекса.
где
Во-первых, чтобы это был именно ХУК-удочка, тебе надо сначала создать его. Через ItemStack. Metadat'u и.т.д. (Посмотри в инете про это).
Во-вторых, сначала проверяешь, что игрок получил домаг (EntityDamageByEntityEvent), смотришь, был ли это человек (e.getEntity().getType().equals(EntityType.PLAYER))? Таким же образом проверяешь, был ли доммагер человеком. Затем берешь доммагера, конвентируешь его в игрока ( ((Player)e.getDamager()) ) и проверяешь у него в руках удочку, с метадатой (именем), которую ты дал хуку. Если все проходит берешь велоушети Entity и добавляешь ему мнвентированный вектор доммагера.
ща попробуем
добавляешь ему мнвентированный вектор доммагера.
а как инвертировать? Просто getVelocity ?
 
Умножь на -1, например.
А как инвертировать вектор дамагера.
Затем берешь доммагера, конвентируешь его в игрока ( ((Player)e.getDamager()) ) и проверяешь у него в руках удочку
Плагин робит когда ударить удочкой ЛКМ, а когда в руках удочка, крюк которой уже запустили, то не читает
 
ArrayList<FishHook> hook = new ArrayList<FishHook>();
Нужно слушать PlayerFishEvent
Когда оно сработало, проверяешь, есть ли у игрока в руках нужная удочка
Если есть, то добавляешь хук из event.getHook() в созданный выше ArrayList

В EntityDamageByEntityEvent нужно проверять, является ли дэмэджер FishHook
if (event.getDamager instanceof FishHook)
Если является, то проверяешь ArrayList на содержание крючка-дэмэджера
if (hook.contains(e.getDamager())
Если все верно, то удаляешь крючок из hook, добавляешь ударенной Entity вектор скорости etc.
 
Если все верно, то удаляешь крючок из hook, добавляешь ударенной Entity вектор скорости etc.
А как. Я только учусь писать плагины, и я еще не шарю в ArrayList
Вот что получилось
Код:
    ArrayList <Fish> hook = new ArrayList <Fish>();
   
    @EventHandler
    public void onPlayerFishing (PlayerFishEvent e){
        Player p = e.getPlayer();
        ItemStack i = p.getItemInHand();
        if (i.getType() == Material.FISHING_ROD){
            Fish h = e.getHook();
            p.getVelocity();
            Vector v = p.getVelocity();
        }   
    }
   
    @EventHandler
    public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
        e.getEntity();
        Entity s;
        s = e.getEntity();
        if (e.getDamager().getType() == EntityType.FISHING_HOOK){
            if (hook.contains(e.getDamager())){
               
            }           
        }
    }
 
Код:
ArrayList <Fish> hook = new ArrayList <Fish>();
      
    @EventHandler
    public void onPlayerFishing (PlayerFishEvent e){
        Player p = e.getPlayer();
        ItemStack i = p.getItemInHand();
        if (i != null && i.getType() == Material.FISHING_ROD){
           hook.add(e.getHook());
        }
    }
  
    @EventHandler
    public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
        if (e.getEntity() instanceof Player){
            Player entity = (Player) e.getEntity();
            if (e.getDamager() instanceof Fish){
                if (hook.contains(e.getDamager())){
                    e.setCancelled(true);
                    e.getDamager().remove();
                    Player shooter = (Player) ((Fish)e.getDamager()).getShooter();
                    entity.setVelocity(shooter.getLocation().toVector().subtract(entity.getLocation().toVector()).multiply(0.2).setY(1));
                }         
            }
        }
    }
Но есть небольшая проблема: будет всегда один клик задержки между запусками крючков
 
Код:
ArrayList <Fish> hook = new ArrayList <Fish>();
     
    @EventHandler
    public void onPlayerFishing (PlayerFishEvent e){
        Player p = e.getPlayer();
        ItemStack i = p.getItemInHand();
        if (i != null && i.getType() == Material.FISHING_ROD){
           hook.add(e.getHook());
        }
    }
 
    @EventHandler
    public void onEntityDamageByEntity(EntityDamageByEntityEvent e) {
        if (e.getEntity() instanceof Player){
            Player entity = (Player) e.getEntity();
            if (e.getDamager() instanceof Fish){
                if (hook.contains(e.getDamager())){
                    e.setCancelled(true);
                    e.getDamager().remove();
                    Player shooter = (Player) ((Fish)e.getDamager()).getShooter();
                    entity.setVelocity(shooter.getLocation().toVector().subtract(entity.getLocation().toVector()).multiply(0.2).setY(1));
                }        
            }
        }
    }
Но есть небольшая проблема: будет всегда один клик задержки между запусками крючков
Огромное спасибо
 
Статус
Закрыто для дальнейших ответов.

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

Назад
Верх