Подписывайтесь на наш Telegram и не пропускайте важные новости! Перейти

Вопрос JNI | C++ | 1.21.8 | Проблема с Movement

Начинающий
Начинающий
Статус
Оффлайн
Регистрация
25 Ноя 2024
Сообщения
191
Реакции
2
В чем суть проблемы
1. Пробовал обнулять скорость просто отжимать клавиши wasd, но вот неудобно очень, приходится обратно их нажимать после сброса.
2. 2 день пытаюсь скорость обнулить, чет не получается, все перепробовал, ии тоже просил написать в итоге так же не работает.
3. Маппинги вроде правильные,
Пожалуйста, авторизуйтесь для просмотра ссылки.


C++:
Expand Collapse Copy
//Movement

void BlockMovement() {
    JNIEnv* env = GetJNIEnv();
    if (!env) return;

    jobject player = Player(env);
    if (!player) return;

    jclass playerClass = env->GetObjectClass(player);
    if (!playerClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID inputField = env->GetFieldID(playerClass, "k", "Lgkv;");
    if (!inputField) {
        ClearJNIException(env);
        inputField = env->GetFieldID(playerClass, "k", "Lgdz;");
    }
    if (!inputField) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jobject input = env->GetObjectField(player, inputField);
    if (!input) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jclass inputClass = env->GetObjectClass(input);
    if (!inputClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID keyPressesField = env->GetFieldID(inputClass, "a", "Lcur;");
    jfieldID leftImpulseField = env->GetFieldID(inputClass, "b", "F");
    jfieldID forwardImpulseField = env->GetFieldID(inputClass, "c", "F");
    if (!keyPressesField || !leftImpulseField || !forwardImpulseField) {
        ClearJNIException(env);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jclass playerInputClass = env->FindClass("cur");
    if (!playerInputClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID emptyInputField = env->GetStaticFieldID(playerInputClass, "b", "Lcur;");
    if (!emptyInputField) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerInputClass);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jobject emptyInput = env->GetStaticObjectField(playerInputClass, emptyInputField);
    if (emptyInput) {
        env->SetObjectField(input, keyPressesField, emptyInput);
        env->DeleteLocalRef(emptyInput);
    }
    else {
        ClearJNIException(env);
    }

    env->SetFloatField(input, leftImpulseField, 0.0f);
    env->SetFloatField(input, forwardImpulseField, 0.0f);
    ClearJNIException(env);

    jmethodID inputTickMid = env->GetMethodID(inputClass, "a", "()V");
    if (inputTickMid) {
        env->CallVoidMethod(input, inputTickMid);
        ClearJNIException(env);
    }
    else {
        ClearJNIException(env);
    }

    jmethodID applyInputMid = env->GetMethodID(playerClass, "fw", "()V");
    if (applyInputMid) {
        env->CallVoidMethod(player, applyInputMid);
        ClearJNIException(env);
    }
    else {
        ClearJNIException(env);
    }

    env->DeleteLocalRef(playerInputClass);
    env->DeleteLocalRef(inputClass);
    env->DeleteLocalRef(input);
    env->DeleteLocalRef(playerClass);
    env->DeleteLocalRef(player);
}

в чем может быть проблема?
Обнулять скорость мне нужно, что бы кликать по слотам в инвентаре.
 
В чем суть проблемы
1. Пробовал обнулять скорость просто отжимать клавиши wasd, но вот неудобно очень, приходится обратно их нажимать после сброса.
2. 2 день пытаюсь скорость обнулить, чет не получается, все перепробовал, ии тоже просил написать в итоге так же не работает.
3. Маппинги вроде правильные,
Пожалуйста, авторизуйтесь для просмотра ссылки.


C++:
Expand Collapse Copy
//Movement

void BlockMovement() {
    JNIEnv* env = GetJNIEnv();
    if (!env) return;

    jobject player = Player(env);
    if (!player) return;

    jclass playerClass = env->GetObjectClass(player);
    if (!playerClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID inputField = env->GetFieldID(playerClass, "k", "Lgkv;");
    if (!inputField) {
        ClearJNIException(env);
        inputField = env->GetFieldID(playerClass, "k", "Lgdz;");
    }
    if (!inputField) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jobject input = env->GetObjectField(player, inputField);
    if (!input) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jclass inputClass = env->GetObjectClass(input);
    if (!inputClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID keyPressesField = env->GetFieldID(inputClass, "a", "Lcur;");
    jfieldID leftImpulseField = env->GetFieldID(inputClass, "b", "F");
    jfieldID forwardImpulseField = env->GetFieldID(inputClass, "c", "F");
    if (!keyPressesField || !leftImpulseField || !forwardImpulseField) {
        ClearJNIException(env);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jclass playerInputClass = env->FindClass("cur");
    if (!playerInputClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID emptyInputField = env->GetStaticFieldID(playerInputClass, "b", "Lcur;");
    if (!emptyInputField) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerInputClass);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jobject emptyInput = env->GetStaticObjectField(playerInputClass, emptyInputField);
    if (emptyInput) {
        env->SetObjectField(input, keyPressesField, emptyInput);
        env->DeleteLocalRef(emptyInput);
    }
    else {
        ClearJNIException(env);
    }

    env->SetFloatField(input, leftImpulseField, 0.0f);
    env->SetFloatField(input, forwardImpulseField, 0.0f);
    ClearJNIException(env);

    jmethodID inputTickMid = env->GetMethodID(inputClass, "a", "()V");
    if (inputTickMid) {
        env->CallVoidMethod(input, inputTickMid);
        ClearJNIException(env);
    }
    else {
        ClearJNIException(env);
    }

    jmethodID applyInputMid = env->GetMethodID(playerClass, "fw", "()V");
    if (applyInputMid) {
        env->CallVoidMethod(player, applyInputMid);
        ClearJNIException(env);
    }
    else {
        ClearJNIException(env);
    }

    env->DeleteLocalRef(playerInputClass);
    env->DeleteLocalRef(inputClass);
    env->DeleteLocalRef(input);
    env->DeleteLocalRef(playerClass);
    env->DeleteLocalRef(player);
}

в чем может быть проблема?
Обнулять скорость мне нужно, что бы кликать по слотам в инвентаре.
инвентарь просто открывай, ну в плане когда у тя функция выполняеться
 
инвентарь просто открывай
Ну это как костыль получается, хотелось бы без открытия, раньше я делал это миксином, щас с новой версией логика измениласб
 
Ну это как костыль получается, хотелось бы без открытия, раньше я делал это миксином, щас с новой версией логика измениласб
хз, я тоже пытался сделать, но мне стало лень и я просто инвентарь вызываю
 
В чем суть проблемы
1. Пробовал обнулять скорость просто отжимать клавиши wasd, но вот неудобно очень, приходится обратно их нажимать после сброса.
2. 2 день пытаюсь скорость обнулить, чет не получается, все перепробовал, ии тоже просил написать в итоге так же не работает.
3. Маппинги вроде правильные,
Пожалуйста, авторизуйтесь для просмотра ссылки.


C++:
Expand Collapse Copy
//Movement

void BlockMovement() {
    JNIEnv* env = GetJNIEnv();
    if (!env) return;

    jobject player = Player(env);
    if (!player) return;

    jclass playerClass = env->GetObjectClass(player);
    if (!playerClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID inputField = env->GetFieldID(playerClass, "k", "Lgkv;");
    if (!inputField) {
        ClearJNIException(env);
        inputField = env->GetFieldID(playerClass, "k", "Lgdz;");
    }
    if (!inputField) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jobject input = env->GetObjectField(player, inputField);
    if (!input) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jclass inputClass = env->GetObjectClass(input);
    if (!inputClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID keyPressesField = env->GetFieldID(inputClass, "a", "Lcur;");
    jfieldID leftImpulseField = env->GetFieldID(inputClass, "b", "F");
    jfieldID forwardImpulseField = env->GetFieldID(inputClass, "c", "F");
    if (!keyPressesField || !leftImpulseField || !forwardImpulseField) {
        ClearJNIException(env);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jclass playerInputClass = env->FindClass("cur");
    if (!playerInputClass) {
        ClearJNIException(env);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jfieldID emptyInputField = env->GetStaticFieldID(playerInputClass, "b", "Lcur;");
    if (!emptyInputField) {
        ClearJNIException(env);
        env->DeleteLocalRef(playerInputClass);
        env->DeleteLocalRef(inputClass);
        env->DeleteLocalRef(input);
        env->DeleteLocalRef(playerClass);
        env->DeleteLocalRef(player);
        return;
    }

    jobject emptyInput = env->GetStaticObjectField(playerInputClass, emptyInputField);
    if (emptyInput) {
        env->SetObjectField(input, keyPressesField, emptyInput);
        env->DeleteLocalRef(emptyInput);
    }
    else {
        ClearJNIException(env);
    }

    env->SetFloatField(input, leftImpulseField, 0.0f);
    env->SetFloatField(input, forwardImpulseField, 0.0f);
    ClearJNIException(env);

    jmethodID inputTickMid = env->GetMethodID(inputClass, "a", "()V");
    if (inputTickMid) {
        env->CallVoidMethod(input, inputTickMid);
        ClearJNIException(env);
    }
    else {
        ClearJNIException(env);
    }

    jmethodID applyInputMid = env->GetMethodID(playerClass, "fw", "()V");
    if (applyInputMid) {
        env->CallVoidMethod(player, applyInputMid);
        ClearJNIException(env);
    }
    else {
        ClearJNIException(env);
    }

    env->DeleteLocalRef(playerInputClass);
    env->DeleteLocalRef(inputClass);
    env->DeleteLocalRef(input);
    env->DeleteLocalRef(playerClass);
    env->DeleteLocalRef(player);
}

в чем может быть проблема?
Обнулять скорость мне нужно, что бы кликать по слотам в инвентаре.
после обнуления лефтимпульс и форвардимпульс ты вызываешь инпуттик, который заново пересчитывает их из зажатых клавиш
 
Назад
Сверху Снизу