]> git.lizzy.rs Git - skycraft.git/blob - spawns.lua
Ajust Ore Probability
[skycraft.git] / spawns.lua
1 skycraft.spawn_offset = {x = 3, y = 2, z = 0}
2
3 skycraft.starter_mobs = {"mobs_mc:cow", "mobs_mc:sheep", "mobs_mc:pig"}
4
5 do
6         local file = io.open(minetest.get_modpath("skycraft") .. "/schems/island.we", "r")
7         skycraft.island_schem = file:read()
8         file:close()
9 end
10
11 skycraft.savedata.spawns = skycraft.savedata.spawns or {} 
12
13 function skycraft.get_spawn(player)
14         local strpos = player:get_meta():get_string("skycraft:spawn")
15         if not strpos == "" then return end
16         return minetest.string_to_pos(strpos)
17 end
18
19 function skycraft.set_spawn(player, pos)
20         player:get_meta():set_string("skycraft:spawn", minetest.pos_to_string(pos))
21 end
22
23 function skycraft.spawn_player(player)
24         local spawn = skycraft.get_spawn(player)
25         local name = player:get_player_name()
26         if not spawn then
27                 local plot = skycraft.claim_plot(name)
28                 spawn = {x = plot.x * 62 + 31, z = plot.z * 62 + 31, y = math.random(1600, 2000)}
29                 minetest.chat_send_player(name, "Creating Island ...")
30                 skycraft.set_spawn(player, spawn)
31                 local physics = player:get_physics_override()
32                 player:set_physics_override({gravity = 0})
33                 minetest.after(5, function()
34                         worldedit.deserialize(vector.add(spawn, {x = -6, y = -6, z = -4}), skycraft.island_schem)
35                         local nametag = name .. "'s Friend"
36                         local entity = minetest.add_entity(vector.add(spawn, {x = -4.5, y = 1, z = 1.5}), skycraft.starter_mobs[math.random(#skycraft.starter_mobs)])
37                         entity:get_luaentity().nametag = nametag
38                         entity:set_properties({nametag = nametag})
39                         player:set_physics_override(physics)
40                 end)
41         end
42         player:set_pos(vector.add(spawn, skycraft.spawn_offset))
43 end
44
45 minetest.register_on_respawnplayer(function(player)
46         local spawn = mcl_spawn.get_spawn_pos(player)
47         player:set_pos(spawn)
48         return true
49 end)
50
51 minetest.register_on_mods_loaded(function()
52         function mcl_spawn.get_spawn_pos(player)
53                 local name = player:get_player_name()
54                 local spawn, custom_spawn
55                 local bed_spawn = player:get_meta():get_string("mcl_beds:spawn")
56                 if bed_spawn and bed_spawn ~= "" then
57                         spawn, custom_spawn = minetest.string_to_pos(bed_spawn), true
58                 end
59                 if spawn and custom_spawn then
60                         local node_bed = skycraft.get_far_node(spawn)
61                         local node_up1 = skycraft.get_far_node(vector.add(spawn, {x = 0, y = 1, z = 0}))
62                         local node_up2 = skycraft.get_far_node(vector.add(spawn, {x = 0, y = 2, z = 0}))
63                         local bgroup = minetest.get_item_group(node_bed.name, "bed")
64                         local def1 = minetest.registered_nodes[node_up1.name]
65                         local def2 = minetest.registered_nodes[node_up2.name]
66                         if bgroup ~= 1 and bgroup ~= 2 or def1.walkable or def2.walkable or def1.damage_per_second and def1.damage_per_second > 0 or def2.damage_per_second and def2.damage_per_second > 0 then
67                                 if bgroup ~= 1 and bgroup ~= 2 then
68                                         mcl_spawn.set_spawn_pos(player, nil)
69                                 end
70                                 spawn, custom_spawn = nil, false
71                                 minetest.chat_send_player(name, minetest.get_translator("mcl_beds")("Your spawn bed was missing or blocked."))
72                         end
73                 end
74                 if not spawn then
75                         spawn = mcl_spawn.get_world_spawn_pos(), false
76                 end
77                 local island_spawn = skycraft.get_spawn(player)
78                 if not custom_spawn and island_spawn then
79                         spawn = vector.add(island_spawn, skycraft.spawn_offset)
80                 end
81                 return spawn, custom_spawn
82         end
83 end)