Burnergenerator fixes
-fixed energy overflow -fixed invalid items beeing allowed -fixed restarting the burnergenrator on recieving new item
This commit is contained in:
parent
5c08a12c8b
commit
ceeca9ddde
@ -1,4 +1,6 @@
|
|||||||
local fuel_multiplier = 2
|
local fuel_multiplier = 2
|
||||||
|
local interval = 0.5
|
||||||
|
|
||||||
|
|
||||||
local NAME = minetest.get_current_modname()
|
local NAME = minetest.get_current_modname()
|
||||||
|
|
||||||
@ -10,9 +12,28 @@ local formspec =
|
|||||||
"bgcolor[#FC05E344;false]" ..
|
"bgcolor[#FC05E344;false]" ..
|
||||||
"listcolors[#fc059db0;#fc059dd0]"
|
"listcolors[#fc059db0;#fc059dd0]"
|
||||||
|
|
||||||
|
local function is_fuel(items)
|
||||||
|
local fuel
|
||||||
|
local afterfuel
|
||||||
|
fuel, afterfuel = minetest.get_craft_result({method = "fuel", width = 1, items = items})
|
||||||
|
return fuel["time"] ~= 0
|
||||||
|
end
|
||||||
|
|
||||||
|
local function is_item_allowed(pos, target, _, stack)
|
||||||
|
if stack == nil or not is_fuel({stack}) then
|
||||||
|
return 0
|
||||||
|
else
|
||||||
|
return stack:get_count()
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
local function ongetitem(pos) -- could add checking if energy >= max energy here, not really required since timer does that first thing anyway
|
||||||
|
local timer = minetest.get_node_timer(pos):start(interval)
|
||||||
|
end
|
||||||
|
|
||||||
local function update_formspec(pos)
|
local function update_formspec(pos)
|
||||||
local meta = minetest.get_meta(pos)
|
local meta = minetest.get_meta(pos)
|
||||||
local inventory = meta:get_inventory()
|
local inventory = meta:get_inventory()
|
||||||
local cfmsp = formspec
|
local cfmsp = formspec
|
||||||
|
|
||||||
local energy = meta:get_int("energy")
|
local energy = meta:get_int("energy")
|
||||||
@ -22,75 +43,97 @@ local function update_formspec(pos)
|
|||||||
local rem_en_or = meta:get_int("rem_energy_or_")
|
local rem_en_or = meta:get_int("rem_energy_or_")
|
||||||
|
|
||||||
cfmsp = cfmsp ..
|
cfmsp = cfmsp ..
|
||||||
sparktech.makebar("progress2.png", 1, 0, 8.5, 0.5,
|
sparktech.makebar("progress2.png", 1, 0, 8.5, 0.5, rem_en, rem_en_or, 0)
|
||||||
rem_en, rem_en_or, 0)
|
|
||||||
|
|
||||||
cfmsp = cfmsp ..
|
cfmsp = cfmsp ..
|
||||||
sparktech.makebar("energy2.png", 1, 0.5, 8.5, 0.5,
|
sparktech.makebar("energy2.png", 1, 0.5, 8.5, 0.5, energy, energy_max, 0)
|
||||||
energy, energy_max, 0)
|
|
||||||
meta:set_string("formspec", cfmsp)
|
meta:set_string("formspec", cfmsp)
|
||||||
end
|
end
|
||||||
|
|
||||||
minetest.register_node(NAME .. ":burnergenerator", {
|
minetest.register_node(NAME .. ":burnergenerator", {
|
||||||
description = "Burner Generator",
|
description = "Burner Generator",
|
||||||
tiles = {
|
tiles = {
|
||||||
"generator2.png",
|
"generator2.png",
|
||||||
"generator2.png",
|
"generator2.png",
|
||||||
"generator2.png",
|
"generator2.png",
|
||||||
"generator2.png",
|
"generator2.png",
|
||||||
"generator2.png",
|
"generator2.png",
|
||||||
"generator.png"},
|
"generator.png"},
|
||||||
paramtype2 = "facedir",
|
paramtype2 = "facedir",
|
||||||
groups = {
|
groups = {
|
||||||
sparktech_techy = 1,
|
--sparktech_energy_wakeup = 2,
|
||||||
sparktech_energy_type = 2,
|
-- sparktech_energy_wakeup
|
||||||
sparktech_net_trigger = 1,
|
-- mode 1: wake on giving energy (only triggers if previous = 0)
|
||||||
sparktech_energy_max = 5000
|
-- mode 2: wake on taking energy (only triggers if previous = max)
|
||||||
},
|
-- TODO: Implement sparktech_energy_wakeup, furnace could also use this
|
||||||
on_construct = function(pos)
|
sparktech_techy = 1,
|
||||||
local meta = minetest.get_meta(pos)
|
sparktech_energy_type = 2,
|
||||||
meta:set_string("formspec", formspec)
|
sparktech_net_trigger = 1,
|
||||||
meta:set_int("rem_energy_", 0)
|
sparktech_energy_max = 2000
|
||||||
local inv = meta:get_inventory()
|
},
|
||||||
inv:set_size('fuel', 1)
|
on_construct = function(pos)
|
||||||
minetest.get_node_timer(pos):start(0.5)
|
local meta = minetest.get_meta(pos)
|
||||||
end,
|
meta:set_string("formspec", formspec)
|
||||||
on_timer = function(pos, elapsed) -- Reduce number of ticks like in the furnace
|
meta:set_int("rem_energy_", 0)
|
||||||
local meta = minetest.get_meta(pos)
|
local inv = meta:get_inventory()
|
||||||
|
inv:set_size('fuel', 1)
|
||||||
local rem_energy = meta:get_int("rem_energy_")
|
-- minetest.get_node_timer(pos):start(interval)
|
||||||
if rem_energy > 0 then
|
-- not required! its not like we got items on construct
|
||||||
local change
|
end,
|
||||||
if rem_energy > 5 then
|
|
||||||
change = 5
|
|
||||||
else
|
|
||||||
change = rem_energy
|
|
||||||
end
|
|
||||||
meta:set_int("rem_energy_", meta:get_int("rem_energy_") - change)
|
|
||||||
meta:set_int("energy", meta:get_int("energy") + change)
|
|
||||||
else
|
|
||||||
local inv = meta:get_inventory()
|
|
||||||
local itemlist = inv:get_list("fuel")
|
|
||||||
local fuel, product = minetest.get_craft_result({method = "fuel", width = 1, items = itemlist})
|
|
||||||
local node = minetest.get_node(pos)
|
|
||||||
if fuel["time"] ~= 0 then
|
|
||||||
inv:set_stack("fuel", 1, product["items"][1])
|
|
||||||
|
|
||||||
local fuel_energy = fuel["time"] * fuel_multiplier
|
allow_metadata_inventory_put = is_item_allowed,
|
||||||
meta:set_int("rem_energy_or_", fuel_energy)
|
|
||||||
meta:set_int("rem_energy_", fuel_energy)
|
on_metadata_inventory_put = ongetitem,
|
||||||
end
|
|
||||||
end
|
on_timer = function(pos, elapsed) -- Reduce number of ticks like in the furnace
|
||||||
|
local meta = minetest.get_meta(pos)
|
||||||
|
local max_energy = minetest.get_item_group(minetest.get_node(pos).name, "sparktech_energy_max")
|
||||||
|
local energy = meta:get_int("energy")
|
||||||
|
if (energy >= max_energy) then
|
||||||
|
return -- at this point no new cycle is requested, and as such the thing halts,
|
||||||
|
-- NOTE: would be really usefull to get the energy system to call the
|
||||||
|
-- ontimer function upon taking energy out here!!
|
||||||
|
end
|
||||||
|
|
||||||
update_formspec(pos) -- Later this should only be done when a player looks into the block
|
local rem_energy = meta:get_int("rem_energy_")
|
||||||
|
|
||||||
minetest.get_node_timer(pos):start(0.5)
|
if rem_energy > 0 then
|
||||||
end
|
local change
|
||||||
|
if rem_energy > 5 then
|
||||||
|
change = 5
|
||||||
|
else
|
||||||
|
change = rem_energy
|
||||||
|
end
|
||||||
|
meta:set_int("rem_energy_", meta:get_int("rem_energy_") - change)
|
||||||
|
if (energy + change >= max_energy) then
|
||||||
|
meta:set_int("energy", max_energy)
|
||||||
|
else
|
||||||
|
meta:set_int("energy", energy + change)
|
||||||
|
end
|
||||||
|
else
|
||||||
|
local inv = meta:get_inventory()
|
||||||
|
local itemlist = inv:get_list("fuel")
|
||||||
|
local fuel, product = minetest.get_craft_result({method = "fuel", width = 1, items = itemlist})
|
||||||
|
local node = minetest.get_node(pos)
|
||||||
|
if fuel["time"] ~= 0 then
|
||||||
|
inv:set_stack("fuel", 1, product["items"][1])
|
||||||
|
|
||||||
|
local fuel_energy = fuel["time"] * fuel_multiplier
|
||||||
|
meta:set_int("rem_energy_or_", fuel_energy)
|
||||||
|
meta:set_int("rem_energy_", fuel_energy)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
update_formspec(pos) -- Later this should only be done when a player looks into the block
|
||||||
|
|
||||||
|
minetest.get_node_timer(pos):start(interval)
|
||||||
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
output = NAME .. ":burnergenerator",
|
output = NAME .. ":burnergenerator",
|
||||||
recipe = {{ 'group:steelplate', 'group:steelplate', 'group:steelplate' },
|
recipe = {{ 'group:steelplate', 'group:steelplate', 'group:steelplate' },
|
||||||
{ 'group:steelplate', 'default:clay_brick', 'group:steelplate' },
|
{ 'group:steelplate', 'default:clay_brick', 'group:steelplate' },
|
||||||
{ 'group:steelplate', 'default:copper_ingot', 'group:steelplate' }}
|
{ 'group:steelplate', 'default:copper_ingot', 'group:steelplate' }}
|
||||||
})
|
})
|
Loading…
x
Reference in New Issue
Block a user