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
Raw Permalink Normal View History

2018-09-23 01:56:51 +00:00
local NAME = minetest.get_current_modname()
2019-10-04 03:13:42 +00:00
local MAX_ENERGY = 200
2018-09-23 01:56:51 +00:00
2019-06-28 17:57:27 +00:00
local formspec = sparktech.add_inventory(8,1.5,
2018-09-29 22:57:59 +00:00
"list[current_name;charge;0,0;1,1;]")
2018-09-23 01:56:51 +00:00
local SPEED = 10
minetest.register_node(NAME ..":charger", {
2019-06-28 17:56:30 +00:00
description = "Electric Charger",
tiles = {
2019-10-04 02:44:30 +00:00
NAME .. "_steel_sideplate.png",
NAME .. "_steel_sideplate.png",
NAME .. "_steel_sideplate.png",
NAME .. "_steel_sideplate.png",
NAME .. "_steel_backplate.png",
NAME .. "_charger_frontplate.png",
2019-06-28 17:56:30 +00:00
},
groups = {
2019-10-04 03:13:42 +00:00
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
2019-06-28 17:56:30 +00:00
},
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")
2018-09-23 01:56:51 +00:00
2019-06-28 17:56:30 +00:00
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)
2018-09-23 01:56:51 +00:00
2019-06-28 17:56:30 +00:00
if energy >= diff then
item_meta:set_int("energy", curr + diff)
energy = energy - diff
meta:set_int("energy", energy)
2018-09-23 01:56:51 +00:00
2019-06-28 17:56:30 +00:00
local f = chgitem:get_definition()._sparktech_update_energy
if f then
chgitem = f(chgitem)
end
inv:set_stack("charge", 1, chgitem)
end
2018-09-23 01:56:51 +00:00
2019-06-28 17:56:30 +00:00
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,
2018-09-23 01:56:51 +00:00
})
minetest.register_craft({
2019-06-28 17:56:30 +00:00
output = NAME .. ":charger",
2018-09-23 01:56:51 +00:00
recipe = {
{ "", "sparkcore:cable", "" },
2019-06-27 07:16:36 +00:00
{ "default:copper_ingot", "sparkcomponent:steel_chasis", "default:copper_ingot" },
2018-09-23 01:56:51 +00:00
{ "", "sparkcore:cable", "" },
}
})