From 1417bf6269b003d4527d5095ea2fdc1bb7b659e3 Mon Sep 17 00:00:00 2001 From: Bigjango13 Date: Tue, 25 Mar 2025 16:39:05 -0700 Subject: [PATCH] Stop Doors And Trapdoors Closing When Updated --- docs/CHANGELOG.md | 1 + libreborn/src/util/env/flags/available-feature-flags | 3 ++- mods/src/misc/misc.cpp | 8 ++++++++ symbols/src/entity/Throwable.def | 4 ++++ 4 files changed, 15 insertions(+), 1 deletion(-) diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index e9ef18be..90d13199 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -68,6 +68,7 @@ * `Fix Eggs Spawning Abnormally Healthy Chickens` (Enabled By Default) * `Correctly Close API Sockets` (Enabled By Default) * `Optimized API Sockets` (Enabled By Default) + * `Stop Doors And Trapdoors Closing When Updated` (Disabled By Default) * Existing Functionality (All Enabled By Default) * `Fix Screen Rendering When Hiding HUD` * `Sanitize Usernames` diff --git a/libreborn/src/util/env/flags/available-feature-flags b/libreborn/src/util/env/flags/available-feature-flags index 444d25c9..a808838a 100644 --- a/libreborn/src/util/env/flags/available-feature-flags +++ b/libreborn/src/util/env/flags/available-feature-flags @@ -159,4 +159,5 @@ CATEGORY Miscellaneous TRUE Screenshot Support TRUE Add Camera Functionality TRUE Update Default Options - TRUE Remove Chest Placement Restrictions \ No newline at end of file + TRUE Remove Chest Placement Restrictions + FALSE Stop Doors And Trapdoors Closing When Updated \ No newline at end of file diff --git a/mods/src/misc/misc.cpp b/mods/src/misc/misc.cpp index b622eb73..2711b8a8 100644 --- a/mods/src/misc/misc.cpp +++ b/mods/src/misc/misc.cpp @@ -698,6 +698,14 @@ void init_misc() { overwrite_call((void *) 0x7de0c, Chicken_moveTo, ThrownEgg_onHit_Chicken_moveTo_injection); } + // Stop Doors And Trapdoors Closing When Updated + if (feature_has("Stop Doors And Trapdoors Closing When Updated", server_disabled)) { + // Patch out the `setOpen` call for doors and trap doors in neighborChanged + unsigned char nop_patch[4] = {0x00, 0xf0, 0x20, 0xe3}; // "nop" + patch((void *) 0xbe1a0, nop_patch); // door + patch((void *) 0xcf818, nop_patch); // trapdoor + } + // Disable overwrite_calls() After Minecraft::init misc_run_on_init([](__attribute__((unused)) Minecraft *minecraft) { thunk_enabler = [](__attribute__((unused)) void *a, __attribute__((unused)) void *b) -> void * { diff --git a/symbols/src/entity/Throwable.def b/symbols/src/entity/Throwable.def index a234f545..5fa31532 100644 --- a/symbols/src/entity/Throwable.def +++ b/symbols/src/entity/Throwable.def @@ -6,6 +6,10 @@ vtable-size 0x13c; constructor (Level *level, Entity *thrower) = 0x8ccf0; +virtual-method float getThrowPower() = 0x12c; +virtual-method float getThrowUpAngleOffset() = 0x130; +virtual-method float getGravity() = 0x134; virtual-method void onHit(HitResult *res) = 0x138; property int thrower_id = 0xd8; +property int life = 0xdc;