local S = minetest.get_translator(minetest.get_current_modname()) mcl_campfires = {} function mcl_campfires.register_campfire(name, def) -- Define Campfire minetest.register_node(name, { description = def.description, _tt_help = S("Cooks food and keeps bees happy."), _doc_items_longdesc = S("Campfires have multiple uses, including keeping bees happy, cooking raw meat and fish, and as a trap."), inventory_image = def.inv_texture, wield_image = def.inv_texture, drawtype = "mesh", mesh = "mcl_campfires_campfire.obj", tiles = {{name="mcl_campfires_log.png"},}, use_texture_alpha = "clip", groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1, campfire=1, }, paramtype = "light", paramtype2 = "facedir", on_rightclick = function (pos, node, player, itemstack, pointed_thing) if player:get_wielded_item():get_name() == "mcl_fire:flint_and_steel" then node.name = name.."_lit" minetest.set_node(pos, node) end end, drop = def.drops, _mcl_silk_touch_drop = {name}, mcl_sounds.node_sound_wood_defaults(), selection_box = { type = 'fixed', fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top }, collision_box = { type = 'fixed', fixed = {-.5, -.5, -.5, .5, -.05, .5}, }, _mcl_blast_resistance = 2, _mcl_hardness = 2, }) --Define Lit Campfire minetest.register_node(name.."_lit", { description = def.description, _tt_help = S("Cooks food and keeps bees happy."), _doc_items_longdesc = S("Campfires have multiple uses, including keeping bees happy, cooking raw meat and fish, and as a trap."), inventory_image = def.inv_texture, wield_image = def.inv_texture, drawtype = "mesh", mesh = "mcl_campfires_campfire_lit.obj", tiles = {{ name=def.fire_texture, animation={ type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0 }}, {name=def.lit_logs_texture, animation={ type="vertical_frames", aspect_w=16, aspect_h=16, length=2.0 }} }, use_texture_alpha = "clip", groups = { handy=1, axey=1, material_wood=1, campfire=1, lit_campfire=1 }, paramtype = "light", paramtype2 = "facedir", on_rightclick = function (pos, node, player, itemstack, pointed_thing) if player:get_wielded_item():get_name():find("shovel") then node.name = name minetest.set_node(pos, node) minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) end end, drop = def.drops, _mcl_silk_touch_drop = {name.."_lit"}, light_source = def.lightlevel, mcl_sounds.node_sound_wood_defaults(), selection_box = { type = "fixed", fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top }, collision_box = { type = "fixed", fixed = {-.5, -.5, -.5, .5, -.05, .5}, }, _mcl_blast_resistance = 2, _mcl_hardness = 2, damage_per_second = def.damage, }) end local function burn_in_campfire(obj) local p = obj:get_pos() if p then local n = minetest.find_node_near(p,0.4,{"group:lit_campfire"},true) if n then mcl_burning.set_on_fire(obj, 5) end end end local etime = 0 minetest.register_globalstep(function(dtime) etime = dtime + etime if etime < 0.5 then return end etime = 0 for _,pl in pairs(minetest.get_connected_players()) do burn_in_campfire(pl) end for _,ent in pairs(minetest.luaentities) do if ent.is_mob then burn_in_campfire(ent.object) end end end)