minecraft-pi-docker/mods/src/touch/touch.cpp

41 lines
1.5 KiB
C++
Raw Normal View History

2021-06-19 23:07:09 +00:00
#include <libreborn/libreborn.h>
#include "../feature/feature.h"
#include "../init/init.h"
2021-09-12 03:18:12 +00:00
#include <symbols/minecraft.h>
2021-06-19 23:07:09 +00:00
// Enable Touch GUI
static int32_t Minecraft_isTouchscreen_injection(__attribute__((unused)) unsigned char *minecraft) {
return 1;
}
2022-04-11 23:59:21 +00:00
// IngameBlockSelectionScreen Memory Allocation Override
static unsigned char *operator_new_IngameBlockSelectionScreen_injection(__attribute__((unused)) uint32_t size) {
return (unsigned char *) ::operator new(TOUCH_INGAME_BLOCK_SELECTION_SCREEN_SIZE);
}
2021-06-19 23:07:09 +00:00
// Init
void init_touch() {
2022-04-10 00:01:16 +00:00
int touch_gui = feature_has("Touch GUI", server_disabled);
2021-06-19 23:07:09 +00:00
if (touch_gui) {
// Main UI
2021-07-05 01:23:12 +00:00
overwrite((void *) Minecraft_isTouchscreen, (void *) Minecraft_isTouchscreen_injection);
2021-06-19 23:07:09 +00:00
2021-06-28 21:10:15 +00:00
// Force Correct Toolbar Size
unsigned char toolbar_patch[4] = {0x01, 0x00, 0x50, 0xe3}; // "cmp r0, #0x1"
patch((void *) 0x257b0, toolbar_patch);
}
2021-06-19 23:07:09 +00:00
// Show Block Outlines
2021-07-04 23:02:45 +00:00
int block_outlines = feature_has("Show Block Outlines", 0);
2022-04-11 23:59:21 +00:00
unsigned char outline_patch[4] = {(unsigned char) (block_outlines ? !touch_gui : touch_gui), 0x00, 0x50, 0xe3}; // "cmp r0, #0x1" or "cmp r0, #0x0"
2021-06-19 23:07:09 +00:00
patch((void *) 0x4a210, outline_patch);
2022-04-11 23:59:21 +00:00
// Force Touch Inventory
if (feature_has("Force Touch Inventory", server_disabled)) {
overwrite_call((void *) 0x2943c, (void *) operator_new_IngameBlockSelectionScreen_injection);
overwrite_call((void *) 0x29444, (void *) Touch_IngameBlockSelectionScreen);
}
2021-06-19 23:07:09 +00:00
}