From 58f329bb4f4257ad6d8bd4f78fa4cce88cff00d4 Mon Sep 17 00:00:00 2001 From: TheBrokenRail Date: Wed, 21 Sep 2022 17:34:19 -0400 Subject: [PATCH] Bug Fixes --- mods/include/mods/init/init.h | 2 +- mods/src/creative/creative.cpp | 2 +- mods/src/init/init.c | 2 +- mods/src/misc/misc.c | 10 ++++++++++ mods/src/server/server.cpp | 1 + mods/src/touch/touch.cpp | 5 ----- symbols/include/symbols/minecraft.h | 15 +++++++++++++++ 7 files changed, 29 insertions(+), 8 deletions(-) diff --git a/mods/include/mods/init/init.h b/mods/include/mods/init/init.h index 2b4793e..7fd3d88 100644 --- a/mods/include/mods/init/init.h +++ b/mods/include/mods/init/init.h @@ -16,12 +16,12 @@ void init_multiplayer(); void init_sound(); void init_input(); void init_sign(); -void init_creative(); void init_camera(); void init_touch(); void init_textures(); void init_atlas(); #endif +void init_creative(); void init_game_mode(); void init_misc(); void init_death(); diff --git a/mods/src/creative/creative.cpp b/mods/src/creative/creative.cpp index 30a6df0..135ed54 100644 --- a/mods/src/creative/creative.cpp +++ b/mods/src/creative/creative.cpp @@ -121,7 +121,7 @@ void init_creative() { } // Remove Creative Restrictions (Opening Chests, Crafting, Etc) - if (feature_has("Remove Creative Mode Restrictions", server_disabled)) { + if (feature_has("Remove Creative Mode Restrictions", server_enabled)) { unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop" // Remove Restrictions patch((void *) 0x43ee8, nop_patch); diff --git a/mods/src/init/init.c b/mods/src/init/init.c index 129030b..453297a 100644 --- a/mods/src/init/init.c +++ b/mods/src/init/init.c @@ -16,12 +16,12 @@ __attribute__((constructor)) static void init() { init_sound(); init_input(); init_sign(); - init_creative(); init_camera(); init_touch(); init_textures(); init_atlas(); #endif + init_creative(); init_game_mode(); init_misc(); init_death(); diff --git a/mods/src/misc/misc.c b/mods/src/misc/misc.c index c9835a8..f146178 100644 --- a/mods/src/misc/misc.c +++ b/mods/src/misc/misc.c @@ -302,6 +302,13 @@ static void anGenBuffers_injection(int32_t count, uint32_t *buffers) { glGenBuffers(count, buffers); } +// Fix Graphics Bug When Switching To First-Person While Sneaking +static void HumanoidMobRenderer_render_injection(unsigned char *model_renderer, unsigned char *entity, float param_2, float param_3, float param_4, float param_5, float param_6) { + (*HumanoidMobRenderer_render)(model_renderer, entity, param_2, param_3, param_4, param_5, param_6); + unsigned char *model = *(unsigned char **) (model_renderer + HumanoidMobRenderer_model_property_offset); + *(bool *) (model + HumanoidModel_is_sneaking_property_offset) = 0; +} + // Init static void nop() { } @@ -387,6 +394,9 @@ void init_misc() { // Properly Generate Buffers overwrite((void *) anGenBuffers, (void *) anGenBuffers_injection); + // Fix Graphics Bug When Switching To First-Person While Sneaking + patch_address(PlayerRenderer_render_vtable_addr, (void *) HumanoidMobRenderer_render_injection); + // Init C++ And Logging _init_misc_cpp(); _init_misc_logging(); diff --git a/mods/src/server/server.cpp b/mods/src/server/server.cpp index 4b7f9b4..1508b8c 100644 --- a/mods/src/server/server.cpp +++ b/mods/src/server/server.cpp @@ -503,6 +503,7 @@ static unsigned char get_max_players() { return (unsigned char) val; } +// Real Init Server static void server_init() { // Open Properties File std::string file(home_get()); diff --git a/mods/src/touch/touch.cpp b/mods/src/touch/touch.cpp index 75bff32..0ebf24b 100644 --- a/mods/src/touch/touch.cpp +++ b/mods/src/touch/touch.cpp @@ -87,9 +87,4 @@ void init_touch() { int block_outlines = feature_has("Show Block Outlines", server_disabled); unsigned char outline_patch[4] = {(unsigned char) (block_outlines ? !touch_gui : touch_gui), 0x00, 0x50, 0xe3}; // "cmp r0, #0x1" or "cmp r0, #0x0" patch((void *) 0x4a210, outline_patch); - if (block_outlines) { - // Disable Broken Touchscreen-Specific Block Outline Behavior - unsigned char block_highlight_patch[4] = {0x03, 0x00, 0x53, 0xe1}; // "cmp r3, r3" - patch((void *) 0x494b4, block_highlight_patch); - } } diff --git a/symbols/include/symbols/minecraft.h b/symbols/include/symbols/minecraft.h index ce19d73..c3354f5 100644 --- a/symbols/include/symbols/minecraft.h +++ b/symbols/include/symbols/minecraft.h @@ -819,6 +819,21 @@ static Recipes_t Recipes = (Recipes_t) 0x9cabc; static Recipes_t FurnaceRecipes = (Recipes_t) 0xa0778; +// HumanoidMobRenderer + +typedef void (*HumanoidMobRenderer_render_t)(unsigned char *model_renderer, unsigned char *entity, float param_2, float param_3, float param_4, float param_5, float param_6); +static HumanoidMobRenderer_render_t HumanoidMobRenderer_render = (HumanoidMobRenderer_render_t) 0x62b8c; + +static uint32_t HumanoidMobRenderer_model_property_offset = 0x14; // HumanoidModel * + +// HumanoidModel + +static uint32_t HumanoidModel_is_sneaking_property_offset = 0x236; // bool + +// PlayerRenderer + +static void *PlayerRenderer_render_vtable_addr = (void *) 0x107f08; + // Method That Require C++ Types #ifdef __cplusplus