Respawn mobspawner doll on load, if gone mobspawner doll on load, if gone mobspawner doll on load, if gone mobspawner doll on load, if gone
This commit is contained in:
parent
e332c64d2a
commit
e5c78973b0
|
@ -66,6 +66,20 @@ local function set_doll_properties(doll, mob)
|
||||||
doll:get_luaentity()._mob = mob
|
doll:get_luaentity()._mob = mob
|
||||||
end
|
end
|
||||||
|
|
||||||
|
local function respawn_doll(pos)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local mob = meta:get_string("Mob")
|
||||||
|
local doll
|
||||||
|
if mob and mob ~= "" then
|
||||||
|
doll = find_doll(pos)
|
||||||
|
if not doll then
|
||||||
|
doll = spawn_doll(pos)
|
||||||
|
set_doll_properties(doll, mob)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return doll
|
||||||
|
end
|
||||||
|
|
||||||
--[[ Public function: Setup the spawner at pos.
|
--[[ Public function: Setup the spawner at pos.
|
||||||
This function blindly assumes there's actually a spawner at pos.
|
This function blindly assumes there's actually a spawner at pos.
|
||||||
If not, then the results are undefined.
|
If not, then the results are undefined.
|
||||||
|
@ -288,6 +302,10 @@ minetest.register_node("mcl_mobspawners:spawner", {
|
||||||
end
|
end
|
||||||
end,
|
end,
|
||||||
|
|
||||||
|
on_punch = function(pos)
|
||||||
|
respawn_doll(pos)
|
||||||
|
end,
|
||||||
|
|
||||||
on_timer = spawn_mobs,
|
on_timer = spawn_mobs,
|
||||||
|
|
||||||
sounds = mcl_sounds.node_sound_metal_defaults(),
|
sounds = mcl_sounds.node_sound_metal_defaults(),
|
||||||
|
@ -328,7 +346,7 @@ end
|
||||||
|
|
||||||
doll_def.on_step = function(self, dtime)
|
doll_def.on_step = function(self, dtime)
|
||||||
-- Check if spawner is still present. If not, delete the entity
|
-- Check if spawner is still present. If not, delete the entity
|
||||||
self.timer = self.timer + 0.01
|
self.timer = self.timer + dtime
|
||||||
local n = minetest.get_node_or_nil(self.object:get_pos())
|
local n = minetest.get_node_or_nil(self.object:get_pos())
|
||||||
if self.timer > 1 then
|
if self.timer > 1 then
|
||||||
if n and n.name and n.name ~= "mcl_mobspawners:spawner" then
|
if n and n.name and n.name ~= "mcl_mobspawners:spawner" then
|
||||||
|
@ -341,5 +359,14 @@ doll_def.on_punch = function(self, hitter) end
|
||||||
|
|
||||||
minetest.register_entity("mcl_mobspawners:doll", doll_def)
|
minetest.register_entity("mcl_mobspawners:doll", doll_def)
|
||||||
|
|
||||||
|
-- FIXME: Doll can get destroyed by /clearobjects
|
||||||
|
minetest.register_lbm({
|
||||||
|
label = "Respawn mob spawner dolls",
|
||||||
|
name = "mcl_mobspawners:respawn_entities",
|
||||||
|
nodenames = { "mcl_mobspawners:spawner" },
|
||||||
|
run_at_every_load = true,
|
||||||
|
action = function(pos, node)
|
||||||
|
respawn_doll(pos)
|
||||||
|
end,
|
||||||
|
})
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user