Permalink
Browse files

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.
  • Loading branch information...
Ekdohibs authored and paramat committed Dec 21, 2017
1 parent d1ece74 commit bd0c627a207b70975dd020dbaa33e0e3a58037bc
Showing with 13 additions and 6 deletions.
  1. +13 −6 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

0 comments on commit bd0c627

Please sign in to comment.