mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-29 05:51:05 +01:00
Made food entities local to evcery campfire, and made one food entity that works for all foods
This commit is contained in:
parent
d3095fea57
commit
5b212dd3fe
4 changed files with 77 additions and 113 deletions
|
@ -6,10 +6,32 @@ local food_entity = {nil, nil, nil, nil}
|
||||||
local drop_inventory = mcl_util.drop_items_from_meta_container("main")
|
local drop_inventory = mcl_util.drop_items_from_meta_container("main")
|
||||||
|
|
||||||
local function drop_items(pos, node, oldmeta)
|
local function drop_items(pos, node, oldmeta)
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
drop_inventory(pos, node, oldmeta)
|
drop_inventory(pos, node, oldmeta)
|
||||||
for i = 1, 4 do
|
for i = 1, 4 do
|
||||||
if food_entity[i] then
|
local food_entity = nil
|
||||||
food_entity[i]:remove()
|
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({x = food_x, y = food_y, z = food_z}, 1)
|
||||||
|
minetest.chat_send_all("found entity")
|
||||||
|
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 = entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
if food_entity then
|
||||||
|
minetest.chat_send_all("removed entity")
|
||||||
|
food_entity:remove()
|
||||||
|
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
|
||||||
|
@ -29,11 +51,13 @@ end
|
||||||
-- on_rightclick function to take items that are cookable in a campfire, and put them in the campfire inventory
|
-- 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)
|
function mcl_campfires.take_item(pos, node, player, itemstack)
|
||||||
local campfire_spots = {
|
local campfire_spots = {
|
||||||
{x = -0.25, y = -0.04, z = -0.25},
|
vector.new(-0.25, -0.04, -0.25),
|
||||||
{x = 0.25, y = -0.04, z = -0.25},
|
vector.new( 0.25, -0.04, -0.25),
|
||||||
{x = 0.25, y = -0.04, z = 0.25},
|
vector.new( 0.25, -0.04, 0.25),
|
||||||
{x = -0.25, y = -0.04, z = 0.25},
|
vector.new(-0.25, -0.04, 0.25),
|
||||||
}
|
}
|
||||||
|
minetest.chat_send_all("food added: pos = "..tostring(pos))
|
||||||
|
local food_entity = {nil,nil,nil,nil}
|
||||||
local is_creative = minetest.is_creative_enabled(player:get_player_name())
|
local is_creative = minetest.is_creative_enabled(player:get_player_name())
|
||||||
local inv = player:get_inventory()
|
local inv = player:get_inventory()
|
||||||
local campfire_meta = minetest.get_meta(pos)
|
local campfire_meta = minetest.get_meta(pos)
|
||||||
|
@ -49,7 +73,14 @@ function mcl_campfires.take_item(pos, node, player, itemstack)
|
||||||
if not is_creative then itemstack:take_item(1) end -- Take the item if in creative
|
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_inv:set_stack("main", space, stack) -- Set the inventory itemstack at the empty spot
|
||||||
campfire_meta:set_int("cooktime_"..tostring(space), 30) -- Set the cook time meta
|
campfire_meta:set_int("cooktime_"..tostring(space), 30) -- Set the cook time meta
|
||||||
food_entity[space] = minetest.add_entity(pos + campfire_spots[space], stack:get_name().."_entity") -- Spawn food item on the campfire
|
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]:getpos().x))
|
||||||
|
campfire_meta:set_string("food_y_"..tostring(space), tostring(food_entity[space]:getpos().y))
|
||||||
|
campfire_meta:set_string("food_z_"..tostring(space), tostring(food_entity[space]:getpos().z))
|
||||||
break
|
break
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -67,6 +98,23 @@ function mcl_campfires.cook_item(pos, elapsed)
|
||||||
for i = 1, 4 do
|
for i = 1, 4 do
|
||||||
local time_r = meta:get_int("cooktime_"..tostring(i))
|
local time_r = meta:get_int("cooktime_"..tostring(i))
|
||||||
local item = inv:get_stack("main", 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
|
||||||
|
minetest.chat_send_all("X: "..food_x.." Y: "..food_y.." Z: "..food_z)
|
||||||
|
local entites = minetest.get_objects_inside_radius({x = food_x, y = food_y, z = food_z}, 1)
|
||||||
|
if entites then
|
||||||
|
for _, entity in ipairs(entites) do
|
||||||
|
if entity then
|
||||||
|
if entity:get_luaentity().name == "mcl_campfires:food_entity" then
|
||||||
|
food_entity = entity
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
if item ~= (ItemStack("") or ItemStack("nil")) then
|
if item ~= (ItemStack("") or ItemStack("nil")) then
|
||||||
-- Item hasn't been cooked completely, continue cook timer countdown.
|
-- Item hasn't been cooked completely, continue cook timer countdown.
|
||||||
if time_r and time_r ~= 0 and time_r > 0 then
|
if time_r and time_r ~= 0 and time_r > 0 then
|
||||||
|
@ -75,7 +123,12 @@ function mcl_campfires.cook_item(pos, elapsed)
|
||||||
elseif time_r <= 0 then
|
elseif time_r <= 0 then
|
||||||
local cooked = minetest.get_craft_result({method = "cooking", width = 1, items = {item}})
|
local cooked = minetest.get_craft_result({method = "cooking", width = 1, items = {item}})
|
||||||
if cooked then
|
if cooked then
|
||||||
food_entity[i]:remove() -- Remove visual food entity
|
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)
|
||||||
|
end
|
||||||
minetest.add_item(pos, cooked.item) -- Drop Cooked Item
|
minetest.add_item(pos, cooked.item) -- Drop Cooked Item
|
||||||
inv:set_stack("main", i, "") -- Clear Inventory
|
inv:set_stack("main", i, "") -- Clear Inventory
|
||||||
continue = continue + 1 -- Indicate that the slot is clear.
|
continue = continue + 1 -- Indicate that the slot is clear.
|
||||||
|
|
|
@ -40,3 +40,19 @@ 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,
|
||||||
|
})
|
||||||
|
|
|
@ -457,21 +457,6 @@ minetest.register_craft({
|
||||||
cooktime = 10,
|
cooktime = 10,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_fishing:fish_raw_entity", {
|
|
||||||
initial_properties = {
|
|
||||||
physical = false,
|
|
||||||
visual = "wielditem",
|
|
||||||
wield_item = "mcl_fishing:fish_raw",
|
|
||||||
wield_image = "mcl_fishing_fish_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Salmon
|
-- Salmon
|
||||||
minetest.register_craftitem("mcl_fishing:salmon_raw", {
|
minetest.register_craftitem("mcl_fishing:salmon_raw", {
|
||||||
description = S("Raw Salmon"),
|
description = S("Raw Salmon"),
|
||||||
|
@ -502,21 +487,6 @@ minetest.register_craft({
|
||||||
cooktime = 10,
|
cooktime = 10,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_fishing:salmon_raw_entity", {
|
|
||||||
initial_properties = {
|
|
||||||
physical = false,
|
|
||||||
visual = "wielditem",
|
|
||||||
wield_item = "mcl_fishing:salmon_raw",
|
|
||||||
wield_image = "mcl_fishing_salmon_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Clownfish
|
-- Clownfish
|
||||||
minetest.register_craftitem("mcl_fishing:clownfish_raw", {
|
minetest.register_craftitem("mcl_fishing:clownfish_raw", {
|
||||||
description = S("Clownfish"),
|
description = S("Clownfish"),
|
||||||
|
|
|
@ -37,21 +37,6 @@ minetest.register_craftitem("mcl_mobitems:cooked_mutton", {
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_mobitems:mutton_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("mcl_mobitems:beef", {
|
minetest.register_craftitem("mcl_mobitems:beef", {
|
||||||
description = S("Raw Beef"),
|
description = S("Raw Beef"),
|
||||||
_doc_items_longdesc = S("Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
_doc_items_longdesc = S("Raw beef is the flesh from cows and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||||
|
@ -76,21 +61,6 @@ minetest.register_craftitem("mcl_mobitems:cooked_beef", {
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_mobitems:beef_entity", {
|
|
||||||
initial_properties = {
|
|
||||||
physical = false,
|
|
||||||
visual = "wielditem",
|
|
||||||
wield_item = "mcl_mobitems:beef",
|
|
||||||
wield_image = "mcl_mobitems_beef_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("mcl_mobitems:chicken", {
|
minetest.register_craftitem("mcl_mobitems:chicken", {
|
||||||
description = S("Raw Chicken"),
|
description = S("Raw Chicken"),
|
||||||
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("30% chance of food poisoning")),
|
_tt_help = minetest.colorize(mcl_colors.YELLOW, S("30% chance of food poisoning")),
|
||||||
|
@ -116,21 +86,6 @@ minetest.register_craftitem("mcl_mobitems:cooked_chicken", {
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_mobitems:chicken_entity", {
|
|
||||||
initial_properties = {
|
|
||||||
physical = false,
|
|
||||||
visual = "wielditem",
|
|
||||||
wield_item = "mcl_mobitems:chicken",
|
|
||||||
wield_image = "mcl_mobitems_chicken_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("mcl_mobitems:porkchop", {
|
minetest.register_craftitem("mcl_mobitems:porkchop", {
|
||||||
description = S("Raw Porkchop"),
|
description = S("Raw Porkchop"),
|
||||||
_doc_items_longdesc = S("A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
_doc_items_longdesc = S("A raw porkchop is the flesh from a pig and can be eaten safely. Cooking it will greatly increase its nutritional value."),
|
||||||
|
@ -155,21 +110,6 @@ minetest.register_craftitem("mcl_mobitems:cooked_porkchop", {
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_mobitems:porkchop_entity", {
|
|
||||||
initial_properties = {
|
|
||||||
physical = false,
|
|
||||||
visual = "wielditem",
|
|
||||||
wield_item = "mcl_mobitems:porkchop",
|
|
||||||
wield_image = "mcl_mobitems_porkchop_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
minetest.register_craftitem("mcl_mobitems:rabbit", {
|
minetest.register_craftitem("mcl_mobitems:rabbit", {
|
||||||
description = S("Raw Rabbit"),
|
description = S("Raw Rabbit"),
|
||||||
_doc_items_longdesc = S("Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value."),
|
_doc_items_longdesc = S("Raw rabbit is a food item from a dead rabbit. It can be eaten safely. Cooking it will increase its nutritional value."),
|
||||||
|
@ -194,21 +134,6 @@ minetest.register_craftitem("mcl_mobitems:cooked_rabbit", {
|
||||||
stack_max = 64,
|
stack_max = 64,
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_entity("mcl_mobitems:rabbit_entity", {
|
|
||||||
initial_properties = {
|
|
||||||
physical = false,
|
|
||||||
visual = "wielditem",
|
|
||||||
wield_item = "mcl_mobitems:rabbit",
|
|
||||||
wield_image = "mcl_mobitems_rabbit_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,
|
|
||||||
})
|
|
||||||
|
|
||||||
-- Reset food poisoning and status effects
|
-- Reset food poisoning and status effects
|
||||||
local function drink_milk(itemstack, player, pointed_thing)
|
local function drink_milk(itemstack, player, pointed_thing)
|
||||||
local bucket = minetest.do_item_eat(0, "mcl_buckets:bucket_empty", itemstack, player, pointed_thing)
|
local bucket = minetest.do_item_eat(0, "mcl_buckets:bucket_empty", itemstack, player, pointed_thing)
|
||||||
|
|
Loading…
Reference in a new issue