Compare commits

...

23 Commits

Author SHA1 Message Date
Wbjitscool d4c164f4f6 Add better smoke particles 2023-07-05 08:44:02 -06:00
thunder1035 f88a9468e6 Update campfire model and textures 2023-07-03 12:55:37 -06:00
PrairieWind 7706fdf577 Offset smoke a bit 2023-07-03 12:41:53 -06:00
PrairieWind 38a4f13d7c Add changes to campfires from feedback 2023-06-29 20:56:43 -06:00
PrairieWind 7c1fd89ae9 Throw experience points after food is cooked 2023-06-29 20:56:43 -06:00
PrairieWind 2afd532f17 Campfires are unaffected by pistons 2023-06-29 20:56:43 -06:00
PrairieWind ebc4a8871c Players don't take burn damage when they have fire resistance potion in use, or frost walker boots
Entities seem to not burn anymore, and I am not sure why.
2023-06-29 20:56:43 -06:00
PrairieWind c3d2805752 Fix campfire drops to work correctly with creative and silk touch 2023-06-29 20:56:43 -06:00
DinoNuggies4665 dfb2fa81d1 changed line 82 to vector.new(), and refactored setting food wield item (wield_image doesn't matter) 2023-06-29 20:56:43 -06:00
PrairieWind 571d9f69d0 Update campfire rightclick and smothering 2023-06-29 20:56:43 -06:00
DinoNuggies4665 7a0db8967a Food entities don't turn back to mutton when leaving a re-joining now 2023-06-29 20:56:42 -06:00
DinoNuggies4665 6a315b2005 The food is now oriented the right direction when on the cooking on the campfire, and food entities are removed when the campfire is destroyed, still doesn't drop items though 2023-06-29 20:56:42 -06:00
DinoNuggies4665 285862b35b Fixed crash when standing on campfire whilst food is cooking 2023-06-29 20:56:42 -06:00
DinoNuggies4665 ca2ca70537 Made food entities local to evcery campfire, and made one food entity that works for all foods 2023-06-29 20:56:42 -06:00
PrairieWind 8b2b3a2a15 Update ignition, smothering, and campfire inventory drops
Bonus fix for grass path creation sound traveling across the entire server
2023-06-29 20:56:42 -06:00
DinoNuggies4665 31df65c0b2 modified: mods/ITEMS/mcl_campfires/api.lua
modified:   mods/ITEMS/mcl_fishing/init.lua
	modified:   mods/ITEMS/mcl_mobitems/init.lua
2023-06-29 20:56:42 -06:00
DinoNuggies4665 05c601d220 A couple of fixes 2023-06-29 20:56:42 -06:00
DinoNuggies4665 30e05d514e Added visible items cooking on the fire 2023-06-29 20:56:42 -06:00
DinoNuggies4665 5d970af1b0 modified: mods/ITEMS/mcl_campfires/mod.conf 2023-06-29 20:56:42 -06:00
DinoNuggies4665 e1e97b5d45 modified: mods/ITEMS/mcl_campfires/api.lua
modified:   mods/ITEMS/mcl_mobitems/init.lua
2023-06-29 20:56:42 -06:00
DinoNuggies4665 9d147e2783 Added visible items cooking on the fire 2023-06-29 20:56:42 -06:00
PrairieWind 1908602a9e Campfires make big smoke
Smells like carcenogens, yum
2023-06-29 20:56:42 -06:00
PrairieWind 5e3f820d77 Make campfires cook items 2023-06-29 20:56:41 -06:00
34 changed files with 5486 additions and 780 deletions

View File

@ -411,6 +411,10 @@ mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on")
mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
mesecon.register_mvps_stopper("mcl_banners:hanging_banner")
mesecon.register_mvps_stopper("mcl_banners:standing_banner")
mesecon.register_mvps_stopper("mcl_campfires:campfire")
mesecon.register_mvps_stopper("mcl_campfires:campfire_lit")
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire")
mesecon.register_mvps_stopper("mcl_campfires:soul_campfire_lit")
-- Unmovable by technical restrictions.
-- Open formspec would screw up if node is destroyed (minor problem)
@ -935,6 +939,11 @@ mesecon.register_mvps_unsticky("mcl_farming:wheat_4")
mesecon.register_mvps_unsticky("mcl_farming:wheat_5")
mesecon.register_mvps_unsticky("mcl_farming:wheat_6")
mesecon.register_mvps_unsticky("mcl_farming:wheat_7")
-- Campfires
mesecon.register_mvps_unsticky("mcl_campfires:campfire")
mesecon.register_mvps_unsticky("mcl_campfires:campfire_lit")
mesecon.register_mvps_unsticky("mcl_campfires:soul_campfire")
mesecon.register_mvps_unsticky("mcl_campfires:soul_campfire_lit")
-- Includes node heat when moving them
mesecon.register_on_mvps_move(mesecon.move_hot_nodes)

View File

@ -1,6 +1,7 @@
local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target")
local mod_campfire = minetest.get_modpath("mcl_campfires")
local enable_pvp = minetest.settings:get_bool("enable_pvp")
local math = math
@ -395,6 +396,11 @@ function ARROW_ENTITY.on_step(self, dtime)
tnt.ignite(self._stuckin)
end
-- Ignite Campfires
if mod_campfire and mcl_burning.is_burning(self.object) and minetest.get_item_group(snode.name, "campfire") ~= 0 then
mcl_campfires.light_campfire(self._stuckin)
end
-- Activate target
if mod_target and snode.name == "mcl_target:target_off" then
mcl_target.hit(self._stuckin, 1) --10 redstone ticks

View File

@ -1,7 +1,5 @@
MineClone 2 Campfire API
========================
`mcl_campfires.register_campfire`
---------------------------------
# MineClone 2 Campfire API
## `mcl_campfires.register_campfire`
Used to register campfires.
**Example Usage**
@ -23,4 +21,7 @@ mcl_campfires.register_campfire("mcl_campfires:campfire", {
* 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.
* damage - amount of damage the campfire deals when the player stands on it.
## Cooking Items
To allow an item to be cooked on the campfire, it must first have a registered cooked variant. To allow placing the item on the campfire to be cooked, add `campfire_cookable = 1` into the item groups list.

View File

@ -1,6 +1,166 @@
local S = minetest.get_translator(minetest.get_current_modname())
mcl_campfires = {}
local COOK_TIME = 30 -- Time it takes to cook food on a campfire.
local food_entity = {nil, nil, nil, nil}
local campfire_spots = {
vector.new(-0.25, -0.04, -0.25),
vector.new( 0.25, -0.04, -0.25),
vector.new( 0.25, -0.04, 0.25),
vector.new(-0.25, -0.04, 0.25),
}
local drop_inventory = mcl_util.drop_items_from_meta_container("main")
local function campfire_drops(pos, digger, drops, nodename)
local wield_item = digger:get_wielded_item()
local silk_touch = mcl_enchanting.has_enchantment(wield_item, "silk_touch")
local is_creative = minetest.is_creative_enabled(digger:get_player_name())
local inv = digger:get_inventory()
if not is_creative then
if silk_touch then
minetest.add_item(pos, nodename)
else
minetest.add_item(pos, drops)
end
elseif is_creative and inv:room_for_item("main", nodename) and not inv:contains_item("main", nodename) then
inv:add_item("main", nodename)
end
end
local function drop_items(pos, node, oldmeta)
local meta = minetest.get_meta(pos)
drop_inventory(pos, node, oldmeta)
local entites = minetest.get_objects_inside_radius(pos, 0.5)
if entites then
for _, food_entity in ipairs(entites) do
if food_entity then
if food_entity:get_luaentity().name == "mcl_campfires:food_entity" then
food_entity:remove()
for i = 1, 4 do
meta:set_string("food_x_"..tostring(i), nil)
meta:set_string("food_y_"..tostring(i), nil)
meta:set_string("food_z_"..tostring(i), nil)
end
end
end
end
end
end
local function on_blast(pos)
local node = minetest.get_node(pos)
drop_items(pos, node)
minetest.remove_node(pos)
end
function mcl_campfires.light_campfire(pos)
local campfire = minetest.get_node(pos)
local name = campfire.name .. "_lit"
minetest.set_node(pos, {name = name, param2 = campfire.param2})
end
-- on_rightclick function to take items that are cookable in a campfire, and put them in the campfire inventory
function mcl_campfires.take_item(pos, node, player, itemstack)
local food_entity = {nil,nil,nil,nil}
local is_creative = minetest.is_creative_enabled(player:get_player_name())
local inv = player:get_inventory()
local campfire_meta = minetest.get_meta(pos)
local campfire_inv = campfire_meta:get_inventory()
local timer = minetest.get_node_timer(pos)
local stack = itemstack:peek_item(1)
if minetest.get_item_group(itemstack:get_name(), "campfire_cookable") ~= 0 then
local cookable = minetest.get_craft_result({method = "cooking", width = 1, items = {itemstack}})
if cookable then
for space = 1, 4 do -- Cycle through spots
local spot = campfire_inv:get_stack("main", space)
if not spot or spot == (ItemStack("") or ItemStack("nil")) then -- Check if the spot is empty or not
if not is_creative then itemstack:take_item(1) end -- Take the item if in creative
campfire_inv:set_stack("main", space, stack) -- Set the inventory itemstack at the empty spot
campfire_meta:set_int("cooktime_"..tostring(space), COOK_TIME) -- Set the cook time meta
food_entity[space] = minetest.add_entity(pos + campfire_spots[space], "mcl_campfires:food_entity") -- Spawn food item on the campfire
local food_luaentity = food_entity[space]:get_luaentity()
food_luaentity.wield_item = campfire_inv:get_stack("main", space):get_name() -- Set the wielditem of the food item to the food on the campfire
food_luaentity.wield_image = "mcl_mobitems_"..string.sub(campfire_inv:get_stack("main", space):get_name(), 14).."_raw.png" -- Set the wield_image to the food item on the campfire
food_entity[space]:set_properties(food_luaentity) -- Apply changes to the food entity
campfire_meta:set_string("food_x_"..tostring(space), tostring(food_entity[space]:get_pos().x))
campfire_meta:set_string("food_y_"..tostring(space), tostring(food_entity[space]:get_pos().y))
campfire_meta:set_string("food_z_"..tostring(space), tostring(food_entity[space]:get_pos().z))
break
end
end
end
timer:start(1) -- Start cook timer
end
end
-- on_timer function to run the cook timer and cook items.
function mcl_campfires.cook_item(pos, elapsed)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
local continue = 0
-- Cycle through slots to cook them.
for i = 1, 4 do
local time_r = meta:get_int("cooktime_"..tostring(i))
local item = inv:get_stack("main", i)
local food_entity = nil
local food_x = tonumber(meta:get_string("food_x_"..tostring(i)))
local food_y = tonumber(meta:get_string("food_y_"..tostring(i)))
local food_z = tonumber(meta:get_string("food_z_"..tostring(i)))
if food_x and food_y and food_z then
local entites = minetest.get_objects_inside_radius(vector.new(food_x, food_y, food_z), 0)
if entites then
for _, entity in ipairs(entites) do
if entity then
local luaentity = entity:get_luaentity()
if luaentity then
local name = luaentity.name
if name == "mcl_campfires:food_entity" then
food_entity = entity
food_entity:set_properties({wield_item = inv:get_stack("main", i):get_name()})
end
end
end
end
end
end
if item ~= (ItemStack("") or ItemStack("nil")) then
-- Item hasn't been cooked completely, continue cook timer countdown.
if time_r > 0 then
meta:set_int("cooktime_"..tostring(i), time_r - 1)
-- Item cook timer is up, finish cooking process and drop cooked item.
elseif time_r <= 0 then
local cooked = minetest.get_craft_result({method = "cooking", width = 1, items = {item}})
if cooked then
if food_entity then
food_entity:remove() -- Remove visual food entity
meta:set_string("food_x_"..tostring(i), nil)
meta:set_string("food_y_"..tostring(i), nil)
meta:set_string("food_z_"..tostring(i), nil)
minetest.add_item(pos, cooked.item) -- Drop Cooked Item
-- Throw some Experience Points because why not?
-- Food is cooked, xp is deserved for using this unique cooking method. Take that Minecraft ;)
local dir = vector.divide(minetest.facedir_to_dir(minetest.get_node(pos).param2),-1.95)
mcl_experience.throw_xp(vector.add(pos, dir), 1)
inv:set_stack("main", i, "") -- Clear Inventory
continue = continue + 1 -- Indicate that the slot is clear.
end
end
end
else
continue = continue + 1
end
end
-- Not all slots are empty, continue timer.
if continue ~= 4 then
return true
-- Slots are empty, stop node timer.
else
return false
end
end
function mcl_campfires.register_campfire(name, def)
-- Define Campfire
minetest.register_node(name, {
@ -15,16 +175,13 @@ function mcl_campfires.register_campfire(name, def)
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
paramtype2 = "4dir",
_on_ignite = function(player, node)
mcl_campfires.light_campfire(node.under)
return true
end,
drop = def.drops,
_mcl_silk_touch_drop = {name},
mcl_sounds.node_sound_wood_defaults(),
drop = "",
sounds = mcl_sounds.node_sound_wood_defaults(),
selection_box = {
type = 'fixed',
fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top
@ -35,6 +192,9 @@ function mcl_campfires.register_campfire(name, def)
},
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
after_dig_node = function(pos, node, oldmeta, digger)
campfire_drops(pos, digger, def.drops, name.."_lit")
end,
})
--Define Lit Campfire
@ -45,38 +205,64 @@ function mcl_campfires.register_campfire(name, def)
inventory_image = def.inv_texture,
wield_image = def.inv_texture,
drawtype = "mesh",
mesh = "mcl_campfires_campfire_lit.obj",
tiles = {{
name=def.fire_texture,
mesh = "mcl_campfires_campfire.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_w=32,
aspect_h=16,
length=2.0
}}
},
overlay_tiles = {{
name=def.lit_logs_texture,
animation = {
type = "vertical_frames",
aspect_w = 32,
aspect_h = 16,
length = 2.0,
}},
},
use_texture_alpha = "clip",
groups = { handy=1, axey=1, material_wood=1, campfire=1, lit_campfire=1 },
groups = { handy=1, axey=1, material_wood=1, lit_campfire=1 },
paramtype = "light",
paramtype2 = "facedir",
paramtype2 = "4dir",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 4)
end,
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)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
if not inv then inv:set_size("main", 4) end
if minetest.get_item_group(itemstack:get_name(), "shovel") ~= 0 then
local protected = mcl_util.check_position_protection(pos, player)
if not protected then
if not minetest.is_creative_enabled(player:get_player_name()) then
-- Add wear (as if digging a shovely node)
local toolname = itemstack:get_name()
local wear = mcl_autogroup.get_wear(toolname, "shovely")
if wear then
itemstack:add_wear(wear)
end
end
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
elseif minetest.get_item_group(itemstack:get_name(), "campfire_cookable") ~= 0 then
mcl_campfires.take_item(pos, node, player, itemstack)
else
minetest.item_place_node(itemstack, player, pointed_thing)
end
end,
drop = def.drops,
_mcl_silk_touch_drop = {name.."_lit"},
on_timer = mcl_campfires.cook_item,
drop = "",
light_source = def.lightlevel,
mcl_sounds.node_sound_wood_defaults(),
sounds = mcl_sounds.node_sound_wood_defaults(),
selection_box = {
type = "fixed",
fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top
@ -87,7 +273,13 @@ function mcl_campfires.register_campfire(name, def)
},
_mcl_blast_resistance = 2,
_mcl_hardness = 2,
damage_per_second = def.damage,
damage_per_second = def.damage, -- FIXME: Once entity burning is fixed, this needs to be removed.
on_blast = on_blast,
after_dig_node = function(pos, node, oldmeta, digger)
drop_items(pos, node, oldmeta)
campfire_drops(pos, digger, def.drops, name.."_lit")
end,
_mcl_campfires_smothered_form = name,
})
end
@ -107,11 +299,50 @@ minetest.register_globalstep(function(dtime)
if etime < 0.5 then return end
etime = 0
for _,pl in pairs(minetest.get_connected_players()) do
local armor_feet = pl:get_inventory():get_stack("armor", 5)
if pl and pl:get_player_control().sneak or (minetest.global_exists("mcl_enchanting") and mcl_enchanting.has_enchantment(armor_feet, "frost_walker")) or (minetest.global_exists("mcl_potions") and mcl_potions.player_has_effect(pl, "fire_proof")) then
return
end
burn_in_campfire(pl)
end
for _,ent in pairs(minetest.luaentities) do
if ent.is_mob then
burn_in_campfire(ent.object)
burn_in_campfire(ent.object) -- FIXME: Mobs don't seem to burn properly anymore.
end
end
end)
function mcl_campfires.generate_smoke(pos, haybale)
local smoke_timer
if haybale then
smoke_timer = 8
else
smoke_timer = 4.75
end
minetest.add_particle({
pos = vector.offset(pos, math.random(-0.5, 0.5), 0, math.random(-0.5, 0.5)),
velocity = vector.new(0, 1, 0),
texture = "mcl_campfires_particle_" .. math.random(1, 12) .. ".png",
size = 10,
acceleration = vector.new(0, 0.5, 0),
collisiondetection = true,
expirationtime = smoke_timer,
})
end
minetest.register_abm({
label = "Campfire Smoke",
nodenames = {"group:lit_campfire"},
interval = 2,
chance = 2,
action = function(pos, node)
local node_below = vector.offset(pos, 0, -1, 0)
local haybale = false
if minetest.get_node(node_below).name == "mcl_farming:hay_block" then
haybale = true
end
mcl_campfires.generate_smoke(pos, haybale)
end,
})

View File

@ -1,8 +1,8 @@
-- TO-DO:
-- * Add Smoke Particles
-- * Add Spark Particles
-- * Add Cooking Meat
-- * Add Working Sounds
-- * Waterlogging (needs engine change)
-- * Fix the mob damage when mobs go back to burning again
local modname = minetest.get_modpath(minetest.get_current_modname())
dofile(modname.."/api.lua") -- Load API File

View File

@ -1,3 +1,3 @@
name = mcl_campfires
depends = mcl_sounds
depends = mcl_sounds, mcl_util
author = PrairieWind, Gerold55

File diff suppressed because it is too large Load Diff

View File

@ -1,35 +0,0 @@
# Blender MTL File: 'campfire.blend'
# Material Count: 3
newmtl Material.001
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd G:\minetest-0.4.16-win641\textures\Pixel Perfection v4.0\mcl_campfire_fire.png
newmtl none
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd \home\nathan\Downloads\mcl_campfire_log.png
newmtl none_NONE
Ns 96.078431
Ka 1.000000 1.000000 1.000000
Kd 0.640000 0.640000 0.640000
Ks 0.500000 0.500000 0.500000
Ke 0.000000 0.000000 0.000000
Ni 1.000000
d 1.000000
illum 2
map_Kd \\home\\nathan\\Downloads\\mcl_campfire_log.png

View File

@ -1,248 +0,0 @@
# Blender v2.78 (sub 0) OBJ File: 'campfire.blend'
# www.blender.org
mtllib campfire1.mtl
o nodebox4.005_nodebox4.006
v 0.243779 -0.499707 -0.497529
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.243779 -0.249707 -0.497529
v 0.243349 -0.499707 0.502471
v 0.493349 -0.499707 0.502578
v 0.493349 -0.249707 0.502578
v 0.243349 -0.249707 0.502471
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.493349 -0.499707 0.502578
v 0.493349 -0.249707 0.502578
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vn -0.0004 0.0000 1.0000
vn 1.0000 -0.0000 0.0004
vn -0.0000 -1.0000 0.0000
usemtl none
s off
f 1/1/1 2/2/1 3/3/1 4/4/1
f 5/5/1 6/6/1 7/7/1 8/8/1
f 1/9/2 4/10/2 8/11/2 5/5/2
f 1/9/3 2/12/3 6/13/3 5/5/3
f 4/14/3 3/15/3 7/16/3 8/17/3
f 9/18/2 10/19/2 12/20/2 11/21/2
o nodebox4.004_nodebox4.005
v -0.500021 -0.499707 -0.497848
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.500021 -0.249707 -0.497848
v -0.500451 -0.499707 0.502152
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
v -0.500451 -0.249707 0.502152
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vn -0.0004 0.0000 1.0000
vn 1.0000 -0.0000 0.0004
vn -0.0000 -1.0000 0.0000
usemtl none
s off
f 13/22/4 14/23/4 15/24/4 16/25/4
f 17/26/4 18/27/4 19/28/4 20/29/4
f 13/30/5 16/31/5 20/32/5 17/26/5
f 13/30/6 14/33/6 18/34/6 17/26/6
f 16/35/6 15/36/6 19/37/6 20/38/6
f 21/39/5 22/40/5 24/41/5 23/42/5
o nodebox4.001_nodebox4.004
v 0.500000 -0.312500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v 0.500000 -0.062500 -0.493800
v -0.500000 -0.312500 -0.493800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
v -0.500000 -0.062500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
vt 0.0000 0.7500
vt 0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 0.0000 0.7500
vt 0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.7500
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
usemtl none
s off
f 25/43/7 26/44/7 27/45/7 28/46/7
f 29/47/7 30/48/7 31/49/7 32/50/7
f 25/51/8 28/52/8 32/53/8 29/47/8
f 25/51/9 26/54/9 30/55/9 29/47/9
f 28/56/9 27/57/9 31/58/9 32/59/9
f 33/60/8 34/61/8 36/62/8 35/63/8
o Plane
v -0.311754 -0.438770 -0.196249
v 0.276360 -0.438621 0.247948
v -0.311276 0.135801 -0.196634
v 0.276838 0.135950 0.247562
v -0.274993 -0.438696 0.270317
v 0.240407 -0.438696 -0.218656
v -0.275322 0.135875 0.269969
v 0.240077 0.135875 -0.219003
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 1.0000
vt -0.0000 1.0000
vn -0.6027 0.0010 0.7980
vn 0.6883 0.0008 0.7255
usemtl Material.001
s off
f 37/64/10 38/65/10 40/66/10 39/67/10
f 41/68/11 42/69/11 44/70/11 43/71/11
o nodebox3
v 0.250000 -0.500000 -0.500000
v 0.250000 -0.500000 0.500000
v 0.250000 -0.437500 0.500000
v 0.250000 -0.437500 -0.500000
v -0.250000 -0.500000 -0.500000
v -0.250000 -0.500000 0.500000
v -0.250000 -0.437500 0.500000
v -0.250000 -0.437500 -0.500000
vt 1.0000 0.0000
vt 1.0000 0.0625
vt 0.0000 0.0625
vt 0.0000 0.0000
vt 1.0000 0.0000
vt 1.0000 0.0625
vt 0.0000 0.0625
vt 0.0000 0.0000
vt 1.0000 0.4375
vt 0.0000 0.4375
vt 0.0001 0.0001
vt 0.9999 0.0001
vt 1.0000 0.5000
vt 0.0000 0.5000
vt 0.0001 0.0001
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vt 0.0000 0.0000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn -1.0000 0.0000 0.0000
usemtl none
s off
f 45/72/12 48/73/12 52/74/12 49/75/12
f 46/76/12 47/77/12 51/78/12 50/79/12
f 45/72/13 46/80/13 50/81/13 49/82/13
f 48/83/13 47/84/13 51/85/13 52/86/13
usemtl none_NONE
f 45/87/14 46/88/14 47/89/14 48/90/14
f 49/75/14 50/79/14 51/91/14 52/92/14
o nodebox4
v 0.500000 -0.312500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v 0.500000 -0.062500 0.250000
v -0.500000 -0.312500 0.250000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
v -0.500000 -0.062500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
vt -0.0000 0.7500
vt 0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt -0.0000 0.7500
vt -0.0000 0.5000
vt 0.2500 0.5000
vt 0.2500 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 1.0000
vt 0.0000 1.0000
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vt 1.0000 0.7500
vt 1.0000 1.0000
vt 0.0000 1.0000
vt -0.0000 0.7500
vn -1.0000 0.0000 0.0000
vn 0.0000 -0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
usemtl none
s off
f 53/93/15 54/94/15 55/95/15 56/96/15
f 57/97/15 58/98/15 59/99/15 60/100/15
f 53/101/16 56/102/16 60/103/16 57/97/16
f 53/101/17 54/104/17 58/105/17 57/97/17
f 56/106/17 55/107/17 59/108/17 60/109/17
f 61/110/16 62/111/16 64/112/16 63/113/16

View File

@ -1,225 +0,0 @@
# Blender v2.79 (sub 7) OBJ File: 'campfire.blend'
# www.blender.org
o Plane
v -0.240246 -0.438696 -0.141059
v 0.205043 -0.438696 0.192756
v -0.239959 0.135875 -0.141442
v 0.205331 0.135875 0.192373
v -0.216088 -0.438696 0.214432
v 0.181502 -0.438696 -0.162771
v -0.216417 0.135875 0.214085
v 0.181172 0.135875 -0.163119
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.000000
vt 1.000000 0.000000
vt 1.000000 1.000000
vt -0.000000 1.000000
vn -0.5998 0.0008 0.8001
vn 0.6883 0.0008 0.7255
g Plane_Plane_Material.001
s off
f 1/1/1 2/2/1 4/3/1 3/4/1
f 5/5/2 6/6/2 8/7/2 7/8/2
o nodebox3
v 0.250000 -0.500000 -0.500000
v 0.250000 -0.500000 0.500000
v 0.250000 -0.437500 0.500000
v 0.250000 -0.437500 -0.500000
v -0.250000 -0.500000 -0.500000
v -0.250000 -0.500000 0.500000
v -0.250000 -0.437500 0.500000
v -0.250000 -0.437500 -0.500000
v 0.243779 -0.499707 -0.497529
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.243779 -0.249707 -0.497529
v 0.243349 -0.499707 0.502471
v 0.493349 -0.499707 0.502579
v 0.493349 -0.249707 0.502578
v 0.243349 -0.249707 0.502471
v 0.493779 -0.499707 -0.497421
v 0.493779 -0.249707 -0.497421
v 0.493349 -0.499707 0.502579
v 0.493349 -0.249707 0.502578
v -0.500021 -0.499707 -0.497848
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.500021 -0.249707 -0.497848
v -0.500451 -0.499707 0.502152
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
v -0.500451 -0.249707 0.502152
v -0.250021 -0.499707 -0.497741
v -0.250021 -0.249707 -0.497741
v -0.250451 -0.499707 0.502259
v -0.250451 -0.249707 0.502259
v 0.500000 -0.312500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v 0.500000 -0.062500 -0.493800
v -0.500000 -0.312500 -0.493800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
v -0.500000 -0.062500 -0.493800
v 0.500000 -0.312500 -0.243800
v 0.500000 -0.062500 -0.243800
v -0.500000 -0.312500 -0.243800
v -0.500000 -0.062500 -0.243800
v 0.500000 -0.312500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v 0.500000 -0.062500 0.250000
v -0.500000 -0.312500 0.250000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
v -0.500000 -0.062500 0.250000
v 0.500000 -0.312500 0.500000
v 0.500000 -0.062500 0.500000
v -0.500000 -0.312500 0.500000
v -0.500000 -0.062500 0.500000
vt 0.999982 0.000018
vt 1.000000 0.062500
vt 0.000000 0.062500
vt 0.000018 0.000018
vt 0.999982 0.000018
vt 1.000000 0.062500
vt 0.000000 0.062500
vt 0.000018 0.000018
vt 1.000000 0.437500
vt 0.000000 0.437500
vt 0.000071 0.000071
vt 0.999929 0.000071
vt 1.000000 0.500000
vt 0.000000 0.500000
vt 0.000071 0.000071
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 0.000000 0.750000
vt 0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 0.000000 0.750000
vt -0.000000 0.750000
vt 0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt -0.000000 0.750000
vt -0.000000 0.500000
vt 0.250000 0.500000
vt 0.250000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 1.000000 0.750000
vt 1.000000 1.000000
vt 0.000000 1.000000
vt -0.000000 0.750000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vt 0.000000 0.000000
vn 0.0000 0.0000 1.0000
vn 0.0000 -1.0000 -0.0000
vn -0.0004 0.0000 1.0000
vn 1.0000 -0.0000 0.0004
vn -1.0000 0.0000 0.0000
g nodebox3_nodebox3_none
s off
f 9/9/3 12/10/3 16/11/3 13/12/3
f 10/13/3 11/14/3 15/15/3 14/16/3
f 9/9/4 10/17/4 14/18/4 13/19/4
f 12/20/4 11/21/4 15/22/4 16/23/4
f 17/24/5 18/25/5 19/26/5 20/27/5
f 21/28/5 22/29/5 23/30/5 24/31/5
f 17/32/6 20/33/6 24/34/6 21/28/6
f 17/32/4 18/35/4 22/36/4 21/28/4
f 20/37/4 19/38/4 23/39/4 24/40/4
f 25/41/6 26/42/6 28/43/6 27/44/6
f 29/45/5 30/46/5 31/47/5 32/48/5
f 33/49/5 34/50/5 35/51/5 36/52/5
f 29/53/6 32/54/6 36/55/6 33/49/6
f 29/53/4 30/56/4 34/57/4 33/49/4
f 32/58/4 31/59/4 35/60/4 36/61/4
f 37/62/6 38/63/6 40/64/6 39/65/6
f 41/66/7 42/67/7 43/68/7 44/69/7
f 45/70/7 46/71/7 47/72/7 48/73/7
f 41/74/3 44/75/3 48/76/3 45/70/3
f 41/74/4 42/77/4 46/78/4 45/70/4
f 44/79/4 43/80/4 47/81/4 48/82/4
f 49/83/3 50/84/3 52/85/3 51/86/3
f 53/87/7 54/88/7 55/89/7 56/90/7
f 57/91/7 58/92/7 59/93/7 60/94/7
f 53/95/3 56/96/3 60/97/3 57/91/3
f 53/95/4 54/98/4 58/99/4 57/91/4
f 56/100/4 55/101/4 59/102/4 60/103/4
f 61/104/3 62/105/3 64/106/3 63/107/3
g nodebox3_nodebox3_none_NONE
f 9/108/7 10/109/7 11/110/7 12/111/7
f 13/12/7 14/16/7 15/112/7 16/113/7

View File

@ -40,3 +40,19 @@ minetest.register_craft({
{ "group:tree", "group:tree", "group:tree" },
}
})
-- Register Visual Food Entity
minetest.register_entity("mcl_campfires:food_entity", {
initial_properties = {
physical = false,
visual = "wielditem",
wield_item = "mcl_mobitems:mutton",
wield_image = "mcl_mobitems_mutton_raw.png",
visual_size = {x=0.25, y=0.25},
collisionbox = {0,0,0,0,0,0},
pointable = false,
},
on_activate = function(self, staticdata)
self.object:set_rotation({x = math.pi / -2, y = 0, z = 0})
end,
})

View File

@ -66,6 +66,12 @@ minetest.register_tool("mcl_fire:flint_and_steel", {
if not minetest.is_creative_enabled("") then
stack:add_wear(65535/65) -- 65 uses
end
-- Ignite Campfire
elseif minetest.get_item_group(dropnode.name, "campfire") ~= 0 then
add_node(droppos, {name=dropnode.name.."_lit"})
if not minetest.is_creative_enabled("") then
stack:add_wear(65535/65) -- 65 uses
end
end
return stack
end,

View File

@ -435,7 +435,7 @@ minetest.register_craftitem("mcl_fishing:fish_raw", {
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
stack_max = 64,
groups = { food=2, eatable = 2, smoker_cookable = 1 },
groups = { food=2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 0.4,
})
@ -465,7 +465,7 @@ minetest.register_craftitem("mcl_fishing:salmon_raw", {
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
stack_max = 64,
groups = { food=2, eatable = 2, smoker_cookable = 1 },
groups = { food=2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 0.4,
})

View File

@ -20,7 +20,7 @@ minetest.register_craftitem("mcl_mobitems:mutton", {
wield_image = "mcl_mobitems_mutton_raw.png",
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
groups = { food = 2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.2,
stack_max = 64,
})
@ -44,7 +44,7 @@ minetest.register_craftitem("mcl_mobitems:beef", {
wield_image = "mcl_mobitems_beef_raw.png",
on_place = minetest.item_eat(3),
on_secondary_use = minetest.item_eat(3),
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
groups = { food = 2, eatable = 3, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.8,
stack_max = 64,
})
@ -69,7 +69,7 @@ minetest.register_craftitem("mcl_mobitems:chicken", {
wield_image = "mcl_mobitems_chicken_raw.png",
on_place = minetest.item_eat(2),
on_secondary_use = minetest.item_eat(2),
groups = { food = 2, eatable = 2, smoker_cookable = 1 },
groups = { food = 2, eatable = 2, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.2,
stack_max = 64,
})
@ -93,7 +93,7 @@ minetest.register_craftitem("mcl_mobitems:porkchop", {
wield_image = "mcl_mobitems_porkchop_raw.png",
on_place = minetest.item_eat(3),
on_secondary_use = minetest.item_eat(3),
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
groups = { food = 2, eatable = 3, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.8,
stack_max = 64,
})
@ -117,7 +117,7 @@ minetest.register_craftitem("mcl_mobitems:rabbit", {
wield_image = "mcl_mobitems_rabbit_raw.png",
on_place = minetest.item_eat(3),
on_secondary_use = minetest.item_eat(3),
groups = { food = 2, eatable = 3, smoker_cookable = 1 },
groups = { food = 2, eatable = 3, smoker_cookable = 1, campfire_cookable = 1 },
_mcl_saturation = 1.8,
stack_max = 64,
})

View File

@ -969,7 +969,7 @@ end
function mcl_potions._extinguish_nearby_fire(pos, radius)
local epos = {x=pos.x, y=pos.y+0.5, z=pos.z}
local dnode = minetest.get_node({x=pos.x,y=pos.y-0.5,z=pos.z})
if minetest.get_item_group(dnode.name, "fire") ~= 0 then
if minetest.get_item_group(dnode.name, "fire") ~= 0 or minetest.get_item_group(dnode.name, "lit_campfire") ~= 0 then
epos.y = pos.y - 0.5
end
local exting = false
@ -989,6 +989,11 @@ function mcl_potions._extinguish_nearby_fire(pos, radius)
minetest.sound_play("fire_extinguish_flame", {pos = tpos, gain = 0.25, max_hear_distance = 16}, true)
minetest.remove_node(tpos)
exting = true
elseif minetest.get_item_group(node.name, "lit_campfire") ~= 0 then
minetest.sound_play("fire_extinguish_flame", {pos = tpos, gain = 0.25, max_hear_distance = 16}, true)
local def = minetest.registered_nodes[node.name]
minetest.set_node(tpos, {name = def._mcl_campfires_smothered_form, param2 = node.param2})
exting = true
end
end
-- Has radius: lingering, extinguish all nodes in area
@ -996,10 +1001,16 @@ function mcl_potions._extinguish_nearby_fire(pos, radius)
local nodes = minetest.find_nodes_in_area(
{x=epos.x-radius,y=epos.y,z=epos.z-radius},
{x=epos.x+radius,y=epos.y,z=epos.z+radius},
{"group:fire"})
{"group:fire", "group:lit_campfire"})
for n=1, #nodes do
local node = minetest.get_node(nodes[n])
minetest.sound_play("fire_extinguish_flame", {pos = nodes[n], gain = 0.25, max_hear_distance = 16}, true)
minetest.remove_node(nodes[n])
if minetest.get_item_group(node.name, "fire") ~= 0 then
minetest.remove_node(nodes[n])
elseif minetest.get_item_group(node.name, "lit_campfire") ~= 0 then
local def = minetest.registered_nodes[node.name]
minetest.set_node(nodes[n], {name = def._mcl_campfires_smothered_form, param2 = node.param2})
end
exting = true
end
end

View File

@ -187,7 +187,7 @@ local make_grass_path = function(itemstack, placer, pointed_thing)
itemstack:add_wear(wear)
end
end
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above}, true)
minetest.sound_play({name="default_grass_footstep", gain=1}, {pos = above, max_hear_distance = 16}, true)
minetest.swap_node(pointed_thing.under, {name="mcl_core:grass_path"})
end
end

Binary file not shown.

Before

Width:  |  Height:  |  Size: 474 B

After

Width:  |  Height:  |  Size: 670 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 602 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 263 B

After

Width:  |  Height:  |  Size: 317 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 454 B

After

Width:  |  Height:  |  Size: 689 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 412 B

After

Width:  |  Height:  |  Size: 623 B