summaryrefslogtreecommitdiff
path: root/nodes/node_battery_holder.lua
diff options
context:
space:
mode:
Diffstat (limited to 'nodes/node_battery_holder.lua')
-rw-r--r--nodes/node_battery_holder.lua219
1 files changed, 219 insertions, 0 deletions
diff --git a/nodes/node_battery_holder.lua b/nodes/node_battery_holder.lua
new file mode 100644
index 0000000..d29e021
--- /dev/null
+++ b/nodes/node_battery_holder.lua
@@ -0,0 +1,219 @@
+-- internationalization boilerplate
+local MP = minetest.get_modpath(minetest.get_current_modname())
+local S, NS = dofile(MP.."/intllib.lua")
+
+
+-- Battery storage. Controller node draws electrical power from here.
+-- Note that batttery boxes are digtron group 7.
+
+local battery_holder_formspec =
+ "size[8,9.3]" ..
+ default.gui_bg ..
+ default.gui_bg_img ..
+ default.gui_slots ..
+ "label[0,0;" .. S("Batteries") .. "]" ..
+ "list[current_name;batteries;0,0.6;8,4;]" ..
+ "list[current_player;main;0,5.15;8,1;]" ..
+ "list[current_player;main;0,6.38;8,3;8]" ..
+ "listring[current_name;batteries]" ..
+ "listring[current_player;main]" ..
+ default.get_hotbar_bg(0,5.15)
+
+
+minetest.register_node("digtron:battery_holder", {
+ description = S("Digtron Battery Holder"),
+ _doc_items_longdesc = digtron.doc.battery_holder_longdesc,
+ _doc_items_usagehelp = digtron.doc.battery_holder_usagehelp,
+ _digtron_formspec = battery_holder_formspec,
+ groups = {cracky = 3, oddly_breakable_by_hand = 3, digtron = 7, tubedevice = 1, tubedevice_receiver = 1},
+ drop = "digtron:battery_holder",
+ sounds = digtron.metal_sounds,
+ paramtype2= "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ is_ground_content = false,
+ tiles = {
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ },
+
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("formspec", battery_holder_formspec)
+ local inv = meta:get_inventory()
+ inv:set_size("batteries", 8*4)
+ end,
+
+ -- Only allow RE batteries to be placed in the inventory
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ if listname == "batteries" then
+ local node_name = stack:get_name()
+
+ -- Only allow RE batteries from technic mode
+ if node_name == "technic:battery" then
+ local meta = stack:get_metadata()
+ local md = minetest.deserialize(meta)
+ -- And specifically if they hold any charge
+ -- Disregard empty batteries, the player should know better
+ if md.charge > 0 then
+ return stack:get_count()
+ else
+ return 0
+ end
+
+ else
+ return 0
+ end
+ end
+ return 0
+ end,
+
+
+ can_dig = function(pos,player)
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:is_empty("batteries")
+ end,
+
+ -- Pipeworks compatibility
+ -- Because who wouldn't send batteries through pipes if he could?
+ -----------------------------------------------------------------
+
+ tube = (function() if minetest.get_modpath("pipeworks") then return {
+ insert_object = function(pos, node, stack, direction)
+ if minetest.get_craft_result({method="batteries", width=1, items={stack}}).time ~= 0 then
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:add_item("batteries", stack)
+ end
+ return stack
+ end,
+ can_insert = function(pos, node, stack, direction)
+ if minetest.get_craft_result({method="batteries", width=1, items={stack}}).time ~= 0 then
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:room_for_item("batteries", stack)
+ end
+ return false
+ end,
+ input_inventory = "batteries",
+ connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
+ } end end)(),
+
+ after_place_node = (function() if minetest.get_modpath("pipeworks") then return pipeworks.after_place end end)(),
+ after_dig_node = (function() if minetest.get_modpath("pipeworks")then return pipeworks.after_dig end end)()
+})
+
+
+
+
+----------------------------- previous version below
+
+--[[
+
+
+minetest.register_node("digtron:battery_holder", {
+ description = S("Digtron Battery Holder"),
+ _doc_items_longdesc = digtron.doc.batteryholder_longdesc,
+ _doc_items_usagehelp = digtron.doc.batteryholder_usagehelp,
+ groups = {cracky = 3, oddly_breakable_by_hand=3, digtron = 7, tubedevice = 1, tubedevice_receiver = 1},
+ drop = "digtron:battery_holder",
+ sounds = digtron.metal_sounds,
+ paramtype2= "facedir",
+ drawtype = "nodebox",
+ paramtype = "light",
+ is_ground_content = false,
+ tiles = {
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ "digtron_plate.png^digtron_crossbrace.png^digtron_battery.png^digtron_storage.png",
+ },
+
+ on_construct = function(pos)
+ local meta = minetest.get_meta(pos)
+ meta:set_string("formspec",
+ "size[8,9.3]" ..
+ default.gui_bg ..
+ default.gui_bg_img ..
+ default.gui_slots ..
+ "label[0,0;" .. S("Batteries") .. "]" ..
+ "list[current_name;batteries;0,0.6;8,4;]" ..
+ "list[current_player;main;0,5.15;8,1;]" ..
+ "list[current_player;main;0,6.38;8,3;8]" ..
+ "listring[current_name;batteries]" ..
+ "listring[current_player;main]" ..
+ default.get_hotbar_bg(0,5.15)
+ )
+ local inv = meta:get_inventory()
+ inv:set_size("batteries", 8*4)
+ end,
+
+ -- Only allow RE batteries to be placed in the inventory
+ allow_metadata_inventory_put = function(pos, listname, index, stack, player)
+ if listname == "batteries" then
+ local node_name = stack:get_name()
+
+ -- Only allow RE batteries from technic mode
+ if node_name == "technic:battery" then
+ local meta = stack:get_metadata()
+-- minetest.chat_send_all(minetest.serialize(meta))
+ local md = minetest.deserialize(meta)
+ minetest.chat_send_all("Battery has charge: "..md.charge)
+ -- And specifically if they hold any charge
+ if md.charge > 0 then
+ return stack:get_count()
+ else
+ return 0
+ end
+
+ else
+ return 0
+ end
+ end
+ return 0
+ end,
+
+ can_dig = function(pos,player)
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:is_empty("batteries")
+ end,
+
+
+ -- Pipeworks compatibility
+ ----------------------------------------------------------------
+
+ tube = (function() if minetest.get_modpath("pipeworks") then return {
+ insert_object = function(pos, node, stack, direction)
+ local node_name = stack:get_name()
+ if node_name == "technic:battery" then
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:add_item("batteries", stack)
+ end
+ return stack
+ end,
+ can_insert = function(pos, node, stack, direction)
+ local node_name = stack:get_name()
+ if node_name == "technic:battery" then
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:room_for_item("batteries", stack)
+ end
+ return false
+ end,
+ input_inventory = "batteries",
+ connect_sides = {left = 1, right = 1, back = 1, front = 1, bottom = 1, top = 1}
+ } end end)(),
+
+ after_place_node = (function() if minetest.get_modpath("pipeworks") then return pipeworks.after_place end end)(),
+ after_dig_node = (function() if minetest.get_modpath("pipeworks")then return pipeworks.after_dig end end)()
+})
+]]