for i = 1, 5 do minetest.register_node("mesecons_battery:battery_charging_"..i, { drawtype = "nodebox", tiles = {"jeija_battery_charging.png"}, paramtype = "light", is_ground_content = true, walkable = true, node_box = { type = "fixed", fixed = { {-0.499, -0.499, -0.499, -0.4, 0.499, 0.499}, { 0.4, -0.499, -0.499, 0.499, 0.499, 0.499}, {-0.499, -0.499, -0.499, 0.499, 0.499, -0.4 }, {-0.499, -0.499, 0.4, 0.499, 0.499, 0.499 }, {-0.4 , -0.5 , -0.4 , 0.4 , 1*(i/5)-0.5, 0.4}} }, selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, groups = {dig_immediate=2, mesecon = 2, mesecon_effector_on = 1}, description="Battery", }) mesecon:add_receptor_node_off("mesecons_battery:battery_charging_"..i) end for i = 1, 5 do minetest.register_node("mesecons_battery:battery_discharging_"..i, { drawtype = "nodebox", tiles = {"jeija_battery_discharging.png"}, paramtype = "light", is_ground_content = true, walkable = true, node_box = { type = "fixed", fixed = { {-0.499, -0.499, -0.499, -0.4, 0.499, 0.499}, { 0.4, -0.499, -0.499, 0.499, 0.499, 0.499}, {-0.499, -0.499, -0.499, 0.499, 0.499, -0.4 }, {-0.499, -0.499, 0.4, 0.499, 0.499, 0.499 }, {-0.4 , -0.5 , -0.4 , 0.4 , 1*(i/5)-0.5, 0.4}} }, selection_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0.5, 0.5}, }, groups = {dig_immediate=2, not_in_creative_inventory=1, mesecon = 2, mesecon_effector_off = 1}, description="Battery", }) mesecon:add_receptor_node("mesecons_battery:battery_discharging_"..i) end minetest.register_on_placenode(function (pos, newnode, placer) if string.find(newnode.name, "mesecons_battery:battery") then meta = minetest.env:get_meta(pos) meta:set_int("batterystate", tonumber(string.sub(newnode.name, string.len(newnode.name)))*20-19) meta:set_int("charging", 0) end end) minetest.register_on_punchnode(function(pos, node, puncher) if string.find(node.name, "mesecons_battery:battery_charging") then local meta = minetest.env:get_meta(pos); local batterystate = meta:get_int("batterystate") local charging = meta:get_int("charging") minetest.env:remove_node(pos) minetest.env:place_node(pos, {name=string.gsub(node.name, "charging", "discharging")}) mesecon:receptor_on(pos) meta:set_int("batterystate", batterystate) meta:set_int("charging", charging) end if string.find(node.name, "mesecons_battery:battery_discharging") then local meta = minetest.env:get_meta(pos); local batterystate = meta:get_int("batterystate") local charging = meta:get_int("charging") minetest.env:remove_node(pos) minetest.env:place_node(pos, {name=string.gsub(node.name, "discharging", "charging")}) mesecon:receptor_off(pos) meta:set_int("batterystate", batterystate) meta:set_int("charging", charging) end end) minetest.register_abm({ nodenames = {"mesecons_battery:battery_charging_1", "mesecons_battery:battery_charging_2", "mesecons_battery:battery_charging_3", "mesecons_battery:battery_charging_4", "mesecons_battery:battery_charging_5"}, interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local meta = minetest.env:get_meta(pos); if meta:get_int("charging") == 1 then local batterystate = meta:get_int("batterystate") local charging = meta:get_int("charging") local name = node.name; if batterystate < 100 then --change battery charging state batterystate = batterystate + 1 else node.name=string.gsub(node.name, "charging", "discharging") mesecon:receptor_on(pos) end if string.find(node.name, tostring(math.ceil(batterystate/20))) == nil then node.name = string.gsub(node.name, tostring(math.ceil(batterystate/20)-1), tostring(math.ceil(batterystate/20))) --change node for new nodebox model end minetest.env:add_node(pos, node) meta:set_int("batterystate", batterystate) meta:set_int("charging", charging) end end, }) minetest.register_abm({ nodenames = {"mesecons_battery:battery_discharging_1", "mesecons_battery:battery_discharging_2", "mesecons_battery:battery_discharging_3", "mesecons_battery:battery_discharging_4", "mesecons_battery:battery_discharging_5"}, interval = 1, chance = 1, action = function(pos, node, active_object_count, active_object_count_wider) local meta = minetest.env:get_meta(pos); local batterystate = meta:get_int("batterystate") local charging = meta:get_int("charging") local name = node.name; if batterystate > 1 then --change battery charging state batterystate = batterystate - 1 else node.name=string.gsub(node.name, "discharging", "charging") mesecon:receptor_off(pos) end if string.find(node.name, tostring(math.ceil(batterystate/20))) == nil then node.name = string.gsub(node.name, tostring(math.ceil(batterystate/20)+1), tostring(math.ceil(batterystate/20))) --change node for new nodebox model end minetest.env:add_node(pos, node) meta:set_int("batterystate", batterystate) meta:set_int("charging", charging) end, }) mesecon:register_on_signal_on(function(pos, node) if string.find(node.name, "mesecons_battery:battery") then minetest.env:get_meta(pos):set_int("charging", 1) end end) mesecon:register_on_signal_off(function(pos, node) if string.find(node.name, "mesecons_battery:battery") then minetest.env:get_meta(pos):set_int("charging", 0) end end)