mirror of
https://github.com/minetest-mods/digtron.git
synced 2024-12-22 12:22:22 +01:00
Adding combined storage module
This commit is contained in:
parent
f85e42b7fa
commit
6af67133be
13
README.txt
13
README.txt
@ -102,6 +102,11 @@ The fuel costs for digging and building can be configured in the init.lua file.
|
||||
* Dig 60 wood nodes
|
||||
* Dig 80 dirt or sand nodes
|
||||
|
||||
Combined Storage Module
|
||||
-----------------------
|
||||
|
||||
For smaller jobs the two dedicated modules may simply be too much of a good thing, wasting precious Digtron space to give unneeded capacity. The combined storage module is the best of both worlds, splitting its internal space between building material inventory and fuel storage. It has 3/4 building material capacity and 1/4 fuel storage capacity.
|
||||
|
||||
Structural Module
|
||||
-----------------
|
||||
|
||||
@ -190,7 +195,13 @@ Fuel storage modules:
|
||||
|
||||
[furnace,]
|
||||
[core,]
|
||||
|
||||
|
||||
Combined storage:
|
||||
|
||||
[furnace,]
|
||||
[core,]
|
||||
[chest,]
|
||||
|
||||
Structural modules:
|
||||
|
||||
[stick, , stick]
|
||||
|
28
init.lua
28
init.lua
@ -1,7 +1,8 @@
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/util.lua" )
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/pointset.lua" )
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/entities.lua" )
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/node_misc.lua" ) -- contains inventory and structure nodes
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/node_misc.lua" ) -- contains structure and light nodes
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/node_storage.lua" ) -- contains inventory and fuel storage nodes
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/node_diggers.lua" ) -- contains all diggers
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/node_builders.lua" ) -- contains all builders (there's just one currently)
|
||||
dofile( minetest.get_modpath( "digtron" ) .. "/node_controllers.lua" ) -- controllers
|
||||
@ -49,4 +50,29 @@ minetest.register_lbm({
|
||||
meta:set_string("offset", offset)
|
||||
meta:set_string("period", period)
|
||||
end
|
||||
})
|
||||
|
||||
minetest.register_lbm({
|
||||
name = "digtron:fuelstore_upgrade",
|
||||
nodenames = {"digtron:fuelstore"},
|
||||
action = function(pos, node)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
local list = inv:get_list("main")
|
||||
inv:set_list("main", {})
|
||||
inv:set_list("fuel", list)
|
||||
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)
|
||||
)
|
||||
end
|
||||
})
|
@ -48,95 +48,3 @@ minetest.register_node("digtron:light", {
|
||||
wall_side = {-0.5, -0.25, -0.25, -0.1875, 0.25, 0.25},
|
||||
},
|
||||
})
|
||||
|
||||
-- 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;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,
|
||||
|
||||
-- Only allow fuel items to be placed in here
|
||||
allow_metadata_inventory_put = function(pos, listname, index, stack, player)
|
||||
if minetest.is_protected(pos, player:get_player_name()) then
|
||||
return 0
|
||||
end
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
if listname == "main" then
|
||||
if minetest.get_craft_result({method="fuel", width=1, items={stack}}).time ~= 0 then
|
||||
return stack:get_count()
|
||||
else
|
||||
return 0
|
||||
end
|
||||
end
|
||||
end,
|
||||
|
||||
can_dig = function(pos,player)
|
||||
local meta = minetest.get_meta(pos)
|
||||
local inv = meta:get_inventory()
|
||||
return inv:is_empty("main")
|
||||
end,
|
||||
})
|
159
node_storage.lua
Normal file
159
node_storage.lua
Normal file
@ -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,
|
||||
})
|
16
recipes.lua
16
recipes.lua
@ -84,6 +84,15 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digtron:combined_storage",
|
||||
recipe = {
|
||||
{"","default:furnace",""},
|
||||
{"","digtron:digtron_core",""},
|
||||
{"","default:chest",""}
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digtron:structure",
|
||||
recipe = {
|
||||
@ -151,6 +160,13 @@ minetest.register_craft({
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digtron:digtron_core",
|
||||
recipe = {
|
||||
{"digtron:combined_storage"},
|
||||
}
|
||||
})
|
||||
|
||||
minetest.register_craft({
|
||||
output = "digtron:digtron_core",
|
||||
recipe = {
|
||||
|
BIN
textures/digtron_combined_storage.png
Normal file
BIN
textures/digtron_combined_storage.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 853 B |
Binary file not shown.
Before Width: | Height: | Size: 752 B After Width: | Height: | Size: 749 B |
9
util.lua
9
util.lua
@ -105,11 +105,13 @@ digtron.move_node = function(pos, newpos, player_name)
|
||||
local oldmeta = minetest.get_meta(pos)
|
||||
local oldinv = oldmeta:get_inventory()
|
||||
local list = oldinv:get_list("main")
|
||||
local fuel = oldinv:get_list("fuel")
|
||||
local oldformspec = oldmeta:get_string("formspec")
|
||||
|
||||
local newmeta = minetest.get_meta(newpos)
|
||||
local newinv = newmeta:get_inventory()
|
||||
newinv:set_list("main", list)
|
||||
newinv:set_list("fuel", fuel)
|
||||
newmeta:set_string("formspec", oldformspec)
|
||||
|
||||
newmeta:set_string("triggering_player", oldmeta:get_string("triggering_player")) -- for auto-controllers
|
||||
@ -217,6 +219,9 @@ digtron.get_all_digtron_neighbours = function(pos, player)
|
||||
table.insert(layout.builders, testpos)
|
||||
elseif group_number == 5 then
|
||||
table.insert(layout.fuelstores, testpos)
|
||||
elseif group_number == 6 then
|
||||
table.insert(layout.inventories, testpos)
|
||||
table.insert(layout.fuelstores, testpos)
|
||||
end
|
||||
|
||||
--queue up potential new test points adjacent to this digtron node
|
||||
@ -371,7 +376,7 @@ digtron.burn = function(fuelstore_positions, target, test)
|
||||
break
|
||||
end
|
||||
local inv = minetest.get_inventory({type="node", pos=location})
|
||||
local invlist = inv:get_list("main")
|
||||
local invlist = inv:get_list("fuel")
|
||||
for i, itemstack in pairs(invlist) do
|
||||
local fuel_per_item = minetest.get_craft_result({method="fuel", width=1, items={itemstack:peek_item(1)}}).time
|
||||
if fuel_per_item ~= 0 then
|
||||
@ -391,7 +396,7 @@ digtron.burn = function(fuelstore_positions, target, test)
|
||||
end
|
||||
if test ~= true then
|
||||
-- only update the list if we're doing this for real.
|
||||
inv:set_list("main", invlist)
|
||||
inv:set_list("fuel", invlist)
|
||||
end
|
||||
end
|
||||
return current_burned
|
||||
|
Loading…
Reference in New Issue
Block a user