From b42f88313123ccb652f969e7c43a30baf12a38bc Mon Sep 17 00:00:00 2001 From: kno10 Date: Mon, 29 Jul 2024 22:20:56 +0200 Subject: [PATCH] Avoid random jumps when standing due to gravity. Closes: #4493 on VL side, further fixes in minetest pending --- 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