diff options
Diffstat (limited to 'nodes/node_battery_holder.lua')
-rw-r--r-- | nodes/node_battery_holder.lua | 140 |
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 |