Вопрос Трассировка луча таргета

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
16 Дек 2023
Сообщения
640
Реакции
9
Подскажите,в какой пасте есть норм трассировка луча цели? Пытался пофиксить свою,она не бьет если у тебя допустим ситуация что ты в жимке,над posY + 1 и имеется какая-то жидкость (просто сверху есть любой блок) то аура не будет типо бить пока не посмотришь на хитбокс цели.Пытался фиксить тем что делал проверку на то что:
Если над тобой фактически есть ваклидный блок (ну там +1 по y от тебя и проверка на AirBlock) то просто будет расширяться хитбокс таргета ну и он будет бить больше,да это помогло но не ротейтит да и как то странно все ж)

Добрые люди подскажите.
Утилка:
Expand Collapse Copy
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);
}
 
Последнее редактирование:
Пожалуйста сделай вот так
1750890915490.png
 
Назад
Сверху Снизу