Make animals and monster not spawn near player or too many other objects
parent
5869d604b5
commit
b1f6e14245
122
init.lua
122
init.lua
|
@ -340,6 +340,41 @@ function mobs:register_animal(name, def)
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
function mobs:register_spawn(name, nodes, max_light)
|
||||||
|
minetest.register_abm({
|
||||||
|
nodenames = nodes,
|
||||||
|
neighbors = nodes,
|
||||||
|
interval = 60,
|
||||||
|
chance = 5000,
|
||||||
|
action = function(pos, node)
|
||||||
|
pos.y = pos.y+1
|
||||||
|
if not minetest.env:get_node_light(pos) then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if minetest.env:get_node_light(pos) > max_light then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if minetest.env:get_node(pos).name ~= "air" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
pos.y = pos.y+1
|
||||||
|
if minetest.env:get_node(pos).name ~= "air" then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
if #minetest.env:get_objects_inside_radius(pos, 20) > 5 then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
for _,obj in pairs(minetest.env:get_objects_inside_radius(pos, 20)) do
|
||||||
|
if obj:is_player() then
|
||||||
|
return
|
||||||
|
end
|
||||||
|
end
|
||||||
|
minetest.chat_send_all("[mobs] Add "..name.." at "..minetest.pos_to_string(pos))
|
||||||
|
minetest.env:add_entity(pos, name)
|
||||||
|
end
|
||||||
|
})
|
||||||
|
end
|
||||||
|
|
||||||
mobs:register_monster("mobs:dirt_monster", {
|
mobs:register_monster("mobs:dirt_monster", {
|
||||||
hp_max = 5,
|
hp_max = 5,
|
||||||
physical = true,
|
physical = true,
|
||||||
|
@ -355,30 +390,7 @@ mobs:register_monster("mobs:dirt_monster", {
|
||||||
drop = "default:dirt",
|
drop = "default:dirt",
|
||||||
drop_count = 3,
|
drop_count = 3,
|
||||||
})
|
})
|
||||||
|
mobs:register_spawn("mobs:dirt_monster", {"default:dirt_with_grass"}, 3)
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"default:dirt_with_grass"},
|
|
||||||
neighbors = {"default:dirt", "default:dirt_with_grass"},
|
|
||||||
interval = 60,
|
|
||||||
chance = 5000,
|
|
||||||
action = function(pos, node)
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if not minetest.env:get_node_light(pos) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if minetest.env:get_node_light(pos) > 3 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
minetest.env:add_entity(pos, "mobs:dirt_monster")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
mobs:register_monster("mobs:stone_monster", {
|
mobs:register_monster("mobs:stone_monster", {
|
||||||
hp_max = 10,
|
hp_max = 10,
|
||||||
|
@ -395,30 +407,8 @@ mobs:register_monster("mobs:stone_monster", {
|
||||||
drop = "default:mossycobble",
|
drop = "default:mossycobble",
|
||||||
drop_count = 3,
|
drop_count = 3,
|
||||||
})
|
})
|
||||||
|
mobs:register_spawn("mobs:stone_monster", {"default:stone"}, 3)
|
||||||
|
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"default:stone"},
|
|
||||||
neighbors = {"default:stone"},
|
|
||||||
interval = 60,
|
|
||||||
chance = 5000,
|
|
||||||
action = function(pos, node)
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if not minetest.env:get_node_light(pos) then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if minetest.env:get_node_light(pos) > 3 then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
minetest.env:add_entity(pos, "mobs:stone_monster")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
mobs:register_monster("mobs:sand_monster", {
|
mobs:register_monster("mobs:sand_monster", {
|
||||||
hp_max = 3,
|
hp_max = 3,
|
||||||
|
@ -436,24 +426,7 @@ mobs:register_monster("mobs:sand_monster", {
|
||||||
drop_count = 3,
|
drop_count = 3,
|
||||||
light_resistant = true,
|
light_resistant = true,
|
||||||
})
|
})
|
||||||
|
mobs:register_spawn("mobs:sand_monster", {"default:desert_sand"}, 20)
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"default:desert_sand"},
|
|
||||||
neighbors = {"default:desert_sand", "default:desert_stone"},
|
|
||||||
interval = 60,
|
|
||||||
chance = 5000,
|
|
||||||
action = function(pos, node)
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
minetest.env:add_entity(pos, "mobs:sand_monster")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
mobs:register_animal("mobs:sheep", {
|
mobs:register_animal("mobs:sheep", {
|
||||||
hp_max = 5,
|
hp_max = 5,
|
||||||
|
@ -480,24 +453,7 @@ mobs:register_animal("mobs:sheep", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
})
|
})
|
||||||
|
mobs:register_spawn("mobs:sheep", {"default:dirt_with_grass"}, 20)
|
||||||
minetest.register_abm({
|
|
||||||
nodenames = {"default:dirt_with_grass"},
|
|
||||||
neighbors = {"default:dirt", "default:dirt_with_grass"},
|
|
||||||
interval = 60,
|
|
||||||
chance = 5000,
|
|
||||||
action = function(pos, node)
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
pos.y = pos.y+1
|
|
||||||
if minetest.env:get_node(pos).name ~= "air" then
|
|
||||||
return
|
|
||||||
end
|
|
||||||
minetest.env:add_entity(pos, "mobs:sheep")
|
|
||||||
end
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("mobs:meat_raw", {
|
minetest.register_craftitem("mobs:meat_raw", {
|
||||||
description = "Raw Meat",
|
description = "Raw Meat",
|
||||||
|
|
Loading…
Reference in New Issue