update to furnace

This commit is contained in:
kamirama 2018-01-03 23:20:30 +01:00
parent c7a7fd3771
commit 59ff7b80f6

View File

@ -15,9 +15,9 @@ local function is_smeltable(items)
end end
local function is_item_allowed(pos, target, _, stack) local function is_item_allowed(pos, target, _, stack)
if target == "product" then return 0 end if target == "product" then return 0 end --so no items get moved into the souce inventory by the user
if stack == nil or not is_smeltable({stack}) then if stack == nil or not is_smeltable({stack}) then --invalid or unsmeltable items dont get in
return 0 return 0
else else
return stack:get_count() return stack:get_count()
@ -38,22 +38,6 @@ local function ongetitem(pos)
timer:start(1.0) timer:start(1.0)
end end
local function storeprogress(progress) --store the progress of burning in the node meta, burning items aren't take from source, they simply cant be removed any longer when starting to burn
for x=1,table_getn(progress),1
do
meta.get_string("cookprogess_" + i.progress[x])
end
end
local function restoreprogress(meta,count)
local progress = {}
for x=1,count,1
do
progress[x] = meta:get_string("cookprogess_" .. x)
end
return progress
end
local function mytime(pos, elapsed) local function mytime(pos, elapsed)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
local energy = meta:get_int("energy") local energy = meta:get_int("energy")
@ -66,36 +50,30 @@ local function mytime(pos, elapsed)
--TODO: start cook logic (if there is any energy available start to cook (progress[inventoryslot]++ and commit to meta after all were processed --TODO: start cook logic (if there is any energy available start to cook (progress[inventoryslot]++ and commit to meta after all were processed
meta:set_string("formspec", formspec .. --meta:set_string("formspec", formspec ..
sparktech.makebar("energy.png", 0, 2.1, 9.75, 0.25, --sparktech.makebar(
energy, minetest.get_item_group(minetest.get_node(pos).name, "sparktech_energy_max") --"energy2.png",
, 2)) -- 0, 2.1, 9.75, 0.25,
--energy,
--minetest.get_item_group(minetest.get_node(pos).name, "sparktech_energy_max"), 0))
if (newcycle) then if (newcycle) then
minetest.get_node_timer(pos):start(1.0) minetest.get_node_timer(pos):start(1.0) -- it was determined that a new cycle is required, this is the case if energy and material to cook is available
end end
return return
end end
local function maytake(pos, listname, index, stack, player) local function maytake(pos, listname, index, stack, player)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
if listname == "product" then if listname == "product" then
return tonumber(stack:get_count()) --sure, take the stuff that the furnace has cooked for you :D return tonumber(stack:get_count()) --sure, take the stuff that the furnace has cooked for you :D
end end
local table = restoreprogress(meta,2) -- TODO: code to stop people from taking halfcooked items, they'd burn their fingers
if table[pos] == nil then return stack:get_count() end
if listname == "source" then
if table[pos] > 0 then
return tonumber(stack:get_count() -1)
end end
return tonumber(stack:get_count())
end
end
minetest.register_node(minetest.get_current_modname() .. ":lv_furnace", { minetest.register_node(minetest.get_current_modname() .. ":lv_furnace", {
description = "Electric furnace", description = "Electric furnace",
tiles = { tiles = {
"furnace2.png", "furnace2.png",
"furnace2.png", "furnace2.png",
@ -105,6 +83,7 @@ minetest.register_node(minetest.get_current_modname() .. ":lv_furnace", {
"furnace.png" "furnace.png"
}, },
paramtype2 = "facedir", paramtype2 = "facedir",
groups = { groups = {
sparktech_techy = 1, sparktech_techy = 1,
sparktech_energy_type = 4, sparktech_energy_type = 4,
@ -116,15 +95,21 @@ minetest.register_node(minetest.get_current_modname() .. ":lv_furnace", {
on_timer = mytime, -- add a mytimer function on_timer = mytime, -- add a mytimer function
allow_metadata_inventory_take = maytake, allow_metadata_inventory_take = maytake,
--on_righclick = function(pos, node, player, itemstack, pointed_thing)
--TODO show formspec here, and store that a formspec is open in meta, the mytimer function schould update the formspec if it is open, recievefields schould mark it as closed
--end,
on_construct = function(pos, placer) on_construct = function(pos, placer)
local meta = minetest.get_meta(pos) local meta = minetest.get_meta(pos)
meta:set_string("formspec",formspec) meta:set_string("formspec",formspec) --gonna replace this with crafting the formspec on rightclick instead
local inventory = meta:get_inventory() local inventory = meta:get_inventory()
inventory:set_size('source',2) inventory:set_size('source',2)
inventory:set_size('product',2) inventory:set_size('product',2)
end, end,
allow_metadata_inventory_put = is_item_allowed, allow_metadata_inventory_put = is_item_allowed,
allow_metadata_inventory_move = is_item_allowed_move, allow_metadata_inventory_move = is_item_allowed_move,
on_metadata_inventory_move = ongetitem, --TODO: test these --on_metadata_inventory_move = ongetitem, --doesnt seem necesarry to me, if the item moves in the inventory schould not change the cooking process
on_metadata_inventory_put = ongetitem on_metadata_inventory_put = ongetitem
}) })