1 mcl_hunger
.registered_foods
= {}
3 function mcl_hunger
.init_player(player
)
4 local meta
= player
:get_meta()
5 if meta
:get_string("mcl_hunger:hunger") == "" then
6 meta
:set_string("mcl_hunger:hunger", tostring(20))
8 if meta
:get_string("mcl_hunger:saturation") == "" then
9 meta
:set_string("mcl_hunger:saturation", tostring(mcl_hunger
.SATURATION_INIT
))
11 if meta
:get_string("mcl_hunger:exhaustion") == "" then
12 meta
:set_string("mcl_hunger:exhaustion", tostring(0))
16 if mcl_hunger
.active
then
17 function mcl_hunger
.get_hunger(player
)
18 local hunger
= tonumber(player
:get_meta():get_string("mcl_hunger:hunger")) or 20
22 function mcl_hunger
.get_saturation(player
)
23 local saturation
= tonumber(player
:get_meta():get_string("mcl_hunger:saturation")) or mcl_hunger
.SATURATION_INIT
27 function mcl_hunger
.get_exhaustion(player
)
28 local exhaustion
= tonumber(player
:get_meta():get_string("mcl_hunger:exhaustion")) or 0
32 function mcl_hunger
.set_hunger(player
, hunger
, update_hudbars
)
33 hunger
= math
.min(20, math
.max(0, hunger
))
34 player
:get_meta():set_string("mcl_hunger:hunger", tostring(hunger
))
35 if update_hudbars
~= false then
36 hb
.change_hudbar(player
, "hunger", hunger
)
37 mcl_hunger
.update_saturation_hud(player
, nil, hunger
)
42 function mcl_hunger
.set_saturation(player
, saturation
, update_hudbar
)
43 saturation
= math
.min(mcl_hunger
.get_hunger(player
), math
.max(0, saturation
))
44 player
:get_meta():set_string("mcl_hunger:saturation", tostring(saturation
))
45 if update_hudbar
~= false then
46 mcl_hunger
.update_saturation_hud(player
, saturation
)
51 function mcl_hunger
.set_exhaustion(player
, exhaustion
, update_hudbar
)
52 exhaustion
= math
.min(mcl_hunger
.EXHAUST_LVL
, math
.max(0.0, exhaustion
))
53 player
:get_meta():set_string("mcl_hunger:exhaustion", tostring(exhaustion
))
54 if update_hudbar
~= false then
55 mcl_hunger
.update_exhaustion_hud(player
, exhaustion
)
60 function mcl_hunger
.exhaust(playername
, increase
)
61 local player
= minetest
.get_player_by_name(playername
)
62 if not player
then return false end
63 mcl_hunger
.set_exhaustion(player
, mcl_hunger
.get_exhaustion(player
) + increase
)
64 if mcl_hunger
.get_exhaustion(player
) >= mcl_hunger
.EXHAUST_LVL
then
65 mcl_hunger
.set_exhaustion(player
, 0.0)
67 local satuchanged
= false
68 local s
= mcl_hunger
.get_saturation(player
)
70 mcl_hunger
.set_saturation(player
, math
.max(s
- 1.0, 0))
72 elseif s
<= 0.0001 then
73 h
= mcl_hunger
.get_hunger(player
)
75 mcl_hunger
.set_hunger(player
, h
)
79 if h
~= nil then h
= h
end
80 mcl_hunger
.update_saturation_hud(player
, mcl_hunger
.get_saturation(player
), h
)
83 mcl_hunger
.update_exhaustion_hud(player
, mcl_hunger
.get_exhaustion(player
))
87 function mcl_hunger
.saturate(playername
, increase
, update_hudbar
)
88 local player
= minetest
.get_player_by_name(playername
)
89 local ok
= mcl_hunger
.set_saturation(player
, math
.min(mcl_hunger
.get_saturation(player
) + increase
, mcl_hunger
.get_hunger(player
)))
90 if update_hudbar
~= false then
91 mcl_hunger
.update_saturation_hud(player
, mcl_hunger
.get_saturation(player
), mcl_hunger
.get_hunger(player
))
96 function mcl_hunger
.register_food(name
, hunger_change
, replace_with_item
, poisontime
, poison
, exhaust
, poisonchance
, sound
)
97 if not mcl_hunger
.active
then
100 local food
= mcl_hunger
.registered_foods
102 food
[name
].saturation
= hunger_change
-- hunger points added
103 food
[name
].replace
= replace_with_item
-- what item is given back after eating
104 food
[name
].poisontime
= poisontime
-- time it is poisoning. If this is set, this item is considered poisonous,
105 -- otherwise the following poison/exhaust fields are ignored
106 food
[name
].poison
= poison
-- poison damage per tick for poisonous food
107 food
[name
].exhaust
= exhaust
-- exhaustion per tick for poisonous food
108 food
[name
].poisonchance
= poisonchance
-- chance percentage that this item poisons the player (default: 100% if poisoning is enabled)
109 food
[name
].sound
= sound
-- special sound that is played when eating
112 function mcl_hunger
.stop_poison(player
)
113 if not mcl_hunger
.active
then
116 mcl_hunger
.poison_hunger
[player
:get_player_name()] = 0
117 mcl_hunger
.reset_bars_poison_hunger(player
)
121 -- When hunger is disabled, the functions are basically no-ops
123 function mcl_hunger
.get_hunger()
127 function mcl_hunger
.get_saturation()
128 return mcl_hunger
.SATURATION_INIT
131 function mcl_hunger
.get_exhaustion()
135 function mcl_hunger
.set_hunger()
139 function mcl_hunger
.set_saturation()
143 function mcl_hunger
.set_exhaustion()
147 function mcl_hunger
.exhaust()
151 function mcl_hunger
.saturate()
155 function mcl_hunger
.register_food() end
157 function mcl_hunger
.stop_poison() end