forked from luanti-org/minetest_game
		
	
		
			
				
	
	
		
			50 lines
		
	
	
		
			961 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
			
		
		
	
	
			50 lines
		
	
	
		
			961 B
		
	
	
	
		
			Lua
		
	
	
	
	
	
| 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)
 |