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

Статус
Закрыто для дальнейших ответов.

Exception_Prototype

Активный участник
Пользователь
Баллы
96
Получил сущности. Лошадь - как проверить, сидит ли на ней игрок?
Как принудительно его заставить слезть с лошади?
 
Получил сущности. Лошадь - как проверить, сидит ли на ней игрок?
Как принудительно его заставить слезть с лошади?
EntityMountEvent
П
олучил сущности. Лошадь - как проверить, сидит ли на ней игрок?
Как принудительно его заставить слезть с лошади?
Также могут подойти другие вариантьі:
Код:
 @EventHandler
public void onMount(PlayerInteractEntityEvent e){
e.getRightClicked().getPassenger().equals(e.getPlayer());
}
Еще ивент:
VehicleEnterEvent

Думаю хоть один подойдет:nerd:
Просто чтоб слезть, юзай e.setcanceled(true);
 
Идея такова, что мне нужно при вводе команды получить живность вокруг, определить что это лошадь, проверить сидит ли кто на ней и если да, то снять его.
Java:
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 ничего не делам, т.е. на лошади никого нет.
                    }
                }

Знатоки, норм решение?
 
Идея такова, что мне нужно при вводе команды получить живность вокруг, определить что это лошадь, проверить сидит ли кто на ней и если да, то снять его.
Java:
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 ничего не делам, т.е. на лошади никого нет.
                    }
                }

Знатоки, норм решение?
p.leaveVehicle();
 
Идея такова, что мне нужно при вводе команды получить живность вокруг, определить что это лошадь, проверить сидит ли кто на ней и если да, то снять его.
Java:
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()); //телепортировали его на координаты лошади, тем самым сняв его с неё.
Идея такова, что мне нужно при вводе команды получить живность вокруг, определить что это лошадь, проверить сидит ли кто на ней и если да, то снять его.
Java:
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 ничего не делам, т.е. на лошади никого нет.
                    }
                }

Знатоки, норм решение?
p.isInsideVehicle() - проверяй игроков, есть ли они на транспорте
 
Спасибо, поправил.
p.isInsideVehicle() - проверяй игроков, есть ли они на транспорте
Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.
 
Спасибо, поправил.

Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.
Это лишнее, получай пасендера и снимай его.
 
Java:
if (!le.isEmpty()&&le.getPassenger() instanceof Player) { //Если лошадь не пустая, и на лошади именно игрок, то:
                    p = (Player) le.getPassenger(); //получили игрока
                    p.leaveVehicle(); //пинаем в кабздец игрока
                } //else ничего не делам, т.е. на лошади никого нет.

Добавляем проверку на игрока.
Зачем? чтобы не выловить каст эксепшон.

upload_2017-1-18_14-35-17.png
 
Спасибо, поправил.

Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.
Как второй вариант... Решать тебе, лучше иметь запасной вариант ,при ошибке заменить можно
 
Java:
if (!le.isEmpty()&&le.getPassenger() instanceof Player) { //Если лошадь не пустая, и на лошади именно игрок, то:
                    p = (Player) le.getPassenger(); //получили игрока
                    p.leaveVehicle(); //пинаем в кабздец игрока
                } //else ничего не делам, т.е. на лошади никого нет.

Добавляем проверку на игрока.
Зачем? чтобы не выловить каст эксепшон.

Есть же типы, instanceof тут не уместен.
 
Версия 1,7,10. Каким образом живность (не Player) может сесть на лошадь?
Какой вариант всё же выбирать, ибо я вижу как минимум 3 работающих. \
Помогите с выбором.
 
Разве еквалс не медленее чем == ?
Надо отметить, что == заметно быстрее, чем equals (сравнение ссылки вместо вызова метода и посимвольного сравнения, если строки разной длины), поэтому, если вы работаете со строками из пула (или системного, или своего), замена equals на == может привести к заметному ускорению.
 
Java:
if (!le.isEmpty()&&le.getPassenger().getType() == EntityType.PLAYER) { //Если лошадь не пустая, и на лошади именно игрок, то:
                    p = (Player) le.getPassenger(); //получили игрока
                    p.leaveVehicle(); //пинаем в кабздец игрока
                } //else ничего не делам, т.е. на лошади никого нет.


Версия 1,7,10. Каким образом живность (не Player) может сесть на лошадь?
Essentials
/spawnmob horse:saddled,pig
 
Версия 1,7,10. Каким образом живность (не Player) может сесть на лошадь?
Какой вариант всё же выбирать, ибо я вижу как минимум 3 работающих. \
Помогите с выбором.
Просто делаешь проверку игрок там или нет.

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

}
Разве еквалс не медленее чем == ?
Он просто и не понимает, что там enum.
 
Последнее редактирование:
Java:
  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 не стал. Команда будет применяться только в крайних случаях, по этому не суть важно.
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх