Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите Отлов соприкосновения дропнутого предмета с игроком

Timings

Активный участник
Пользователь
Баллы
88
Имя в Minecraft
NextGeneric
Здравствуйте, товарищи. Уже два часа мучаюсь над одним весьма непростым вопросом. Суть моей разработки в том, что игрок при нажатии правой кнопки мыши, держа в руке меч, начинает быстро стрелять огнем. То есть, пока игрок блокирует мечом, он дропает предмет, для этого предмета задается направление и велосити, и предмет летит прямо по направлению его глаз. Хорошо бы еще сделать так, чтобы при попадании этого дропнутого предмета в игрока игрок поджигался при помощи setFireTicks(). Я пробовал отлавливать соприкосновение итема с игроком через PlayerPickupItemEvent, но работает весьма криво. Есть ли другие идеи? Спасибо. Вот мой шедулер, отвечающий за "огненный пулемет".
http://pastebin.com/0V5H8Su5
 
Здравствуйте, товарищи. Уже два часа мучаюсь над одним весьма непростым вопросом. Суть моей разработки в том, что игрок при нажатии правой кнопки мыши, держа в руке меч, начинает быстро стрелять огнем. То есть, пока игрок блокирует мечом, он дропает предмет, для этого предмета задается направление и велосити, и предмет летит прямо по направлению его глаз. Хорошо бы еще сделать так, чтобы при попадании этого дропнутого предмета в игрока игрок поджигался при помощи setFireTicks(). Я пробовал отлавливать соприкосновение итема с игроком через PlayerPickupItemEvent, но работает весьма криво. Есть ли другие идеи? Спасибо. Вот мой шедулер, отвечающий за "огненный пулемет".
http://pastebin.com/0V5H8Su5
Ну получается, что ваш предмет это энтити, и нужно определять когда энтити "врезалось" в другое энтити.
 
Ну получается, что ваш предмет это энтити, и нужно определять когда энтити "врезалось" в другое энтити.
Это понятно. Я пробовал сравнивать позицию итема и игрока, и в случае, если они совпадают, поджигать игрока. Но, к сожалению, попытка не увенчалась успехом.
 
Это понятно. Я пробовал сравнивать позицию итема и игрока, и в случае, если они совпадают, поджигать игрока. Но, к сожалению, попытка не увенчалась успехом.
>>стрелять огнем
Может тогда используете projectile файрбола?
Ну как у гастов
 
Последнее редактирование:
>>стрелять отгнем
Может тогда используете projectile файрбола?
Ну как у гастов
Да, тоже можно, но летящий дропнутый огонь выглядит намного реалистичней. Хотелось бы именно его использовать, как на Mineplex.
 
Кроме как использовать шедулер и отслеживать в течение некоторого времени координаты идей нету, но это будет слишком сильно грузить сервер
 
Я пробовал, но ничего хорошего не вышло, да. Возможно, кто-либо знает про метод getNearByEntities() ?
Если да, то отпишите, пожалуйста.
 
А чем не устроило ставнение по координатам? Приблизительно сравнение, между крайними значениями, по моему, тут самое то.
 
Это понятно. Я пробовал сравнивать позицию итема и игрока, и в случае, если они совпадают, поджигать игрока. Но, к сожалению, попытка не увенчалась успехом.
А как ты сравнивал корды?
 
А как ты сравнивал корды?
Получал координаты X,Y и Z итема, потом стандартное for(Player p: getServer().getOnlinePlayers()), а затем проверял, не совпадает ли XYZ (p) С итемом Item. Ну, чего-то не тащит. Есть другие идеи?
 
Получал координаты X,Y и Z итема, потом стандартное for(Player p: getServer().getOnlinePlayers()), а затем проверял, не совпадает ли XYZ (p) С итемом Item. Ну, чего-то не тащит. Есть другие идеи?

То есть, вы проверяли на полное равенство числа с плавающей точкой?
 
Именно. По моей памяти, ничего хорошего не вышло. Но, если это единственный метод, придется его доработать. Хотя мне что-то подсказывает, что есть более разумное решение.
@fromgate
@serega6531
@Bars
 
Именно. По моей памяти, ничего хорошего не вышло. Но, если это единственный метод, придется его доработать. Хотя мне что-то подсказывает, что есть более разумное решение.
@fromgate
@serega6531
@Bars

Если вы будете проверять их на полное равенство, то вряд-ли они когда-нибудь станут равны. Разве, что, в момент их спавна на этих координатах.
 
getNearbyEntities() очень кривой метод, он берёт все сущности какие только есть и сравнивает дистанцию. На BF видел оптимизированный метод.

Можно каждый огонь проверять через
Java:
for (Player p : Bukkit.getOnlinePlayers()) {
if (fireEntity.getLocation().distance(p.getLocation()) <= 0.5) p.setFireTicks(ticks);
}
Как-то так, на сонную голову.
 
getNearbyEntities() очень кривой метод, он берёт все сущности какие только есть и сравнивает дистанцию. На BF видел оптимизированный метод.

Можно каждый огонь проверять через
Java:
for (Player p : Bukkit.getOnlinePlayers()) {
if (fireEntity.getLocation().distance(p.getLocation()) <= 0.5) p.setFireTicks(ticks);
}
Как-то так, на сонную голову.
Интересная идея, спасибо. Как только проверю - отпишусь.
 

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

Назад
Верх