Refactor set/get hunger functions
This commit is contained in:
parent
26e13119cb
commit
d8e1124ee4
2 changed files with 33 additions and 18 deletions
|
@ -77,7 +77,6 @@ function mcl_hunger.item_eat(hunger_change, replace_with_item, poisen, heal, sou
|
||||||
local itemname = itemstack:get_name()
|
local itemname = itemstack:get_name()
|
||||||
if itemstack:take_item() ~= nil and user ~= nil then
|
if itemstack:take_item() ~= nil and user ~= nil then
|
||||||
local name = user:get_player_name()
|
local name = user:get_player_name()
|
||||||
local h = tonumber(mcl_hunger.get_hunger(user))
|
|
||||||
local hp = user:get_hp()
|
local hp = user:get_hp()
|
||||||
|
|
||||||
local pos = user:getpos()
|
local pos = user:getpos()
|
||||||
|
@ -141,13 +140,15 @@ function mcl_hunger.item_eat(hunger_change, replace_with_item, poisen, heal, sou
|
||||||
mcl_hunger.saturate(name, saturation, false)
|
mcl_hunger.saturate(name, saturation, false)
|
||||||
|
|
||||||
-- Add food points
|
-- Add food points
|
||||||
|
local h = mcl_hunger.get_hunger(user)
|
||||||
if h < 20 and hunger_change then
|
if h < 20 and hunger_change then
|
||||||
h = h + hunger_change
|
h = h + hunger_change
|
||||||
if h > 20 then h = 20 end
|
if h > 20 then h = 20 end
|
||||||
mcl_hunger.set_hunger(user, h)
|
mcl_hunger.set_hunger(user, h, false)
|
||||||
end
|
end
|
||||||
|
|
||||||
hb.change_hudbar(user, "saturation", mcl_hunger.saturation[name], mcl_hunger.get_hunger(user))
|
hb.change_hudbar(user, "food", h)
|
||||||
|
hb.change_hudbar(user, "saturation", mcl_hunger.saturation[name], h)
|
||||||
end
|
end
|
||||||
-- Poison
|
-- Poison
|
||||||
if poisen then
|
if poisen then
|
||||||
|
|
|
@ -54,35 +54,49 @@ hb.register_hudbar("food", 0xFFFFFF, S("Food"), { icon = "hbhunger_icon.png", bg
|
||||||
hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 5, 20, false, S("%s: %.1f/%d"))
|
hb.register_hudbar("saturation", 0xFFFFFF, S("Saturation"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 5, 20, false, S("%s: %.1f/%d"))
|
||||||
hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaustion"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 0, 4, false, S("%s: %.3f/%d"))
|
hb.register_hudbar("exhaustion", 0xFFFFFF, S("Exhaustion"), { icon = "hbhunger_icon.png", bgicon = "hbhunger_bgicon.png", bar = "hbhunger_bar.png" }, 0, 4, false, S("%s: %.3f/%d"))
|
||||||
|
|
||||||
-- API START --
|
|
||||||
mcl_hunger.get_hunger = function(player)
|
local RAW_VALUE_FOOD = 1
|
||||||
|
local RAW_VALUE_SATURATION = 2
|
||||||
|
local RAW_VALUE_EXHAUSTION = 3
|
||||||
|
|
||||||
|
local get_player_value_raw = function(player, id, default)
|
||||||
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()
|
|
||||||
if hgp == 0 then
|
local value = inv:get_stack("hunger", id):get_count()
|
||||||
hgp = 21
|
if value == 0 then
|
||||||
inv:set_stack("hunger", 1, ItemStack({name=":", count=hgp}))
|
inv:set_stack("hunger", id, ItemStack({name=":", count=default+1}))
|
||||||
|
return default
|
||||||
else
|
else
|
||||||
hgp = hgp
|
return value - 1
|
||||||
end
|
end
|
||||||
return hgp-1
|
end
|
||||||
|
|
||||||
|
local set_player_value_raw = function(player, id, value)
|
||||||
|
local inv = player:get_inventory()
|
||||||
|
inv:set_stack("hunger", id, ItemStack({name=":", count=value+1}))
|
||||||
|
return true
|
||||||
|
end
|
||||||
|
|
||||||
|
-- API START --
|
||||||
|
mcl_hunger.get_hunger = function(player)
|
||||||
|
return get_player_value_raw(player, RAW_VALUE_FOOD, 20)
|
||||||
end
|
end
|
||||||
|
|
||||||
mcl_hunger.set_hunger = function(player, hunger, update_hudbars)
|
mcl_hunger.set_hunger = function(player, hunger, update_hudbars)
|
||||||
local name = player:get_player_name()
|
|
||||||
local inv = player:get_inventory()
|
|
||||||
local name = player:get_player_name()
|
|
||||||
if not inv or not hunger then return nil end
|
|
||||||
if hunger > 20 then hunger = 20 end
|
if hunger > 20 then hunger = 20 end
|
||||||
if hunger < 0 then hunger = 0 end
|
if hunger < 0 then hunger = 0 end
|
||||||
|
|
||||||
inv:set_stack("hunger", 1, ItemStack({name=":", count=hunger+1}))
|
local ok = set_player_value_raw(player, RAW_VALUE_FOOD, hunger)
|
||||||
|
if not ok then
|
||||||
|
return false
|
||||||
|
end
|
||||||
|
|
||||||
if update_hudbars ~= false then
|
if update_hudbars ~= false then
|
||||||
hb.change_hudbar(player, "food", hunger)
|
hb.change_hudbar(player, "food", hunger)
|
||||||
hb.change_hudbar(player, "saturation", nil, hunger)
|
hb.change_hudbar(player, "saturation", nil, hunger)
|
||||||
end
|
end
|
||||||
|
return true
|
||||||
end
|
end
|
||||||
|
|
||||||
-- END OF API --
|
-- END OF API --
|
||||||
|
@ -90,7 +104,7 @@ end
|
||||||
minetest.register_on_joinplayer(function(player)
|
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", 3)
|
||||||
mcl_hunger.exhaustion[name] = 0.0
|
mcl_hunger.exhaustion[name] = 0.0
|
||||||
mcl_hunger.saturation[name] = 5.0
|
mcl_hunger.saturation[name] = 5.0
|
||||||
mcl_hunger.poisonings[name] = 0
|
mcl_hunger.poisonings[name] = 0
|
||||||
|
|
Reference in a new issue