]> git.lizzy.rs Git - elidragon.git/blobdiff - skyblock.lua
Merge pull request #4 from HimbeerserverDE/master
[elidragon.git] / skyblock.lua
index 5d733579d920cbf2ecbe00b2d13c02964c3aa7ab..effeb8112b6327ca7cdd7a47236ce4a528d5a09f 100755 (executable)
@@ -32,24 +32,6 @@ end
 
 -- start positions
 
-function elidragon.skyblock.load_legacy_start_positions()
-       local file = io.open(minetest.get_worldpath() .. "/skyblock.start_positions", "r")
-       if file then
-               local start_positions = {}
-               while true do
-                       local x = file:read("*n")
-                       if x == nil then
-                               break
-                       end
-                       local y = file:read("*n")
-                       local z = file:read("*n")
-                       table.insert(start_positions, {x = x, y = y, z = z})
-               end
-               file:close()
-               return start_positions
-       end
-end
-
 function elidragon.skyblock.load_start_positions()
        local file = io.open(minetest.get_worldpath() .. "/start_positions", "r")
        if file then
@@ -77,45 +59,36 @@ end
 elidragon.skyblock.start_positions = elidragon.skyblock.load_start_positions() 
 
 if not elidragon.skyblock.start_positions then
-       elidragon.skyblock.start_positions = elidragon.skyblock.load_legacy_start_positions() or elidragon.skyblock.generate_start_positions()
+       elidragon.skyblock.start_positions = elidragon.skyblock.generate_start_positions()
        elidragon.skyblock.save_start_positions(elidragon.skyblock.start_positions)
 end
 
-function elidragon.skyblock.load_legacy_last_start_id()
-       local file = io.open(minetest.get_worldpath() .. "/skyblock.last_start_id", "r")
-       if file then
-               local last_start_id = tonumber(file:read())
-               file:close()
-               return last_start_id
-       end
-end
-
-elidragon.savedata.last_start_id = elidragon.savedata.last_start_id or elidragon.skyblock.load_legacy_last_start_id() or 0
+elidragon.savedata.last_start_id = elidragon.savedata.last_start_id or 0
 
 -- spawns
 
-function elidragon.skyblock.get_spawn(name)
-       return elidragon.savedata.spawns[name]
+function elidragon.skyblock.get_spawn(player)
+       return minetest.string_to_pos(player:get_meta():get_string("elidragon:spawn"))
 end
 
-function elidragon.skyblock.set_spawn(name, pos)
-       elidragon.savedata.spawns[name] = pos
+function elidragon.skyblock.set_spawn(player, pos)
+       player:get_meta():set_string("elidragon:spawn", minetest.pos_to_string(pos))
 end
 
 function elidragon.skyblock.spawn_player(player)
        if not player then return end
-       local name = player:get_player_name()
-       local spawn = elidragon.skyblock.get_spawn(name) or elidragon.skyblock.new_spawn(name)
+       local spawn = elidragon.skyblock.get_spawn(player) or elidragon.skyblock.new_spawn(player)
        player:set_pos({x = spawn.x + 2, y = spawn.y + 2, z = spawn.z + 2})
 end
 
-function elidragon.skyblock.new_spawn(name)
+function elidragon.skyblock.new_spawn(player)
+       local name = player:get_player_name()
        local spawn
        repeat
                elidragon.savedata.last_start_id = elidragon.savedata.last_start_id + 1
                spawn = elidragon.skyblock.start_positions[elidragon.savedata.last_start_id] 
        until not minetest.is_protected(spawn, name)
-       elidragon.skyblock.set_spawn(name, spawn)       
+       elidragon.skyblock.set_spawn(player, spawn)     
        local file = io.open(minetest.get_modpath("elidragon") .. "/schems/island.we", "r")
        local schem = file:read()
        file:close()
@@ -123,47 +96,6 @@ function elidragon.skyblock.new_spawn(name)
        return spawn
 end
 
-function elidragon.skyblock.load_legacy_spawns()
-    local file = io.open(minetest.get_worldpath() .. "/skyblock.spawn", "r")
-    if file then
-               local spawns = {}
-        while true do
-            local x = file:read("*n")
-            if x == nil then
-                break
-            end
-            local y = file:read("*n")
-            local z = file:read("*n")
-            local name = file:read("*l")
-            spawns[name:sub(2)] = {x = x, y = y, z = z}
-        end
-        file:close()
-        return spawns
-       end
-end
-
-elidragon.savedata.spawns = elidragon.savedata.spawns or elidragon.skyblock.load_legacy_spawns() or {}
-
-
--- level
---[[
-minetest.register_chatcommand("level", {
-       description = "Get/set the current level of a player",
-       params = "<player> [<level>]",
-       func = function(name, param)
-               local target = param:split(" ")[1]
-               local level = tonumber(param:split(" ")[2])
-               if not level then
-                       minetest.chat_send_player(name, target .. " is on level " .. elidragon.skyblock.get_level(target))
-               elseif minetest.check_player_privs(name, {server = true}) and elidragon.skyblock.set_level(target, level) then
-                       minetest.chat_send_player(name, target .. " has been set to level " .. level)
-               else
-                       minetest.chat_send_player(name, "Cannot change " .. target .. " to level " .. level)
-               end
-       end,
-})
-]]--
-
 -- node
 
 minetest.register_node("elidragon:skyblock", {
@@ -191,12 +123,14 @@ end)
 
 -- remove legacy cloud layer
 
-minetest.register_lbm({
+minetest.register_abm({
        nodenames = {"default:cloud"},
-       name = "elidragon:remove_cloud_layer",
+       label = "elidragon:remove_cloud_layer",
+       interval = 1,
+       chance = 1,
        action = function(pos)
                if pos.y == -10 then
-                       minetest.set_node(pos, { name = "air"})
+                       minetest.remove_node(pos)
                end
        end
 })
@@ -219,23 +153,33 @@ minetest.after(0, function()
                local node
                if oldnode.name == "default:lava_source" then
                        node = "default:obsidian"
-               elseif math.random() < 0.001 then
+               elseif math.random() < 0.0001 then
                        node = "moreores:mineral_mithril"
-               elseif math.random() < 0.003 then
+               elseif math.random() < 0.0003 then
                        node = "default:stone_with_diamond"
-               elseif math.random() < 0.005 then
+               elseif math.random() < 0.0005 then
                        node = "default:stone_with_mese"
-               elseif math.random() < 0.01 then
+               elseif math.random() < 0.001 then
                        node = "default:stone_with_gold"
-               elseif math.random() < 0.015 then
+               elseif math.random() < 0.001 then
+                       node = "technic:mineral_chromium"
+               elseif math.random() < 0.001 then
+                       node = "technic:mineral_zinc"
+               elseif math.random() < 0.0012 then
+                       node = "technic:mineral_uranium"
+               elseif math.random() < 0.0015 then
                        node = "default:stone_with_tin"
-               elseif math.random() < 0.02 then
+               elseif math.random() < 0.002 then
                        node = "default:stone_with_copper"
-               elseif math.random() < 0.033 then
+               elseif math.random() < 0.0025 then
+                       node = "technic:mineral_sulfur"
+               elseif math.random() < 0.0033 then
                        node = "default:stone_with_iron"
-               elseif math.random() < 0.04 then
+               elseif math.random() < 0.004 then
                        node = "moreores:mineral_silver"
-               elseif math.random() < 0.05 then
+               elseif math.random() < 0.0045 then
+                       node = "technic:mineral_lead"
+               elseif math.random() < 0.005 then
                        node = "default:stone_with_coal"
                else
                        node = "default:stone"
@@ -250,7 +194,7 @@ end)
 minetest.after(0, function()
        minetest.register_alias("default:pine_leaves", "default:pine_needles")
        minetest.register_alias("default:pine_bush_leaves", "default:pine_bush_needles")
-       local trees = {"default:", "default:jungle", "default:pine_", "default:acacia_", "default:aspen_", "default:bush_", "default:blueberry_bush_", "default:acacia_bush_", "default:pine_bush_",}
+       local trees = {"default:", "default:jungle", "default:pine_", "default:acacia_", "default:aspen_", "default:bush_", "default:blueberry_bush_", "default:acacia_bush_", "default:pine_bush_", "moretrees:apple_tree_", "moretrees:beech_", "moretrees:cedar_", "moretrees:date_palm_", "moretrees:fir_", "moretrees:oak_", "moretrees:palm_", "moretrees:poplar_", "moretrees:sequoia_", "moretrees:spruce_", "moretrees:willow_", }
        for _, tree in pairs(trees) do
                local items = {}
                items[#items + 1] = {
@@ -261,7 +205,7 @@ minetest.after(0, function()
                        if stree ~= tree then
                                items[#items + 1] = {
                                        items = {stree .. "sapling"},
-                                       rarity = 1000,
+                                       rarity = 10000,
                                }
                        end
                end
@@ -301,8 +245,9 @@ minetest.register_craft({
 minetest.register_craft({
        output = "default:desert_stone",
        recipe = {
-               {"default:desert_sand", "default:desert_sand"},
-               {"default:desert_sand", "default:desert_sand"},
+               {"default:desert_sand", "default:desert_sand", "default:desert_sand"},
+               {"default:desert_sand", "default:desert_sand", "default:desert_sand"},
+               {"default:desert_sand", "default:desert_sand", "default:desert_sand"},
        }
 })
 
@@ -365,27 +310,29 @@ minetest.register_craft({
 
 -- commands
 
-minetest.register_chatcommand("set_skyblock_spawn", {
-    param = "<player> <x> <y> <z>",
-    desc = "Change the skyblocks spawn of a player",
-    privs = {server = true},
-    func = function(admin, param)
-        local name = param:split(" ")[1]
-        local x = tonumber(param:split(" ")[2])
-        local y = tonumber(param:split(" ")[3])
-        local z = tonumber(param:split(" ")[4])
-        if name and x and y and z then
-            elidragon.skyblock.set_spawn(name, {x = x, y = y, z = z})
-        else
-            minetest.chat_send_player(admin, "Invalid usage.")
-        end
-    end
-})
-
 minetest.register_chatcommand("island", {
        params = "",
        description = "Teleport to your Island",
        func = function(name, param)
-               elidragon.skyblock.spawn_player(minetest.get_player_by_name(name))
+               local player = minetest.get_player_by_name(name)
+               if not player then return end
+               elidragon.skyblock.spawn_player(player)
+       end,
+})
+
+minetest.register_chatcommand("set_skyblock_spawn", {
+       params = "<name> <x> <y> <z>",
+       description = "Set new skyblock spawn for <name>",
+       privs = {server = true},
+       func = function(sender, param)
+               local name = param:split(" ")[1]
+               local x = tonumber(param:split(" ")[2])
+               local y = tonumber(param:split(" ")[3])
+               local z = tonumber(param:split(" ")[4])
+               if name and x and y and z and minetest.get_player_by_name(name) then
+                       elidragon.skyblock.set_spawn(minetest.get_player_by_name(name), {x = x, y = y, z = z})
+               else
+                       minetest.chat_send_player(sender, "Invalid usage or player not online")
+               end
        end,
 })