From dcfd31d17a5a9703f5838b389a4adbdbbf7ee7ea Mon Sep 17 00:00:00 2001 From: kno10 Date: Mon, 30 Sep 2024 11:22:31 +0200 Subject: [PATCH] Avoid random jumps when standing due to gravity (fewer villagers on the roofs) (#4547) Reviewed-on: https://git.minetest.land/VoxeLibre/VoxeLibre/pulls/4547 Reviewed-by: the-real-herowl Co-authored-by: kno10 Co-committed-by: kno10 --- mods/ENTITIES/mcl_mobs/api.lua | 10 +++++----- mods/ENTITIES/mcl_mobs/physics.lua | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/mods/ENTITIES/mcl_mobs/api.lua b/mods/ENTITIES/mcl_mobs/api.lua index b3d1ac142..dd3c84819 100644 --- a/mods/ENTITIES/mcl_mobs/api.lua +++ b/mods/ENTITIES/mcl_mobs/api.lua @@ -388,7 +388,7 @@ end -local function on_step_work (self, dtime) +local function on_step_work(self, dtime, moveresult) local pos = self.object:get_pos() if not pos then return end @@ -402,7 +402,7 @@ local function on_step_work (self, dtime) -- Do we abandon out of here now? end - if self:falling(pos) then return end + if self:falling(pos, moveresult) then return end if self:step_damage (dtime, pos) then return end if self.state == "die" then return end @@ -502,11 +502,11 @@ end -- main mob function -function mob_class:on_step(dtime) +function mob_class:on_step(dtime, moveresult) if not DEVELOPMENT then -- Removed as bundled Lua (5.1 doesn't support xpcall) --local status, retVal = xpcall(on_step_work, on_step_error_handler, self, dtime) - local status, retVal = pcall(on_step_work, self, dtime) + local status, retVal = pcall(on_step_work, self, dtime, moveresult) if status then return retVal else @@ -521,7 +521,7 @@ function mob_class:on_step(dtime) log_error (dump(retVal), dump(pos), dump(self)) end else - return on_step_work (self, dtime) + return on_step_work (self, dtime, moveresult) end end diff --git a/mods/ENTITIES/mcl_mobs/physics.lua b/mods/ENTITIES/mcl_mobs/physics.lua index 5c1d34684..994c530f5 100644 --- a/mods/ENTITIES/mcl_mobs/physics.lua +++ b/mods/ENTITIES/mcl_mobs/physics.lua @@ -927,7 +927,8 @@ end -- falling and fall damage -- returns true if mob died -function mob_class:falling(pos) +function mob_class:falling(pos, moveresult) + if moveresult and moveresult.touching_ground then return false end if self.fly and self.state ~= "die" then return