Как сделать рывок прямо, который не будет зависеть от осей в мире?

Версия Minecraft
1.16.5
API
Forge
Хотел сделать рывок прямо при нажатии клавши, но столкнулся с проблемой что эдд велосити зависит от осей именно в мире.( то есть если я встаю поперек x то меня толкает в бок). Если есть идеи как сделать рывок независимым от мировых осей - напишите :)
 
1,369
112
241
Нормализации не учили, не?
Для начала тебе нужно взять просто направление. Выдели для этого отдельный Vec3, в который запишешь НОРМАЛИЗОВАННЫЙ вектор взгляда игрока.
Затем уже идут скейлы (в твоём случае это scale(10f))
И наконец уже сам рывок.

Код для 1.20, но работа с векторами во всех играх одинакова:
    @Override
    public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
        if(hand == InteractionHand.MAIN_HAND) {
            Vec3 look = player.getLookAngle().normalize().scale(2);
            player.addDeltaMovement(look);
            player.hurtMarked = true;
        }
        return super.use(level, player, hand);
    }
 
1,369
112
241
Нормализация - это когда мы из радиус-вектора (2;5) делаем вектор точно такого же направления, но длина у него будет 1.
Иначе говоря, для того, чтобы получать ТОЛЬКО направление из вектора, мы его должны нормализовать.
Формулы давать не буду, они тебе всё равно ничего не дадут. Объяснил "по-детски", так, чтобы дошло.

А вообще, работа с векторами - основа основ математики. Очень настоятельно рекомендую изучить. Статья на хабре в помощь (хоть и не лучшая).
 
Нормализации не учили, не?
Для начала тебе нужно взять просто направление. Выдели для этого отдельный Vec3, в который запишешь НОРМАЛИЗОВАННЫЙ вектор взгляда игрока.
Затем уже идут скейлы (в твоём случае это scale(10f))
И наконец уже сам рывок.

Код для 1.20, но работа с векторами во всех играх одинакова:
    @Override
    public InteractionResultHolder<ItemStack> use(Level level, Player player, InteractionHand hand) {
        if(hand == InteractionHand.MAIN_HAND) {
            Vec3 look = player.getLookAngle().normalize().scale(2);
            player.addDeltaMovement(look);
            player.hurtMarked = true;
        }
        return super.use(level, player, hand);
    }
Ого, спасибо большое. Ознакомлюсь со статьей
 
Сверху