forked from luanti-org/minetest_game
		
	Add API to control respawn logic and behavior
This commit is contained in:
		
							
								
								
									
										49
									
								
								mods/spawn/api.lua
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										49
									
								
								mods/spawn/api.lua
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,49 @@ | ||||
| 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) | ||||
		Reference in New Issue
	
	Block a user