local NAME = minetest.get_current_modname() local MAX_ENERGY = 200 local formspec = sparktech.add_inventory(8,1.5, "list[current_name;charge;0,0;1,1;]") local SPEED = 10 minetest.register_node(NAME ..":charger", { description = "Electric Charger", tiles = { NAME .. "_steel_sideplate.png", NAME .. "_steel_sideplate.png", NAME .. "_steel_sideplate.png", NAME .. "_steel_sideplate.png", NAME .. "_steel_backplate.png", NAME .. "_charger_frontplate.png", }, groups = { sparktech_techy = WRENCHABLE, sparktech_energy_type = ENERGY_CONSUMER, sparktech_energy_storeonbreak = TRUE, sparktech_net_trigger = TRUE, sparktech_energy_max = MAX_ENERGY, sparktech_energy_wakeup = 10 }, allow_metadata_inventory_put = function (_, _, _, itemstack) if minetest.get_item_group(itemstack:get_name(), "sparktech_chargable") > 0 then return 1 else return 0 end end, on_metadata_inventory_put = function (pos) local meta = minetest.get_meta(pos) if meta:get_int("energy") <= 0 then return end local timer = minetest.get_node_timer(pos) timer:start(1.0) end, on_timer = function (pos, elapsed) local meta = minetest.get_meta(pos) local energy = meta:get_int("energy") local inv = meta:get_inventory() local chgitem = inv:get_stack("charge", 1) local item_meta = chgitem:get_meta() local max = minetest.get_item_group(chgitem:get_name(), "sparktech_chargable") local curr = item_meta:get_int("energy") local diff = math.min(max - curr, SPEED) if energy >= diff then item_meta:set_int("energy", curr + diff) energy = energy - diff meta:set_int("energy", energy) local f = chgitem:get_definition()._sparktech_update_energy if f then chgitem = f(chgitem) end inv:set_stack("charge", 1, chgitem) end if diff ~= 0 then local timer = minetest.get_node_timer(pos) timer:start(1.0) end meta:set_string("formspec", formspec .. sparktech.makebar("energy2.png", 1.25, 0.0, 8, 1, energy, minetest.get_item_group(minetest.get_node(pos).name, "sparktech_energy_max"), 0)) end, on_construct = function(pos, placer) local meta = minetest.get_meta(pos) meta:set_string("formspec", formspec) local inventory = meta:get_inventory() inventory:set_size('charge', 1) end, }) minetest.register_craft({ output = NAME .. ":charger", recipe = { { "", "sparkcore:cable", "" }, { "default:copper_ingot", "sparkcomponent:steel_chasis", "default:copper_ingot" }, { "", "sparkcore:cable", "" }, } })