Fix "Sleeping Beauty" Bug
This commit is contained in:
parent
db03d964de
commit
c908d46d54
@ -45,6 +45,23 @@ static int32_t OptionsScreen_handleBackEvent_injection(unsigned char *screen, bo
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Fix "Sleeping Beaty" Bug
|
||||
static int32_t InBedScreen_handleBackEvent_injection(unsigned char *screen, bool do_nothing) {
|
||||
if (!do_nothing) {
|
||||
// Close Screen
|
||||
unsigned char *minecraft = *(unsigned char **) (screen + Screen_minecraft_property_offset);
|
||||
(*Minecraft_setScreen)(minecraft, NULL);
|
||||
// Stop Sleeping
|
||||
unsigned char *player = *(unsigned char **) (minecraft + Minecraft_player_property_offset);
|
||||
if (player != NULL) {
|
||||
unsigned char *player_vtable = *(unsigned char **) player;
|
||||
Player_stopSleepInBed_t Player_stopSleepInBed = *(Player_stopSleepInBed_t *) (player_vtable + Player_stopSleepInBed_vtable_offset);
|
||||
(*Player_stopSleepInBed)(player, 1, 1, 1);
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
// Set Mouse Grab State
|
||||
static int mouse_grab_state = 0;
|
||||
void input_set_mouse_grab_state(int state) {
|
||||
@ -90,6 +107,8 @@ void _init_misc() {
|
||||
if (enable_misc) {
|
||||
// Fix OptionsScreen Ignoring The Back Button
|
||||
patch_address(OptionsScreen_handleBackEvent_vtable_addr, (void *) OptionsScreen_handleBackEvent_injection);
|
||||
// Fix "Sleeping Beauty" Bug
|
||||
patch_address(InBedScreen_handleBackEvent_vtable_addr, (void *) InBedScreen_handleBackEvent_injection);
|
||||
// Disable Opening Inventory Using The Cursor When Cursor Is Hidden
|
||||
overwrite_calls((void *) Gui_handleClick, (void *) Gui_handleClick_injection);
|
||||
}
|
||||
|
@ -460,6 +460,9 @@ static uint32_t Player_drop_vtable_offset = 0x208;
|
||||
|
||||
static Mob_getWalkingSpeedModifier_t Player_getWalkingSpeedModifier = (Mob_getWalkingSpeedModifier_t) 0x8ea0c;
|
||||
|
||||
typedef void (*Player_stopSleepInBed_t)(unsigned char *player, bool param_1, bool param_2, bool param_3);
|
||||
static uint32_t Player_stopSleepInBed_vtable_offset = 0x228;
|
||||
|
||||
static uint32_t Player_username_property_offset = 0xbf4; // std::string
|
||||
static uint32_t Player_inventory_property_offset = 0xbe0; // Inventory *
|
||||
|
||||
@ -590,6 +593,10 @@ static FurnaceScreen_handleAddItem_t FurnaceScreen_handleAddItem = (FurnaceScree
|
||||
|
||||
static uint32_t FurnaceScreen_tile_entity_property_offset = 0x1d0; // FurnaceTileEntity *
|
||||
|
||||
// InBedScreen
|
||||
|
||||
static void *InBedScreen_handleBackEvent_vtable_addr = (void *) 0x104614;
|
||||
|
||||
// FurnaceTileEntity
|
||||
|
||||
typedef ItemInstance *(*FurnaceTileEntity_getItem_t)(unsigned char *furnace_tile_entity, int32_t slot);
|
||||
|
Loading…
Reference in New Issue
Block a user