Skip to content

Commit

Permalink
Furnace: Fix being able to cook items without enough fuel
Browse files Browse the repository at this point in the history
This was triggered when too much time had elapsed when timer was called.
Also, fix timer resolution giving free fuel time.
  • Loading branch information
Ekdohibs authored and paramat committed Jan 2, 2018
1 parent d1ece74 commit bd0c627
Showing 1 changed file with 13 additions and 6 deletions.
19 changes: 13 additions & 6 deletions mods/default/furnace.lua
Expand Up @@ -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")
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand All @@ -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
Expand Down

0 comments on commit bd0c627

Please sign in to comment.