91 lines
2.4 KiB
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", "" },
|
|
}
|
|
})
|