diff options
author | FaceDeer <derksenmobile@gmail.com> | 2017-01-06 12:07:27 -0700 |
---|---|---|
committer | FaceDeer <derksenmobile@gmail.com> | 2017-01-06 12:07:27 -0700 |
commit | 6af67133be0524a1482e512038c5c1267b0ba1b9 (patch) | |
tree | 161ca36b21401aec266ad0436721aa9f41fe85a7 /node_storage.lua | |
parent | f85e42b7fafa3697cca51ff257aa58d7cedaffc6 (diff) |
Adding combined storage module
Diffstat (limited to 'node_storage.lua')
-rw-r--r-- | node_storage.lua | 159 |
1 files changed, 159 insertions, 0 deletions
diff --git a/node_storage.lua b/node_storage.lua new file mode 100644 index 0000000..1a9d39b --- /dev/null +++ b/node_storage.lua @@ -0,0 +1,159 @@ +-- Storage buffer. Builder nodes draw from this inventory and digger nodes deposit into it. +-- Note that inventories are digtron group 2. +minetest.register_node("digtron:inventory", +{ + description = "Digtron Inventory Hopper", + groups = {cracky = 3, oddly_breakable_by_hand=3, digtron = 2}, + drop = "digtron:inventory", + sounds = digtron.metal_sounds, + paramtype2= "facedir", + is_ground_content = false, + tiles = {"digtron_inventory.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;Inventory items]" .. + "list[current_name;main;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;main]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,5.15) + ) + local inv = meta:get_inventory() + inv:set_size("main", 8*4) + end, + + can_dig = function(pos,player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty("main") + end, +}) + +-- Fuel storage. Controller node draws fuel from here. +-- Note that fuel stores are digtron group 5. +minetest.register_node("digtron:fuelstore", +{ + description = "Digtron Fuel Hopper", + groups = {cracky = 3, oddly_breakable_by_hand=3, digtron = 5}, + drop = "digtron:fuelstore", + sounds = digtron.metal_sounds, + paramtype2= "facedir", + is_ground_content = false, + tiles = {"digtron_fuelstore.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;Fuel items]" .. + "list[current_name;fuel;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;fuel]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,5.15) + ) + local inv = meta:get_inventory() + inv:set_size("fuel", 8*4) + end, + + -- Only allow fuel items to be placed in fuel + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + if listname == "fuel" then + if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + return stack:get_count() + 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("fuel") + end, +}) + +-- Combined storage. Group 6 has both an inventory and a fuel store +minetest.register_node("digtron:combined_storage", +{ + description = "Digtron Combined Storage", + groups = {cracky = 3, oddly_breakable_by_hand=3, digtron = 6}, + drop = "digtron:combined_storage", + sounds = digtron.metal_sounds, + paramtype2= "facedir", + is_ground_content = false, + tiles = {"digtron_combined_storage.png"}, + + on_construct = function(pos) + local meta = minetest.get_meta(pos) + meta:set_string("formspec", + "size[8,9.9]" .. + default.gui_bg .. + default.gui_bg_img .. + default.gui_slots .. + "label[0,0;Inventory items]" .. + "list[current_name;main;0,0.6;8,3;]" .. + "label[0,3.5;Fuel items]" .. + "list[current_name;fuel;0,4.1;8,1;]" .. + "list[current_player;main;0,5.75;8,1;]" .. + "list[current_player;main;0,6.98;8,3;8]" .. + "listring[current_name;fuel]" .. + "listring[current_player;main]" .. + default.get_hotbar_bg(0,5.75) + ) + local inv = meta:get_inventory() + inv:set_size("main", 8*3) + inv:set_size("fuel", 8*1) + end, + + -- Only allow fuel items to be placed in fuel + allow_metadata_inventory_put = function(pos, listname, index, stack, player) + if minetest.is_protected(pos, player:get_player_name()) then + return 0 + end + if listname == "fuel" then + if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + return stack:get_count() + else + return 0 + end + end + return stack:get_count() -- otherwise, allow all drops + end, + + allow_metadata_inventory_move = function(pos, from_list, from_index, to_list, to_index, count, player) + if to_list == "main" then + return count + end + + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + local stack = inv:get_stack(from_list, from_index) + if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then + return stack:get_count() + end + return 0 + end, + + can_dig = function(pos,player) + local meta = minetest.get_meta(pos) + local inv = meta:get_inventory() + return inv:is_empty("fuel") and inv:is_empty("main") + end, +}) |