- Баллы
- 96
Получил сущности. Лошадь - как проверить, сидит ли на ней игрок?
Как принудительно его заставить слезть с лошади?
Как принудительно его заставить слезть с лошади?
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.
EntityMountEventПолучил сущности. Лошадь - как проверить, сидит ли на ней игрок?
Как принудительно его заставить слезть с лошади?
Также могут подойти другие вариантьі:П
олучил сущности. Лошадь - как проверить, сидит ли на ней игрок?
Как принудительно его заставить слезть с лошади?
@EventHandler
public void onMount(PlayerInteractEntityEvent e){
e.getRightClicked().getPassenger().equals(e.getPlayer());
}
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()); //телепортировали его на координаты лошади, тем самым сняв его с неё. } //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()); //телепортировали его на координаты лошади, тем самым сняв его с неё.
p.isInsideVehicle() - проверяй игроков, есть ли они на транспортеИдея такова, что мне нужно при вводе команды получить живность вокруг, определить что это лошадь, проверить сидит ли кто на ней и если да, то снять его.
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();
Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.p.isInsideVehicle() - проверяй игроков, есть ли они на транспорте
Это лишнее, получай пасендера и снимай его.Спасибо, поправил.
Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.
if (!le.isEmpty()&&le.getPassenger() instanceof Player) { //Если лошадь не пустая, и на лошади именно игрок, то:
p = (Player) le.getPassenger(); //получили игрока
p.leaveVehicle(); //пинаем в кабздец игрока
} //else ничего не делам, т.е. на лошади никого нет.
Как второй вариант... Решать тебе, лучше иметь запасной вариант ,при ошибке заменить можноСпасибо, поправил.
Ты предлагаешь изменить суть проверки? Т.е. получать игроков, а потом смотреть есть ли они на транспорте и снимать их.
Есть же типы, instanceof тут не уместен.Java:if (!le.isEmpty()&&le.getPassenger() instanceof Player) { //Если лошадь не пустая, и на лошади именно игрок, то: p = (Player) le.getPassenger(); //получили игрока p.leaveVehicle(); //пинаем в кабздец игрока } //else ничего не делам, т.е. на лошади никого нет.
Добавляем проверку на игрока.
Зачем? чтобы не выловить каст эксепшон.
Это как? а то я мало знаюЕсть же типы, instanceof тут не уместен.
.getPassenger().getType()Это как? а то я мало знаю
а точно..getPassenger().getType()
Типы проверяются через == Ибо это enum.а точно.
я тупенький местами.
тогда такой if (не знаю какая разница, но раз @alexandrage так сказал, значит так и есть)
if (!le.isEmpty()&&le.getPassenger().getType().equals(EntityType.PLAYER))
Разве еквалс не медленее чем == ?equals
Надо отметить, что == заметно быстрее, чем equals (сравнение ссылки вместо вызова метода и посимвольного сравнения, если строки разной длины), поэтому, если вы работаете со строками из пула (или системного, или своего), замена equals на == может привести к заметному ускорению.
if (!le.isEmpty()&&le.getPassenger().getType() == EntityType.PLAYER) { //Если лошадь не пустая, и на лошади именно игрок, то:
p = (Player) le.getPassenger(); //получили игрока
p.leaveVehicle(); //пинаем в кабздец игрока
} //else ничего не делам, т.е. на лошади никого нет.
EssentialsВерсия 1,7,10. Каким образом живность (не Player) может сесть на лошадь?
Просто делаешь проверку игрок там или нет.Версия 1,7,10. Каким образом живность (не Player) может сесть на лошадь?
Какой вариант всё же выбирать, ибо я вижу как минимум 3 работающих. \
Помогите с выбором.
Он просто и не понимает, что там enum.Разве еквалс не медленее чем == ?
спасибо.Ок я тебя понял, перефразировал.
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 + "");
}
}
}