This repository has been archived on 2020-05-24. You can view files and clone it, but cannot push or open issues or pull requests.
minetest-mod-sparktech/sparktool/lua/charger.lua

91 lines
2.4 KiB
Lua

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", "" },
}
})