Minecraft DLL Labymod 1.21.3C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Minecraft DLL Labymod 1.21.3

Сообщение Anonymous »

Я пытаюсь ввести файл DLL в Labymod 1.21.3, чтобы удалить задержку прыжка. Моя текущая проблема заключается в том, что функция getMineCraftClass () не возвращает nullptr, но getMineCraft () возвращает один. Таким образом, вывод консоли при инъекции файла DLL выглядит следующим образом: запустите модули Minecraft Encement не найден < /p>
Код начинает выполняться в функции runModules (). Вывод консоли также показывает, что getMineCraftMethod в getMineCraft () не является NullPtr, но возвращаемое значение getMineCraft () одно. Кроме того, код работал для Vanilla 1.8.9 (конечно, с другими запутанными именами). Кто -нибудь знает проблему? Может, это что -то с загрузчиком или потоком класса? < /P>
#include "Cheat.h"
#include "Java.h"

#include
#include
#include

static jclass minecraftClassGlobalRef = nullptr;

jclass getMinecraftClass() {
if (minecraftClassGlobalRef == nullptr) {
jclass localClass = ct.env->FindClass("fmg"); // Labymod fmg = Minecraft class
if (localClass != nullptr) {
minecraftClassGlobalRef = (jclass)ct.env->NewGlobalRef(localClass);
ct.env->DeleteLocalRef(localClass);
}
}
return minecraftClassGlobalRef;
}

jobject getMinecraft() {
jmethodID getMinecraftMethode = ct.env->GetStaticMethodID(getMinecraftClass(), "Q", "()Lfmg;"); // Labymod fmg = Minecraft class || Labymod get function = Q
if (getMinecraftMethode == nullptr) {
OutputDebugStringA("Get Minecraft method failed");
return nullptr;
}
return ct.env->CallStaticObjectMethod(getMinecraftClass(), getMinecraftMethode);
}

jobject getWorld() {
jfieldID getWorldField = ct.env->GetFieldID(getMinecraftClass(), "f", "Lbdb;"); // bdb -> World class
return ct.env->GetObjectField(getMinecraft(), getWorldField);
}

jobject getPlayer() {
jfieldID getPlayerField = ct.env->GetFieldID(getMinecraftClass(), "t", "Lgkh;"); // Labymod gkh = LocalPlayer class
return ct.env->GetObjectField(getMinecraft(), getPlayerField);
}

void setNoJumpDelay() {
jobject playerObject = getPlayer();

jclass gkhClass = ct.env->GetObjectClass(playerObject);
jfieldID noJumpDelayField = ct.env->GetFieldID(gkhClass, "cf", "I");// Labymod noJumpDelay variable name = cf -> Set to 0 to remove jump delay

if (noJumpDelayField != nullptr) {
ct.env->SetIntField(playerObject, noJumpDelayField, 0);
}
}

void runModules() {
OutputDebugStringA("Run modules");
if (getMinecraftClass() == nullptr) {
OutputDebugStringA("Minecraft class not found");
return;
}

if (getMinecraft() == nullptr) {
OutputDebugStringA("Minecraft instance not found");
return;
}

while (true) {
if (!getMinecraft()) continue;
OutputDebugStringA("Minecraft found");
//if (!getWorld()) continue;
if (!getPlayer()) continue;
OutputDebugStringA("Player found");

setNoJumpDelay();

std::this_thread::sleep_for(std::chrono::milliseconds(5));
}
}
< /code>
Я уже проверил различные способы доступа к экземпляру Minecraft. Я сделал глобальную ссылку Minecraft Class A, попытался получить доступ к переменной экземпляра вместо использования getter, и попытался получить доступ к ClassLoader через потоки. К сожалению, все это до сих пор не дало никаких результатов.

Подробнее здесь: https://stackoverflow.com/questions/797 ... mod-1-21-3
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»