This commit is contained in:
parent
3048b3bf50
commit
4c33b6da9a
@ -4,6 +4,8 @@
|
||||
* Internal Refactor Of ``libreborn``
|
||||
* Remove Use Of ``/bin/sh``
|
||||
* Load Custom Mods First
|
||||
* Use Zenity Dark Mode
|
||||
* Add ``Improved Cursor Rendering`` Feature Flag (Enabled By Default)
|
||||
|
||||
**2.3.0**
|
||||
* Switch To AppImage For Packaging
|
||||
|
@ -32,3 +32,4 @@ TRUE Close Current Screen On Death
|
||||
FALSE Disable Raw Mouse Motion (Not Recommended)
|
||||
TRUE Fix Furnace Not Checking Item Auxiliary
|
||||
FALSE Disable Hosting LAN Worlds
|
||||
TRUE Improved Cursor Rendering
|
||||
|
@ -141,6 +141,11 @@ static void load(char **ld_preload, char *folder) {
|
||||
|
||||
// Pre-Bootstrap
|
||||
void pre_bootstrap() {
|
||||
// GTK Dark Mode
|
||||
#ifndef MCPI_HEADLESS_MODE
|
||||
set_and_print_env("GTK_THEME", "Adwaita:dark");
|
||||
#endif
|
||||
|
||||
// AppImage
|
||||
#ifdef MCPI_IS_APPIMAGE_BUILD
|
||||
char *owd = getenv("OWD");
|
||||
|
@ -72,7 +72,7 @@ add_library(death SHARED src/death/death.cpp)
|
||||
target_link_libraries(death reborn-patch symbols feature)
|
||||
|
||||
add_library(misc SHARED src/misc/misc.c src/misc/misc.cpp src/misc/logging.cpp)
|
||||
target_link_libraries(misc reborn-patch symbols feature GLESv1_CM)
|
||||
target_link_libraries(misc reborn-patch symbols media-layer-core feature GLESv1_CM)
|
||||
|
||||
add_library(options SHARED src/options/options.c)
|
||||
target_link_libraries(options reborn-patch symbols feature)
|
||||
|
@ -6,6 +6,7 @@
|
||||
|
||||
#include <libreborn/libreborn.h>
|
||||
#include <symbols/minecraft.h>
|
||||
#include <SDL/SDL.h>
|
||||
|
||||
#include "../init/init.h"
|
||||
#include "../feature/feature.h"
|
||||
@ -179,6 +180,25 @@ static int32_t FurnaceScreen_handleAddItem_injection(unsigned char *furnace_scre
|
||||
}
|
||||
}
|
||||
|
||||
// Custom Cursor Rendering
|
||||
//
|
||||
// The default behavior for Touch GUI is to only render the cursor when the mouse is clicking, this fixes that.
|
||||
// This also makes the cursor always render if the mouse is unlocked, instead of just when there is a Screen showing.
|
||||
static void GameRenderer_render_injection(unsigned char *game_renderer, float param_1) {
|
||||
// Call Original Method
|
||||
(*GameRenderer_render)(game_renderer, param_1);
|
||||
|
||||
// Check If Cursor Should Render
|
||||
if (SDL_WM_GrabInput(SDL_GRAB_QUERY) == SDL_GRAB_OFF) {
|
||||
// Get X And Y
|
||||
float x = (*Mouse_getX)() * (*InvGuiScale);
|
||||
float y = (*Mouse_getY)() * (*InvGuiScale);
|
||||
// Render Cursor
|
||||
unsigned char *minecraft = *(unsigned char **) (game_renderer + GameRenderer_minecraft_property_offset);
|
||||
(*renderCursor)(x, y, minecraft);
|
||||
}
|
||||
}
|
||||
|
||||
// Init
|
||||
void init_misc() {
|
||||
// Remove Invalid Item Background (A Red Background That Appears For Items That Are Not Included In The gui_blocks Atlas)
|
||||
@ -216,6 +236,15 @@ void init_misc() {
|
||||
overwrite_calls((void *) FurnaceScreen_handleAddItem, (void *) FurnaceScreen_handleAddItem_injection);
|
||||
}
|
||||
|
||||
// Improved Cursor Rendering
|
||||
if (feature_has("Improved Cursor Rendering", 0)) {
|
||||
// Disable Normal Cursor Rendering
|
||||
unsigned char disable_cursor_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x4a6c0, disable_cursor_patch);
|
||||
// Add Custom Cursor Rendering
|
||||
overwrite_calls((void *) GameRenderer_render, (void *) GameRenderer_render_injection);
|
||||
}
|
||||
|
||||
// Init C++ And Logging
|
||||
_init_misc_cpp();
|
||||
_init_misc_logging();
|
||||
|
@ -10,25 +10,6 @@ static int32_t Minecraft_isTouchscreen_injection(__attribute__((unused)) unsigne
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Custom Cursor Rendering
|
||||
// The Default Behavior For Touch GUI Is To Only Render The Cursor When The Mouse Is Clicking, This Fixes That
|
||||
static void GameRenderer_render_injection(unsigned char *game_renderer, float param_1) {
|
||||
// Call Real Method
|
||||
(*GameRenderer_render)(game_renderer, param_1);
|
||||
|
||||
// Render Cursor
|
||||
unsigned char *minecraft = *(unsigned char **) (game_renderer + GameRenderer_minecraft_property_offset);
|
||||
unsigned char *current_screen = *(unsigned char **) (minecraft + Minecraft_screen_property_offset);
|
||||
// Check If Cursor Should Render
|
||||
if (current_screen != NULL) {
|
||||
// Get X And Y
|
||||
float x = (*Mouse_getX)() * (*InvGuiScale);
|
||||
float y = (*Mouse_getY)() * (*InvGuiScale);
|
||||
// Render
|
||||
(*renderCursor)(x, y, minecraft);
|
||||
}
|
||||
}
|
||||
|
||||
// Init
|
||||
void init_touch() {
|
||||
int touch_gui = feature_has("Touch GUI", 0);
|
||||
@ -36,12 +17,6 @@ void init_touch() {
|
||||
// Main UI
|
||||
overwrite((void *) Minecraft_isTouchscreen, (void *) Minecraft_isTouchscreen_injection);
|
||||
|
||||
// Disable Normal Cursor Rendering
|
||||
unsigned char disable_cursor_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop"
|
||||
patch((void *) 0x4a6c0, disable_cursor_patch);
|
||||
// Add Custom Cursor Rendering
|
||||
overwrite_calls((void *) GameRenderer_render, (void *) GameRenderer_render_injection);
|
||||
|
||||
// Force Correct Toolbar Size
|
||||
unsigned char toolbar_patch[4] = {0x01, 0x00, 0x50, 0xe3}; // "cmp r0, #0x1"
|
||||
patch((void *) 0x257b0, toolbar_patch);
|
||||
|
Loading…
Reference in New Issue
Block a user