Начинающий
Начинающий
- Статус
- Оффлайн
- Регистрация
- 16 Дек 2023
- Сообщения
- 640
- Реакции
- 9
Подскажите,в какой пасте есть норм трассировка луча цели? Пытался пофиксить свою,она не бьет если у тебя допустим ситуация что ты в жимке,над posY + 1 и имеется какая-то жидкость (просто сверху есть любой блок) то аура не будет типо бить пока не посмотришь на хитбокс цели.Пытался фиксить тем что делал проверку на то что:
Если над тобой фактически есть ваклидный блок (ну там +1 по y от тебя и проверка на AirBlock) то просто будет расширяться хитбокс таргета ну и он будет бить больше,да это помогло но не ротейтит да и как то странно все ж)
Добрые люди подскажите.
Если над тобой фактически есть ваклидный блок (ну там +1 по y от тебя и проверка на AirBlock) то просто будет расширяться хитбокс таргета ну и он будет бить больше,да это помогло но не ротейтит да и как то странно все ж)
Добрые люди подскажите.
Утилка:
public static Entity getMouseOver(Entity target, float yaw, float pitch, double distance) {
HitResult objectMouseOver;
Entity entity = mc.getRenderViewEntity();
if (entity != null && mc.level != null) {
objectMouseOver = null;
boolean flag = distance > 3;
Vector3d startVec = entity.getEyePosition(1);
Vector3d directionVec = getVectorForRotation(pitch, yaw);
Vector3d endVec = startVec.add(
directionVec.x * distance,
directionVec.y * distance,
directionVec.z * distance
);
AABB aabb = target.getBoundingBox().grow(target.getCollisionBorderSize());
EntityHitResult entityHitResult = hitResultEntities(entity, startVec, endVec, aabb, (p_lambda$getMouseOver$0_0_) -> !p_lambda$getMouseOver$0_0_.isSpectator() && p_lambda$getMouseOver$0_0_.canBeCollidedWith(), distance);
if (entityHitResult != null) {
if (flag && startVec.distanceTo(startVec) > distance) {
objectMouseOver = BlockHitResult.miss(startVec, null, new BlockPos(startVec));
}
if ((distance < distance || objectMouseOver == null)) {
objectMouseOver = entityHitResult;
}
}
if (objectMouseOver == null) {
return null;
}
if (objectMouseOver instanceof EntityHitResult obj) {
return obj.getEntity();
}
}
return null;
}
public static EntityHitResult hitResultEntities(Entity shooter, Vector3d startVec, Vector3d endVec, AABB boundingBox, Predicate<Entity> filter,double distance) {
Level world = shooter.level;
double closestDistance = distance;
Entity entity = null;
Vector3d closestHitVec = null;
for (Entity entity1 : world.getEntitiesInAABBexcluding(shooter, boundingBox, filter)) {
AABB axisalignedbb = entity1.getBoundingBox().grow(entity1.getCollisionBorderSize());
Optional<Vector3d> optional = axisalignedbb.rayTrace(startVec, endVec);
if (axisalignedbb.contains(startVec)) {
if (closestDistance >= 0.0D) {
entity = entity1;
closestHitVec = startVec;
closestDistance = 0.0D;
}
} else if (optional.isPresent()) {
Vector3d vector3d1 = optional.get();
double d3 = startVec.distanceTo(optional.get());
if (d3 < closestDistance || closestDistance == 0.0D) {
boolean flag1 = false;
if (!flag1 && entity1.getLowestRidingEntity() == shooter.getLowestRidingEntity()) {
if (closestDistance == 0.0D) {
entity = entity1;
closestHitVec = vector3d1;
}
} else {
entity = entity1;
closestHitVec = vector3d1;
closestDistance = d3;
}
}
}
}
return entity == null ? null : new EntityHitResult(entity, closestHitVec);
}
Последнее редактирование: