aboutsummaryrefslogtreecommitdiff
path: root/src/common/schems.lua
blob: ace163796baaebfbc4148142af019eef8c9c1fff (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
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