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

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

Тема в разделе "Разработка плагинов для новичков", создана пользователем Mykahailo_Levandovskyi, 2 июл 2015.

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

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

    Баллы:
    61
    Как сделать так, чтоб удочкой 1 игрок мог притянуть другого игрока к сибе?
     
  2. Хостинг MineCraft
    <
  3. DemoNIKman

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

    Баллы:
    66
    Имя в Minecraft:
    DemoNIKman
    Бери событие 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 мин)
     
    Последнее редактирование: 2 июл 2015
  4. Автор темы
    Mykahailo_Levandovskyi

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

    Баллы:
    61
    А как тут достать человека, которого ударил крюк удочки (Через евент дамага?). Поскольку ему вектор надо добавить, который притянет его к человеку с удочкой.
     
    Последнее редактирование: 2 июл 2015
  5. AlexGL

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

    Баллы:
    123
    Skype:
    alexandr_vertipolokh
    Имя в Minecraft:
    _ALEVER
    О, плагиатик с плекса.
     
  6. DemoNIKman

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

    Баллы:
    66
    Имя в Minecraft:
    DemoNIKman
    Во-первых, чтобы это был именно ХУК-удочка, тебе надо сначала создать его. Через ItemStack. Metadat'u и.т.д. (Посмотри в инете про это).
    Во-вторых, сначала проверяешь, что игрок получил домаг (EntityDamageByEntityEvent), смотришь, был ли это человек (e.getEntity().getType().equals(EntityType.PLAYER))? Таким же образом проверяешь, был ли доммагер человеком. Затем берешь доммагера, конвентируешь его в игрока ( ((Player)e.getDamager()) ) и проверяешь у него в руках удочку, с метадатой (именем), которую ты дал хуку. Если все проходит берешь велоушети Entity и добавляешь ему мнвентированный вектор доммагера.
     
  7. Автор темы
    Mykahailo_Levandovskyi

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

    Баллы:
    61
    где[DOUBLEPOST=1435840907,1435840872][/DOUBLEPOST]
    ща попробуем[DOUBLEPOST=1435850985][/DOUBLEPOST]
    а как инвертировать? Просто getVelocity ?
     
  8. Reality_SC

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

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Умножь на -1, например.
     
  9. Автор темы
    Mykahailo_Levandovskyi

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

    Баллы:
    61
    А как инвертировать вектор дамагера.[DOUBLEPOST=1435916055,1435855285][/DOUBLEPOST]
    Плагин робит когда ударить удочкой ЛКМ, а когда в руках удочка, крюк которой уже запустили, то не читает
     
  10. Bleach

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

    Баллы:
    68
    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.
     
  11. Автор темы
    Mykahailo_Levandovskyi

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

    Баллы:
    61
    А как. Я только учусь писать плагины, и я еще не шарю в 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())){
                   
                }           
            }
        }
     
  12. Bleach

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

    Баллы:
    68
    Код:
    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));
                    }         
                }
            }
        }
    Но есть небольшая проблема: будет всегда один клик задержки между запусками крючков
     
  13. Автор темы
    Mykahailo_Levandovskyi

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

    Баллы:
    61
    Огромное спасибо
     
Статус темы:
Закрыта.

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