aboutsummaryrefslogtreecommitdiff
path: root/src/common/schems.lua
diff options
context:
space:
mode:
authorElias Fleckenstein <eliasfleckenstein@web.de>2020-06-09 17:44:13 +0200
committerElias Fleckenstein <eliasfleckenstein@web.de>2020-06-09 17:44:13 +0200
commit00cd9d750f2ee5ce954426251ab97bb304d2e2a6 (patch)
tree3cbcc8738bbf56ffee295f94862376315b49163e /src/common/schems.lua
parent7cc0e9d41ffdd8dc873aff2fe0501b617322d490 (diff)
downloadskycraft-00cd9d750f2ee5ce954426251ab97bb304d2e2a6.tar.xz
Added Missing Files
Diffstat (limited to 'src/common/schems.lua')
-rw-r--r--src/common/schems.lua42
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