summaryrefslogtreecommitdiff
path: root/food/init.lua
diff options
context:
space:
mode:
Diffstat (limited to 'food/init.lua')
-rw-r--r--food/init.lua155
1 files changed, 155 insertions, 0 deletions
diff --git a/food/init.lua b/food/init.lua
new file mode 100644
index 0000000..19d019f
--- /dev/null
+++ b/food/init.lua
@@ -0,0 +1,155 @@
+-- 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
+