- Баллы
- 66
///
Последнее редактирование:
Следуйте инструкциям в видео ниже, чтобы узнать, как установить наш сайт как веб-приложение на главный экран вашего устройства.
Примечание: Эта функция может быть недоступна в некоторых браузерах.

Объясни что должно в конце получиться. Судя по коду выше, это можно записать и такПопробовал:
Не помогло, сообщение перестает выдаваться только со второго раза, когда игрок уже записан в кэш.Код:ArrayList<Player> cache = new ArrayList<Player>(); @EventHandler(priority = EventPriority.HIGHEST) public void onhit(EntityDamageByEntityEvent e) { Entity entityHit = e.getEntity(); Player playerHit = (Player) entityHit; Entity damager = e.getDamager(); Arrow arrow = (Arrow) damager; Entity p = (Entity) arrow.getShooter(); if (p.getName().equals(playerHit.getName())) { cache.add((Player) p); (Player)p.sendMessage("Вы попали в самого себя"); arrow.remove(); } } @EventHandler(priority = EventPriority.LOWEST) public void onProjectileHitEvent(final ProjectileHitEvent event) { final Player player = (Player)event.getEntity().getShooter(); if (cache.contains(player)) return; p.sendMessage("Вы попали в блок"); }
Я хочу сделать так, что-бы при попадании в игрока сообщение не выводилось вовсе.
@EventHandler
public void onProjectileHitEvent(ProjectileHitEvent e) {
if(!(e.getEntity().getShooter() instanceof Player)) return;
Player player = (Player) e.getEntity().getShooter();
if(e.getHitBlock() != null) p.sendMessage("Вы попали в блок!");
if(e.getHitEntity().equals(p)) p.sendMessage("Вы попали в себя!");
}
Так ты сделать не сможешь. Оба зарегистрированные события будут выполнятся. Вероятнее всего ProjectileHitEvent выполнится перед EntityDamageByEntityEvent, если стрела попадет в существо. Возможно второе событие не выполнится, если хит будет отменен. Опять таки Cool_boy тебе скинул решение по идее с одним событием. Что не так?Мне нужно сделать между ними взаимодействие, к примеру, что-бы при попадании в самого себя евент:
onhit выполнялся, а евент: onProjectileHitEvent игнорировался, и на оборот, когда стрела попадает в блок евент: onhit игнорировался, а евент: onProjectileHitEvent выполнялся. Как такое можно реализовать?
ProjectileHitEventЗаморочка с методами. Темболее я представил чисто гепотетический код.
И какой евент лучше для использования переменных:
Player player = (Player)event.getEntity().getShooter();
Projectile proj = event.getEntity();
для получения координат блоков, на которые упала стрела, или получение ника того, кто нанес/получил урон.
Я перепробовал различные методы получения имени игрока в которого попали
Entity entity = e.getHitEntity();
if(entity != null && entity instanceof Player) {
Player hit = (Player) entity;
hit.getName(); //ЗОЧЕМ 2 ИВЕНТА!!11!1!
}
Вангую что он динозавр, где еще не было getHitBlock(). От сюда и ипет свой мозг.PHP:Entity entity = e.getHitEntity(); if(entity != null && entity instanceof Player) { Player hit = (Player) entity; hit.getName(); //ЗОЧЕМ 2 ИВЕНТА!!11!1! }
Потом же бросит NPE потом, если не проверитьP.s при instanceof нет смысла проверять не null.
Потом же бросит NPE потом, если не проверить
Проверил спецификацию. Действительно.![]()
Условие не пройдет же.
Ну тогда твой костыль во втором посте выглядит рабочим. Только как это должно работать? Игрок стреляет себя - попадает в список, потом стреляет в блок - выходит из него?А можно такое реализовать на версии 1.8 - 1.9 +?
Уже 500 строк написал, и переход на новую версию убьет весь проект.
На подобие такого, можно что-то смастерить?
Уже не важно, на сколько это будет большим. Можно ли, это как-то реализовать без переходов на версии 1.11 - 1.12?Код:@EventHandler public void Trasers(ProjectileHitEvent e) { Entity entity = e.getEntity(); if(entity instanceof Arrow) { Arrow arrow = (Arrow) entity; Entity shooter = (Entity) arrow.getShooter(); if(shooter instanceof Player) { Player player = (Player) shooter; if(player.getItemInHand().getType() == Material.BOW) { if(player.getLastDamageCause() instanceof EntityDamageByEntityEvent) { EntityDamageByEntityEvent event = (EntityDamageByEntityEvent) player.getLastDamageCause(); player.sendMessage("Вы подстрелили: " + (Player)event.getEntity().getName()); } } } } }
Ого, 500 строк кода) Наверное много времени понадобится чтоб перенести все на новую версию)А можно такое реализовать на версии 1.8 - 1.9 +?
Уже 500 строк написал, и переход на новую версию убьет весь проект.
Ну вот смирись и переходи. Там много чего полезного добавили. Сэкономишь кучу времени и сил.Может использовать
Не много, больше скорее всего гемора. Темболее проект требуется написать для версии 1.8-1.9
Я никак не расчитывал,что придется все переписывать. Костыли проще использовать.
Щяс думаю с какой стороны лучше подойти.
Тогда сам.Я понимаю, но нужно сообразить костыль для старой версии. Как либо сделать триггер, или произвести махинации с приоритетом.
Нет конечно. Уже 3тий день мучаешься из за динозавра. Мог бы успеть перейти на нормальную версию.Как выставить триггер, если евент: ProjectileHitEvent выполняется раньше EntityDamageByEntityEvent? Помогут ли приоритеты?
Если ты будешь всегда идти в ногу со временем, у тебя будет намного меньше проблем, уж поверь, не пожалеешь.Руинить целый проект спустя неделю работы это не дело. Может есть способ? Хоть и трудный но способ, помимо перехода на другую версию? Может есть способ перенести все с новой версии на старую? Может заменить евент, который работает так-же?