102 lines
3.6 KiB
Lua
102 lines
3.6 KiB
Lua
minetest.register_tool("sticks:sticks", {
|
|
description = "Fire Starter",
|
|
inventory_image = "sticks_sticks.png",
|
|
on_use = function(item, user, pointed_thing)
|
|
local pos
|
|
if pointed_thing.type == "node" then
|
|
if minetest.get_node(pointed_thing.under).name == "furnace:self" or minetest.get_node(pointed_thing.under).name == "bonfire:self" then
|
|
local meta = minetest.get_meta(pointed_thing.under)
|
|
meta:set_int("active", 1)
|
|
item:add_wear(65535/10)
|
|
return item
|
|
end
|
|
pos = pointed_thing.above
|
|
elseif pointed_thing.type == "object" then
|
|
pos = pointed_thing.ref:get_pos()
|
|
else
|
|
return
|
|
end
|
|
if minetest.get_node(pos).name == "air" then
|
|
local objects = minetest.get_objects_inside_radius(pos, 0.5)
|
|
local bonfireb = 0
|
|
local furnaceb = 0
|
|
local coals = {}
|
|
local sticks_and_leaves = {}
|
|
for _, v in ipairs(objects) do
|
|
if not v:is_player() and v:get_luaentity() and v:get_luaentity().name == "__builtin:item" then
|
|
local istack = ItemStack(v:get_luaentity().itemstring)
|
|
if minetest.get_item_group(istack:get_name(), "stick") == 1 then
|
|
bonfireb = bonfireb + istack:get_count() * 2
|
|
table.insert(sticks_and_leaves,v)
|
|
elseif minetest.get_item_group(istack:get_name(), "leaves") == 1 then
|
|
bonfireb = bonfireb + istack:get_count()
|
|
table.insert(sticks_and_leaves,v)
|
|
elseif istack:get_name() == "minerals:charcoal" then
|
|
furnaceb = furnaceb + istack:get_count()
|
|
table.insert(coals,v)
|
|
end
|
|
end
|
|
end
|
|
if furnaceb >= 9 and math.random(6) == 1 and minetest.get_node(pos).name == "air" then
|
|
if furnace.check_furnace_blocks(pos) then
|
|
for _, v in ipairs(coals) do
|
|
v:remove()
|
|
end
|
|
minetest.set_node(pos, {name = "furnace:self_active"})
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_int("active", 1)
|
|
meta:set_float("fuel_time", 0)
|
|
meta:set_float("fuel_totaltime", 30)
|
|
meta:set_string("formspec",
|
|
"size[8,10]"..
|
|
"list[current_name;src1;1.5,0;1,1;]"..
|
|
"list[current_name;dst1;1.5,1;1,1;]"..
|
|
"list[current_name;src2;2.5,1;1,1;]"..
|
|
"list[current_name;dst2;2.5,2;1,1;]"..
|
|
"list[current_name;src3;3.5,2;1,1;]"..
|
|
"list[current_name;dst3;3.5,3;1,1;]"..
|
|
"list[current_name;src4;4.5,1;1,1;]"..
|
|
"list[current_name;dst4;4.5,2;1,1;]"..
|
|
"list[current_name;src5;5.5,0;1,1;]"..
|
|
"list[current_name;dst5;5.5,1;1,1;]"..
|
|
"image[3.5,4;1,1;default_furnace_fire_bg.png"..
|
|
"^[lowpart:100:default_furnace_fire_fg.png]"..
|
|
"list[current_name;fuel;3.5,5;1,1;]"..
|
|
"list[current_player;main;0,6;8,4;]")
|
|
if furnaceb > 9 then
|
|
local inv = meta:get_inventory()
|
|
inv:add_item("fuel", "default:coal_lump "..furnaceb-9)
|
|
end
|
|
end
|
|
end
|
|
if bonfireb >= 10 and math.random(2) == 1 and minetest.get_node(pos).name == "air" then
|
|
for _, v in ipairs(sticks_and_leaves) do
|
|
v:remove()
|
|
end
|
|
minetest.set_node(pos, {name = "bonfire:self"})
|
|
local meta = minetest.get_meta(pos)
|
|
meta:set_int("active", 1)
|
|
meta:set_float("fuel_time", 0)
|
|
meta:set_float("fuel_totaltime", 20)
|
|
meta:set_string("formspec",
|
|
"size[8,9]"..
|
|
"image[2,2;1,1;default_furnace_fire_bg.png"..
|
|
"^[lowpart:100:default_furnace_fire_fg.png]"..
|
|
"list[current_name;fuel;2,3;1,1;]"..
|
|
"list[current_name;src;2,1;1,1;]"..
|
|
"list[current_name;dst;5,1;2,1;]"..
|
|
"list[current_player;main;0,5;8,4;]")
|
|
end
|
|
end
|
|
item:add_wear(65535/10)
|
|
return item
|
|
end,
|
|
})
|
|
|
|
|
|
minetest.register_craft({
|
|
type = "shapeless",
|
|
output = "sticks:sticks",
|
|
recipe = {"group:stick", "group:stick"},
|
|
})
|