minetest_potions/scanner.lua

79 lines
1.7 KiB
Lua

minetest.register_node("potions:scanner_endpoint", {
description = "Scanner Endpoint",
tiles = {"default_stone.png^default_tool_steelsword.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("potions:scanner_noreplace", {
description = "Scanner NoReplace",
drawtype = "glasslike",
tiles = {"default_glass.png^default_tool_diamondsword.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
})
minetest.register_node("potions:scanner_center", {
description = "Scanner Center",
tiles = {"default_stone.png^default_tool_bronzesword.png"},
groups = {cracky = 3},
sounds = default.node_sound_stone_defaults(),
on_punch = function(pos)
local path = minetest.get_worldpath().."/potions_testfile.txt"
local ends = minetest.find_nodes_in_area(
vector.subtract(pos, 51),
vector.add(pos, 51),
{"potions:scanner_endpoint"})
if #ends < 2 then
return
end
local e1 = {
x = math.min(ends[1].x, ends[2].x)+1,
y = math.min(ends[1].y, ends[2].y)+1,
z = math.min(ends[1].z, ends[2].z)+1,
}
local e2 = {
x = math.max(ends[1].x, ends[2].x)-1,
y = math.max(ends[1].y, ends[2].y)-1,
z = math.max(ends[1].z, ends[2].z)-1,
}
local data = {}
for x = e1.x,e2.x do
for y = e1.y,e2.y do
for z = e1.z,e2.z do
local p = {x=x, y=y, z=z}
local n = minetest.get_node(p)
if n.name ~= "air" then
local nn = { name=n.name, }
if n.param2 and n.param2 > 0 then
nn.param2 = n.param2
end
table.insert(data, {p=vector.subtract(p, pos), n=nn})
end
end
end
end
local f = io.open(path, "w")
f:write(dump(data))
f:close()
end,
})