- Баллы
- 76
- Имя в Minecraft
- Stamorey
Есть Изменяющиеся координаты точки в трехмерном пространстве, нужна проверка
наличия блока в этом месте, изначально хотел брать ее "будущие координаты" и проверять блок в этой точке на материал ==AIR
(сама точка отвечает за траекторию импровизированного снаряда)
Но все оказалось не так просто, появляются сразу две проблемы:
1. Траектория может проходить между двумя блоками расположенными по диагонали
Наверное это не существенно, так как в оригинальной обработке снарядов
Стрел например или снежков, есть та же проблема) (прострелы)(в новых версиях вроде как пофикшено, ну или только в одиночке ps недавно тестил, прострелов не было)
2. Снаряд может проходить через "полу-объемные" блоки - ступеньки/заборы/лестницы/таблички и тд.
Точка, проходящая через "необъемную" часть такого блока должна продолжать двигаться дальше...
Может посоветует кто-нибудь как это можно не затратно обработать?
Спустя несколько недель нашел решение для проверки на столкновение снаряда с кастомными блоками (ступеньки, лестницы, полублоки) (да и в целом все блоки, сквозь которые не может проходить игрок)
cord* - координаты точки в трехмерном пространстве, тип - float/double
AxisAlignedBB - кубоид , в примере задается двумя парами координат XYZ
World xWorld = player.getWorld();
WorldServer Wser =((CraftWorld)xWorld).getHandle();
AxisAlignedBB bb= AxisAlignedBB.a(cordX, cordY, cordZ, cordX, cordY, cordZ);
List mega = Wser.a(bb);
if(!mega.isEmpty()){
p.sendMessage("Лист не пустой, в данной точке есть какой-то блок!");
}
Сделал такую проверку около 10 раз за прохождение снарядом 1 блока.
Почти тоже самое для мобов.
Spigot 1.8
наличия блока в этом месте, изначально хотел брать ее "будущие координаты" и проверять блок в этой точке на материал ==AIR
(сама точка отвечает за траекторию импровизированного снаряда)
Но все оказалось не так просто, появляются сразу две проблемы:
1. Траектория может проходить между двумя блоками расположенными по диагонали
Наверное это не существенно, так как в оригинальной обработке снарядов
Стрел например или снежков, есть та же проблема) (прострелы)(в новых версиях вроде как пофикшено, ну или только в одиночке ps недавно тестил, прострелов не было)
2. Снаряд может проходить через "полу-объемные" блоки - ступеньки/заборы/лестницы/таблички и тд.
Точка, проходящая через "необъемную" часть такого блока должна продолжать двигаться дальше...
Может посоветует кто-нибудь как это можно не затратно обработать?
Спустя несколько недель нашел решение для проверки на столкновение снаряда с кастомными блоками (ступеньки, лестницы, полублоки) (да и в целом все блоки, сквозь которые не может проходить игрок)
cord* - координаты точки в трехмерном пространстве, тип - float/double
AxisAlignedBB - кубоид , в примере задается двумя парами координат XYZ
World xWorld = player.getWorld();
WorldServer Wser =((CraftWorld)xWorld).getHandle();
AxisAlignedBB bb= AxisAlignedBB.a(cordX, cordY, cordZ, cordX, cordY, cordZ);
List mega = Wser.a(bb);
if(!mega.isEmpty()){
p.sendMessage("Лист не пустой, в данной точке есть какой-то блок!");
}
Сделал такую проверку около 10 раз за прохождение снарядом 1 блока.
Почти тоже самое для мобов.
Spigot 1.8
Последнее редактирование:
но хотелось бы лишний раз не усложнять код (написанным своими руками обработчиком), тем более как уже написал выше он уже должен быть в чистом майне (не должен а однозначно есть
