1
0
mirror of https://codeberg.org/tenplus1/mobs_redo.git synced 2024-12-24 17:50:21 +01:00

add entity count check for spawners

This commit is contained in:
TenPlus1 2017-02-10 12:04:57 +00:00
parent cce6eabd81
commit da5e8ef635

View File

@ -71,6 +71,9 @@ minetest.register_node("mobs:spawner", {
end, end,
}) })
local max_per_block = tonumber(minetest.setting_get("max_objects_per_block") or 99)
-- spawner abm -- spawner abm
minetest.register_abm({ minetest.register_abm({
label = "Mob spawner node", label = "Mob spawner node",
@ -81,6 +84,11 @@ minetest.register_abm({
action = function(pos, node, active_object_count, active_object_count_wider) action = function(pos, node, active_object_count, active_object_count_wider)
-- return if too many entities already
if active_object_count_wider >= max_per_block then
return
end
-- get meta and command -- get meta and command
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local comm = meta:get_string("command"):split(" ") local comm = meta:get_string("command"):split(" ")
@ -98,17 +106,23 @@ minetest.register_abm({
return return
end end
-- are we spawning a registered mob?
if not mobs.spawning_mobs[mob] then
--print ("--- mob doesn't exist", mob)
return
end
-- check objects inside 9x9 area around spawner -- check objects inside 9x9 area around spawner
local objs = minetest.get_objects_inside_radius(pos, 9) local objs = minetest.get_objects_inside_radius(pos, 9)
local count = 0 local count = 0
local ent = nil local ent = nil
-- count mob objects of same type in area -- count mob objects of same type in area
for k, obj in pairs(objs) do for k, obj in ipairs(objs) do
ent = obj:get_luaentity() ent = obj:get_luaentity()
if ent and ent.name == mob then if ent and ent.name and ent.name == mob then
count = count + 1 count = count + 1
end end
end end