From e3f14a3a99f40deff7c0dd52e4cf80cb2b09b767 Mon Sep 17 00:00:00 2001 From: PrairieWind Date: Sat, 11 Feb 2023 17:32:53 -0700 Subject: [PATCH 1/2] Campfire API --- mods/ITEMS/mcl_campfires/API.md | 26 +++++ mods/ITEMS/mcl_campfires/api.lua | 117 +++++++++++++++++++++ mods/ITEMS/mcl_campfires/init.lua | 144 +------------------------- mods/ITEMS/mcl_campfires/register.lua | 42 ++++++++ 4 files changed, 188 insertions(+), 141 deletions(-) create mode 100644 mods/ITEMS/mcl_campfires/API.md create mode 100644 mods/ITEMS/mcl_campfires/api.lua create mode 100644 mods/ITEMS/mcl_campfires/register.lua diff --git a/mods/ITEMS/mcl_campfires/API.md b/mods/ITEMS/mcl_campfires/API.md new file mode 100644 index 000000000..abf61c6f1 --- /dev/null +++ b/mods/ITEMS/mcl_campfires/API.md @@ -0,0 +1,26 @@ +MineClone 2 Campfire API +======================== +`mcl_campfires.register_campfire` +--------------------------------- +Used to register campfires. + +**Example Usage** +``` +mcl_campfires.register_campfire("mcl_campfires:campfire", { + description = S("Campfire"), + inv_texture = "mcl_campfires_campfire_inv.png", + fire_texture = "mcl_campfires_campfire_fire.png", + lit_logs_texture = "mcl_campfires_campfire_log_lit.png", + drops = "mcl_core:charcoal_lump 2", + lightlevel = 14, + damage = 1, +}) +``` +**Values** +* description - human readable node name. +* inv_texture - campfire inventory texture. +* fire_texture - texture of the campfire fire. +* lit_logs_texture - texture for the logs of the lit campfire. if not changed, specify mcl_campfires_log.png. +* drops - what items drop when the campfire is mined. +* lightlevel - the level of light the campfire emits. +* damage - amount of damage the campfire deals when the player stands on it. \ No newline at end of file diff --git a/mods/ITEMS/mcl_campfires/api.lua b/mods/ITEMS/mcl_campfires/api.lua new file mode 100644 index 000000000..8b0aff85e --- /dev/null +++ b/mods/ITEMS/mcl_campfires/api.lua @@ -0,0 +1,117 @@ +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) diff --git a/mods/ITEMS/mcl_campfires/init.lua b/mods/ITEMS/mcl_campfires/init.lua index 083fbce57..058ba50ed 100644 --- a/mods/ITEMS/mcl_campfires/init.lua +++ b/mods/ITEMS/mcl_campfires/init.lua @@ -1,147 +1,9 @@ --- |||||||||||||||||||||||||||||||| --- ||||||||||| CAMPFIRES |||||||||| --- |||||||||||||||||||||||||||||||| - -- TO-DO: -- * Add Smoke Particles -- * Add Spark Particles -- * Add Cooking Meat -- * Add Working Sounds +local modname = minetest.get_modpath(minetest.get_current_modname()) -local S = minetest.get_translator(minetest.get_current_modname()) - -local campfires = { - { name = "Campfire", lightlevel = 14, techname = "campfire", damage = 1, drops = "mcl_core:charcoal_lump 2" }, - { name = "Soul Campfire", lightlevel = 10, techname = "soul_campfire", damage = 2, drops = "mcl_blackstone:soul_soil" }, -} - -for _, campfire in pairs(campfires) do --- Define Campfire - minetest.register_node("mcl_campfires:" .. campfire.techname, { - description = S(campfire.name), - _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 = "mcl_campfires_" .. campfire.techname .. "_inv.png", - 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 = "mcl_campfires:" .. campfire.techname .. "_lit" - minetest.set_node(pos, node) - end - end, - drop = campfire.drops, - _mcl_silk_touch_drop = {"mcl_campfires:" .. campfire.techname}, - 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("mcl_campfires:" .. campfire.techname .. "_lit", { - description = S(campfire.name), - _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 = "mcl_campfires_" .. campfire.techname .. "_inv.png", - drawtype = "mesh", - mesh = "mcl_campfires_campfire_lit.obj", - tiles = {{ - name="mcl_campfires_" .. campfire.techname .. "_fire.png", - animation={ - type="vertical_frames", - aspect_w=16, - aspect_h=16, - length=2.0 - }}, - {name="mcl_campfires_" .. campfire.techname .. "_log_lit.png", - 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 = "mcl_campfires:" .. campfire.techname - minetest.set_node(pos, node) - minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) - end - end, - drop = campfire.drops, - _mcl_silk_touch_drop = {"mcl_campfires:" .. campfire.techname .. "_lit"}, - light_source = campfire.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 = campfire.damage, - }) -end - -minetest.register_craft({ - output = "mcl_campfires:campfire_lit", - recipe = { - { "", "mcl_core:stick", "" }, - { "mcl_core:stick", "group:coal", "mcl_core:stick" }, - { "group:tree", "group:tree", "group:tree" }, - } -}) - -minetest.register_craft({ - output = "mcl_campfires:soul_campfire_lit", - recipe = { - { "", "mcl_core:stick", "" }, - { "mcl_core:stick", "group:soul_block", "mcl_core:stick" }, - { "group:tree", "group:tree", "group:tree" }, - } -}) - -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) +dofile(modname.."/api.lua") -- Load API File +dofile(modname.."/register.lua") -- Load Campfire Registration File diff --git a/mods/ITEMS/mcl_campfires/register.lua b/mods/ITEMS/mcl_campfires/register.lua new file mode 100644 index 000000000..87e9f415a --- /dev/null +++ b/mods/ITEMS/mcl_campfires/register.lua @@ -0,0 +1,42 @@ +local S = minetest.get_translator(minetest.get_current_modname()) + +-- Register Plain Campfire +mcl_campfires.register_campfire("mcl_campfires:campfire", { + description = S("Campfire"), + inv_texture = "mcl_campfires_campfire_inv.png", + fire_texture = "mcl_campfires_campfire_fire.png", + lit_logs_texture = "mcl_campfires_campfire_log_lit.png", + drops = "mcl_core:charcoal_lump 2", + lightlevel = 14, + damage = 1, +}) + +-- Register Soul Campfire +mcl_campfires.register_campfire("mcl_campfires:soul_campfire", { + description = S("Soul Campfire"), + inv_texture = "mcl_campfires_soul_campfire_inv.png", + fire_texture = "mcl_campfires_soul_campfire_fire.png", + lit_logs_texture = "mcl_campfires_soul_campfire_log_lit.png", + drops = "mcl_blackstone:soul_soil", + lightlevel = 10, + damage = 2, +}) + +-- Register Campfire Crafting +minetest.register_craft({ + output = "mcl_campfires:campfire_lit", + recipe = { + { "", "mcl_core:stick", "" }, + { "mcl_core:stick", "group:coal", "mcl_core:stick" }, + { "group:tree", "group:tree", "group:tree" }, + } +}) + +minetest.register_craft({ + output = "mcl_campfires:soul_campfire_lit", + recipe = { + { "", "mcl_core:stick", "" }, + { "mcl_core:stick", "group:soul_block", "mcl_core:stick" }, + { "group:tree", "group:tree", "group:tree" }, + } +}) From 1da272a941020ea23b4d57292200ef10633ac01a Mon Sep 17 00:00:00 2001 From: PrairieWind Date: Sat, 11 Feb 2023 18:15:59 -0700 Subject: [PATCH 2/2] Add campfires to the list of working item APIs --- API.md | 1 + 1 file changed, 1 insertion(+) diff --git a/API.md b/API.md index f2070b8e7..865630c78 100644 --- a/API.md +++ b/API.md @@ -41,6 +41,7 @@ A lot of things are possible by using one of the APIs in the mods. Note that not * Beds: `ITEMS/mcl_beds` * Buckets: `ITEMS/mcl_buckets` * Dispenser support: `ITEMS/REDSTONE/mcl_dispensers` +* Campfires: `ITEMS/mcl_campfires` ### Mobs * Mobs: `ENTITIES/mcl_mobs`