From: Ekdohibs Date: Thu, 21 Dec 2017 09:28:06 +0000 (+0100) Subject: Furnace: Fix being able to cook items without enough fuel X-Git-Tag: 5.0.0~130 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=bd0c627a207b70975dd020dbaa33e0e3a58037bc;p=oweals%2Fminetest_game.git Furnace: Fix being able to cook items without enough fuel This was triggered when too much time had elapsed when timer was called. Also, fix timer resolution giving free fuel time. --- diff --git a/mods/default/furnace.lua b/mods/default/furnace.lua index 162ee4e9..09966a6b 100644 --- a/mods/default/furnace.lua +++ b/mods/default/furnace.lua @@ -118,7 +118,7 @@ local function furnace_node_timer(pos, elapsed) local fuel local update = true - while update do + while elapsed > 0 and update do update = false srclist = inv:get_list("src") @@ -133,13 +133,18 @@ local function furnace_node_timer(pos, elapsed) cooked, aftercooked = minetest.get_craft_result({method = "cooking", width = 1, items = srclist}) cookable = cooked.time ~= 0 + local el = math.min(elapsed, fuel_totaltime - fuel_time) + if cookable then -- fuel lasts long enough, adjust el to cooking duration + el = math.min(el, cooked.time - src_time) + end + -- Check if we have enough fuel to burn if fuel_time < fuel_totaltime then -- The furnace is currently active and has enough fuel - fuel_time = fuel_time + elapsed + fuel_time = fuel_time + el -- If there is a cookable item then check if it is ready yet if cookable then - src_time = src_time + elapsed + src_time = src_time + el if src_time >= cooked.time then -- Place result in dst list if possible if inv:room_for_item("dst", cooked.item) then @@ -148,6 +153,9 @@ local function furnace_node_timer(pos, elapsed) src_time = src_time - cooked.time update = true end + else + -- Item could not be cooked: probably missing fuel + update = true end end else @@ -165,8 +173,7 @@ local function furnace_node_timer(pos, elapsed) -- Take fuel from fuel list inv:set_stack("fuel", 1, afterfuel.items[1]) update = true - fuel_totaltime = fuel.time + (fuel_time - fuel_totaltime) - src_time = src_time + elapsed + fuel_totaltime = fuel.time + (fuel_totaltime - fuel_time) end else -- We don't need to get new fuel since there is no cookable item @@ -176,7 +183,7 @@ local function furnace_node_timer(pos, elapsed) fuel_time = 0 end - elapsed = 0 + elapsed = elapsed - el end if fuel and fuel_totaltime > fuel.time then