Fix mobs operating when in, above or next to ignore

This commit is contained in:
ancientmarinerdev 2024-06-18 00:19:10 +01:00
parent 744b47088b
commit 551a3ce829
3 changed files with 38 additions and 5 deletions

View File

@ -2,6 +2,13 @@ mcl_util = {}
dofile(minetest.get_modpath(minetest.get_current_modname()).."/roman_numerals.lua")
mcl_util.plane_adjacents = {
vector.new(1,0,0),
vector.new(-1,0,0),
vector.new(0,0,1),
vector.new(0,0,-1),
}
-- Updates all values in t using values from to*.
function table.update(t, ...)
for _, to in ipairs {...} do

View File

@ -387,6 +387,7 @@ local function on_step_work (self, dtime)
local pos = self.object:get_pos()
if not pos then return end
if self:check_in_unloaded_area(pos) then return end
if self:check_despawn(pos, dtime) then return true end
if self:outside_limits() then return end

View File

@ -679,11 +679,7 @@ function mob_class:do_env_damage()
local pos3 = vector.offset(pos, 0, 1, 0)
self.standing_under = node_ok(pos3, "air").name
-- don't fall when on ignore, just stand still
if self.standing_in == "ignore" then
self.object:set_velocity({x = 0, y = 0, z = 0})
-- wither rose effect
elseif self.standing_in == "mcl_flowers:wither_rose" then
if self.standing_in == "mcl_flowers:wither_rose" then
mcl_potions.give_effect_by_level("withering", self.object, 2, 2)
end
@ -1094,3 +1090,32 @@ function mob_class:check_suspend(player_in_active_range)
return true
end
end
local plane_adjacents = table.copy(mcl_util.plane_adjacents)
table.insert(plane_adjacents, vector.new(0,-1,0))
local function is_node_loaded(pos)
local current_node = minetest.get_node(pos)
if current_node.name == "ignore" then
return false
end
return true
end
function mob_class:check_in_unloaded_area(pos)
local unloaded = false
if not is_node_loaded(pos) then
unloaded = true
else
for _,v in pairs(plane_adjacents) do
if not is_node_loaded(vector.add(pos, v)) then
unloaded = true
end
end
end
if unloaded then
-- do not fall or walk, or think. just stop it. we aren't ready for you yet
self.object:set_velocity(vector.zero())
end
return unloaded
end