basic_robot/scripts/misc/charcoal_maker.lua

27 lines
1.5 KiB
Lua

-- coal maker mod idea in 30 minutes by rnd
-- build dirt box around 3x3x3 area filled with wood, remove one boundary wood (lower one) and start fire there. start robot then!
check_firebox = function(pos)
local p = minetest.find_node_near(pos, 5, "fire:basic_flame") -- locate fire nearby!
if not p or minetest.get_node(p).name ~= "fire:basic_flame" then say("light fire first!"); self.remove() end
d=3; -- inner size of box, area filled with wood
local dirs = {{-1,0,0},{1,0,0},{0,0,-1},{0,0,1}};local dir1,dir2; -- position of vertices on dirt box
for i = 1,#dirs do
local dir = dirs[i];
if minetest.get_node({x=p.x+d*dir[1],y=p.y+d*dir[2],z=p.z+d*dir[3]}).name == "default:dirt" and
minetest.get_node({x=p.x+(d-1)*dir[1],y=p.y+(d-1)*dir[2],z=p.z+(d-1)*dir[3]}).name == "default:wood" then dir2 = dirs[i]; break end
end
if not dir2 then say("error, place fire in correct place in correctly built dirt box!") self.remove() end
dir1 = {dir2[3], dir2[2], -dir2[1]};
local v1 = {x=p.x-(d-1)*dir1[1]-dir2[1],y=p.y-1,z=p.z-(d-1)*dir1[3]-dir2[3]}
local v2 = {x=p.x+(d-1)*dir1[1]+(d)*dir2[1],y=p.y+d,z=p.z+(d-1)*dir1[3]+(d)*dir2[3]}
local res = minetest.find_nodes_in_area(v1,v2,{"default:wood","default:dirt"},true);
if (#(res["default:dirt"] or {})) == 97 and #(res["default:wood"] or {})==26 then
say("all ok. making charcoal now!")
minetest.swap_node(p,{name = "air"}) -- turn off fire!
else say("fail! check that you built dirt box/wood correctly!")
end
end
check_firebox(self.pos())
self.remove()