EinsDreiDreiSieben/mods/jelys_pizzaria/functions.lua
2025-05-13 19:24:36 +02:00

198 lines
7 KiB
Lua

function jpizza.register_topping(def)
local newdef = def
table.insert(jpizza.toppings, {name=def.name, texture=def.texture, item=def.item, cooked_texture=def.cooked_texture, topping_inv=def.topping_inv, eat=def.eat})
end
local function find(value, key, list)
for _, i in pairs(list) do
if i[key] == value then
return _
end
end
return false
end
function jpizza.register_pizza(name, def)
local newDef = def
newDef.tiles = {
def.texture[1],
def.texture[2]
}
newDef.groups = {oddly_breakable_by_hand=3, crumbly=3, attached_node = 1}
if def.toppings == 1 then
newDef.groups.pizza = 1
end
newDef.use_texture_alpha = "clip"
newDef.drawtype = "nodebox"
newDef.paramtype = "light"
newDef.sunlight_propagates = true
newDef.selection_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.5, 0.5, -0.4, 0.5},
}
}
newDef.stack_max = 1
newDef.node_box = {
type = "fixed",
fixed = {
{-0.5, -0.5, -0.1875, 0.5, -0.4375, 0.1875},
{-0.1875, -0.5, -0.5, 0.1875, -0.4375, 0.5},
{-0.3125, -0.5, -0.4375, 0.3125, -0.4375, 0.4375},
{-0.4375, -0.5, -0.3125, 0.4375, -0.4375, 0.3125},
{-0.375, -0.5, -0.375, 0.375, -0.4375, 0.375},
}
}
if newDef.sounds == nil then
newDef.sounds = {
footstep = {name = "jelys_pizzaria_pizza_walk", gain = 0.3},
dug = {name = "jelys_pizzaria_pizza_walk", gain = 0.3},
dig = {name = "jelys_pizzaria_pizza_walk", gain = 0.3},
}
end
minetest.register_node(name, newDef)
end
local raw_texture = "jelys_pizzaria_pizza_dough.png^"..
"jelys_pizzaria_pizza_sauce.png^"..
"jelys_pizzaria_pizza_cheese.png^"
local cooked_texture = "jelys_pizzaria_cooked_dough.png^"..
"jelys_pizzaria_pizza_cooked_sauce.png^"..
"jelys_pizzaria_pizza_cooked_cheese.png^"
function jpizza.spawn_slices(pos, item)
for i = 0, 5, 1 do
local x = pos.x+math.sin(i*60)/3
local z = pos.z+math.cos(i*60)/3
minetest.add_item({x=x, y=pos.y, z=z}, item)
end
end
function jpizza.make_pizzas()
for i, base in pairs(jpizza.toppings) do
jpizza.register_pizza("jelys_pizzaria:raw_pizza_"..base.name, {
description = "Raw Pizza with "..base.name,
texture = {
raw_texture..base.texture,
"jelys_pizzaria_pizza_dough.png"
},
cooked = "jelys_pizzaria:pizza_"..base.name,
cook_time = {min=100, max=200},
raw = 1,
toppings = 1,
on_rightclick = function(pos, node, player, itemstack, pointed_thing)
local name = itemstack:get_name()
local fetch = find(name, "item", jpizza.toppings)
if fetch then
local stuff = jpizza.toppings[fetch]
if minetest.registered_nodes["jelys_pizzaria:raw_pizza_"..base.name.."_"..stuff.name] then
if not minetest.is_creative_enabled(player:get_player_name()) then
itemstack:take_item()
end
minetest.set_node(pos, {name = "jelys_pizzaria:raw_pizza_"..base.name.."_"..stuff.name})
return itemstack
end
end
end,
})
jpizza.register_pizza("jelys_pizzaria:pizza_"..base.name, {
description = "Pizza with "..base.name,
texture = {
cooked_texture..base.cooked_texture,
"jelys_pizzaria_cooked_dough.png"
},
on_punch = function(pos, oldnode, digger)
local down = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
local itemstack = digger:get_wielded_item()
local downdef = minetest.registered_nodes[down.name]
if itemstack:get_name() == "jelys_pizzaria:pizza_cutter" and downdef.groups.pizza_oven == nil then
jpizza.spawn_slices(pos, "jelys_pizzaria:pizza_"..base.name.."_slice")
local wear = itemstack:get_wear()
itemstack:set_wear(wear+(65535/40))
digger:set_wielded_item(itemstack)
minetest.remove_node(pos)
end
end,
done = true
})
minetest.register_craftitem("jelys_pizzaria:pizza_"..base.name.."_slice", {
description = "Slice of "..base.name.." Pizza",
inventory_image = "jelys_pizzaria_pizza_slice.png^"..base.topping_inv[2],
stack_max = 6,
groups = {food = 1, eatable = (1+base.eat)},
on_use = minetest.item_eat(1+base.eat)
})
if jpizza.has_depends.hunger_ng then
hunger_ng.add_hunger_data("jelys_pizzaria:pizza_"..base.name.."_slice", {satiates = 1+base.eat})
end
if jpizza.has_depends.hbhunger and minetest.global_exists("hbhunger") then
hbhunger.register_food("jelys_pizzaria:pizza_"..base.name.."_slice", 1+base.eat)
end
for j = i, #jpizza.toppings, 1 do
local side = jpizza.toppings[j]
if side.name ~= base.name then
local pizza_name = "jelys_pizzaria:raw_pizza_"..base.name.."_"..side.name
local pizza_name2 = "jelys_pizzaria:raw_pizza_"..side.name.."_"..base.name
minetest.register_alias(pizza_name2, pizza_name)
jpizza.register_pizza(pizza_name, {
description = "Raw Pizza with "..base.name.." and "..side.name,
cook_time = {min=200, max=250},
texture = {
raw_texture..base.texture.."^("..side.texture.."^[transformR90)",
"jelys_pizzaria_pizza_dough.png"
},
raw = 1,
cooked = "jelys_pizzaria:pizza_"..base.name.."_"..side.name,
})
end
end
for j = i, #jpizza.toppings, 1 do
local side = jpizza.toppings[j]
if side.name ~= base.name then
local pizza_name = "jelys_pizzaria:pizza_"..base.name.."_"..side.name
jpizza.register_pizza(pizza_name, {
description = "Pizza with "..base.name.." and "..side.name,
texture = {
cooked_texture..base.cooked_texture.."^("..side.cooked_texture.."^[transformR90)",
"jelys_pizzaria_cooked_dough.png"
},
on_punch = function(pos, oldnode, digger)
local down = minetest.get_node({x=pos.x, y=pos.y-1, z=pos.z})
local itemstack = digger:get_wielded_item()
local downdef = minetest.registered_nodes[down.name]
if itemstack:get_name() == "jelys_pizzaria:pizza_cutter" and downdef.groups.pizza_oven == nil then
jpizza.spawn_slices(pos, pizza_name.."_slice")
local wear = itemstack:get_wear()
itemstack:set_wear(wear+(65535/40))
digger:set_wielded_item(itemstack)
minetest.remove_node(pos)
end
end,
done=true
})
local num1 = math.floor(math.random(1,2)+0.5)
local num2 = 1
if num1 == 1 then
num2 = 2
end
minetest.register_craftitem(pizza_name.."_slice", {
description = "Slice of "..base.name.." and "..side.name.." Pizza",
inventory_image = "jelys_pizzaria_pizza_slice.png^"..base.topping_inv[num1].."^"..side.topping_inv[num2],
stack_max = 6,
groups = {food = 1, eatable = (1+base.eat+side.eat)},
on_use = minetest.item_eat(1+base.eat+side.eat)
})
minetest.register_alias(pizza_name.."_slice", "jelys_pizzaria:pizza_"..side.name.."_"..base.name)
if jpizza.has_depends.hunger_ng == true then
hunger_ng.add_hunger_data(pizza_name.."_slice", {satiates = 1+base.eat+side.eat})
end
if jpizza.has_depends.hbhunger and minetest.global_exists("hbhunger") then
hbhunger.register_food(pizza_name.."_slice", 1+base.eat+side.eat)
end
end
end
end
end