mirror of
https://github.com/AngelAuraMC/Amethyst-Android.git
synced 2025-09-17 16:47:14 -04:00
Implement mouse button buffer
Fixes Timeless and Classics Guns on 1.16.5 (and probably newer versions too)
This commit is contained in:
parent
a84cf5a67d
commit
3e3b97317b
@ -1 +1 @@
|
||||
1677906502154
|
||||
1678189863424
|
@ -43,6 +43,7 @@ struct pojav_environ_s {
|
||||
jclass vmGlfwClass;
|
||||
jboolean isGrabbing;
|
||||
jbyte* keyDownBuffer;
|
||||
jbyte* mouseDownBuffer;
|
||||
JavaVM* runtimeJavaVMPtr;
|
||||
JNIEnv* runtimeJNIEnvPtr_JRE;
|
||||
JavaVM* dalvikJavaVMPtr;
|
||||
|
@ -54,6 +54,9 @@ jint JNI_OnLoad(JavaVM* vm, __attribute__((unused)) void* reserved) {
|
||||
jfieldID field_keyDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticFieldID(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, "keyDownBuffer", "Ljava/nio/ByteBuffer;");
|
||||
jobject keyDownBufferJ = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticObjectField(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, field_keyDownBuffer);
|
||||
pojav_environ->keyDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetDirectBufferAddress(pojav_environ->runtimeJNIEnvPtr_JRE, keyDownBufferJ);
|
||||
jfieldID field_mouseDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticFieldID(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, "mouseDownBuffer", "Ljava/nio/ByteBuffer;");
|
||||
jobject mouseDownBufferJ = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetStaticObjectField(pojav_environ->runtimeJNIEnvPtr_JRE, pojav_environ->vmGlfwClass, field_mouseDownBuffer);
|
||||
pojav_environ->mouseDownBuffer = (*pojav_environ->runtimeJNIEnvPtr_JRE)->GetDirectBufferAddress(pojav_environ->runtimeJNIEnvPtr_JRE, mouseDownBufferJ);
|
||||
hookExec();
|
||||
}
|
||||
|
||||
@ -316,7 +319,7 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendCursorPos(__
|
||||
_a > _b ? _a : _b; })
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(__attribute__((unused)) JNIEnv* env, __attribute__((unused)) jclass clazz, jint key, jint scancode, jint action, jint mods) {
|
||||
if (pojav_environ->GLFW_invoke_Key && pojav_environ->isInputReady) {
|
||||
pojav_environ->keyDownBuffer[max(0, key-31)]=(jbyte)action;
|
||||
pojav_environ->keyDownBuffer[max(0, key-31)] = (jbyte) action;
|
||||
if (pojav_environ->isUseStackQueueCall) {
|
||||
sendData(EVENT_TYPE_KEY, key, scancode, action, mods);
|
||||
} else {
|
||||
@ -328,14 +331,12 @@ JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendKey(__attrib
|
||||
|
||||
|
||||
JNIEXPORT void JNICALL Java_org_lwjgl_glfw_CallbackBridge_nativeSendMouseButton(__attribute__((unused)) JNIEnv* env, __attribute__((unused)) jclass clazz, jint button, jint action, jint mods) {
|
||||
if (pojav_environ->isInputReady) {
|
||||
if (button == -1) {
|
||||
} else if (pojav_environ->GLFW_invoke_MouseButton) {
|
||||
if (pojav_environ->isUseStackQueueCall) {
|
||||
sendData(EVENT_TYPE_MOUSE_BUTTON, button, action, mods, 0);
|
||||
} else {
|
||||
pojav_environ->GLFW_invoke_MouseButton((void*) pojav_environ->showingWindow, button, action, mods);
|
||||
}
|
||||
if (pojav_environ->GLFW_invoke_MouseButton && pojav_environ->isInputReady) {
|
||||
pojav_environ->mouseDownBuffer[max(0, button)] = (jbyte) action;
|
||||
if (pojav_environ->isUseStackQueueCall) {
|
||||
sendData(EVENT_TYPE_MOUSE_BUTTON, button, action, mods, 0);
|
||||
} else {
|
||||
pojav_environ->GLFW_invoke_MouseButton((void*) pojav_environ->showingWindow, button, action, mods);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -498,6 +498,8 @@ public class GLFW
|
||||
private static ArrayMap<Long, GLFWWindowProperties> mGLFWWindowMap;
|
||||
public static boolean mGLFWIsInputReady;
|
||||
public static final ByteBuffer keyDownBuffer = ByteBuffer.allocateDirect(317);
|
||||
public static final ByteBuffer mouseDownBuffer = ByteBuffer.allocateDirect(8);
|
||||
|
||||
private static final String PROP_WINDOW_WIDTH = "glfwstub.windowWidth";
|
||||
private static final String PROP_WINDOW_HEIGHT= "glfwstub.windowHeight";
|
||||
public static long mainContext = 0;
|
||||
@ -1116,7 +1118,7 @@ public class GLFW
|
||||
}
|
||||
|
||||
public static int glfwGetMouseButton(@NativeType("GLFWwindow *") long window, int button) {
|
||||
return 0;
|
||||
return mouseDownBuffer.get(button);
|
||||
}
|
||||
public static void glfwGetCursorPos(@NativeType("GLFWwindow *") long window, @Nullable @NativeType("double *") DoubleBuffer xpos, @Nullable @NativeType("double *") DoubleBuffer ypos) {
|
||||
if (CHECKS) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user