aboutsummaryrefslogtreecommitdiff
path: root/src/main/spawns.lua
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/spawns.lua')
-rw-r--r--src/main/spawns.lua49
1 files changed, 49 insertions, 0 deletions
diff --git a/src/main/spawns.lua b/src/main/spawns.lua
new file mode 100644
index 0000000..b389160
--- /dev/null
+++ b/src/main/spawns.lua
@@ -0,0 +1,49 @@
+skycraft.spawn_offset = {x = 3, y = 2, z = 0}
+
+skycraft.starter_mobs = {"mobs_mc:cow", "mobs_mc:sheep", "mobs_mc:pig"}
+
+do
+ local file = io.open(minetest.get_modpath("skycraft") .. "/schems/island.we", "r")
+ skycraft.island_schem = file:read()
+ file:close()
+end
+
+skycraft.savedata.spawns = skycraft.savedata.spawns or {}
+
+function skycraft.get_spawn(player)
+ local strpos = player:get_meta():get_string("skycraft:spawn")
+ if not strpos == "" then return end
+ return minetest.string_to_pos(strpos)
+end
+
+function skycraft.set_spawn(player, pos)
+ player:get_meta():set_string("skycraft:spawn", minetest.pos_to_string(pos))
+end
+
+function skycraft.spawn_player(player)
+ local spawn = skycraft.get_spawn(player)
+ local name = player:get_player_name()
+ if not spawn then
+ local plot = skycraft.claim_plot(name)
+ spawn = {x = plot.x * 62 + 31, z = plot.z * 62 + 31, y = math.random(1600, 2000)}
+ minetest.chat_send_player(name, "Creating Island ...")
+ skycraft.set_spawn(player, spawn)
+ local physics = player:get_physics_override()
+ player:set_physics_override({gravity = 0})
+ minetest.after(5, function()
+ worldedit.deserialize(vector.add(spawn, {x = -6, y = -6, z = -4}), skycraft.island_schem)
+ local nametag = name .. "'s Friend"
+ local entity = minetest.add_entity(vector.add(spawn, {x = -4.5, y = 1, z = 1.5}), skycraft.starter_mobs[math.random(#skycraft.starter_mobs)])
+ entity:get_luaentity().nametag = nametag
+ entity:set_properties({nametag = nametag})
+ player:set_physics_override(physics)
+ end)
+ end
+ player:set_pos(vector.add(spawn, skycraft.spawn_offset))
+end
+
+minetest.register_on_respawnplayer(function(player)
+ local spawn = mcl_spawn.get_spawn_pos(player)
+ player:set_pos(spawn)
+ return true
+end)