diff options
Diffstat (limited to 'src/common')
-rw-r--r-- | src/common/schems.lua | 42 |
1 files changed, 42 insertions, 0 deletions
diff --git a/src/common/schems.lua b/src/common/schems.lua new file mode 100644 index 0000000..ace1637 --- /dev/null +++ b/src/common/schems.lua @@ -0,0 +1,42 @@ +skycraft.schems = {} + +function skycraft.get_schem(schemname) + return skycraft.schems[schemname].data +end + +function skycraft.get_schem_raw(schemname) + return skycraft.schems[schemname].raw +end + +function skycraft.load_schem(schemname) + local schem = {} + local file = io.open(skycraft.modpath .. "/schems/" .. schemname .. ".we", "r") + schem.raw = file:read() + file:seek("set") + local _, _, contents = file:read("*number", 1, "*all") + file:close() + schem.data = minetest.deserialize(contents) + skycraft.schems[schemname] = schem +end + +function skycraft.check_schem(pos, schemname) + local schem = skycraft.get_schem(schemname) + for _, n in pairs(schem) do + if minetest.get_node(vector.add(pos, n)).name ~= n.name then + return false + end + end + return true +end + +function skycraft.remove_schem(pos, schemname) + local schem = skycraft.get_schem(schemname) + for _, n in pairs(schem) do + minetest.remove_node(vector.add(pos, n)) + end +end + +function skycraft.add_schem(pos, schemname) + local schem_raw = skycraft.get_schem_raw(schemname) + worldedit.deserialize(pos, schem_raw) +end |