mirror of
https://github.com/minetest-mods/digtron.git
synced 2024-11-19 21:33:43 +01:00
138 lines
4.4 KiB
Lua
138 lines
4.4 KiB
Lua
-- A do-nothing "structural" node, to ensure all digtron nodes that are supposed to be connected to each other can be connected to each other.
|
|
minetest.register_node("digtron:structure", {
|
|
description = "Digger Structure",
|
|
groups = {cracky = 3, oddly_breakable_by_hand=3, digtron = 1},
|
|
drop = "digtron:structure",
|
|
tiles = {"digtron_plate.png"},
|
|
drawtype = "nodebox",
|
|
sounds = default.node_sound_metal_defaults(),
|
|
climbable = true,
|
|
walkable = false,
|
|
paramtype = "light",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{0.3125, 0.3125, -0.5, 0.5, 0.5, 0.5},
|
|
{0.3125, -0.5, -0.5, 0.5, -0.3125, 0.5},
|
|
{-0.5, 0.3125, -0.5, -0.3125, 0.5, 0.5},
|
|
{-0.5, -0.5, -0.5, -0.3125, -0.3125, 0.5},
|
|
{-0.3125, 0.3125, 0.3125, 0.3125, 0.5, 0.5},
|
|
{-0.3125, -0.5, 0.3125, 0.3125, -0.3125, 0.5},
|
|
{-0.5, -0.3125, 0.3125, -0.3125, 0.3125, 0.5},
|
|
{0.3125, -0.3125, 0.3125, 0.5, 0.3125, 0.5},
|
|
{-0.5, -0.3125, -0.5, -0.3125, 0.3125, -0.3125},
|
|
{0.3125, -0.3125, -0.5, 0.5, 0.3125, -0.3125},
|
|
{-0.3125, 0.3125, -0.5, 0.3125, 0.5, -0.3125},
|
|
{-0.3125, -0.5, -0.5, 0.3125, -0.3125, -0.3125},
|
|
}
|
|
},
|
|
})
|
|
|
|
-- A modest light source that will move with the digtron, handy for working in a tunnel you aren't bothering to install permanent lights in.
|
|
minetest.register_node("digtron:light", {
|
|
description = "Digger Light",
|
|
groups = {cracky = 3, oddly_breakable_by_hand=3, digtron = 1},
|
|
drop = "digtron:light",
|
|
tiles = {"digtron_light.png"},
|
|
drawtype = "nodebox",
|
|
paramtype = "light",
|
|
light_source = 10,
|
|
sounds = default.node_sound_glass_defaults(),
|
|
paramtype2 = "wallmounted",
|
|
node_box = {
|
|
type = "wallmounted",
|
|
wall_top = {-0.25, 0.3125, -0.25, 0.25, 0.5, 0.25},
|
|
wall_bottom = {-0.25, -0.3125, -0.25, 0.25, -0.5, 0.25},
|
|
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 = default.node_sound_metal_defaults(),
|
|
paramtype2= "facedir",
|
|
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 = default.node_sound_metal_defaults(),
|
|
paramtype2= "facedir",
|
|
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,
|
|
}) |