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

Помогите Действия с лошадьми [Решено]

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

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

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

    Баллы:
    46
    Получил сущности. Лошадь - как проверить, сидит ли на ней игрок?
    Как принудительно его заставить слезть с лошади?
     
  2. Хостинг MineCraft
    <
  3. _MasterCapeXD_

    _MasterCapeXD_ Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    _MasterCapeXD_
    EntityMountEvent[DOUBLEPOST=1484728794,1484728418][/DOUBLEPOST]
    Также могут подойти другие вариантьі:
    Код:
     @EventHandler
    public void onMount(PlayerInteractEntityEvent e){
    e.getRightClicked().getPassenger().equals(e.getPlayer());
    }
    Еще ивент:
    VehicleEnterEvent

    Думаю хоть один подойдет:nerd:[DOUBLEPOST=1484729080][/DOUBLEPOST]Просто чтоб слезть, юзай e.setcanceled(true);
     
  4. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Идея такова, что мне нужно при вводе команды получить живность вокруг, определить что это лошадь, проверить сидит ли кто на ней и если да, то снять его.[DOUBLEPOST=1484729989,1484729521][/DOUBLEPOST]
    Код:
    List<Entity> en = senderplayer.getNearbyEntities(x, x, x);
                    for (Entity e : en) {
                        if (e.getType().equals(EntityType.HORSE)) {
                            LivingEntity le = (LivingEntity) e;
                            if (!le.isEmpty()) { //Если лошадь не пустая, то:
                                Player p = (Player) le.getPassenger(); //получили игрока
                                p.teleport(le.getLocation()); //телепортировали его на координаты лошади, тем самым сняв его с неё.
                            } //else ничего не делам, т.е. на лошади никого нет.
                        }
                    }
    
    [DOUBLEPOST=1484730267][/DOUBLEPOST]Знатоки, норм решение?
     
  5. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    p.leaveVehicle();
     
  6. _MasterCapeXD_

    _MasterCapeXD_ Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    _MasterCapeXD_
    p.isInsideVehicle() - проверяй игроков, есть ли они на транспорте
     
  7. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Спасибо, поправил.[DOUBLEPOST=1484731903,1484731839][/DOUBLEPOST]
    Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.
     
  8. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Это лишнее, получай пасендера и снимай его.
     
  9. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Код:
    if (!le.isEmpty()&&le.getPassenger() instanceof Player) { //Если лошадь не пустая, и на лошади именно игрок, то:
                        p = (Player) le.getPassenger(); //получили игрока
                        p.leaveVehicle(); //пинаем в кабздец игрока
                    } //else ничего не делам, т.е. на лошади никого нет.
    Добавляем проверку на игрока.
    Зачем? чтобы не выловить каст эксепшон.

    upload_2017-1-18_14-35-17.png
     
  10. _MasterCapeXD_

    _MasterCapeXD_ Участник Пользователь

    Баллы:
    31
    Имя в Minecraft:
    _MasterCapeXD_
    Как второй вариант... Решать тебе, лучше иметь запасной вариант ,при ошибке заменить можно
     
  11. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Есть же типы, instanceof тут не уместен.
     
  12. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Это как? а то я мало знаю
     
  13. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    .getPassenger().getType()[DOUBLEPOST=1484732164,1484732125][/DOUBLEPOST]if(h.getPassenger().getType() == EntityType.PLAYER) {
     
  14. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    а точно.

    я тупенький местами.
    тогда такой if (не знаю какая разница, но раз @alexandrage так сказал, значит так и есть)
    if (!le.isEmpty()&&le.getPassenger().getType().equals(EntityType.PLAYER))
     
  15. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Типы проверяются через == Ибо это enum.
     
  16. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Версия 1,7,10. Каким образом живность (не Player) может сесть на лошадь?
    Какой вариант всё же выбирать, ибо я вижу как минимум 3 работающих. \
    Помогите с выбором.
     
  17. slavik123123123

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

    Баллы:
    143
    Имя в Minecraft:
    Leymooooooooooo
    Разве еквалс не медленее чем == ?
     
  18. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    Код:
    if (!le.isEmpty()&&le.getPassenger().getType() == EntityType.PLAYER) { //Если лошадь не пустая, и на лошади именно игрок, то:
                        p = (Player) le.getPassenger(); //получили игрока
                        p.leaveVehicle(); //пинаем в кабздец игрока
                    } //else ничего не делам, т.е. на лошади никого нет.

    Essentials
    /spawnmob horse:saddled,pig
     
  19. alexandrage

    alexandrage Администратор

    Баллы:
    173
    Skype:
    alexandr0116
    Просто делаешь проверку игрок там или нет.

    if(horse.getPassenger().getType() == EntityType.PLAYER) {

    }[DOUBLEPOST=1484732690,1484732605][/DOUBLEPOST]
    Он просто и не понимает, что там enum.
     
    Последнее редактирование: 18 янв 2017
  20. Fenix78563

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

    Баллы:
    76
    Имя в Minecraft:
    Blc_Dragon
    спасибо.
     
  21. Автор темы
    Exception_Prototype

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

    Баллы:
    46
    Код:
      Player senderplayer = (Player) sender;
      en = senderplayer.getNearbyEntities(3, 3, 3);
    
      for (Entity e : en) {
       if (e.getType() == EntityType.PLAYER) {
        Player p = (Player) e;
        if (p.isInsideVehicle()) {
         p.leaveVehicle();
         p.sendMessage(ChatColor.GOLD  + "");
         senderplayer.sendMessage(ChatColor.GOLD  + "");
        }
       }
      }
    
    Я всё же выбрал такой, так как если у живности рядом нет пассажира, то получаю NPI и делать ещё один if не стал. Команда будет применяться только в крайних случаях, по этому не суть важно.
     
Статус темы:
Закрыта.

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