aboutsummaryrefslogtreecommitdiff
path: root/src/onload
diff options
context:
space:
mode:
Diffstat (limited to 'src/onload')
-rw-r--r--src/onload/lava_cooling.lua23
-rw-r--r--src/onload/lobby_load.lua1
-rw-r--r--src/onload/nether_portal.lua9
-rw-r--r--src/onload/sapling_mutation.lua1
-rw-r--r--src/onload/shop.lua49
-rw-r--r--src/onload/spawn.lua34
-rw-r--r--src/onload/void.lua4
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