spawn = {}

-- provide empty default implementations

function spawn.get_default_pos()
	return nil
end

function spawn.add_suitable_biome(biome)
end

-- Callback registration

spawn.registered_on_spawn = {}

function spawn.register_on_spawn(func)
	table.insert(spawn.registered_on_spawn, func)
end

-- Logic run on spawn

local use_engine_spawn = minetest.settings:get("static_spawnpoint") or
		minetest.settings:get_bool("engine_spawn")

local function on_spawn(player, is_new)
	-- Ask all callbacks first
	for _, cb in ipairs(spawn.registered_on_spawn) do
		if cb(player, is_new) then
			return true
		end
	end
	-- Fall back to default spawn
	if not use_engine_spawn then
		local pos = spawn.get_default_pos()
		if pos then
			player:set_pos(pos)
			return true
		end
	end
	return false
end

minetest.register_on_newplayer(function(player)
	on_spawn(player, true)
end)

minetest.register_on_respawnplayer(function(player)
	return on_spawn(player, false)
end)