diff options
Diffstat (limited to 'src/onload')
-rw-r--r-- | src/onload/lava_cooling.lua | 23 | ||||
-rw-r--r-- | src/onload/lobby_load.lua | 1 | ||||
-rw-r--r-- | src/onload/nether_portal.lua | 9 | ||||
-rw-r--r-- | src/onload/sapling_mutation.lua | 1 | ||||
-rw-r--r-- | src/onload/shop.lua | 49 | ||||
-rw-r--r-- | src/onload/spawn.lua | 34 | ||||
-rw-r--r-- | src/onload/void.lua | 4 |
7 files changed, 121 insertions, 0 deletions
diff --git a/src/onload/lava_cooling.lua b/src/onload/lava_cooling.lua new file mode 100644 index 0000000..92700af --- /dev/null +++ b/src/onload/lava_cooling.lua @@ -0,0 +1,23 @@ +skycraft.ores = skycraft.random:new() +skycraft.ores:add_choice("mcl_core:cobble", 1000) +skycraft.ores:add_choice("mcl_core:stone", 200) +skycraft.ores:add_choice("mcl_core:stone_with_coal", 31) +skycraft.ores:add_choice("mcl_core:stone_with_iron", 25) +skycraft.ores:add_choice("mcl_core:stone_with_gold", 10) +skycraft.ores:add_choice("mcl_core:stone_with_lapis", 10) +skycraft.ores:add_choice("mcl_core:stone_with_redstone", 10) +skycraft.ores:add_choice("mcl_core:stone_with_diamond", 5) +skycraft.ores:calc_csum() + +for k, v in pairs(minetest.registered_abms) do + if v.label == "Lava cooling" then + local old_func = v.action + v.action = function(pos, node, active_object_count, active_object_count_wider) + old_func(pos, node, active_object_count, active_object_count_wider) + if minetest.get_node(pos).name == "mcl_core:cobble" then + minetest.set_node(pos, {name = skycraft.ores:choose()}) + end + end + break + end +end diff --git a/src/onload/lobby_load.lua b/src/onload/lobby_load.lua new file mode 100644 index 0000000..0236e46 --- /dev/null +++ b/src/onload/lobby_load.lua @@ -0,0 +1 @@ +skycraft.lobby_tick() diff --git a/src/onload/nether_portal.lua b/src/onload/nether_portal.lua new file mode 100644 index 0000000..28a861b --- /dev/null +++ b/src/onload/nether_portal.lua @@ -0,0 +1,9 @@ +local old_light_nether_portal = mcl_portals.light_nether_portal +function mcl_portals.light_nether_portal(pos) + if mcl_worlds.pos_to_dimension(pos) == "nether" then + return false + else + return old_light_nether_portal(pos) + end +end + diff --git a/src/onload/sapling_mutation.lua b/src/onload/sapling_mutation.lua new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/src/onload/sapling_mutation.lua @@ -0,0 +1 @@ + diff --git a/src/onload/shop.lua b/src/onload/shop.lua new file mode 100644 index 0000000..cffafcf --- /dev/null +++ b/src/onload/shop.lua @@ -0,0 +1,49 @@ +function skycraft.sell(player, item, money) + local inv = player:get_inventory() + if not inv:contains_item("main", item) then return minetest.chat_send_player(player:get_player_name(), "You don't have enough items!") end + inv:remove_item("main", item) + skycraft.give_money(player, money) +end + +function skycraft.buy(player, item, money) + local inv = player:get_inventory() + if not inv:room_for_item("main", item) then return minetest.chat_send_player(player:get_player_name(), "You don't have enough space in your inventory!") end + if not skycraft.take_money(player, money) then return end + inv:add_item("main", item) +end + +for nodename, nodedef in pairs(minetest.registered_nodes) do + if nodename:find("mcl_signs:") then + minetest.override_item(nodename, { + on_rightclick = function(pos, node, player, itemstack, pointed_thing) + if pos.y < 5000 then return end + local text = minetest.get_meta(pos):get_string("text") or "" + local lines = text:split("\n") + local action, amount, price = lines[1], lines[2], lines[3] + print(action, amount, price) + if not (action and amount and price) then return end + price = string.gsub(price, "%$", "") + price = tonumber(price) + amount = string.gsub(amount, "x", "") + amount = tonumber(amount) + print(action, amount, price) + if not (amount and price) then return end + local func, frameoffset + if action == "Buy" then + func, frameoffset = skycraft.buy, -1 + elseif action == "Sell" then + func, frameoffset = skycraft.sell, 1 + else + return + end + local framepos = vector.add(pos, {x = 0, y = frameoffset, z = 0}) + if minetest.get_node(framepos).name ~= "mcl_itemframes:item_frame" then return end + local inv = minetest.get_meta(framepos):get_inventory() + if inv:is_empty("main") then return end + local itemstack = inv:get_stack("main", 1) + func(player, itemstack:get_name() .. " " .. tostring(amount), price) + end, + }) + end +end + diff --git a/src/onload/spawn.lua b/src/onload/spawn.lua new file mode 100644 index 0000000..547b331 --- /dev/null +++ b/src/onload/spawn.lua @@ -0,0 +1,34 @@ +function mcl_spawn.get_world_spawn_pos() + return skycraft.lobby_pos +end +function mcl_spawn.get_spawn_pos(player) + local name = player:get_player_name() + local spawn, custom_spawn + local bed_spawn = player:get_meta():get_string("mcl_beds:spawn") + if bed_spawn and bed_spawn ~= "" then + spawn, custom_spawn = minetest.string_to_pos(bed_spawn), true + end + if spawn and custom_spawn then + local node_bed = skycraft.get_far_node(spawn) + local node_up1 = skycraft.get_far_node(vector.add(spawn, {x = 0, y = 1, z = 0})) + local node_up2 = skycraft.get_far_node(vector.add(spawn, {x = 0, y = 2, z = 0})) + local bgroup = minetest.get_item_group(node_bed.name, "bed") + local def1 = minetest.registered_nodes[node_up1.name] + local def2 = minetest.registered_nodes[node_up2.name] + 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 + if bgroup ~= 1 and bgroup ~= 2 then + mcl_spawn.set_spawn_pos(player, nil) + end + spawn, custom_spawn = nil, false + minetest.chat_send_player(name, minetest.get_translator("mcl_beds")("Your spawn bed was missing or blocked.")) + end + end + if not spawn then + spawn = mcl_spawn.get_world_spawn_pos(), false + end + local island_spawn = skycraft.get_spawn(player) + if not custom_spawn and island_spawn then + spawn = vector.add(island_spawn, skycraft.spawn_offset) + end + return spawn, custom_spawn +end diff --git a/src/onload/void.lua b/src/onload/void.lua new file mode 100644 index 0000000..c5e67df --- /dev/null +++ b/src/onload/void.lua @@ -0,0 +1,4 @@ +function mcl_worlds.is_in_void(pos) + local res = minetest.get_node(vector.floor(pos)).name == "mcl_core:void" + return res, res +end |