Rename hbhunger to mcl_hunger

This commit is contained in:
Wuzzy 2017-02-16 14:19:34 +01:00
parent 1e759365ca
commit c000f8c2a4
19 changed files with 515 additions and 560 deletions

@ -1,470 +0,0 @@
-- Keep these for backwards compatibility
function hbhunger.save_hunger(player)
hbhunger.set_hunger_raw(player)
end
function hbhunger.load_hunger(player)
hbhunger.get_hunger_raw(player)
end
-- wrapper for minetest.item_eat (this way we make sure other mods can't break this one)
local org_eat = core.do_item_eat
core.do_item_eat = function(hp_change, replace_with_item, itemstack, user, pointed_thing)
local old_itemstack = itemstack
itemstack = hbhunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
for _, callback in pairs(core.registered_on_item_eats) do
local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing, old_itemstack)
if result then
return result
end
end
return itemstack
end
-- food functions
local food = hbhunger.food
function hbhunger.register_food(name, hunger_change, replace_with_item, poisen, heal, sound)
food[name] = {}
food[name].saturation = hunger_change -- hunger points added
food[name].replace = replace_with_item -- what item is given back after eating
food[name].poisen = poisen -- time its poisening
food[name].healing = heal -- amount of HP
food[name].sound = sound -- special sound that is played when eating
end
function hbhunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
local item = itemstack:get_name()
local def = food[item]
if not def then
def = {}
if type(hp_change) ~= "number" then
hp_change = 1
core.log("error", "Wrong on_use() definition for item '" .. item .. "'")
end
def.saturation = hp_change
def.replace = replace_with_item
end
local func = hbhunger.item_eat(def.saturation, def.replace, def.poisen, def.healing, def.sound)
return func(itemstack, user, pointed_thing)
end
-- Poison player
local function poisenp(tick, time, time_left, player)
-- First check if player is still there
if not player:is_player() then
return
end
time_left = time_left + tick
if time_left < time then
minetest.after(tick, poisenp, tick, time, time_left, player)
else
hbhunger.poisonings[player:get_player_name()] = hbhunger.poisonings[player:get_player_name()] - 1
if hbhunger.poisonings[player:get_player_name()] <= 0 then
-- Reset HUD bar color
hb.change_hudbar(player, "health", nil, nil, "hudbars_icon_health.png", nil, "hudbars_bar_health.png")
end
end
if player:get_hp()-1 > 0 then
player:set_hp(player:get_hp()-1)
end
end
function hbhunger.item_eat(hunger_change, replace_with_item, poisen, heal, sound)
return function(itemstack, user, pointed_thing)
if itemstack:take_item() ~= nil and user ~= nil then
local name = user:get_player_name()
local h = tonumber(hbhunger.hunger[name])
local hp = user:get_hp()
minetest.sound_play({name = sound or "hbhunger_eat_generic", gain = 1}, {pos=user:getpos(), max_hear_distance = 16})
-- Saturation
if h < 20 and hunger_change then
h = h + hunger_change
if h > 20 then h = 20 end
hbhunger.hunger[name] = h
hbhunger.set_hunger_raw(user)
end
-- Healing
if hp < 20 and heal then
hp = hp + heal
if hp > 20 then hp = 20 end
user:set_hp(hp)
end
-- Poison
if poisen then
-- Set poison bar
hb.change_hudbar(user, "health", nil, nil, "hbhunger_icon_health_poison.png", nil, "hbhunger_bar_health_poison.png")
hbhunger.poisonings[name] = hbhunger.poisonings[name] + 1
poisenp(1, poisen, 0, user)
end
--sound:eat
itemstack:add_item(replace_with_item)
end
return itemstack
end
end
if minetest.get_modpath("default") ~= nil then
hbhunger.register_food("default:apple", 2)
end
if minetest.get_modpath("flowers") ~= nil then
hbhunger.register_food("flowers:mushroom_brown", 1)
hbhunger.register_food("flowers:mushroom_red", 1, "", 3)
end
if minetest.get_modpath("farming") ~= nil then
hbhunger.register_food("farming:bread", 4)
end
if minetest.get_modpath("mobs") ~= nil then
if mobs.mod ~= nil and mobs.mod == "redo" then
hbhunger.register_food("mobs:cheese", 4)
hbhunger.register_food("mobs:meat", 8)
hbhunger.register_food("mobs:meat_raw", 4)
hbhunger.register_food("mobs:rat_cooked", 4)
hbhunger.register_food("mobs:honey", 2)
hbhunger.register_food("mobs:pork_raw", 3, "", 3)
hbhunger.register_food("mobs:pork_cooked", 8)
hbhunger.register_food("mobs:chicken_cooked", 6)
hbhunger.register_food("mobs:chicken_raw", 2, "", 3)
hbhunger.register_food("mobs:chicken_egg_fried", 2)
if minetest.get_modpath("bucket") then
hbhunger.register_food("mobs:bucket_milk", 3, "bucket:bucket_empty")
end
else
hbhunger.register_food("mobs:meat", 6)
hbhunger.register_food("mobs:meat_raw", 3)
hbhunger.register_food("mobs:rat_cooked", 5)
end
end
if minetest.get_modpath("moretrees") ~= nil then
hbhunger.register_food("moretrees:coconut_milk", 1)
hbhunger.register_food("moretrees:raw_coconut", 2)
hbhunger.register_food("moretrees:acorn_muffin", 3)
hbhunger.register_food("moretrees:spruce_nuts", 1)
hbhunger.register_food("moretrees:pine_nuts", 1)
hbhunger.register_food("moretrees:fir_nuts", 1)
end
if minetest.get_modpath("dwarves") ~= nil then
hbhunger.register_food("dwarves:beer", 2)
hbhunger.register_food("dwarves:apple_cider", 1)
hbhunger.register_food("dwarves:midus", 2)
hbhunger.register_food("dwarves:tequila", 2)
hbhunger.register_food("dwarves:tequila_with_lime", 2)
hbhunger.register_food("dwarves:sake", 2)
end
if minetest.get_modpath("animalmaterials") ~= nil then
hbhunger.register_food("animalmaterials:milk", 2)
hbhunger.register_food("animalmaterials:meat_raw", 3)
hbhunger.register_food("animalmaterials:meat_pork", 3)
hbhunger.register_food("animalmaterials:meat_beef", 3)
hbhunger.register_food("animalmaterials:meat_chicken", 3)
hbhunger.register_food("animalmaterials:meat_lamb", 3)
hbhunger.register_food("animalmaterials:meat_venison", 3)
hbhunger.register_food("animalmaterials:meat_undead", 3, "", 3)
hbhunger.register_food("animalmaterials:meat_toxic", 3, "", 5)
hbhunger.register_food("animalmaterials:meat_ostrich", 3)
hbhunger.register_food("animalmaterials:fish_bluewhite", 2)
hbhunger.register_food("animalmaterials:fish_clownfish", 2)
end
if minetest.get_modpath("fishing") ~= nil then
hbhunger.register_food("fishing:fish_raw", 2)
hbhunger.register_food("fishing:fish_cooked", 5)
hbhunger.register_food("fishing:sushi", 6)
hbhunger.register_food("fishing:shark", 4)
hbhunger.register_food("fishing:shark_cooked", 8)
hbhunger.register_food("fishing:pike", 4)
hbhunger.register_food("fishing:pike_cooked", 8)
end
if minetest.get_modpath("glooptest") ~= nil then
hbhunger.register_food("glooptest:kalite_lump", 1)
end
if minetest.get_modpath("bushes") ~= nil then
hbhunger.register_food("bushes:sugar", 1)
hbhunger.register_food("bushes:strawberry", 2)
hbhunger.register_food("bushes:berry_pie_raw", 3)
hbhunger.register_food("bushes:berry_pie_cooked", 4)
hbhunger.register_food("bushes:basket_pies", 15)
end
if minetest.get_modpath("bushes_classic") then
-- bushes_classic mod, as found in the plantlife modpack
local berries = {
"strawberry",
"blackberry",
"blueberry",
"raspberry",
"gooseberry",
"mixed_berry"}
for _, berry in ipairs(berries) do
if berry ~= "mixed_berry" then
hbhunger.register_food("bushes:"..berry, 1)
end
hbhunger.register_food("bushes:"..berry.."_pie_raw", 2)
hbhunger.register_food("bushes:"..berry.."_pie_cooked", 5)
hbhunger.register_food("bushes:basket_"..berry, 15)
end
end
if minetest.get_modpath("mushroom") ~= nil then
hbhunger.register_food("mushroom:brown", 1)
hbhunger.register_food("mushroom:red", 1, "", 3)
-- mushroom potions: red = strong poison, brown = light restorative
if minetest.get_modpath("vessels") then
hbhunger.register_food("mushroom:brown_essence", 1, "vessels:glass_bottle", nil, 4)
hbhunger.register_food("mushroom:poison", 1, "vessels:glass_bottle", 10)
end
end
if minetest.get_modpath("docfarming") ~= nil then
hbhunger.register_food("docfarming:carrot", 3)
hbhunger.register_food("docfarming:cucumber", 2)
hbhunger.register_food("docfarming:corn", 3)
hbhunger.register_food("docfarming:potato", 4)
hbhunger.register_food("docfarming:bakedpotato", 5)
hbhunger.register_food("docfarming:raspberry", 3)
end
if minetest.get_modpath("farming_plus") ~= nil then
hbhunger.register_food("farming_plus:carrot_item", 3)
hbhunger.register_food("farming_plus:banana", 2)
hbhunger.register_food("farming_plus:orange_item", 2)
hbhunger.register_food("farming:pumpkin_bread", 4)
hbhunger.register_food("farming_plus:strawberry_item", 2)
hbhunger.register_food("farming_plus:tomato_item", 2)
hbhunger.register_food("farming_plus:potato_item", 4)
hbhunger.register_food("farming_plus:rhubarb_item", 2)
end
if minetest.get_modpath("mtfoods") ~= nil then
hbhunger.register_food("mtfoods:dandelion_milk", 1)
hbhunger.register_food("mtfoods:sugar", 1)
hbhunger.register_food("mtfoods:short_bread", 4)
hbhunger.register_food("mtfoods:cream", 1)
hbhunger.register_food("mtfoods:chocolate", 2)
hbhunger.register_food("mtfoods:cupcake", 2)
hbhunger.register_food("mtfoods:strawberry_shortcake", 2)
hbhunger.register_food("mtfoods:cake", 3)
hbhunger.register_food("mtfoods:chocolate_cake", 3)
hbhunger.register_food("mtfoods:carrot_cake", 3)
hbhunger.register_food("mtfoods:pie_crust", 3)
hbhunger.register_food("mtfoods:apple_pie", 3)
hbhunger.register_food("mtfoods:rhubarb_pie", 2)
hbhunger.register_food("mtfoods:banana_pie", 3)
hbhunger.register_food("mtfoods:pumpkin_pie", 3)
hbhunger.register_food("mtfoods:cookies", 2)
hbhunger.register_food("mtfoods:mlt_burger", 5)
hbhunger.register_food("mtfoods:potato_slices", 2)
hbhunger.register_food("mtfoods:potato_chips", 3)
--mtfoods:medicine
hbhunger.register_food("mtfoods:casserole", 3)
hbhunger.register_food("mtfoods:glass_flute", 2)
hbhunger.register_food("mtfoods:orange_juice", 2)
hbhunger.register_food("mtfoods:apple_juice", 2)
hbhunger.register_food("mtfoods:apple_cider", 2)
hbhunger.register_food("mtfoods:cider_rack", 2)
end
if minetest.get_modpath("fruit") ~= nil then
hbhunger.register_food("fruit:apple", 2)
hbhunger.register_food("fruit:pear", 2)
hbhunger.register_food("fruit:bananna", 3)
hbhunger.register_food("fruit:orange", 2)
end
if minetest.get_modpath("mush45") ~= nil then
hbhunger.register_food("mush45:meal", 4)
end
if minetest.get_modpath("seaplants") ~= nil then
hbhunger.register_food("seaplants:kelpgreen", 1)
hbhunger.register_food("seaplants:kelpbrown", 1)
hbhunger.register_food("seaplants:seagrassgreen", 1)
hbhunger.register_food("seaplants:seagrassred", 1)
hbhunger.register_food("seaplants:seasaladmix", 6)
hbhunger.register_food("seaplants:kelpgreensalad", 1)
hbhunger.register_food("seaplants:kelpbrownsalad", 1)
hbhunger.register_food("seaplants:seagrassgreensalad", 1)
hbhunger.register_food("seaplants:seagrassgreensalad", 1)
end
if minetest.get_modpath("mobfcooking") ~= nil then
hbhunger.register_food("mobfcooking:cooked_pork", 6)
hbhunger.register_food("mobfcooking:cooked_ostrich", 6)
hbhunger.register_food("mobfcooking:cooked_beef", 6)
hbhunger.register_food("mobfcooking:cooked_chicken", 6)
hbhunger.register_food("mobfcooking:cooked_lamb", 6)
hbhunger.register_food("mobfcooking:cooked_venison", 6)
hbhunger.register_food("mobfcooking:cooked_fish", 6)
end
if minetest.get_modpath("creatures") ~= nil then
hbhunger.register_food("creatures:meat", 6)
hbhunger.register_food("creatures:flesh", 3)
hbhunger.register_food("creatures:rotten_flesh", 3, "", 3)
end
if minetest.get_modpath("ethereal") then
hbhunger.register_food("ethereal:strawberry", 1)
hbhunger.register_food("ethereal:banana", 4)
hbhunger.register_food("ethereal:pine_nuts", 1)
hbhunger.register_food("ethereal:bamboo_sprout", 0, "", 3)
hbhunger.register_food("ethereal:fern_tubers", 1)
hbhunger.register_food("ethereal:banana_bread", 7)
hbhunger.register_food("ethereal:mushroom_plant", 2)
hbhunger.register_food("ethereal:coconut_slice", 2)
hbhunger.register_food("ethereal:golden_apple", 4, "", nil, 10)
hbhunger.register_food("ethereal:wild_onion_plant", 2)
hbhunger.register_food("ethereal:mushroom_soup", 4, "ethereal:bowl")
hbhunger.register_food("ethereal:mushroom_soup_cooked", 6, "ethereal:bowl")
hbhunger.register_food("ethereal:hearty_stew", 6, "ethereal:bowl", 3)
hbhunger.register_food("ethereal:hearty_stew_cooked", 10, "ethereal:bowl")
if minetest.get_modpath("bucket") then
hbhunger.register_food("ethereal:bucket_cactus", 2, "bucket:bucket_empty")
end
hbhunger.register_food("ethereal:fish_raw", 2)
hbhunger.register_food("ethereal:fish_cooked", 5)
hbhunger.register_food("ethereal:seaweed", 1)
hbhunger.register_food("ethereal:yellowleaves", 1, "", nil, 1)
hbhunger.register_food("ethereal:sashimi", 4)
hbhunger.register_food("ethereal:orange", 2)
end
if minetest.get_modpath("farming") and farming.mod == "redo" then
hbhunger.register_food("farming:bread", 6)
hbhunger.register_food("farming:potato", 1)
hbhunger.register_food("farming:baked_potato", 6)
hbhunger.register_food("farming:cucumber", 4)
hbhunger.register_food("farming:tomato", 4)
hbhunger.register_food("farming:carrot", 3)
hbhunger.register_food("farming:carrot_gold", 6, "", nil, 8)
hbhunger.register_food("farming:corn", 3)
hbhunger.register_food("farming:corn_cob", 5)
hbhunger.register_food("farming:melon_slice", 2)
hbhunger.register_food("farming:pumpkin_slice", 1)
hbhunger.register_food("farming:pumpkin_bread", 9)
hbhunger.register_food("farming:coffee_cup", 2, "farming:drinking_cup")
hbhunger.register_food("farming:coffee_cup_hot", 3, "farming:drinking_cup", nil, 2)
hbhunger.register_food("farming:cookie", 2)
hbhunger.register_food("farming:chocolate_dark", 3)
hbhunger.register_food("farming:donut", 4)
hbhunger.register_food("farming:donut_chocolate", 6)
hbhunger.register_food("farming:donut_apple", 6)
hbhunger.register_food("farming:raspberries", 1)
hbhunger.register_food("farming:blueberries", 1)
hbhunger.register_food("farming:muffin_blueberry", 4)
if minetest.get_modpath("vessels") then
hbhunger.register_food("farming:smoothie_raspberry", 2, "vessels:drinking_glass")
end
hbhunger.register_food("farming:rhubarb", 1)
hbhunger.register_food("farming:rhubarb_pie", 6)
hbhunger.register_food("farming:beans", 1)
end
if minetest.get_modpath("kpgmobs") ~= nil then
hbhunger.register_food("kpgmobs:uley", 3)
hbhunger.register_food("kpgmobs:meat", 6)
hbhunger.register_food("kpgmobs:rat_cooked", 5)
hbhunger.register_food("kpgmobs:med_cooked", 4)
if minetest.get_modpath("bucket") then
hbhunger.register_food("kpgmobs:bucket_milk", 4, "bucket:bucket_empty")
end
end
if minetest.get_modpath("jkfarming") ~= nil then
hbhunger.register_food("jkfarming:carrot", 3)
hbhunger.register_food("jkfarming:corn", 3)
hbhunger.register_food("jkfarming:melon_part", 2)
hbhunger.register_food("jkfarming:cake", 3)
end
if minetest.get_modpath("jkanimals") ~= nil then
hbhunger.register_food("jkanimals:meat", 6)
end
if minetest.get_modpath("jkwine") ~= nil then
hbhunger.register_food("jkwine:grapes", 2)
hbhunger.register_food("jkwine:winebottle", 1)
end
if minetest.get_modpath("cooking") ~= nil then
hbhunger.register_food("cooking:meat_beef_cooked", 4)
hbhunger.register_food("cooking:fish_bluewhite_cooked", 3)
hbhunger.register_food("cooking:fish_clownfish_cooked", 1)
hbhunger.register_food("cooking:meat_chicken_cooked", 2)
hbhunger.register_food("cooking:meat_cooked", 2)
hbhunger.register_food("cooking:meat_pork_cooked", 3)
hbhunger.register_food("cooking:meat_toxic_cooked", -3)
hbhunger.register_food("cooking:meat_venison_cooked", 3)
hbhunger.register_food("cooking:meat_undead_cooked", 1)
end
-- ferns mod of plantlife_modpack
if minetest.get_modpath("ferns") ~= nil then
hbhunger.register_food("ferns:fiddlehead", 1, "", 1)
hbhunger.register_food("ferns:fiddlehead_roasted", 3)
hbhunger.register_food("ferns:ferntuber_roasted", 3)
hbhunger.register_food("ferns:horsetail_01", 1)
end
if minetest.get_modpath("pizza") ~= nil then
hbhunger.register_food("pizza:pizza", 30, "", nil, 30)
hbhunger.register_food("pizza:pizzaslice", 5, "", nil, 5)
end
if minetest.get_modpath("nssm") then
hbhunger.register_food("nssm:werewolf_leg", 3)
hbhunger.register_food("nssm:heron_leg", 2)
hbhunger.register_food("nssm:chichibios_heron_leg", 4)
hbhunger.register_food("nssm:crocodile_tail", 3)
hbhunger.register_food("nssm:duck_legs", 1)
hbhunger.register_food("nssm:ant_leg", 1)
hbhunger.register_food("nssm:spider_leg", 1)
hbhunger.register_food("nssm:tentacle", 2)
hbhunger.register_food("nssm:worm_flesh", 2, "", 2) -- poisonous
hbhunger.register_food("nssm:amphibian_heart", 1)
hbhunger.register_food("nssm:raw_scrausics_wing", 1)
-- superfoods
hbhunger.register_food("nssm:phoenix_nuggets", 20, "", nil, 20)
hbhunger.register_food("nssm:phoenix_tear", 20, "", nil, 20)
end
-- player-action based hunger changes
function hbhunger.handle_node_actions(pos, oldnode, player, ext)
-- is_fake_player comes from the pipeworks, we are not interested in those
if not player or not player:is_player() or player.is_fake_player == true then
return
end
local name = player:get_player_name()
local exhaus = hbhunger.exhaustion[name]
if exhaus == nil then return end
local new = hbhunger.EXHAUST_PLACE
-- placenode event
if not ext then
new = hbhunger.EXHAUST_DIG
end
-- assume its send by main timer when movement detected
if not pos and not oldnode then
new = hbhunger.EXHAUST_MOVE
end
exhaus = exhaus + new
if exhaus > hbhunger.EXHAUST_LVL then
exhaus = 0
local h = tonumber(hbhunger.hunger[name])
h = h - 1
if h < 0 then h = 0 end
hbhunger.hunger[name] = h
hbhunger.set_hunger_raw(player)
end
hbhunger.exhaustion[name] = exhaus
end
minetest.register_on_placenode(hbhunger.handle_node_actions)
minetest.register_on_dignode(hbhunger.handle_node_actions)

@ -1 +0,0 @@
name = hbhunger

@ -1,6 +1,6 @@
# Hunger with HUD bar [`hbhunger`] # Hunger for MineClone 2 [`mcl_hunger`]
* Version: 0.5.2 * Forked from `hbhunger`, version: 0.5.2
## Using the mod ## Using the mod
@ -11,20 +11,13 @@ starting with “1.”.
## About hunger ## About hunger
This mod adds a hunger mechanic to the game. Players get a new attribute called “satiation”: This mod adds a hunger mechanic to the game. Players get a new attribute called “satiation”:
* A new player starts with 20 satiation points out of 30 * A new player starts with 20 satiation points out of 20
* Actions like digging, placing and walking cause exhaustion, which lower the satiation * Actions like digging, placing and walking cause exhaustion, which lower the satiation
* Every 800 seconds you lose 1 satiation point without doing anything * Every 800 seconds you lose 1 satiation point without doing anything
* At 1 or 0 satiation you will suffer damage and die in case you don't eat something * At 1 or 0 satiation you will suffer damage and die in case you don't eat something
* If your satiation is 16 or higher, you will slowly regenerate health points * If your satiation is 16 or higher, you will slowly regenerate health points
* Eating food will increase your satiation (Duh!) * Eating food will increase your satiation (Duh!)
Important: Eating food will not directly increase your health anymore, as long as the food
item is supported by this mod (see below).
Careful! Some foods may be poisoned. If you eat a poisoned item, you may still get a satiation
boost, but for a brief period you lose health points because of food poisoning. However,
food poisoning can never kill you.
## Statbar mode ## Statbar mode
If you use the statbar mode of the HUD Bars mod, these things are important to know: If you use the statbar mode of the HUD Bars mod, these things are important to know:
As with all mods using HUD Bars, the bread statbar symbols represent the rough percentage As with all mods using HUD Bars, the bread statbar symbols represent the rough percentage
@ -34,44 +27,6 @@ satiation. This is different from the hunger mod by BlockMen.
You gain health at 5.5 symbols or more, as 5.5 symbols correspond to 16 satiation points. You gain health at 5.5 symbols or more, as 5.5 symbols correspond to 16 satiation points.
You *may* lose health at exactly 0.5 symbols, as 0.5 symbols correspond to 1-2 satiation points. You *may* lose health at exactly 0.5 symbols, as 0.5 symbols correspond to 1-2 satiation points.
## Supported food
All mods which add food through standard measures (`minetest.item_eat`) are already
supported automatically. Poisoned food needs special support.
### Known supported food mods
* Apple from Minetest Game [`default`]
* Red and brown mushroom from Minetest Game [`flowers`]
* Bread from Minetest Game [`farming`]
* [`animalmaterials`] (Mob Framework (`mobf` modpack))
* Bushes [`bushes`]
* [`bushes_classic`]
* Creatures [`creatures`]
* [`dwarves`] (beer and such)
* Docfarming [`docfarming`]
* Ethereal / Ethereal NG [`ethereal`]
* Farming Redo [`farming`] by TenPlus1
* Farming plus [`farming_plus`]
* Ferns [`ferns`]
* Fishing [`fishing`]
* [`fruit`]
* Glooptest [`glooptest`]
* JKMod ([`jkanimals`], [`jkfarming`], [`jkwine`])
* [`kpgmobs`]
* [`mobfcooking`]
* [`mooretrees`]
* [`mtfoods`]
* [`mushroom`]
* [`mush45`]
* Seaplants [`sea`]
* Simple mobs [`mobs`]
* Pizza [`pizza`]
* Not So Simple Mobs [`nssm`]
### Supported mods without optional dependency (mods provide their own support)
* Food ([`food`], [`food_basic`])
* Sweet Foods [`food_sweet`]
### Examples ### Examples
* Eating an apple (from Minetest Game) increases your satiation by 2; * Eating an apple (from Minetest Game) increases your satiation by 2;
@ -84,8 +39,8 @@ This mod is free software.
* License: [LGPL v2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html) * License: [LGPL v2.1](https://www.gnu.org/licenses/old-licenses/lgpl-2.1.en.html)
* Author: by Wuzzy (2015-2016) * Author: by Wuzzy (2015-2016)
* Forked from the “Better HUD (and hunger)” mod by BlockMen (2013-2015), * Forked from `hbhunger` for MineClone 2. `hbhunger` in turn was forked from the “Better HUD
most code comes from this mod. (and hunger)” mod by BlockMen (2013-2015), most code comes from this mod.
### Textures ### Textures

@ -1,6 +1,6 @@
hudbars hudbars
intllib? intllib?
mlc_core? mcl_core?
flowers? flowers?
animalmaterials? animalmaterials?
bucket? bucket?

@ -0,0 +1,470 @@
-- Keep these for backwards compatibility
function mcl_hunger.save_hunger(player)
mcl_hunger.set_hunger_raw(player)
end
function mcl_hunger.load_hunger(player)
mcl_hunger.get_hunger_raw(player)
end
-- wrapper for minetest.item_eat (this way we make sure other mods can't break this one)
local org_eat = core.do_item_eat
core.do_item_eat = function(hp_change, replace_with_item, itemstack, user, pointed_thing)
local old_itemstack = itemstack
itemstack = mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
for _, callback in pairs(core.registered_on_item_eats) do
local result = callback(hp_change, replace_with_item, itemstack, user, pointed_thing, old_itemstack)
if result then
return result
end
end
return itemstack
end
-- food functions
local food = mcl_hunger.food
function mcl_hunger.register_food(name, hunger_change, replace_with_item, poisen, heal, sound)
food[name] = {}
food[name].saturation = hunger_change -- hunger points added
food[name].replace = replace_with_item -- what item is given back after eating
food[name].poisen = poisen -- time its poisening
food[name].healing = heal -- amount of HP
food[name].sound = sound -- special sound that is played when eating
end
function mcl_hunger.eat(hp_change, replace_with_item, itemstack, user, pointed_thing)
local item = itemstack:get_name()
local def = food[item]
if not def then
def = {}
if type(hp_change) ~= "number" then
hp_change = 1
core.log("error", "Wrong on_use() definition for item '" .. item .. "'")
end
def.saturation = hp_change
def.replace = replace_with_item
end
local func = mcl_hunger.item_eat(def.saturation, def.replace, def.poisen, def.healing, def.sound)
return func(itemstack, user, pointed_thing)
end
-- Poison player
local function poisenp(tick, time, time_left, player)
-- First check if player is still there
if not player:is_player() then
return
end
time_left = time_left + tick
if time_left < time then
minetest.after(tick, poisenp, tick, time, time_left, player)
else
mcl_hunger.poisonings[player:get_player_name()] = mcl_hunger.poisonings[player:get_player_name()] - 1
if mcl_hunger.poisonings[player:get_player_name()] <= 0 then
-- Reset HUD bar color
hb.change_hudbar(player, "health", nil, nil, "hudbars_icon_health.png", nil, "hudbars_bar_health.png")
end
end
if player:get_hp()-1 > 0 then
player:set_hp(player:get_hp()-1)
end
end
function mcl_hunger.item_eat(hunger_change, replace_with_item, poisen, heal, sound)
return function(itemstack, user, pointed_thing)
if itemstack:take_item() ~= nil and user ~= nil then
local name = user:get_player_name()
local h = tonumber(mcl_hunger.hunger[name])
local hp = user:get_hp()
minetest.sound_play({name = sound or "mcl_hunger_eat_generic", gain = 1}, {pos=user:getpos(), max_hear_distance = 16})
-- Saturation
if h < 20 and hunger_change then
h = h + hunger_change
if h > 20 then h = 20 end
mcl_hunger.hunger[name] = h
mcl_hunger.set_hunger_raw(user)
end
-- Healing
if hp < 20 and heal then
hp = hp + heal
if hp > 20 then hp = 20 end
user:set_hp(hp)
end
-- Poison
if poisen then
-- Set poison bar
hb.change_hudbar(user, "health", nil, nil, "hbhunger_icon_health_poison.png", nil, "hbhunger_bar_health_poison.png")
mcl_hunger.poisonings[name] = mcl_hunger.poisonings[name] + 1
poisenp(1, poisen, 0, user)
end
--sound:eat
itemstack:add_item(replace_with_item)
end
return itemstack
end
end
if minetest.get_modpath("default") ~= nil then
mcl_hunger.register_food("default:apple", 2)
end
if minetest.get_modpath("flowers") ~= nil then
mcl_hunger.register_food("flowers:mushroom_brown", 1)
mcl_hunger.register_food("flowers:mushroom_red", 1, "", 3)
end
if minetest.get_modpath("farming") ~= nil then
mcl_hunger.register_food("farming:bread", 4)
end
if minetest.get_modpath("mobs") ~= nil then
if mobs.mod ~= nil and mobs.mod == "redo" then
mcl_hunger.register_food("mobs:cheese", 4)
mcl_hunger.register_food("mobs:meat", 8)
mcl_hunger.register_food("mobs:meat_raw", 4)
mcl_hunger.register_food("mobs:rat_cooked", 4)
mcl_hunger.register_food("mobs:honey", 2)
mcl_hunger.register_food("mobs:pork_raw", 3, "", 3)
mcl_hunger.register_food("mobs:pork_cooked", 8)
mcl_hunger.register_food("mobs:chicken_cooked", 6)
mcl_hunger.register_food("mobs:chicken_raw", 2, "", 3)
mcl_hunger.register_food("mobs:chicken_egg_fried", 2)
if minetest.get_modpath("bucket") then
mcl_hunger.register_food("mobs:bucket_milk", 3, "bucket:bucket_empty")
end
else
mcl_hunger.register_food("mobs:meat", 6)
mcl_hunger.register_food("mobs:meat_raw", 3)
mcl_hunger.register_food("mobs:rat_cooked", 5)
end
end
if minetest.get_modpath("moretrees") ~= nil then
mcl_hunger.register_food("moretrees:coconut_milk", 1)
mcl_hunger.register_food("moretrees:raw_coconut", 2)
mcl_hunger.register_food("moretrees:acorn_muffin", 3)
mcl_hunger.register_food("moretrees:spruce_nuts", 1)
mcl_hunger.register_food("moretrees:pine_nuts", 1)
mcl_hunger.register_food("moretrees:fir_nuts", 1)
end
if minetest.get_modpath("dwarves") ~= nil then
mcl_hunger.register_food("dwarves:beer", 2)
mcl_hunger.register_food("dwarves:apple_cider", 1)
mcl_hunger.register_food("dwarves:midus", 2)
mcl_hunger.register_food("dwarves:tequila", 2)
mcl_hunger.register_food("dwarves:tequila_with_lime", 2)
mcl_hunger.register_food("dwarves:sake", 2)
end
if minetest.get_modpath("animalmaterials") ~= nil then
mcl_hunger.register_food("animalmaterials:milk", 2)
mcl_hunger.register_food("animalmaterials:meat_raw", 3)
mcl_hunger.register_food("animalmaterials:meat_pork", 3)
mcl_hunger.register_food("animalmaterials:meat_beef", 3)
mcl_hunger.register_food("animalmaterials:meat_chicken", 3)
mcl_hunger.register_food("animalmaterials:meat_lamb", 3)
mcl_hunger.register_food("animalmaterials:meat_venison", 3)
mcl_hunger.register_food("animalmaterials:meat_undead", 3, "", 3)
mcl_hunger.register_food("animalmaterials:meat_toxic", 3, "", 5)
mcl_hunger.register_food("animalmaterials:meat_ostrich", 3)
mcl_hunger.register_food("animalmaterials:fish_bluewhite", 2)
mcl_hunger.register_food("animalmaterials:fish_clownfish", 2)
end
if minetest.get_modpath("fishing") ~= nil then
mcl_hunger.register_food("fishing:fish_raw", 2)
mcl_hunger.register_food("fishing:fish_cooked", 5)
mcl_hunger.register_food("fishing:sushi", 6)
mcl_hunger.register_food("fishing:shark", 4)
mcl_hunger.register_food("fishing:shark_cooked", 8)
mcl_hunger.register_food("fishing:pike", 4)
mcl_hunger.register_food("fishing:pike_cooked", 8)
end
if minetest.get_modpath("glooptest") ~= nil then
mcl_hunger.register_food("glooptest:kalite_lump", 1)
end
if minetest.get_modpath("bushes") ~= nil then
mcl_hunger.register_food("bushes:sugar", 1)
mcl_hunger.register_food("bushes:strawberry", 2)
mcl_hunger.register_food("bushes:berry_pie_raw", 3)
mcl_hunger.register_food("bushes:berry_pie_cooked", 4)
mcl_hunger.register_food("bushes:basket_pies", 15)
end
if minetest.get_modpath("bushes_classic") then
-- bushes_classic mod, as found in the plantlife modpack
local berries = {
"strawberry",
"blackberry",
"blueberry",
"raspberry",
"gooseberry",
"mixed_berry"}
for _, berry in ipairs(berries) do
if berry ~= "mixed_berry" then
mcl_hunger.register_food("bushes:"..berry, 1)
end
mcl_hunger.register_food("bushes:"..berry.."_pie_raw", 2)
mcl_hunger.register_food("bushes:"..berry.."_pie_cooked", 5)
mcl_hunger.register_food("bushes:basket_"..berry, 15)
end
end
if minetest.get_modpath("mushroom") ~= nil then
mcl_hunger.register_food("mushroom:brown", 1)
mcl_hunger.register_food("mushroom:red", 1, "", 3)
-- mushroom potions: red = strong poison, brown = light restorative
if minetest.get_modpath("vessels") then
mcl_hunger.register_food("mushroom:brown_essence", 1, "vessels:glass_bottle", nil, 4)
mcl_hunger.register_food("mushroom:poison", 1, "vessels:glass_bottle", 10)
end
end
if minetest.get_modpath("docfarming") ~= nil then
mcl_hunger.register_food("docfarming:carrot", 3)
mcl_hunger.register_food("docfarming:cucumber", 2)
mcl_hunger.register_food("docfarming:corn", 3)
mcl_hunger.register_food("docfarming:potato", 4)
mcl_hunger.register_food("docfarming:bakedpotato", 5)
mcl_hunger.register_food("docfarming:raspberry", 3)
end
if minetest.get_modpath("farming_plus") ~= nil then
mcl_hunger.register_food("farming_plus:carrot_item", 3)
mcl_hunger.register_food("farming_plus:banana", 2)
mcl_hunger.register_food("farming_plus:orange_item", 2)
mcl_hunger.register_food("farming:pumpkin_bread", 4)
mcl_hunger.register_food("farming_plus:strawberry_item", 2)
mcl_hunger.register_food("farming_plus:tomato_item", 2)
mcl_hunger.register_food("farming_plus:potato_item", 4)
mcl_hunger.register_food("farming_plus:rhubarb_item", 2)
end
if minetest.get_modpath("mtfoods") ~= nil then
mcl_hunger.register_food("mtfoods:dandelion_milk", 1)
mcl_hunger.register_food("mtfoods:sugar", 1)
mcl_hunger.register_food("mtfoods:short_bread", 4)
mcl_hunger.register_food("mtfoods:cream", 1)
mcl_hunger.register_food("mtfoods:chocolate", 2)
mcl_hunger.register_food("mtfoods:cupcake", 2)
mcl_hunger.register_food("mtfoods:strawberry_shortcake", 2)
mcl_hunger.register_food("mtfoods:cake", 3)
mcl_hunger.register_food("mtfoods:chocolate_cake", 3)
mcl_hunger.register_food("mtfoods:carrot_cake", 3)
mcl_hunger.register_food("mtfoods:pie_crust", 3)
mcl_hunger.register_food("mtfoods:apple_pie", 3)
mcl_hunger.register_food("mtfoods:rhubarb_pie", 2)
mcl_hunger.register_food("mtfoods:banana_pie", 3)
mcl_hunger.register_food("mtfoods:pumpkin_pie", 3)
mcl_hunger.register_food("mtfoods:cookies", 2)
mcl_hunger.register_food("mtfoods:mlt_burger", 5)
mcl_hunger.register_food("mtfoods:potato_slices", 2)
mcl_hunger.register_food("mtfoods:potato_chips", 3)
--mtfoods:medicine
mcl_hunger.register_food("mtfoods:casserole", 3)
mcl_hunger.register_food("mtfoods:glass_flute", 2)
mcl_hunger.register_food("mtfoods:orange_juice", 2)
mcl_hunger.register_food("mtfoods:apple_juice", 2)
mcl_hunger.register_food("mtfoods:apple_cider", 2)
mcl_hunger.register_food("mtfoods:cider_rack", 2)
end
if minetest.get_modpath("fruit") ~= nil then
mcl_hunger.register_food("fruit:apple", 2)
mcl_hunger.register_food("fruit:pear", 2)
mcl_hunger.register_food("fruit:bananna", 3)
mcl_hunger.register_food("fruit:orange", 2)
end
if minetest.get_modpath("mush45") ~= nil then
mcl_hunger.register_food("mush45:meal", 4)
end
if minetest.get_modpath("seaplants") ~= nil then
mcl_hunger.register_food("seaplants:kelpgreen", 1)
mcl_hunger.register_food("seaplants:kelpbrown", 1)
mcl_hunger.register_food("seaplants:seagrassgreen", 1)
mcl_hunger.register_food("seaplants:seagrassred", 1)
mcl_hunger.register_food("seaplants:seasaladmix", 6)
mcl_hunger.register_food("seaplants:kelpgreensalad", 1)
mcl_hunger.register_food("seaplants:kelpbrownsalad", 1)
mcl_hunger.register_food("seaplants:seagrassgreensalad", 1)
mcl_hunger.register_food("seaplants:seagrassgreensalad", 1)
end
if minetest.get_modpath("mobfcooking") ~= nil then
mcl_hunger.register_food("mobfcooking:cooked_pork", 6)
mcl_hunger.register_food("mobfcooking:cooked_ostrich", 6)
mcl_hunger.register_food("mobfcooking:cooked_beef", 6)
mcl_hunger.register_food("mobfcooking:cooked_chicken", 6)
mcl_hunger.register_food("mobfcooking:cooked_lamb", 6)
mcl_hunger.register_food("mobfcooking:cooked_venison", 6)
mcl_hunger.register_food("mobfcooking:cooked_fish", 6)
end
if minetest.get_modpath("creatures") ~= nil then
mcl_hunger.register_food("creatures:meat", 6)
mcl_hunger.register_food("creatures:flesh", 3)
mcl_hunger.register_food("creatures:rotten_flesh", 3, "", 3)
end
if minetest.get_modpath("ethereal") then
mcl_hunger.register_food("ethereal:strawberry", 1)
mcl_hunger.register_food("ethereal:banana", 4)
mcl_hunger.register_food("ethereal:pine_nuts", 1)
mcl_hunger.register_food("ethereal:bamboo_sprout", 0, "", 3)
mcl_hunger.register_food("ethereal:fern_tubers", 1)
mcl_hunger.register_food("ethereal:banana_bread", 7)
mcl_hunger.register_food("ethereal:mushroom_plant", 2)
mcl_hunger.register_food("ethereal:coconut_slice", 2)
mcl_hunger.register_food("ethereal:golden_apple", 4, "", nil, 10)
mcl_hunger.register_food("ethereal:wild_onion_plant", 2)
mcl_hunger.register_food("ethereal:mushroom_soup", 4, "ethereal:bowl")
mcl_hunger.register_food("ethereal:mushroom_soup_cooked", 6, "ethereal:bowl")
mcl_hunger.register_food("ethereal:hearty_stew", 6, "ethereal:bowl", 3)
mcl_hunger.register_food("ethereal:hearty_stew_cooked", 10, "ethereal:bowl")
if minetest.get_modpath("bucket") then
mcl_hunger.register_food("ethereal:bucket_cactus", 2, "bucket:bucket_empty")
end
mcl_hunger.register_food("ethereal:fish_raw", 2)
mcl_hunger.register_food("ethereal:fish_cooked", 5)
mcl_hunger.register_food("ethereal:seaweed", 1)
mcl_hunger.register_food("ethereal:yellowleaves", 1, "", nil, 1)
mcl_hunger.register_food("ethereal:sashimi", 4)
mcl_hunger.register_food("ethereal:orange", 2)
end
if minetest.get_modpath("farming") and farming.mod == "redo" then
mcl_hunger.register_food("farming:bread", 6)
mcl_hunger.register_food("farming:potato", 1)
mcl_hunger.register_food("farming:baked_potato", 6)
mcl_hunger.register_food("farming:cucumber", 4)
mcl_hunger.register_food("farming:tomato", 4)
mcl_hunger.register_food("farming:carrot", 3)
mcl_hunger.register_food("farming:carrot_gold", 6, "", nil, 8)
mcl_hunger.register_food("farming:corn", 3)
mcl_hunger.register_food("farming:corn_cob", 5)
mcl_hunger.register_food("farming:melon_slice", 2)
mcl_hunger.register_food("farming:pumpkin_slice", 1)
mcl_hunger.register_food("farming:pumpkin_bread", 9)
mcl_hunger.register_food("farming:coffee_cup", 2, "farming:drinking_cup")
mcl_hunger.register_food("farming:coffee_cup_hot", 3, "farming:drinking_cup", nil, 2)
mcl_hunger.register_food("farming:cookie", 2)
mcl_hunger.register_food("farming:chocolate_dark", 3)
mcl_hunger.register_food("farming:donut", 4)
mcl_hunger.register_food("farming:donut_chocolate", 6)
mcl_hunger.register_food("farming:donut_apple", 6)
mcl_hunger.register_food("farming:raspberries", 1)
mcl_hunger.register_food("farming:blueberries", 1)
mcl_hunger.register_food("farming:muffin_blueberry", 4)
if minetest.get_modpath("vessels") then
mcl_hunger.register_food("farming:smoothie_raspberry", 2, "vessels:drinking_glass")
end
mcl_hunger.register_food("farming:rhubarb", 1)
mcl_hunger.register_food("farming:rhubarb_pie", 6)
mcl_hunger.register_food("farming:beans", 1)
end
if minetest.get_modpath("kpgmobs") ~= nil then
mcl_hunger.register_food("kpgmobs:uley", 3)
mcl_hunger.register_food("kpgmobs:meat", 6)
mcl_hunger.register_food("kpgmobs:rat_cooked", 5)
mcl_hunger.register_food("kpgmobs:med_cooked", 4)
if minetest.get_modpath("bucket") then
mcl_hunger.register_food("kpgmobs:bucket_milk", 4, "bucket:bucket_empty")
end
end
if minetest.get_modpath("jkfarming") ~= nil then
mcl_hunger.register_food("jkfarming:carrot", 3)
mcl_hunger.register_food("jkfarming:corn", 3)
mcl_hunger.register_food("jkfarming:melon_part", 2)
mcl_hunger.register_food("jkfarming:cake", 3)
end
if minetest.get_modpath("jkanimals") ~= nil then
mcl_hunger.register_food("jkanimals:meat", 6)
end
if minetest.get_modpath("jkwine") ~= nil then
mcl_hunger.register_food("jkwine:grapes", 2)
mcl_hunger.register_food("jkwine:winebottle", 1)
end
if minetest.get_modpath("cooking") ~= nil then
mcl_hunger.register_food("cooking:meat_beef_cooked", 4)
mcl_hunger.register_food("cooking:fish_bluewhite_cooked", 3)
mcl_hunger.register_food("cooking:fish_clownfish_cooked", 1)
mcl_hunger.register_food("cooking:meat_chicken_cooked", 2)
mcl_hunger.register_food("cooking:meat_cooked", 2)
mcl_hunger.register_food("cooking:meat_pork_cooked", 3)
mcl_hunger.register_food("cooking:meat_toxic_cooked", -3)
mcl_hunger.register_food("cooking:meat_venison_cooked", 3)
mcl_hunger.register_food("cooking:meat_undead_cooked", 1)
end
-- ferns mod of plantlife_modpack
if minetest.get_modpath("ferns") ~= nil then
mcl_hunger.register_food("ferns:fiddlehead", 1, "", 1)
mcl_hunger.register_food("ferns:fiddlehead_roasted", 3)
mcl_hunger.register_food("ferns:ferntuber_roasted", 3)
mcl_hunger.register_food("ferns:horsetail_01", 1)
end
if minetest.get_modpath("pizza") ~= nil then
mcl_hunger.register_food("pizza:pizza", 30, "", nil, 30)
mcl_hunger.register_food("pizza:pizzaslice", 5, "", nil, 5)
end
if minetest.get_modpath("nssm") then
mcl_hunger.register_food("nssm:werewolf_leg", 3)
mcl_hunger.register_food("nssm:heron_leg", 2)
mcl_hunger.register_food("nssm:chichibios_heron_leg", 4)
mcl_hunger.register_food("nssm:crocodile_tail", 3)
mcl_hunger.register_food("nssm:duck_legs", 1)
mcl_hunger.register_food("nssm:ant_leg", 1)
mcl_hunger.register_food("nssm:spider_leg", 1)
mcl_hunger.register_food("nssm:tentacle", 2)
mcl_hunger.register_food("nssm:worm_flesh", 2, "", 2) -- poisonous
mcl_hunger.register_food("nssm:amphibian_heart", 1)
mcl_hunger.register_food("nssm:raw_scrausics_wing", 1)
-- superfoods
mcl_hunger.register_food("nssm:phoenix_nuggets", 20, "", nil, 20)
mcl_hunger.register_food("nssm:phoenix_tear", 20, "", nil, 20)
end
-- player-action based hunger changes
function mcl_hunger.handle_node_actions(pos, oldnode, player, ext)
-- is_fake_player comes from the pipeworks, we are not interested in those
if not player or not player:is_player() or player.is_fake_player == true then
return
end
local name = player:get_player_name()
local exhaus = mcl_hunger.exhaustion[name]
if exhaus == nil then return end
local new = mcl_hunger.EXHAUST_PLACE
-- placenode event
if not ext then
new = mcl_hunger.EXHAUST_DIG
end
-- assume its send by main timer when movement detected
if not pos and not oldnode then
new = mcl_hunger.EXHAUST_MOVE
end
exhaus = exhaus + new
if exhaus > mcl_hunger.EXHAUST_LVL then
exhaus = 0
local h = tonumber(mcl_hunger.hunger[name])
h = h - 1
if h < 0 then h = 0 end
mcl_hunger.hunger[name] = h
mcl_hunger.set_hunger_raw(player)
end
mcl_hunger.exhaustion[name] = exhaus
end
minetest.register_on_placenode(mcl_hunger.handle_node_actions)
minetest.register_on_dignode(mcl_hunger.handle_node_actions)

@ -7,43 +7,43 @@ end
if minetest.setting_getbool("enable_damage") then if minetest.setting_getbool("enable_damage") then
hbhunger = {} mcl_hunger = {}
hbhunger.food = {} mcl_hunger.food = {}
-- HUD statbar values -- HUD statbar values
hbhunger.hunger = {} mcl_hunger.hunger = {}
hbhunger.hunger_out = {} mcl_hunger.hunger_out = {}
-- Count number of poisonings a player has at once -- Count number of poisonings a player has at once
hbhunger.poisonings = {} mcl_hunger.poisonings = {}
-- HUD item ids -- HUD item ids
local hunger_hud = {} local hunger_hud = {}
hbhunger.HUD_TICK = 0.1 mcl_hunger.HUD_TICK = 0.1
--Some hunger settings --Some hunger settings
hbhunger.exhaustion = {} -- Exhaustion is experimental! mcl_hunger.exhaustion = {} -- Exhaustion is experimental!
hbhunger.HUNGER_TICK = 800 -- time in seconds after that 1 hunger point is taken mcl_hunger.HUNGER_TICK = 800 -- time in seconds after that 1 hunger point is taken
hbhunger.EXHAUST_DIG = 3 -- exhaustion increased this value after digged node mcl_hunger.EXHAUST_DIG = 3 -- exhaustion increased this value after digged node
hbhunger.EXHAUST_PLACE = 1 -- exhaustion increased this value after placed mcl_hunger.EXHAUST_PLACE = 1 -- exhaustion increased this value after placed
hbhunger.EXHAUST_MOVE = 0.3 -- exhaustion increased this value if player movement detected mcl_hunger.EXHAUST_MOVE = 0.3 -- exhaustion increased this value if player movement detected
hbhunger.EXHAUST_LVL = 160 -- at what exhaustion player satiation gets lowerd mcl_hunger.EXHAUST_LVL = 160 -- at what exhaustion player satiation gets lowerd
--load custom settings --load custom settings
local set = io.open(minetest.get_modpath("hbhunger").."/hbhunger.conf", "r") local set = io.open(minetest.get_modpath("mcl_hunger").."/mcl_hunger.conf", "r")
if set then if set then
dofile(minetest.get_modpath("hbhunger").."/hbhunger.conf") dofile(minetest.get_modpath("mcl_hunger").."/mcl_hunger.conf")
set:close() set:close()
end end
local function custom_hud(player) local function custom_hud(player)
hb.init_hudbar(player, "satiation", hbhunger.get_hunger_raw(player)) hb.init_hudbar(player, "satiation", mcl_hunger.get_hunger_raw(player))
end end
dofile(minetest.get_modpath("hbhunger").."/hunger.lua") dofile(minetest.get_modpath("mcl_hunger").."/hunger.lua")
-- register satiation hudbar -- register satiation hudbar
hb.register_hudbar("satiation", 0xFFFFFF, S("Satiation"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 20, 20, false) hb.register_hudbar("satiation", 0xFFFFFF, S("Satiation"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 20, 20, false)
@ -52,15 +52,15 @@ hb.register_hudbar("satiation", 0xFFFFFF, S("Satiation"), { icon = "hbhunger_ico
local function update_hud(player) local function update_hud(player)
local name = player:get_player_name() local name = player:get_player_name()
--hunger --hunger
local h_out = tonumber(hbhunger.hunger_out[name]) local h_out = tonumber(mcl_hunger.hunger_out[name])
local h = tonumber(hbhunger.hunger[name]) local h = tonumber(mcl_hunger.hunger[name])
if h_out ~= h then if h_out ~= h then
hbhunger.hunger_out[name] = h mcl_hunger.hunger_out[name] = h
hb.change_hudbar(player, "satiation", h) hb.change_hudbar(player, "satiation", h)
end end
end end
hbhunger.get_hunger_raw = function(player) mcl_hunger.get_hunger_raw = function(player)
local inv = player:get_inventory() local inv = player:get_inventory()
if not inv then return nil end if not inv then return nil end
local hgp = inv:get_stack("hunger", 1):get_count() local hgp = inv:get_stack("hunger", 1):get_count()
@ -73,10 +73,10 @@ hbhunger.get_hunger_raw = function(player)
return hgp-1 return hgp-1
end end
hbhunger.set_hunger_raw = function(player) mcl_hunger.set_hunger_raw = function(player)
local inv = player:get_inventory() local inv = player:get_inventory()
local name = player:get_player_name() local name = player:get_player_name()
local value = hbhunger.hunger[name] local value = mcl_hunger.hunger[name]
if not inv or not value then return nil end if not inv or not value then return nil end
if value > 20 then value = 20 end if value > 20 then value = 20 end
if value < 0 then value = 0 end if value < 0 then value = 0 end
@ -90,20 +90,20 @@ minetest.register_on_joinplayer(function(player)
local name = player:get_player_name() local name = player:get_player_name()
local inv = player:get_inventory() local inv = player:get_inventory()
inv:set_size("hunger",1) inv:set_size("hunger",1)
hbhunger.hunger[name] = hbhunger.get_hunger_raw(player) mcl_hunger.hunger[name] = mcl_hunger.get_hunger_raw(player)
hbhunger.hunger_out[name] = hbhunger.hunger[name] mcl_hunger.hunger_out[name] = mcl_hunger.hunger[name]
hbhunger.exhaustion[name] = 0 mcl_hunger.exhaustion[name] = 0
hbhunger.poisonings[name] = 0 mcl_hunger.poisonings[name] = 0
custom_hud(player) custom_hud(player)
hbhunger.set_hunger_raw(player) mcl_hunger.set_hunger_raw(player)
end) end)
minetest.register_on_respawnplayer(function(player) minetest.register_on_respawnplayer(function(player)
-- reset hunger (and save) -- reset hunger (and save)
local name = player:get_player_name() local name = player:get_player_name()
hbhunger.hunger[name] = 20 mcl_hunger.hunger[name] = 20
hbhunger.set_hunger_raw(player) mcl_hunger.set_hunger_raw(player)
hbhunger.exhaustion[name] = 0 mcl_hunger.exhaustion[name] = 0
end) end)
local main_timer = 0 local main_timer = 0
@ -114,12 +114,12 @@ minetest.register_globalstep(function(dtime)
main_timer = main_timer + dtime main_timer = main_timer + dtime
timer = timer + dtime timer = timer + dtime
timer2 = timer2 + dtime timer2 = timer2 + dtime
if main_timer > hbhunger.HUD_TICK or timer > 0.5 or timer2 > hbhunger.HUNGER_TICK then if main_timer > mcl_hunger.HUD_TICK or timer > 0.5 or timer2 > mcl_hunger.HUNGER_TICK then
if main_timer > hbhunger.HUD_TICK then main_timer = 0 end if main_timer > mcl_hunger.HUD_TICK then main_timer = 0 end
for _,player in ipairs(minetest.get_connected_players()) do for _,player in ipairs(minetest.get_connected_players()) do
local name = player:get_player_name() local name = player:get_player_name()
local h = tonumber(hbhunger.hunger[name]) local h = tonumber(mcl_hunger.hunger[name])
local hp = player:get_hp() local hp = player:get_hp()
if timer > 0.5 then if timer > 0.5 then
-- Quick heal (every 0.5s) -- Quick heal (every 0.5s)
@ -137,11 +137,11 @@ minetest.register_globalstep(function(dtime)
end end
end end
-- lower satiation by 1 point after xx seconds -- lower satiation by 1 point after xx seconds
if timer2 > hbhunger.HUNGER_TICK then if timer2 > mcl_hunger.HUNGER_TICK then
if h > 0 then if h > 0 then
h = h-1 h = h-1
hbhunger.hunger[name] = h mcl_hunger.hunger[name] = h
hbhunger.set_hunger_raw(player) mcl_hunger.set_hunger_raw(player)
end end
end end
@ -151,7 +151,7 @@ minetest.register_globalstep(function(dtime)
local controls = player:get_player_control() local controls = player:get_player_control()
-- Determine if the player is walking -- Determine if the player is walking
if controls.up or controls.down or controls.left or controls.right then if controls.up or controls.down or controls.left or controls.right then
hbhunger.handle_node_actions(nil, nil, player) mcl_hunger.handle_node_actions(nil, nil, player)
end end
end end
end end
@ -163,7 +163,7 @@ minetest.register_globalstep(function(dtime)
timerMult = 0 timerMult = 0
end end
end end
if timer2 > hbhunger.HUNGER_TICK then timer2 = 0 end if timer2 > mcl_hunger.HUNGER_TICK then timer2 = 0 end
end) end)
end end

@ -0,0 +1 @@
name = mcl_hunger

Before

Width:  |  Height:  |  Size: 8.3 KiB

After

Width:  |  Height:  |  Size: 8.3 KiB

Before

Width:  |  Height:  |  Size: 80 B

After

Width:  |  Height:  |  Size: 80 B

Before

Width:  |  Height:  |  Size: 151 B

After

Width:  |  Height:  |  Size: 151 B

Before

Width:  |  Height:  |  Size: 267 B

After

Width:  |  Height:  |  Size: 267 B

Before

Width:  |  Height:  |  Size: 409 B

After

Width:  |  Height:  |  Size: 409 B

Before

Width:  |  Height:  |  Size: 526 B

After

Width:  |  Height:  |  Size: 526 B