456 lines
11 KiB
Lua
456 lines
11 KiB
Lua
|
|
-- global
|
|
|
|
pie = {}
|
|
|
|
-- mod check and settings
|
|
|
|
local hmod = minetest.get_modpath("hunger")
|
|
local hbmod = minetest.global_exists("hbhunger")
|
|
local stmod = minetest.global_exists("stamina")
|
|
local defmod = minetest.get_modpath("default")
|
|
local mclhunger = minetest.get_modpath("mcl_hunger")
|
|
local screwdriver_exists = minetest.get_modpath("screwdriver")
|
|
local quarters = minetest.settings:get_bool("pie.quarters")
|
|
|
|
-- sound support
|
|
|
|
local cake_sound = defmod and default.node_sound_dirt_defaults()
|
|
|
|
if minetest.get_modpath("mcl_sounds") then
|
|
cake_sound = mcl_sounds.node_sound_dirt_defaults()
|
|
end
|
|
|
|
-- eat pie slice function
|
|
|
|
local function replace_pie(node, puncher, pos)
|
|
|
|
-- is this my pie?
|
|
if minetest.is_protected(pos, puncher:get_player_name()) then return end
|
|
|
|
-- which size of pie did we hit?
|
|
local pie = node.name:sub(1,-3)
|
|
local num = tonumber(node.name:sub(-1))
|
|
|
|
-- are we using crystal shovel to pick up full pie using soft touch?
|
|
local tool = puncher:get_wielded_item():get_name()
|
|
|
|
if num == 0 and tool == "ethereal:shovel_crystal" then
|
|
|
|
local inv = puncher:get_inventory()
|
|
|
|
minetest.remove_node(pos)
|
|
|
|
if inv:room_for_item("main", {name = pie .. "_0"}) then
|
|
inv:add_item("main", pie .. "_0")
|
|
else
|
|
pos.y = pos.y + 0.5
|
|
minetest.add_item(pos, {name = pie .. "_0"})
|
|
end
|
|
|
|
return
|
|
end
|
|
|
|
-- eat slice or remove whole pie
|
|
if num == 3 then
|
|
node.name = "air"
|
|
elseif num < 3 then
|
|
node.name = pie .. "_" .. (num + 1)
|
|
end
|
|
|
|
minetest.swap_node(pos, node)
|
|
|
|
if num == 3 then minetest.check_for_falling(pos) end
|
|
|
|
-- default eat sound
|
|
local sound = "default_dig_crumbly"
|
|
|
|
-- Blockmen's hud_hunger mod
|
|
if hmod then
|
|
|
|
local h = hunger.read(puncher)
|
|
|
|
h = math.min(h + 4, 30)
|
|
|
|
local ok = hunger.update_hunger(puncher, h)
|
|
|
|
sound = "hunger_eat"
|
|
|
|
-- Wuzzy's hbhunger mod
|
|
elseif hbmod then
|
|
|
|
local h = tonumber(hbhunger.hunger[puncher:get_player_name()])
|
|
|
|
h = math.min(h + 4, 30)
|
|
|
|
hbhunger.hunger[puncher:get_player_name()] = h
|
|
|
|
sound = "hbhunger_eat_generic"
|
|
|
|
-- Sofar's stamina mod
|
|
elseif stmod then
|
|
|
|
stamina.change(puncher, 4)
|
|
|
|
sound = "stamina_eat"
|
|
|
|
-- mineclone2 mcl_hunger mod
|
|
elseif mclhunger then
|
|
|
|
local h = mcl_hunger.get_hunger(puncher)
|
|
|
|
h = math.min(h + 4, 20)
|
|
|
|
mcl_hunger.set_hunger(puncher, h)
|
|
|
|
sound = "mcl_hunger_bite"
|
|
|
|
-- none of the above found? add to health instead
|
|
else
|
|
|
|
local h = puncher:get_hp()
|
|
|
|
h = math.min(h + 4, 20)
|
|
|
|
puncher:set_hp(h)
|
|
end
|
|
|
|
minetest.sound_play(sound, {pos = pos, gain = 0.7, max_hear_distance = 5}, true)
|
|
end
|
|
|
|
-- pie registration function
|
|
|
|
pie.register_pie = function(pie, desc)
|
|
|
|
-- full pie
|
|
|
|
local nodebox = {
|
|
type = "fixed",
|
|
fixed = {-0.45, -0.5, -0.45, 0.45, 0, 0.45}}
|
|
|
|
local tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_side.png"}
|
|
|
|
minetest.register_node(":pie:" .. pie .. "_0", {
|
|
description = desc,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = false,
|
|
tiles = tiles,
|
|
inventory_image = pie .. "_inv.png",
|
|
wield_image = pie .. "_inv.png",
|
|
drawtype = "nodebox",
|
|
node_box = nodebox,
|
|
sounds = cake_sound,
|
|
|
|
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
|
|
|
on_punch = function(pos, node, puncher, pointed_thing)
|
|
replace_pie(node, puncher, pos)
|
|
end
|
|
})
|
|
|
|
-- 3/4 pie
|
|
|
|
nodebox = {
|
|
type = "fixed",
|
|
fixed = {-0.45, -0.5, -0.25, 0.45, 0, 0.45}}
|
|
|
|
tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_inside.png"}
|
|
|
|
if quarters then
|
|
|
|
nodebox.fixed = {
|
|
{-0.45, -0.5, -0.45, 0, 0, 0.45},
|
|
{-0.45, -0.5, 0, 0.45, 0, 0.45}}
|
|
|
|
tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_side_inside.png^[transformFX",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_side_inside.png"}
|
|
end
|
|
|
|
minetest.register_node(":pie:" .. pie .. "_1", {
|
|
description = "3/4 " .. desc,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
tiles = tiles,
|
|
groups = {not_in_creative_inventory = 1},
|
|
drop = {},
|
|
drawtype = "nodebox",
|
|
node_box = nodebox,
|
|
sounds = cake_sound,
|
|
|
|
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
|
|
|
on_punch = function(pos, node, puncher, pointed_thing)
|
|
replace_pie(node, puncher, pos)
|
|
end
|
|
})
|
|
|
|
-- 1/2 pie
|
|
|
|
nodebox = {
|
|
type = "fixed",
|
|
fixed = {-0.45, -0.5, 0.0, 0.45, 0, 0.45}}
|
|
|
|
tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_inside.png"}
|
|
|
|
if quarters then
|
|
|
|
nodebox.fixed = {-0.45, -0.5, -.45, 0, 0, 0.45}
|
|
|
|
tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_inside.png",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_side.png"}
|
|
end
|
|
|
|
minetest.register_node(":pie:" .. pie .. "_2", {
|
|
description = "Half " .. desc,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
tiles = tiles,
|
|
groups = {not_in_creative_inventory = 1},
|
|
drop = {},
|
|
drawtype = "nodebox",
|
|
node_box = nodebox,
|
|
sounds = cake_sound,
|
|
|
|
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
|
|
|
on_punch = function(pos, node, puncher, pointed_thing)
|
|
replace_pie(node, puncher, pos)
|
|
end
|
|
})
|
|
|
|
-- 1/4 pie
|
|
|
|
tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_side.png",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_inside.png"}
|
|
|
|
nodebox = {
|
|
type = "fixed",
|
|
fixed = {-0.45, -0.5, 0.25, 0.45, 0, 0.45}}
|
|
|
|
if quarters then
|
|
|
|
nodebox.fixed = {-0.45, -0.5, 0.0, 0.0, 0, 0.45}
|
|
|
|
tiles = {
|
|
pie .. "_top.png", pie .. "_bottom.png", pie .. "_inside.png",
|
|
pie .. "_side.png", pie .. "_side.png", pie .. "_inside.png"}
|
|
end
|
|
|
|
minetest.register_node(":pie:" .. pie .. "_3", {
|
|
description = "Piece of " .. desc,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
use_texture_alpha = "clip",
|
|
sunlight_propagates = true,
|
|
tiles = tiles,
|
|
groups = {not_in_creative_inventory = 1},
|
|
drop = {},
|
|
drawtype = "nodebox",
|
|
node_box = nodebox,
|
|
sounds = cake_sound,
|
|
|
|
on_rotate = screwdriver_exists and screwdriver.rotate_simple,
|
|
|
|
on_punch = function(pos, node, puncher, pointed_thing)
|
|
replace_pie(node, puncher, pos)
|
|
end
|
|
})
|
|
end
|
|
|
|
-- register cakes
|
|
|
|
pie.register_pie("pie", "Cake")
|
|
pie.register_pie("choc", "Chocolate Cake")
|
|
pie.register_pie("scsk", "Strawberry Cheesecake")
|
|
pie.register_pie("coff", "Coffee Cake")
|
|
pie.register_pie("rvel", "Red Velvet Cake")
|
|
pie.register_pie("meat", "Meat Cake")
|
|
pie.register_pie("bana", "Banana Cake")
|
|
pie.register_pie("brpd", "Bread Pudding")
|
|
pie.register_pie("orange", "Orange Pie")
|
|
|
|
-- ingredients
|
|
|
|
local mcl = minetest.get_modpath("mcl_dye")
|
|
local i_sugar = mcl and "mcl_core:sugar" or "group:food_sugar"
|
|
local i_wheat = mcl and "mcl_farming:wheat_item" or "group:food_wheat"
|
|
local i_flour = mcl and "mcl_farming:bread" or "group:food_flour"
|
|
local i_egg = mcl and "mcl_throwing:egg" or "group:food_egg"
|
|
local i_milk = mcl and "mcl_mobitems:milk_bucket" or "group:food_milk"
|
|
local i_cocoa = mcl and "mcl_dye:brown" or "group:food_cocoa"
|
|
local i_strawberry = mcl and "mcl_dye:red" or "group:food_strawberry"
|
|
local i_coffee = mcl and "mcl_dye:black" or "group:food_coffee"
|
|
local i_cheese = mcl and "mcl_dye:yellow" or "group:food_cheese"
|
|
local i_red = mcl and "mcl_dye:red" or "dye:red"
|
|
local i_meat = mcl and "mcl_mobitems:beef" or "group:food_meat_raw"
|
|
local i_banana = mcl and "mcl_dye:yellow" or "group:food_banana"
|
|
local i_bread = mcl and "mcl_farming:bread" or "group:food_bread"
|
|
local i_orange = mcl and "mcl_dye:orange" or "group:food_orange"
|
|
local i_bucket = mcl and "mcl_buckets:bucket_empty" or "bucket:bucket_empty"
|
|
local i_bottle = mcl and "mcl_potions:glass_bottle" or "vessels:glass_bottle"
|
|
|
|
-- replacement items
|
|
|
|
local replace_these = {
|
|
{"mobs:bucket_milk", i_bucket},
|
|
{"mobs:wooden_bucket_milk", "wooden_bucket:bucket_wood_empty"},
|
|
{"mcl_mobitems:milk_bucket", i_bucket},
|
|
{"petz:bucket_milk", i_bucket},
|
|
{"cucina_vegana:soy_milk", i_bottle}
|
|
}
|
|
|
|
-- normal cake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:pie_0",
|
|
recipe = {
|
|
{i_sugar, i_milk, i_sugar},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- chocolate cake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:choc_0",
|
|
recipe = {
|
|
{i_cocoa, i_milk, i_cocoa},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- strawberry cheesecake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:scsk_0",
|
|
recipe = {
|
|
{i_strawberry, i_milk, i_strawberry},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- coffee cake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:coff_0",
|
|
recipe = {
|
|
{i_coffee, i_milk, i_coffee},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- red velvet cake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:rvel_0",
|
|
recipe = {
|
|
{i_cocoa, i_milk, i_red},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_flour, i_cheese, i_flour}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- meat cake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:meat_0",
|
|
recipe = {
|
|
{i_meat, i_egg, i_meat},
|
|
{i_wheat, i_wheat, i_wheat}
|
|
}
|
|
})
|
|
|
|
-- banana cake recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:bana_0",
|
|
recipe = {
|
|
{i_banana, i_milk, i_banana},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- bread pudding recipe
|
|
|
|
minetest.register_craft({
|
|
output = "pie:brpd_0",
|
|
recipe = {
|
|
{i_bread, i_milk, i_bread},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- orange pie
|
|
|
|
minetest.register_craft({
|
|
output = "pie:orange_0",
|
|
recipe = {
|
|
{i_orange, i_milk, i_orange},
|
|
{i_sugar, i_egg, i_sugar},
|
|
{i_wheat, i_flour, i_wheat}
|
|
},
|
|
replacements = replace_these
|
|
})
|
|
|
|
-- add lucky blocks
|
|
|
|
if minetest.get_modpath("lucky_block") then
|
|
|
|
lucky_block:add_blocks({
|
|
{"nod", "pie:pie_0", 0},
|
|
{"nod", "pie:choc_0", 0},
|
|
{"nod", "pie:coff_0", 0},
|
|
{"tro", "pie:pie_0"},
|
|
{"nod", "pie:rvel_0", 0},
|
|
{"nod", "pie:scsk_0", 0},
|
|
{"nod", "pie:bana_0", 0},
|
|
{"nod", "pie:orange_0", 0},
|
|
{"tro", "pie:orange_0", "default_place_node_hard", true},
|
|
{"nod", "pie:brpd_0", 0},
|
|
{"nod", "pie:meat_0", 0},
|
|
{"lig"}
|
|
})
|
|
end
|
|
|
|
-- some aliases for older pie mod by Mitroman
|
|
|
|
minetest.register_alias("pie:apie_0", "pie:pie_0")
|
|
minetest.register_alias("pie:apie_1", "pie:pie_1")
|
|
minetest.register_alias("pie:apie_2", "pie:pie_2")
|
|
minetest.register_alias("pie:apie_3", "pie:pie_3")
|
|
minetest.register_alias("pie:piebatter", "pie:pie_0")
|
|
minetest.register_alias("pie:apiebatter", "pie:pie_0")
|
|
minetest.register_alias("pie:amuffinbatter", "pie:pie_0")
|
|
minetest.register_alias("pie:applemuffin", "pie:pie_0")
|
|
minetest.register_alias("pie:sugar", "farming:sugar")
|
|
minetest.register_alias("pie:knife", "default:sword_steel")
|
|
|
|
print("[MOD] Pie loaded")
|