156 lines
3.3 KiB
Lua
156 lines
3.3 KiB
Lua
-- FOOD MOD
|
|
-- A mod written by rubenwardy that adds
|
|
-- food to the minetest game
|
|
-- =====================================
|
|
-- >> food/api.lua
|
|
-- The supporting api for the mod
|
|
-- =====================================
|
|
|
|
-- Boilerplate to support localized strings if intllib mod is installed.
|
|
S = 0
|
|
if (intllib) then
|
|
dofile(minetest.get_modpath("intllib").."/intllib.lua")
|
|
S = intllib.Getter(minetest.get_current_modname())
|
|
else
|
|
S = function ( s ) return s end
|
|
end
|
|
|
|
food = {
|
|
modules = {},
|
|
disabled_modules = {},
|
|
debug = false,
|
|
version = 2.3
|
|
}
|
|
|
|
-- Checks for external content, and adds support
|
|
function food.support(group, item)
|
|
if type(group) == "table" then
|
|
for i = 1, #group do
|
|
food.support(group[i], item)
|
|
end
|
|
return
|
|
end
|
|
if type(item) == "table" then
|
|
for i = 1, #item do
|
|
food.support(group, item[i])
|
|
end
|
|
return
|
|
end
|
|
|
|
local idx = string.find(item, ":")
|
|
if idx <= 1 then
|
|
error("[Food Error] food.support - error in item name ('" .. item .. "')")
|
|
end
|
|
mod = string.sub(item, 1, idx - 1)
|
|
|
|
if not minetest.get_modpath(mod) then
|
|
if food.debug then
|
|
print("[Food Debug] Mod '"..mod.."' is not installed")
|
|
end
|
|
return
|
|
end
|
|
|
|
local data = minetest.registered_items[item]
|
|
if not data then
|
|
print("[Food Warning] Item '"..item.."' not found")
|
|
return
|
|
end
|
|
|
|
|
|
food.disable(group)
|
|
|
|
-- Add group
|
|
g = {}
|
|
if data.groups then
|
|
for k, v in pairs(data.groups) do
|
|
g[k] = v
|
|
end
|
|
end
|
|
g["food_"..group] = 1
|
|
minetest.override_item(item, {groups = g})
|
|
end
|
|
|
|
function food.disable(name)
|
|
if type(name) == "table" then
|
|
for i = 1, #name do
|
|
food.disable(name[i])
|
|
end
|
|
return
|
|
end
|
|
food.disabled_modules[name] = true
|
|
end
|
|
|
|
function food.disable_if(mod, name)
|
|
if minetest.get_modpath(mod) then
|
|
food.disable(name)
|
|
end
|
|
end
|
|
|
|
-- Adds a module
|
|
function food.module(name, func, ingred)
|
|
if food.disabled_modules[name] then
|
|
return
|
|
end
|
|
if ingred then
|
|
for name, def in pairs(minetest.registered_items) do
|
|
local g = def.groups and def.groups["food_"..name] or 0
|
|
if g > 0 then
|
|
print("cancelled")
|
|
return
|
|
end
|
|
end
|
|
|
|
if food.debug then
|
|
print("[Food Debug] Registering " .. name .. " fallback definition")
|
|
end
|
|
elseif food.debug then
|
|
print("[Food Debug] Module " .. name)
|
|
end
|
|
func()
|
|
end
|
|
|
|
-- Checks for hunger mods to register food on
|
|
function food.item_eat(amt)
|
|
if minetest.get_modpath("diet") then
|
|
return diet.item_eat(amt)
|
|
elseif minetest.get_modpath("hud") then
|
|
return hud.item_eat(amt)
|
|
else
|
|
return minetest.item_eat(amt)
|
|
end
|
|
end
|
|
|
|
-- Registers craft item or node depending on settings
|
|
function food.register(name, data, mod)
|
|
if (minetest.setting_getbool("food_use_2d") or (mod ~= nil and minetest.setting_getbool("food_"..mod.."_use_2d"))) then
|
|
minetest.register_craftitem(name,{
|
|
description = data.description,
|
|
inventory_image = data.inventory_image,
|
|
groups = data.groups,
|
|
on_use = data.on_use
|
|
})
|
|
else
|
|
local newdata = {
|
|
description = data.description,
|
|
tiles = data.tiles,
|
|
groups = data.groups,
|
|
on_use = data.on_use,
|
|
walkable = false,
|
|
sunlight_propagates = true,
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
node_box = data.node_box
|
|
}
|
|
if (minetest.setting_getbool("food_2d_inv_image")) then
|
|
newdata.inventory_image = data.inventory_image
|
|
end
|
|
minetest.register_node(name,newdata)
|
|
end
|
|
end
|
|
|
|
-- Allows for overriding in the future
|
|
function food.craft(craft)
|
|
minetest.register_craft(craft)
|
|
end
|
|
|