Compare commits

..

7 Commits
master ... fish

43 changed files with 813 additions and 5624 deletions

View File

@ -853,8 +853,7 @@ function mob_class:do_states_attack (dtime)
return return
end end
local target_line_of_sight = self:target_visible(s) local target_line_of_sight = self:line_of_sight(s, p, 2)
if not target_line_of_sight then if not target_line_of_sight then
if self.target_time_lost then if self.target_time_lost then
local time_since_seen = os.time() - self.target_time_lost local time_since_seen = os.time() - self.target_time_lost

View File

@ -76,67 +76,6 @@ function mob_class:is_node_waterhazard(nodename)
return false return false
end end
local function raycast_line_of_sight (origin, target)
local raycast = minetest.raycast(origin, target, false, true)
local los_blocked = false
for hitpoint in raycast do
if hitpoint.type == "node" then
--TODO type object could block vision, for example chests
local node = minetest.get_node(minetest.get_pointed_thing_position(hitpoint))
if node.name ~= "air" then
local nodef = minetest.registered_nodes[node.name]
if nodef and nodef.walkable then
los_blocked = true
break
end
end
end
end
return not los_blocked
end
function mob_class:target_visible(origin)
if not origin then return end
if not self.attack then return end
local target_pos = self.attack:get_pos()
if not target_pos then return end
local origin_eye_pos = vector.offset(origin, 0, self.head_eye_height, 0)
--minetest.log("origin: " .. dump(origin))
--minetest.log("origin_eye_pos: " .. dump(origin_eye_pos))
local targ_head_height, targ_feet_height
if self.attack:is_player() then
local cbox = self.object:get_properties().collisionbox
targ_head_height = vector.offset(target_pos, 0, cbox[5], 0)
targ_feet_height = target_pos -- Cbox would put feet under ground which interferes with ray
else
targ_head_height = vector.offset(target_pos, 0, self.collisionbox[5], 0)
targ_feet_height = vector.offset(target_pos, 0, self.collisionbox[2], 0)
end
--minetest.log("start targ_head_height: " .. dump(targ_head_height))
if raycast_line_of_sight (origin_eye_pos, targ_head_height) then
return true
end
--minetest.log("Start targ_feet_height: " .. dump(targ_feet_height))
if raycast_line_of_sight (origin_eye_pos, targ_feet_height) then
return true
end
-- TODO mid way between feet and head
return false
end
-- check line of sight (BrunoMine) -- check line of sight (BrunoMine)
function mob_class:line_of_sight(pos1, pos2, stepsize) function mob_class:line_of_sight(pos1, pos2, stepsize)

View File

@ -24,7 +24,6 @@ mcl_mobs.register_mob("mobs_mc:creeper", {
mesh = "mobs_mc_creeper.b3d", mesh = "mobs_mc_creeper.b3d",
head_swivel = "Head_Control", head_swivel = "Head_Control",
bone_eye_height = 2.35, bone_eye_height = 2.35,
head_eye_height = 1.8;
curiosity = 2, curiosity = 2,
textures = { textures = {
{"mobs_mc_creeper.png", {"mobs_mc_creeper.png",

View File

@ -411,10 +411,6 @@ mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_on")
mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off") mesecon.register_mvps_stopper("mesecons_solarpanel:solar_panel_inverted_off")
mesecon.register_mvps_stopper("mcl_banners:hanging_banner") mesecon.register_mvps_stopper("mcl_banners:hanging_banner")
mesecon.register_mvps_stopper("mcl_banners:standing_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. -- Unmovable by technical restrictions.
-- Open formspec would screw up if node is destroyed (minor problem) -- Open formspec would screw up if node is destroyed (minor problem)
@ -939,11 +935,6 @@ mesecon.register_mvps_unsticky("mcl_farming:wheat_4")
mesecon.register_mvps_unsticky("mcl_farming:wheat_5") mesecon.register_mvps_unsticky("mcl_farming:wheat_5")
mesecon.register_mvps_unsticky("mcl_farming:wheat_6") mesecon.register_mvps_unsticky("mcl_farming:wheat_6")
mesecon.register_mvps_unsticky("mcl_farming:wheat_7") 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 -- Includes node heat when moving them
mesecon.register_on_mvps_move(mesecon.move_hot_nodes) mesecon.register_on_mvps_move(mesecon.move_hot_nodes)

View File

@ -1,7 +1,6 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
local mod_target = minetest.get_modpath("mcl_target") 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 enable_pvp = minetest.settings:get_bool("enable_pvp")
local math = math local math = math
@ -396,11 +395,6 @@ function ARROW_ENTITY.on_step(self, dtime)
tnt.ignite(self._stuckin) tnt.ignite(self._stuckin)
end 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 -- Activate target
if mod_target and snode.name == "mcl_target:target_off" then if mod_target and snode.name == "mcl_target:target_off" then
mcl_target.hit(self._stuckin, 1) --10 redstone ticks mcl_target.hit(self._stuckin, 1) --10 redstone ticks

View File

@ -18,13 +18,21 @@ local function on_place_fish(itemstack, placer, pointed_thing)
return new_stack return new_stack
end end
local pos = pointed_thing.above or pointed_thing.under if pointed_thing.type ~= "node" then return end
if not pos then return end
local n = minetest.get_node_or_nil(pos) local pos = pointed_thing.above
if n.name and minetest.registered_nodes[n.name].buildable_to or n.name == "mcl_portals:portal" then local n = minetest.get_node(pointed_thing.above)
local fish = itemstack:get_name():gsub(fishbucket_prefix,"") local def = minetest.registered_nodes[minetest.get_node(pointed_thing.under).name]
if ( def and def.buildable_to ) or n.name == "mcl_portals:portal" then
pos = pointed_thing.under
n = minetest.get_node(pointed_thing.under)
end
local fish = itemstack:get_definition()._mcl_buckets_fish
if fish_names[fish] then if fish_names[fish] then
local o = minetest.add_entity(pos, "mobs_mc:" .. fish) local o = minetest.add_entity(pos, "mobs_mc:" .. fish)
if o and o:get_pos() then
local props = itemstack:get_meta():get_string("properties") local props = itemstack:get_meta():get_string("properties")
if props ~= "" then if props ~= "" then
o:set_properties(minetest.deserialize(props)) o:set_properties(minetest.deserialize(props))
@ -60,6 +68,7 @@ for techname, fishname in pairs(fish_names) do
stack_max = 1, stack_max = 1,
groups = {bucket = 1, fish_bucket = 1}, groups = {bucket = 1, fish_bucket = 1},
liquids_pointable = false, liquids_pointable = false,
_mcl_buckets_fish = techname,
on_place = on_place_fish, on_place = on_place_fish,
on_secondary_use = on_place_fish, on_secondary_use = on_place_fish,
_on_dispense = function(stack, pos, droppos, dropnode, dropdir) _on_dispense = function(stack, pos, droppos, dropnode, dropdir)

View File

@ -1,5 +1,7 @@
# MineClone 2 Campfire API MineClone 2 Campfire API
## `mcl_campfires.register_campfire` ========================
`mcl_campfires.register_campfire`
---------------------------------
Used to register campfires. Used to register campfires.
**Example Usage** **Example Usage**
@ -22,6 +24,3 @@ mcl_campfires.register_campfire("mcl_campfires:campfire", {
* drops - what items drop when the campfire is mined. * drops - what items drop when the campfire is mined.
* lightlevel - the level of light the campfire emits. * 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

@ -9,9 +9,6 @@ Authors:
Gerold55 - Code Start + Models? Gerold55 - Code Start + Models?
PrairieWind - Improved and Cleaned Up Code, and added the soul campfire and crafting recipes. PrairieWind - Improved and Cleaned Up Code, and added the soul campfire and crafting recipes.
cora - Added burning damage. cora - Added burning damage.
DinoNuggies4665 - Cooking logic implemented
thunder1035 - Redesigned model and texture tweaks
AncientMariner - Changed smoke to particle spawner and tweaked particle configuration.
License of media License of media
---------------- ----------------

View File

@ -1,235 +1,6 @@
local S = minetest.get_translator(minetest.get_current_modname()) local S = minetest.get_translator(minetest.get_current_modname())
mcl_campfires = {} 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
local function destroy_particle_spawner (pos)
local meta = minetest.get_meta(pos)
local part_spawn_id = meta:get_int("particle_spawner_id")
if part_spawn_id and part_spawn_id > 0 then
minetest.delete_particlespawner(part_spawn_id)
end
end
local function create_smoke_partspawner (pos, constructor)
if not constructor then
destroy_particle_spawner (pos)
end
local haybale = false
local node_below = vector.offset(pos, 0, -1, 0)
if minetest.get_node(node_below).name == "mcl_farming:hay_block" then
haybale = true
end
local smoke_timer
if haybale then
smoke_timer = 4
else
smoke_timer = 2.4
end
local spawner_id = minetest.add_particlespawner({
amount = 3,
time = 0,
minpos = vector.add(pos, vector.new(-0.25, 0, -0.25)),
maxpos = vector.add(pos, vector.new( 0.25, 0, 0.25)),
minvel = vector.new(-0.2, 0.5, -0.2),
maxvel = vector.new(0.2, 1, 0.2),
minacc = vector.new(0, 0.5, 0),
maxacc = vector.new(0, 0.5, 0),
minexptime = smoke_timer,
maxexptime = smoke_timer * 2,
minsize = 6,
maxsize = 8,
collisiondetection = true,
vertical = false,
texture = "mcl_campfires_particle_1.png",
texpool = {
"mcl_campfires_particle_1.png";
{ name = "mcl_campfires_particle_1.png", fade = "out" },
{ name = "mcl_campfires_particle_2.png", fade = "out" },
{ name = "mcl_campfires_particle_3.png", fade = "out" },
{ name = "mcl_campfires_particle_4.png", fade = "out" },
{ name = "mcl_campfires_particle_5.png", fade = "out" },
{ name = "mcl_campfires_particle_6.png", fade = "out" },
{ name = "mcl_campfires_particle_7.png", fade = "out" },
{ name = "mcl_campfires_particle_8.png", fade = "out" },
{ name = "mcl_campfires_particle_9.png", fade = "out" },
{ name = "mcl_campfires_particle_10.png", fade = "out" },
{ name = "mcl_campfires_particle_11.png", fade = "out" },
{ name = "mcl_campfires_particle_11.png", fade = "out" },
{ name = "mcl_campfires_particle_12.png", fade = "out" },
}
})
local meta = minetest.get_meta(pos)
meta:set_int("particle_spawner_id", spawner_id)
end
function mcl_campfires.register_campfire(name, def) function mcl_campfires.register_campfire(name, def)
-- Define Campfire -- Define Campfire
minetest.register_node(name, { minetest.register_node(name, {
@ -244,13 +15,16 @@ function mcl_campfires.register_campfire(name, def)
use_texture_alpha = "clip", use_texture_alpha = "clip",
groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1, campfire=1, }, groups = { handy=1, axey=1, material_wood=1, not_in_creative_inventory=1, campfire=1, },
paramtype = "light", paramtype = "light",
paramtype2 = "4dir", paramtype2 = "facedir",
_on_ignite = function(player, node) on_rightclick = function (pos, node, player, itemstack, pointed_thing)
mcl_campfires.light_campfire(node.under) if player:get_wielded_item():get_name() == "mcl_fire:flint_and_steel" then
return true node.name = name.."_lit"
minetest.set_node(pos, node)
end
end, end,
drop = "", drop = def.drops,
sounds = mcl_sounds.node_sound_wood_defaults(), _mcl_silk_touch_drop = {name},
mcl_sounds.node_sound_wood_defaults(),
selection_box = { selection_box = {
type = 'fixed', type = 'fixed',
fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top
@ -261,9 +35,6 @@ function mcl_campfires.register_campfire(name, def)
}, },
_mcl_blast_resistance = 2, _mcl_blast_resistance = 2,
_mcl_hardness = 2, _mcl_hardness = 2,
after_dig_node = function(pos, node, oldmeta, digger)
campfire_drops(pos, digger, def.drops, name.."_lit")
end,
}) })
--Define Lit Campfire --Define Lit Campfire
@ -274,71 +45,38 @@ function mcl_campfires.register_campfire(name, def)
inventory_image = def.inv_texture, inventory_image = def.inv_texture,
wield_image = def.inv_texture, wield_image = def.inv_texture,
drawtype = "mesh", drawtype = "mesh",
mesh = "mcl_campfires_campfire.obj", mesh = "mcl_campfires_campfire_lit.obj",
tiles = { tiles = {{
{
name=def.fire_texture, name=def.fire_texture,
animation={ animation={
type="vertical_frames", type="vertical_frames",
aspect_w=32, aspect_w=16,
aspect_h=16,
length=2.0
}},
{name=def.lit_logs_texture,
animation={
type="vertical_frames",
aspect_w=16,
aspect_h=16, aspect_h=16,
length=2.0 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", use_texture_alpha = "clip",
groups = { handy=1, axey=1, material_wood=1, lit_campfire=1 }, groups = { handy=1, axey=1, material_wood=1, campfire=1, lit_campfire=1 },
paramtype = "light", paramtype = "light",
paramtype2 = "4dir", paramtype2 = "facedir",
on_construct = function(pos)
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
inv:set_size("main", 4)
create_smoke_partspawner (pos, true)
end,
on_destruct = function(pos)
destroy_particle_spawner (pos)
end,
on_rightclick = function (pos, node, player, itemstack, pointed_thing) on_rightclick = function (pos, node, player, itemstack, pointed_thing)
local meta = minetest.get_meta(pos) if player:get_wielded_item():get_name():find("shovel") then
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 node.name = name
minetest.set_node(pos, node) minetest.set_node(pos, node)
minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true) minetest.sound_play("fire_extinguish_flame", {pos = pos, gain = 0.25, max_hear_distance = 16}, true)
end 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, end,
on_timer = mcl_campfires.cook_item, drop = def.drops,
drop = "", _mcl_silk_touch_drop = {name.."_lit"},
light_source = def.lightlevel, light_source = def.lightlevel,
sounds = mcl_sounds.node_sound_wood_defaults(), mcl_sounds.node_sound_wood_defaults(),
selection_box = { selection_box = {
type = "fixed", type = "fixed",
fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top fixed = {-.5, -.5, -.5, .5, -.05, .5}, --left, bottom, front, right, top
@ -349,13 +87,7 @@ function mcl_campfires.register_campfire(name, def)
}, },
_mcl_blast_resistance = 2, _mcl_blast_resistance = 2,
_mcl_hardness = 2, _mcl_hardness = 2,
damage_per_second = def.damage, -- FIXME: Once entity burning is fixed, this needs to be removed. damage_per_second = def.damage,
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 end
@ -375,25 +107,11 @@ minetest.register_globalstep(function(dtime)
if etime < 0.5 then return end if etime < 0.5 then return end
etime = 0 etime = 0
for _,pl in pairs(minetest.get_connected_players()) do 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) burn_in_campfire(pl)
end end
for _,ent in pairs(minetest.luaentities) do for _,ent in pairs(minetest.luaentities) do
if ent.is_mob then if ent.is_mob then
burn_in_campfire(ent.object) -- FIXME: Mobs don't seem to burn properly anymore. burn_in_campfire(ent.object)
end end
end end
end) end)
minetest.register_lbm({
label = "Campfire Smoke",
name = "mcl_campfires:campfire_smoke",
nodenames = {"group:lit_campfire"},
run_at_every_load = true,
action = function(pos, node)
create_smoke_partspawner (pos)
end,
})

View File

@ -1,8 +1,8 @@
-- TO-DO: -- TO-DO:
-- * Add Smoke Particles
-- * Add Spark Particles -- * Add Spark Particles
-- * Add Cooking Meat
-- * Add Working Sounds -- * 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()) local modname = minetest.get_modpath(minetest.get_current_modname())
dofile(modname.."/api.lua") -- Load API File dofile(modname.."/api.lua") -- Load API File

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,35 @@
# 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

@ -0,0 +1,248 @@
# 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

@ -0,0 +1,225 @@
# 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,19 +40,3 @@ minetest.register_craft({
{ "group:tree", "group:tree", "group:tree" }, { "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

@ -1581,7 +1581,7 @@ end
-- MUST NOT be called if there is a snow cover node above pos. -- MUST NOT be called if there is a snow cover node above pos.
function mcl_core.clear_snow_dirt(pos, node) function mcl_core.clear_snow_dirt(pos, node)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
if def._mcl_snowless then if def and def._mcl_snowless then
minetest.swap_node(pos, {name = def._mcl_snowless, param2=node.param2}) minetest.swap_node(pos, {name = def._mcl_snowless, param2=node.param2})
end end
end end
@ -1602,7 +1602,7 @@ function mcl_core.on_snowable_construct(pos)
-- Make snowed if needed -- Make snowed if needed
if minetest.get_item_group(anode.name, "snow_cover") == 1 then if minetest.get_item_group(anode.name, "snow_cover") == 1 then
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
if def._mcl_snowed then if def and def._mcl_snowed then
minetest.swap_node(pos, {name = def._mcl_snowed, param2=node.param2}) minetest.swap_node(pos, {name = def._mcl_snowed, param2=node.param2})
end end
end end
@ -1623,7 +1623,7 @@ function mcl_core.on_snow_construct(pos)
local npos = {x=pos.x, y=pos.y-1, z=pos.z} local npos = {x=pos.x, y=pos.y-1, z=pos.z}
local node = minetest.get_node(npos) local node = minetest.get_node(npos)
local def = minetest.registered_nodes[node.name] local def = minetest.registered_nodes[node.name]
if def._mcl_snowed then if def and def._mcl_snowed then
minetest.swap_node(npos, {name = def._mcl_snowed, param2=node.param2}) minetest.swap_node(npos, {name = def._mcl_snowed, param2=node.param2})
end end
end end

View File

@ -1038,7 +1038,7 @@ for i=1,8 do
-- Get position where snow would be placed -- Get position where snow would be placed
local target local target
if minetest.registered_nodes[unode.name].buildable_to then if def and def.buildable_to then
target = under target = under
else else
target = above target = above

View File

@ -155,7 +155,8 @@ minetest.register_node("mcl_end:chorus_flower", {
1) On top of end stone or chorus plant 1) On top of end stone or chorus plant
2) On top of air and horizontally adjacent to exactly 1 chorus plant ]] 2) On top of air and horizontally adjacent to exactly 1 chorus plant ]]
local pos local pos
if minetest.registered_nodes[node_under.name].buildable_to then local def = minetest.registered_nodes[node_under.name]
if def and def.buildable_to then
pos = pointed_thing.under pos = pointed_thing.under
else else
pos = pointed_thing.above pos = pointed_thing.above
@ -283,7 +284,8 @@ minetest.register_node("mcl_end:chorus_plant", {
condition is met: condition is met:
- placed on end stone or any chorus node ]] - placed on end stone or any chorus node ]]
local pos_place, node_check local pos_place, node_check
if minetest.registered_nodes[node_under.name].buildable_to then local def = minetest.registered_nodes[node_under.name]
if def and def.buildable_to then
pos_place = pointed_thing.under pos_place = pointed_thing.under
node_check = node_above node_check = node_above
else else

View File

@ -66,12 +66,6 @@ minetest.register_tool("mcl_fire:flint_and_steel", {
if not minetest.is_creative_enabled("") then if not minetest.is_creative_enabled("") then
stack:add_wear(65535/65) -- 65 uses stack:add_wear(65535/65) -- 65 uses
end 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 end
return stack return stack
end, end,

View File

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

View File

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

View File

@ -301,7 +301,8 @@ minetest.register_node("mcl_mobspawners:spawner", {
local new_itemstack, success = minetest.item_place(itemstack, placer, pointed_thing) local new_itemstack, success = minetest.item_place(itemstack, placer, pointed_thing)
if success then if success then
local placepos local placepos
if minetest.registered_nodes[node_under.name].buildable_to then local def = minetest.registered_nodes[node_under.name]
if def and def.buildable_to then
placepos = pointed_thing.under placepos = pointed_thing.under
else else
placepos = pointed_thing.above placepos = pointed_thing.above

View File

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

View File

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 670 B

After

Width:  |  Height:  |  Size: 474 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 602 B

After

Width:  |  Height:  |  Size: 412 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 644 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 317 B

After

Width:  |  Height:  |  Size: 263 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 105 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 239 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 286 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 336 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 186 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 276 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 299 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 275 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 301 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 386 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 382 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 399 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 689 B

After

Width:  |  Height:  |  Size: 454 B

Binary file not shown.

Before

Width:  |  Height:  |  Size: 623 B

After

Width:  |  Height:  |  Size: 412 B