This is an experimental copy for testing Poikilos' issue mirroring system. Note that Gitea's migration tool can import issues, but the "Issues" checkbox is disabled when "This repository will be a mirror" is enabled (it is for this repo).
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

107 lines
3.6 KiB

diff -ru ./EnlivenMinetest/Bucket_Game-base/clarify-food-api-vs-200327/mods/coderfood/unified_foods/hunger.lua ./EnlivenMinetest/Bucket_Game-branches/clarify-food-api-vs-200327/mods/coderfood/unified_foods/hunger.lua
--- ./EnlivenMinetest/Bucket_Game-base/clarify-food-api-vs-200327/mods/coderfood/unified_foods/hunger.lua 2020-03-15 08:22:10.234929597 -0400
+++ ./EnlivenMinetest/Bucket_Game-branches/clarify-food-api-vs-200327/mods/coderfood/unified_foods/hunger.lua 2020-03-15 08:22:10.275928404 -0400
@@ -1,5 +1,6 @@
local modname = minetest.get_current_modname()
local modpath = minetest.get_modpath (modname)
+-- NOTE: 30 indicates 10 more beyond the visible bar is allowed.
local enable_wonder = minetest.setting_getbool ("enable_wonder")
unified_hunger = {}
@@ -49,14 +50,37 @@
hb.init_hudbar(player, "satiation", unified_hunger.get_hunger(player))
end
+local function pull_hunger(player)
+ local inv = player:get_inventory()
+ if not inv then return nil end
+ local hgp = inv:get_stack("hunger", 1):get_count()
+ if hgp == 0 then
+ hgp = 21
+ inv:set_stack("hunger", 1, ItemStack({name = ":", count = hgp}))
+ else
+ hgp = hgp
+ end
+ unified_hunger.hunger[name] = hgp - 1
+ return true
+end
+
+local function push_hunger(player)
+ local inv = player:get_inventory()
+ local name = player:get_player_name()
+ local value = unified_hunger.hunger[name]
+ if not inv or not value then return nil end
+ inv:set_stack("hunger", 1, ItemStack({name = ":", count = value + 1}))
+ return true
+end
+
-- Keep these for backwards compatibility
function unified_hunger.save_hunger(player)
- unified_hunger.set_hunger(player)
+ push_hunger(player)
end
function unified_hunger.load_hunger(player)
- unified_hunger.get_hunger(player)
+ pull_hunger(player)
end
-- Poison player
@@ -213,45 +237,35 @@
end
unified_hunger.get_hunger = function(player)
- local inv = player:get_inventory()
- if not inv then return nil end
- local hgp = inv:get_stack("hunger", 1):get_count()
- if hgp == 0 then
- hgp = 21
- inv:set_stack("hunger", 1, ItemStack({name = ":", count = hgp}))
- else
- hgp = hgp
- end
- return hgp - 1
+ pull_hunger(player)
+ return unified_hunger.hunger[name]
end
-unified_hunger.set_hunger = function(player)
- local inv = player:get_inventory()
+unified_hunger.set_hunger = function(player, value)
local name = player:get_player_name()
- local value = unified_hunger.hunger[name]
- if not inv or not value then return nil end
if value > 30 then value = 30 end
if value < 0 then value = 0 end
- inv:set_stack("hunger", 1, ItemStack({name = ":", count = value + 1}))
- return true
+ unified_hunger.hunger[name] = value
+ return push_hunger(player)
end
+
+
minetest.register_on_joinplayer(function(player)
local name = player:get_player_name()
local inv = player:get_inventory()
inv:set_size("hunger", 1)
- unified_hunger.hunger[name] = unified_hunger.get_hunger(player)
+ pull_hunger(player) -- Load hunger[name] (and ensure non-nil).
unified_hunger.hunger_out[name] = unified_hunger.hunger[name]
unified_hunger.exhaustion[name] = 0
custom_hud(player)
- unified_hunger.set_hunger(player)
+ push_hunger(player) -- Save the now non-nil value.
end)
minetest.register_on_respawnplayer(function(player)
-- reset hunger (and save)
local name = player:get_player_name()
- unified_hunger.hunger[name] = 20
- unified_hunger.set_hunger(player)
+ unified_hunger.set_hunger(player, 20)
unified_hunger.exhaustion[name] = 0
end)