aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSX <sx@minetest>2020-02-13 19:56:34 +0200
committerSX <sx@minetest>2020-02-13 19:56:34 +0200
commit62d6d4d5aeced03397f88acaaccabc5e2a469735 (patch)
tree8382aed75cddd2e29b61dd6a51f61326895e6096
parentffedde3bd611a8f29398f9db71b198be5b23c4dc (diff)
downloadelevator-62d6d4d5aeced03397f88acaaccabc5e2a469735.tar.gz
elevator-62d6d4d5aeced03397f88acaaccabc5e2a469735.tar.bz2
elevator-62d6d4d5aeced03397f88acaaccabc5e2a469735.zip
Refactor mod structure
-rw-r--r--init.lua160
-rw-r--r--register.lua119
-rw-r--r--storage.lua33
3 files changed, 161 insertions, 151 deletions
diff --git a/init.lua b/init.lua
index 84ea482..f0d7cac 100644
--- a/init.lua
+++ b/init.lua
@@ -8,43 +8,15 @@ local VERSION = 8
local PTIMEOUT = 120
-- Detect optional mods.
-local technic_path = minetest.get_modpath("technic")
-local chains_path = minetest.get_modpath("chains")
-local homedecor_path = minetest.get_modpath("homedecor")
local armor_path = minetest.get_modpath("3d_armor")
--- Central "network" table.
-local elevator = {
- motors = {},
-}
-
-local str = minetest.get_mod_storage and minetest.get_mod_storage()
+-- global runtime storage for data and references
+-- contains .motors loaded from mod storage and api functions
+elevator = {}
-local elevator_file = minetest.get_worldpath() .. "/elevator"
-
-local function load_elevator()
- if str and ((str.contains and str:contains("data")) or (str:get_string("data") and str:get_string("data") ~= "")) then
- elevator = minetest.deserialize(str:get_string("data"))
- return
- end
- local file = io.open(elevator_file)
- if file then
- elevator = minetest.deserialize(file:read("*all")) or {}
- file:close()
- end
-end
-
-local function save_elevator()
- if str then
- str:set_string("data", minetest.serialize(elevator))
- return
- end
- local f = io.open(elevator_file, "w")
- f:write(minetest.serialize(elevator))
- f:close()
-end
-
-load_elevator()
+local MP = minetest.get_modpath(minetest.get_current_modname())
+dofile(MP .. "/storage.lua")
+dofile(MP .. "/register.lua")
-- Elevator boxes in action.
local boxes = {}
@@ -65,36 +37,6 @@ local function get_node(pos)
return minetest.get_node_or_nil(pos)
end
--- Use homedecor's placeholder if possible.
-local placeholder = homedecor_path and "homedecor:expansion_placeholder" or "elevator:placeholder"
-if homedecor_path then
- minetest.register_alias("elevator:placeholder", "homedecor:expansion_placeholder")
-else
- -- Placeholder node, in the style of homedecor.
- minetest.register_node(placeholder, {
- description = "Expansion Placeholder",
- selection_box = {
- type = "fixed",
- fixed = {0, 0, 0, 0, 0, 0},
- },
- groups = {
- not_in_creative_inventory=1
- },
- drawtype = "airlike",
- paramtype = "light",
- sunlight_propagates = true,
-
- walkable = false,
- buildable_to = false,
- is_ground_content = false,
-
- on_dig = function(pos, node, player)
- minetest.remove_node(pos)
- minetest.set_node(pos, {name=placeholder})
- end
- })
-end
-
local VISUAL_INCREASE = 1.75
-- Cause <sender> to ride <motorhash> beginning at <pos> and targetting <target>.
@@ -443,7 +385,7 @@ for _,mode in ipairs({"on", "off"}) do
-- Add a placeholder to avoid nodes being placed in the top.
local p = vector.add(pos, {x=0, y=1, z=0})
local p2 = minetest.dir_to_facedir(placer:get_look_dir())
- minetest.set_node(p, {name=placeholder, paramtype2="facedir", param2=p2})
+ minetest.set_node(p, {name="elevator:placeholder", paramtype2="facedir", param2=p2})
-- Try to build a motor above.
local motor = locate_motor(pos)
@@ -459,7 +401,7 @@ for _,mode in ipairs({"on", "off"}) do
on_place = function(itemstack, placer, pointed_thing)
local pos = pointed_thing.above
local node = minetest.get_node(vector.add(pos, {x=0, y=1, z=0}))
- if (node ~= nil and node.name ~= "air" and node.name ~= placeholder) then
+ if (node ~= nil and node.name ~= "air" and node.name ~= "elevator:placeholder") then
return
end
return minetest.item_place(itemstack, placer, pointed_thing)
@@ -540,7 +482,7 @@ for _,mode in ipairs({"on", "off"}) do
on_destruct = function(pos)
local p = vector.add(pos, {x=0, y=1, z=0})
- if get_node(p).name == placeholder then
+ if get_node(p).name == "elevator:placeholder" then
minetest.remove_node(p)
end
end,
@@ -880,87 +822,3 @@ local box_entity = {
}
minetest.register_entity("elevator:box", box_entity)
-
-if technic_path and chains_path then
- minetest.register_craft({
- output = "elevator:elevator",
- recipe = {
- {"technic:cast_iron_ingot", "chains:chain", "technic:cast_iron_ingot"},
- {"technic:cast_iron_ingot", "default:mese_crystal", "technic:cast_iron_ingot"},
- {"technic:stainless_steel_ingot", "default:glass", "technic:stainless_steel_ingot"},
- },
- })
-
- minetest.register_craft({
- output = "elevator:shaft",
- recipe = {
- {"technic:cast_iron_ingot", "default:glass"},
- {"default:glass", "glooptest:chainlink"},
- },
- })
-
- minetest.register_craft({
- output = "elevator:motor",
- recipe = {
- {"default:diamond", "technic:control_logic_unit", "default:diamond"},
- {"default:steelblock", "technic:motor", "default:steelblock"},
- {"chains:chain", "default:diamond", "chains:chain"}
- },
- })
-elseif technic_path and farming and farming.mod and farming.mod == "redo" then
- -- add alternative recipe with hemp rope
- minetest.register_craft({
- output = "elevator:elevator",
- recipe = {
- {"technic:cast_iron_ingot", "farming:hemp_rope", "technic:cast_iron_ingot"},
- {"technic:cast_iron_ingot", "default:mese_crystal", "technic:cast_iron_ingot"},
- {"technic:stainless_steel_ingot", "default:glass", "technic:stainless_steel_ingot"},
- },
- })
-
- minetest.register_craft({
- output = "elevator:shaft",
- recipe = {
- {"technic:cast_iron_ingot", "default:glass"},
- {"default:glass", "farming:hemp_rope"},
- },
- })
-
- minetest.register_craft({
- output = "elevator:motor",
- recipe = {
- {"default:diamond", "technic:control_logic_unit", "default:diamond"},
- {"default:steelblock", "technic:motor", "default:steelblock"},
- {"farming:hemp_rope", "default:diamond", "farming:hemp_rope"}
- },
- })
-
- -- Recipes without technic & chains required.
--- Recipes for default dependency fallback.
-else
- minetest.register_craft({
- output = "elevator:elevator",
- recipe = {
- {"default:steel_ingot", "farming:cotton", "default:steel_ingot"},
- {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"},
- {"xpanes:pane_flat", "default:glass", "xpanes:pane_flat"},
- },
- })
-
- minetest.register_craft({
- output = "elevator:shaft",
- recipe = {
- {"default:steel_ingot", "default:obsidian_glass"},
- {"default:obsidian_glass", "default:steel_ingot"},
- },
- })
-
- minetest.register_craft({
- output = "elevator:motor",
- recipe = {
- {"default:diamond", "default:copper_ingot", "default:diamond"},
- {"default:steelblock", "default:furnace", "default:steelblock"},
- {"farming:cotton", "default:diamond", "farming:cotton"}
- },
- })
-end
diff --git a/register.lua b/register.lua
new file mode 100644
index 0000000..6b60724
--- /dev/null
+++ b/register.lua
@@ -0,0 +1,119 @@
+-- Detect optional mods.
+local technic_path = minetest.get_modpath("technic")
+local chains_path = minetest.get_modpath("chains")
+local technic_path = minetest.get_modpath("technic")
+local chains_path = minetest.get_modpath("chains")
+local homedecor_path = minetest.get_modpath("homedecor")
+
+-- Use homedecor's placeholder if possible.
+if homedecor_path then
+ minetest.register_alias("elevator:placeholder", "homedecor:expansion_placeholder")
+else
+ -- Placeholder node, in the style of homedecor.
+ minetest.register_node("elevator:placeholder", {
+ description = "Expansion Placeholder",
+ selection_box = {
+ type = "fixed",
+ fixed = {0, 0, 0, 0, 0, 0},
+ },
+ groups = {
+ not_in_creative_inventory=1
+ },
+ drawtype = "airlike",
+ paramtype = "light",
+ sunlight_propagates = true,
+
+ walkable = false,
+ buildable_to = false,
+ is_ground_content = false,
+
+ on_dig = function(pos, node, player)
+ minetest.remove_node(pos)
+ minetest.set_node(pos, {name="elevator:placeholder"})
+ end
+ })
+end
+
+if technic_path and chains_path then
+ minetest.register_craft({
+ output = "elevator:elevator",
+ recipe = {
+ {"technic:cast_iron_ingot", "chains:chain", "technic:cast_iron_ingot"},
+ {"technic:cast_iron_ingot", "default:mese_crystal", "technic:cast_iron_ingot"},
+ {"technic:stainless_steel_ingot", "default:glass", "technic:stainless_steel_ingot"},
+ },
+ })
+
+ minetest.register_craft({
+ output = "elevator:shaft",
+ recipe = {
+ {"technic:cast_iron_ingot", "default:glass"},
+ {"default:glass", "glooptest:chainlink"},
+ },
+ })
+
+ minetest.register_craft({
+ output = "elevator:motor",
+ recipe = {
+ {"default:diamond", "technic:control_logic_unit", "default:diamond"},
+ {"default:steelblock", "technic:motor", "default:steelblock"},
+ {"chains:chain", "default:diamond", "chains:chain"}
+ },
+ })
+elseif technic_path and farming and farming.mod and farming.mod == "redo" then
+ -- add alternative recipe with hemp rope
+ minetest.register_craft({
+ output = "elevator:elevator",
+ recipe = {
+ {"technic:cast_iron_ingot", "farming:hemp_rope", "technic:cast_iron_ingot"},
+ {"technic:cast_iron_ingot", "default:mese_crystal", "technic:cast_iron_ingot"},
+ {"technic:stainless_steel_ingot", "default:glass", "technic:stainless_steel_ingot"},
+ },
+ })
+
+ minetest.register_craft({
+ output = "elevator:shaft",
+ recipe = {
+ {"technic:cast_iron_ingot", "default:glass"},
+ {"default:glass", "farming:hemp_rope"},
+ },
+ })
+
+ minetest.register_craft({
+ output = "elevator:motor",
+ recipe = {
+ {"default:diamond", "technic:control_logic_unit", "default:diamond"},
+ {"default:steelblock", "technic:motor", "default:steelblock"},
+ {"farming:hemp_rope", "default:diamond", "farming:hemp_rope"}
+ },
+ })
+
+-- Recipes without technic & chains required.
+-- Recipes for default dependency fallback.
+else
+ minetest.register_craft({
+ output = "elevator:elevator",
+ recipe = {
+ {"default:steel_ingot", "farming:cotton", "default:steel_ingot"},
+ {"default:steel_ingot", "default:mese_crystal", "default:steel_ingot"},
+ {"xpanes:pane_flat", "default:glass", "xpanes:pane_flat"},
+ },
+ })
+
+ minetest.register_craft({
+ output = "elevator:shaft",
+ recipe = {
+ {"default:steel_ingot", "default:obsidian_glass"},
+ {"default:obsidian_glass", "default:steel_ingot"},
+ },
+ })
+
+ minetest.register_craft({
+ output = "elevator:motor",
+ recipe = {
+ {"default:diamond", "default:copper_ingot", "default:diamond"},
+ {"default:steelblock", "default:furnace", "default:steelblock"},
+ {"farming:cotton", "default:diamond", "farming:cotton"}
+ },
+ })
+end
diff --git a/storage.lua b/storage.lua
new file mode 100644
index 0000000..5adbaf5
--- /dev/null
+++ b/storage.lua
@@ -0,0 +1,33 @@
+
+local elevator_file = minetest.get_worldpath() .. "/elevator"
+
+local str = minetest.get_mod_storage and minetest.get_mod_storage()
+
+-- Central "network" table.
+elevator.motors = {}
+
+local function load_elevator()
+ local data = nil
+ if str and ((str.contains and str:contains("data")) or (str:get_string("data") and str:get_string("data") ~= "")) then
+ data = minetest.deserialize(str:get_string("data"))
+ else
+ local file = io.open(elevator_file)
+ if file then
+ data = minetest.deserialize(file:read("*all")) or {}
+ file:close()
+ end
+ end
+ elevator.motors = data.motors and data.motors or {}
+end
+
+local function save_elevator()
+ if str then
+ str:set_string("data", minetest.serialize({motors = elevator.motors}))
+ return
+ end
+ local f = io.open(elevator_file, "w")
+ f:write(minetest.serialize({motors = elevator.motors}))
+ f:close()
+end
+
+load_elevator()