Hunger: add poison API

This commit is contained in:
MoNTE48 2019-08-24 23:33:13 +02:00 committed by MoNTE48
parent 862ed96826
commit 0a69c859c7
4 changed files with 16 additions and 16 deletions

View File

@ -39,8 +39,8 @@ hunger.settings = {
exhaust_dig = get_setting("exhaust_dig", 2), exhaust_dig = get_setting("exhaust_dig", 2),
exhaust_place = get_setting("exhaust_place", 1), exhaust_place = get_setting("exhaust_place", 1),
exhaust_move = get_setting("exhaust_move", 2), exhaust_move = get_setting("exhaust_move", 2),
exhaust_jump = get_setting("exhaust_jump", 3), exhaust_jump = get_setting("exhaust_jump", 4),
exhaust_craft = get_setting("exhaust_craft", 1), exhaust_craft = get_setting("exhaust_craft", 2),
exhaust_punch = get_setting("exhaust_punch", 5), exhaust_punch = get_setting("exhaust_punch", 5),
exhaust_lvl = get_setting("exhaust_lvl", 192), exhaust_lvl = get_setting("exhaust_lvl", 192),
heal = get_setting("heal", 1), heal = get_setting("heal", 1),
@ -48,7 +48,7 @@ hunger.settings = {
starve = get_setting("starve", 1), starve = get_setting("starve", 1),
starve_lvl = get_setting("starve_lvl", 3), starve_lvl = get_setting("starve_lvl", 3),
level_max = get_setting("level_max", 21), level_max = get_setting("level_max", 21),
visual_max = get_setting("visual_max", 20), visual_max = get_setting("visual_max", 20)
} }
local settings = hunger.settings local settings = hunger.settings
@ -308,9 +308,9 @@ local function hunger_globaltimer(dtime)
end end
end end
function core.do_item_eat(hp_change, replace_with_item, itemstack, player, pointed_thing) function core.do_item_eat(hp_change, replace_with_item, poison, itemstack, player, pointed_thing)
for _, callback in ipairs(core.registered_on_item_eats) do for _, callback in ipairs(core.registered_on_item_eats) do
local result = callback(hp_change, replace_with_item, itemstack, player, pointed_thing) local result = callback(hp_change, replace_with_item, poison, itemstack, player, pointed_thing)
if result then if result then
return result return result
end end
@ -320,13 +320,12 @@ function core.do_item_eat(hp_change, replace_with_item, itemstack, player, point
return itemstack return itemstack
end end
if hp_change > 0 then if not poison then
hunger.change_saturation(player, hp_change) hunger.change_saturation(player, hp_change)
hunger.set_exhaustion(player, 0) hunger.set_exhaustion(player, 0)
else else
-- assume hp_change < 0. hunger.change_saturation(player, hp_change)
hunger.change_saturation(player, -hp_change) hunger.poison(player, -poison, settings.poison_tick)
hunger.poison(player, -hp_change, settings.poison_tick)
end end
itemstack:take_item() itemstack:take_item()

View File

@ -557,7 +557,7 @@ function core.item_drop(itemstack, dropper, pos)
end end
local enable_damage = minetest.settings:get_bool("enable_damage") local enable_damage = minetest.settings:get_bool("enable_damage")
function core.item_eat(hp_change, replace_with_item) function core.item_eat(hp_change, replace_with_item, poison)
return function(itemstack, user, pointed_thing) -- closure return function(itemstack, user, pointed_thing) -- closure
if user then if user then
local pos = user:get_pos() local pos = user:get_pos()
@ -583,7 +583,7 @@ function core.item_eat(hp_change, replace_with_item)
}) })
core.sound_play("player_eat", {pos = pos, max_hear_distance = 10, gain = 0.3}) core.sound_play("player_eat", {pos = pos, max_hear_distance = 10, gain = 0.3})
if enable_damage then if enable_damage then
return core.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing) return core.do_item_eat(hp_change, replace_with_item, poison, itemstack, user, pointed_thing)
end end
end end
end end

View File

@ -886,8 +886,8 @@ hunger.poison_tick (time in seconds between poison damage)
hunger.exhaust_dig (exhaustion for digging a node) float 3 hunger.exhaust_dig (exhaustion for digging a node) float 3
hunger.exhaust_place (exhaustion for placing a node) float 1 hunger.exhaust_place (exhaustion for placing a node) float 1
hunger.exhaust_move (exhaustion for moving) float 2 hunger.exhaust_move (exhaustion for moving) float 2
hunger.exhaust_jump (exhaustion for jumping) float 3 hunger.exhaust_jump (exhaustion for jumping) float 4
hunger.exhaust_craft (exhaustion for crafting) float 1 hunger.exhaust_craft (exhaustion for crafting) float 2
hunger.exhaust_punch (exhaustion for punching) float 5 hunger.exhaust_punch (exhaustion for punching) float 5
hunger.exhaust_lvl (exhaustion level at which saturation gets lowered) float 192 hunger.exhaust_lvl (exhaustion level at which saturation gets lowered) float 192
hunger.heal (amount of HP a player gains per hunger.health_tick) int 1 0 20 hunger.heal (amount of HP a player gains per hunger.health_tick) int 1 0 20

View File

@ -2461,7 +2461,7 @@ Call these functions only at load time!
* The provided function should check that the position is protected by the mod * The provided function should check that the position is protected by the mod
calling this function before it prints a message, if it does, to allow for calling this function before it prints a message, if it does, to allow for
multiple protection mods. multiple protection mods.
* `minetest.register_on_item_eat(func(hp_change, replace_with_item, itemstack, user, pointed_thing))` * `minetest.register_on_item_eat(func(hp_change, replace_with_item, poison, itemstack, user, pointed_thing))`
* Called when an item is eaten, by `minetest.item_eat` * Called when an item is eaten, by `minetest.item_eat`
* Return `true` or `itemstack` to cancel the default item eat response (i.e.: hp increase) * Return `true` or `itemstack` to cancel the default item eat response (i.e.: hp increase)
@ -2766,7 +2766,7 @@ and `minetest.auth_reload` call the authetification handler.
by default they will be sent to every player (even if not used). by default they will be sent to every player (even if not used).
Note that this parameter is mostly just a workaround and will be removed in future releases. Note that this parameter is mostly just a workaround and will be removed in future releases.
* Creates a detached inventory. If it already exists, it is cleared. * Creates a detached inventory. If it already exists, it is cleared.
* `minetest.do_item_eat(hp_change, replace_with_item, itemstack, user, pointed_thing)`: * `minetest.do_item_eat(hp_change, replace_with_item, poison, itemstack, user, pointed_thing)`:
returns left over ItemStack returns left over ItemStack
* See `minetest.item_eat` and `minetest.register_on_item_eat` * See `minetest.item_eat` and `minetest.register_on_item_eat`
@ -2905,11 +2905,12 @@ These functions return the leftover itemstack.
* returns `itemstack, success` * returns `itemstack, success`
* `minetest.item_drop(itemstack, dropper, pos)` * `minetest.item_drop(itemstack, dropper, pos)`
* Drop the item * Drop the item
* `minetest.item_eat(hp_change, replace_with_item)` * `minetest.item_eat(hp_change, replace_with_item, poison)`
* Eat the item. * Eat the item.
* `replace_with_item` is the itemstring which is added to the inventory. * `replace_with_item` is the itemstring which is added to the inventory.
If the player is eating a stack, then replace_with_item goes to a If the player is eating a stack, then replace_with_item goes to a
different spot. Can be `nil` different spot. Can be `nil`
* `poison` is the value is how much health the player will lose due to poisoning.
* See `minetest.do_item_eat` * See `minetest.do_item_eat`
### Defaults for the `on_punch` and `on_dig` node definition callbacks ### Defaults for the `on_punch` and `on_dig` node definition callbacks