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.lua140
1 files changed, 19 insertions, 121 deletions
diff --git a/nodes/node_battery_holder.lua b/nodes/node_battery_holder.lua
index d29e021..6bd4fc3 100644
--- a/nodes/node_battery_holder.lua
+++ b/nodes/node_battery_holder.lua
@@ -20,12 +20,19 @@ local battery_holder_formspec =
default.get_hotbar_bg(0,5.15)
+local holder_groups = {cracky = 3, oddly_breakable_by_hand = 3, digtron = 7, tubedevice = 1, tubedevice_receiver = 1}
+if not minetest.get_modpath("technic") then
+ -- if technic isn't installed there's no point in offering battery holders.
+ -- leave them registered, though, in case technic is being removed from an existing server.
+ holder_groups.not_in_creative_inventory = 1
+end
+
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},
+ groups = holder_groups,
drop = "digtron:battery_holder",
sounds = digtron.metal_sounds,
paramtype2= "facedir",
@@ -53,13 +60,13 @@ minetest.register_node("digtron:battery_holder", {
if listname == "batteries" then
local node_name = stack:get_name()
- -- Only allow RE batteries from technic mode
+ -- Only allow RE batteries from technic mod
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
+ if md and md.charge > 0 then
return stack:get_count()
else
return 0
@@ -85,124 +92,16 @@ minetest.register_node("digtron:battery_holder", {
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
+ local meta = minetest.get_meta(pos)
+ local inv = meta:get_inventory()
+ return inv:add_item("batteries", 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 = 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 and md.charge > 0 then
local meta = minetest.get_meta(pos)
local inv = meta:get_inventory()
return inv:room_for_item("batteries", stack)
@@ -215,5 +114,4 @@ minetest.register_node("digtron:battery_holder", {
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)()
-})
-]]
+}) \ No newline at end of file