mods that hopefully work for a TechAge-based pack

This commit is contained in:
2026-09-09 06:27:51 -06:00
parent 4e6b08d194
commit c27db2a537
6234 changed files with 375578 additions and 0 deletions
+258
View File
@@ -0,0 +1,258 @@
local nutrition_mod = dofile(core.get_modpath("nutritional") .. "/api.lua")
local hunger_ng_exist = core.get_modpath("hunger_ng") ~= nil
local hunger_mcl_exist = core.get_modpath("mcl_hunger") ~= nil
local hbhunger_exist = core.get_modpath("hbhunger") ~= nil
local active_mod
local hungermods = {
mcl = {
get_max_hunger = function(_name)
return 20 --currently hardcoded into mcl_hunger
end,
get_hunger = function(_name, player)
return mcl_hunger.get_hunger(player)
end,
set_hunger = function(player, hunger)
mcl_hunger.set_hunger(player, hunger, true)
end,
alter_hunger = function(_name, player, value, hunger)
mcl_hunger.set_hunger(player, hunger + value, true)
end
},
hunger_ng = {
get_max_hunger = function(name)
local info = hunger_ng.get_hunger_information(name)
if not info.invalid then
return info.maximum.hunger
end
end,
get_hunger = function(name, _player)
local info = hunger_ng.get_hunger_information(name)
if not info.invalid then
return info.hunger.exact
end
end,
set_hunger = function(name, _player, value)
--- I am not sure, but whatever, not using this function anyway
hunger_ng.interoperability.set_data(name, {hunger={
floored = math.floor(value),
ceiled = math.ceil(value),
exact = value,
}})
end,
alter_hunger = function(name, _player, value, _hunger)
hunger_ng.alter_hunger(name, value, 'nutritional')
end
},
hbhunger = {
get_hunger = function(_name, player)
return hbhunger.get_hunger_raw(player)
end,
set_hunger= function(name, _player, value)
hbhunger.hunger[name] = value
hbhunger.set_hunger_raw(player)
end,
alter_hunger = function(name, _player, value, hunger)
hbhunger.hunger[name] = value + hunger
hbhunger.set_hunger_raw(player)
end,
get_max_hunger= function(name)
return hbhunger.SAT_MAX
end
},
}
if hunger_mcl_exist and mcl_hunger.get_active() then
active_mod = hungermods["mcl"]
elseif hunger_ng_exist then
active_mod = hungermods["hunger_ng"]
elseif hbhunger_exist then
active_mod = hungermods["hbhunger"]
else
return
end
local categories = {
"vegetable", -- 🥕 Beetroot, Potato, Carrot
"fruit", -- 🍎
"carbs",-- 🍞 Whole Grains & Starches
"fats", -- 🍯 Cooked fatty meats and sugar items, Cookies, Cake, Pumpkin Pie, Honey Bottle
"meat", -- 🍖
"fish", -- 🐟 Fish & Seafood
"dairy", -- 🥛 Milk (buckets), Cake (contains milk), Pumpkin Pie (milk)
"drink", -- 💧 water, milk (buckets)
"mineral", -- ✨ rare, micronutrients : gold, Glow Berries, chorus fruit, tropical fish, Dried Kelp,
"poison", -- ☠️ Pufferfish, Spider Eye
}
core.register_on_joinplayer(function(player)
local name = player:get_player_name()
nutrition_mod.hud[name] = {}
for i, cat in ipairs(categories) do
local id = player:hud_add({
hud_elem_type = "image",
position = {x = 0.5, y = 1},
alignment = {x = 0, y = -1},
offset = {
x = (i) * 24 + 2, -- centers the row
y = -85-24
},
text = "nutri_" .. cat .. "_empty.png",
scale = {x = 3, y = 3},
z_index = 100,
})
nutrition_mod.hud[name][cat] = id
end
nutrition_mod.update_hud(player)
end)
core.register_on_respawnplayer(function(player)
if player:is_player() ~= true then return end
local player_name = player:get_player_name()
for i, cat in ipairs(categories) do
nutrition_mod.add(player, cat, 2)
end
nutrition_mod.update_hud(player)
end)
local old = minetest.do_item_eat
on_item_eat = function(hp_change, replace_with_item, itemstack, player, pointed_thing)
if player:is_player() ~= true then return end
local player_name = player:get_player_name()
local MAX_HUNGER = active_mod.get_max_hunger(player_name)
local hunger_step = MAX_HUNGER / 20
local hunger = active_mod.get_hunger(player_name, player)
if hunger <= (MAX_HUNGER-hunger_step) then
local name = itemstack:get_name()
local categories_player = nutrition_mod.foods[name]
if categories_player then
for _, cat in ipairs(categories_player) do
nutrition_mod.add(player, cat, 1)
end
end
end
nutrition_mod.update_hud(player)
end
-- for some games register_on_item_eat doesnt work?
minetest.do_item_eat = function(hp_change, replace_with_item, itemstack, player, pointed_thing)
on_item_eat(hp_change, replace_with_item, itemstack, player, pointed_thing)
return old(hp_change, replace_with_item, itemstack, player, pointed_thing)
end
core.register_on_item_eat(on_item_eat)
local timer = 0
core.register_globalstep(function(dtime)
timer = timer + dtime
if timer < 1 then return end -- run once per second
timer = 0
for _, player in ipairs(core.get_connected_players()) do
local data = nutrition_mod.get(player)
local name = player:get_player_name()
local MAX_HUNGER = active_mod.get_max_hunger(name)
local hunger_step = MAX_HUNGER / 20
local hunger = active_mod.get_hunger(name, player)
-- local hunger = mcl_hunger.get_hunger(player)
-- core.chat_send_all(hunger)
if data and hunger <= (MAX_HUNGER-hunger_step) then
for cat, hud_id in pairs(nutrition_mod.hud[name]) do
local val = data[cat] or 0
if val >= 1 then
--mcl_hunger.set_hunger(player, hunger + 1, true)
active_mod.alter_hunger(name, player, hunger_step, hunger)
nutrition_mod.add(player, cat, -1)
nutrition_mod.update_hud(player)
break
end
end
end
end
end)
-- hides the hunger bar
-- core.register_on_joinplayer(function(player)
-- vl_hudbars.hide(player, "hunger")
-- end)
-- compatibility for hunger_ng
-- local info = hunger_ng.get_hunger_information(name)
-- if not info.invalid then
-- info.hunger.exact
-- info.maximum.hunger
-- hunger_ng.alter_hunger(name, 1, 'nutrient')
-- info:
-- {
-- player_name = 'Foobar',
-- hunger = {
-- floored = 18,
-- ceiled = 19
-- exact = 18.928,
-- disabled = false,
-- enabled = true
-- },
-- maximum = {
-- hunger = 20,
-- health = 20,
-- breath = 11
-- },
-- effects = {
-- starving = { enabled = true, status = false },
-- healing = { enabled = true, status = true },
-- current_breath = 11
-- },
-- timestamps = {
-- last_eaten = 1549670580,
-- request = 1549671198
-- }
-- }
-- compat minetest_hbhunger
-- hbhunger.get_hunger_raw(player)
-- hbhunger.hunger[name] = hbhunger.SAT_INIT
-- hbhunger.set_hunger_raw(player)
-- hbhunger.SAT_MAX
-- compat stamina
-- this mod sucks
-- stamina.get_saturation(player)
-- stamina.change_saturation(player, 1)
-- stamina.settings.visual_max??
--- compat game exile
-- maybe not
-- local meta = player:get_meta()
-- local st = player_api.get_state(player)
-- meta:set_int("hunger", 1000)
-- st:add("hunger", 1000)
-- compat game Repixture
-- hunger.MAX_HUNGER
-- hunger.get_hunger(playername)
-- hunger.set_hunger(playername, hunger)