08045c822d
Moderntables mod code updated, new nodes added. Now it provides: * 5 wooden simple tables * 5 wooden table variants with drawer (2*8 inventory) * 5 metal simple tables * 5 metal table variants with drawer (2*8 inventory) * (optional) Tubelib four-legged machinery stand * (optional) Tubelib standard wooden tables (simple and drawer variant) * (optional) Tubelib wood+metal tables (simple and drawer variant) Signed-off-by: Michal Cieslakiewicz <michal.cieslakiewicz@wp.pl>
488 lines
15 KiB
Lua
488 lines
15 KiB
Lua
--[[
|
|
|
|
=======================================================================
|
|
Modern Tables Mod
|
|
by Micu (c) 2018
|
|
|
|
Copyright (C) 2018 Michal Cieslakiewicz
|
|
|
|
This mod contains full height tables:
|
|
* simple wooden
|
|
* simple metal
|
|
* wooden with drawer
|
|
* metal with drawer
|
|
* (optional) Tubelib-style tables and machinery legs
|
|
|
|
Drawer is a simple inventory 8x2.
|
|
Table drawer is accessible to all players. Storage table cannot be
|
|
destroyed until it is empty.
|
|
|
|
License: LGPLv2.1+
|
|
Media: CC BY-SA
|
|
=======================================================================
|
|
|
|
]]--
|
|
|
|
--[[
|
|
---------
|
|
Variables
|
|
---------
|
|
]]--
|
|
|
|
moderntables = {}
|
|
|
|
local table_nodebox = {
|
|
{ -0.5, 0.375, -0.5, 0.5, 0.5, 0.5 },
|
|
{ -0.5, -0.5, -0.5, -0.375, 0.375, -0.375 },
|
|
{ 0.375, -0.5, -0.5, 0.5, 0.375, -0.375 },
|
|
{ 0.375, -0.5, 0.375, 0.5, 0.375, 0.5 },
|
|
{ -0.5, -0.5, 0.375, -0.375, 0.375, 0.5 },
|
|
}
|
|
|
|
local table_drawer_nodebox = {
|
|
{ -0.5, 0.375, -0.5, 0.5, 0.5, 0.5 },
|
|
{ -0.5, -0.5, -0.5, -0.375, 0.375, -0.375 },
|
|
{ 0.375, -0.5, -0.5, 0.5, 0.375, -0.375 },
|
|
{ 0.375, -0.5, 0.375, 0.5, 0.375, 0.5 },
|
|
{ -0.5, -0.5, 0.375, -0.375, 0.375, 0.5 },
|
|
{ -0.5, 0.125, -0.4375, 0.5, 0.375, 0.5 },
|
|
{ -0.5, 0, -0.5, 0.5, 0.125, 0.5 },
|
|
}
|
|
|
|
local inv_formspec = "size[8,8]" ..
|
|
default.gui_bg ..
|
|
default.gui_bg_img ..
|
|
default.gui_slots ..
|
|
"list[context;inv;0,0.5;8,2;]" ..
|
|
"list[current_player;main;0,3.5;8,1;]" ..
|
|
"list[current_player;main;0,4.75;8,3;8]" ..
|
|
"listring[context;inv]" ..
|
|
"listring[current_player;main]" ..
|
|
default.get_hotbar_bg(0, 3.5)
|
|
|
|
--[[
|
|
---------
|
|
Callbacks
|
|
---------
|
|
]]--
|
|
|
|
-- do not allow to dig table with non-empty drawer
|
|
local function can_dig(pos, player)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
return inv:is_empty("inv")
|
|
end
|
|
|
|
-- init storage metadata
|
|
local function after_place_node(pos, placer, itemstack, pointed_thing)
|
|
local meta = minetest.get_meta(pos)
|
|
local inv = meta:get_inventory()
|
|
inv:set_size('inv', 8 * 2)
|
|
meta:set_string("formspec", inv_formspec)
|
|
end
|
|
|
|
--[[
|
|
-------
|
|
Helpers
|
|
-------
|
|
]]--
|
|
|
|
-- Simple wooden tables:
|
|
-- subname (string) is one of: acacia_wood, aspen_wood,
|
|
-- junglewood, pine_wood, wood
|
|
local function register_simple_wood_table(subname, description)
|
|
local fullname = "moderntables:simple_table_" .. subname
|
|
minetest.register_node(fullname, {
|
|
description = description,
|
|
tiles = { "default_" .. subname .. ".png", },
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
place_param2 = 0,
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, oddly_breakable_by_hand = 2,
|
|
flammable = 2, },
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_rotate = screwdriver.disallow,
|
|
})
|
|
local slabitem = "stairs:slab_" .. subname
|
|
local wooditem = "default:" .. subname
|
|
minetest.register_craft({
|
|
output = fullname,
|
|
recipe = {
|
|
{ slabitem, slabitem, slabitem },
|
|
{ wooditem, "", wooditem },
|
|
{ wooditem, "", wooditem },
|
|
},
|
|
})
|
|
end
|
|
|
|
-- Storage wooden tables:
|
|
-- subname (string) is one of: acacia_wood, aspen_wood,
|
|
-- junglewood, pine_wood, wood
|
|
local function register_storage_wood_table(subname, description)
|
|
local fullname = "moderntables:storage_table_" .. subname
|
|
minetest.register_node(fullname, {
|
|
description = description,
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"default_" .. subname .. ".png",
|
|
"default_" .. subname .. ".png",
|
|
"default_" .. subname .. ".png",
|
|
"default_" .. subname .. ".png",
|
|
"default_" .. subname .. ".png",
|
|
"default_" .. subname .. ".png^moderntables_drawer_handle.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_drawer_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, oddly_breakable_by_hand = 2,
|
|
flammable = 2, },
|
|
sounds = default.node_sound_wood_defaults(),
|
|
formspec = inv_formspec,
|
|
on_rotate = screwdriver.rotate_simple,
|
|
can_dig = can_dig,
|
|
after_place_node = after_place_node,
|
|
})
|
|
local slabitem = "stairs:slab_" .. subname
|
|
local wooditem = "default:" .. subname
|
|
minetest.register_craft({
|
|
output = fullname,
|
|
recipe = {
|
|
{ slabitem, slabitem, slabitem },
|
|
{ wooditem, "default:chest", wooditem },
|
|
{ wooditem, "", wooditem },
|
|
},
|
|
})
|
|
minetest.register_craft({
|
|
output = fullname,
|
|
type = "shapeless",
|
|
recipe = { "moderntables:simple_table_" .. subname,
|
|
"default:chest" },
|
|
})
|
|
end
|
|
|
|
-- Simple metal tables:
|
|
-- subname (string) is one of: bronze, tin, copper, steel, gold
|
|
local function register_simple_metal_table(subname, description)
|
|
local fullname = "moderntables:simple_table_" .. subname
|
|
minetest.register_node(fullname, {
|
|
description = description,
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"moderntables_" .. subname .. "_top.png",
|
|
"moderntables_" .. subname .. "_top.png",
|
|
"moderntables_" .. subname .. "_side.png",
|
|
"moderntables_" .. subname .. "_side.png",
|
|
"moderntables_" .. subname .. "_side.png",
|
|
"moderntables_" .. subname .. "_side.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
place_param2 = 0,
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2,
|
|
oddly_breakable_by_hand = 2, },
|
|
sounds = default.node_sound_metal_defaults(),
|
|
on_rotate = screwdriver.disallow,
|
|
})
|
|
local ingotitem = "default:" .. subname .. "_ingot"
|
|
minetest.register_craft({
|
|
output = fullname,
|
|
recipe = {
|
|
{ ingotitem, "group:wood", ingotitem },
|
|
{ ingotitem, "", ingotitem },
|
|
{ ingotitem, "", ingotitem },
|
|
},
|
|
})
|
|
end
|
|
|
|
-- Storage metal tables:
|
|
-- subname (string) is one of: bronze, tin, copper, steel, gold
|
|
local function register_storage_metal_table(subname, description)
|
|
local fullname = "moderntables:storage_table_" .. subname
|
|
minetest.register_node(fullname, {
|
|
description = description,
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"moderntables_" .. subname .. "_top.png",
|
|
"moderntables_" .. subname .. "_top.png",
|
|
"moderntables_" .. subname .. "_side.png^moderntables_" .. subname .. "_drawer_side.png",
|
|
"moderntables_" .. subname .. "_side.png^moderntables_" .. subname .. "_drawer_side.png",
|
|
"moderntables_" .. subname .. "_side.png^moderntables_" .. subname .. "_drawer_side.png",
|
|
"moderntables_" .. subname .. "_side.png^moderntables_" .. subname .. "_drawer_front.png^moderntables_drawer_handle.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_drawer_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2,
|
|
oddly_breakable_by_hand = 2, },
|
|
sounds = default.node_sound_metal_defaults(),
|
|
on_rotate = screwdriver.rotate_simple,
|
|
can_dig = can_dig,
|
|
after_place_node = after_place_node,
|
|
})
|
|
local ingotitem = "default:" .. subname .. "_ingot"
|
|
minetest.register_craft({
|
|
output = fullname,
|
|
recipe = {
|
|
{ ingotitem, "group:wood", ingotitem },
|
|
{ ingotitem, "default:chest", ingotitem },
|
|
{ ingotitem, "", ingotitem },
|
|
},
|
|
})
|
|
minetest.register_craft({
|
|
output = fullname,
|
|
type = "shapeless",
|
|
recipe = { "moderntables:simple_table_" .. subname,
|
|
"default:chest" },
|
|
})
|
|
end
|
|
|
|
--[[
|
|
------------------------------
|
|
Node and crafting registration
|
|
------------------------------
|
|
]]--
|
|
|
|
register_simple_wood_table("acacia_wood", "Simple Acacia Wood Table")
|
|
register_simple_wood_table("aspen_wood", "Simple Aspen Wood Table")
|
|
register_simple_wood_table("junglewood", "Simple Junglewood Table")
|
|
register_simple_wood_table("pine_wood", "Simple Pine Wood Table")
|
|
register_simple_wood_table("wood", "Simple Wooden Table")
|
|
register_storage_wood_table("acacia_wood", "Acacia Wood Table with Drawer")
|
|
register_storage_wood_table("aspen_wood", "Aspen Wood Table with Drawer")
|
|
register_storage_wood_table("junglewood", "Junglewood Table with Drawer")
|
|
register_storage_wood_table("pine_wood", "Pine Wood Table with Drawer")
|
|
register_storage_wood_table("wood", "Wooden Table with Drawer")
|
|
|
|
register_simple_metal_table("bronze", "Simple Bronze Metal Table")
|
|
register_simple_metal_table("tin", "Simple Tin Metal Table")
|
|
register_simple_metal_table("copper", "Simple Copper Metal Table")
|
|
register_simple_metal_table("steel", "Simple Steel Metal Table")
|
|
register_simple_metal_table("gold", "Simple Gold Metal Table")
|
|
register_storage_metal_table("bronze", "Bronze Metal Table with Drawer")
|
|
register_storage_metal_table("tin", "Tin Metal Table with Drawer")
|
|
register_storage_metal_table("copper", "Copper Metal Table with Drawer")
|
|
register_storage_metal_table("steel", "Steel Metal Table with Drawer")
|
|
register_storage_metal_table("gold", "Gold Metal Table with Drawer")
|
|
|
|
if minetest.get_modpath("tubelib") then
|
|
-- Simple Tubelib-style wooden table
|
|
minetest.register_node("moderntables:tubelib_table", {
|
|
description = "Simple Tubelib Table",
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"tubelib_front.png",
|
|
"tubelib_front.png^moderntables_tubelib_legs_top.png",
|
|
"tubelib_front.png",
|
|
"tubelib_front.png",
|
|
"tubelib_front.png",
|
|
"tubelib_front.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
place_param2 = 0,
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2 },
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_rotate = screwdriver.disallow,
|
|
})
|
|
-- Tubelib-style wooden table with drawer inventory
|
|
minetest.register_node("moderntables:tubelib_storage_table", {
|
|
description = "Tubelib Table with Drawer",
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"tubelib_front.png",
|
|
"tubelib_front.png^moderntables_tubelib_legs_top.png",
|
|
"tubelib_front.png^moderntables_tubelib_drawer_side.png",
|
|
"tubelib_front.png^moderntables_tubelib_drawer_side.png",
|
|
"tubelib_front.png^moderntables_tubelib_drawer_side.png",
|
|
"tubelib_front.png^moderntables_tubelib_drawer_side.png^moderntables_drawer_handle.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_drawer_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2 },
|
|
sounds = default.node_sound_wood_defaults(),
|
|
formspec = inv_formspec,
|
|
on_rotate = screwdriver.rotate_simple,
|
|
can_dig = can_dig,
|
|
after_place_node = after_place_node,
|
|
})
|
|
-- Simple Tubelib-inspired metal table
|
|
minetest.register_node("moderntables:tubelib_metal_table", {
|
|
description = "Simple Tubelib Metal Table",
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"moderntables_tubelib_metal_top.png",
|
|
"moderntables_tubelib_metal_top.png^moderntables_tubelib_legs_bottom.png",
|
|
"moderntables_tubelib_side.png",
|
|
"moderntables_tubelib_side.png",
|
|
"moderntables_tubelib_side.png",
|
|
"moderntables_tubelib_side.png"
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
place_param2 = 0,
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2 },
|
|
sounds = default.node_sound_metal_defaults(),
|
|
on_rotate = screwdriver.disallow,
|
|
})
|
|
-- Tubelib-inspired metal table with drawer inventory
|
|
minetest.register_node("moderntables:tubelib_storage_metal_table", {
|
|
description = "Tubelib Metal Table with Drawer",
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"moderntables_tubelib_metal_top.png",
|
|
"moderntables_tubelib_metal_top.png^moderntables_tubelib_legs_bottom.png",
|
|
"moderntables_tubelib_side.png^moderntables_tubelib_metal_drawer_side.png",
|
|
"moderntables_tubelib_side.png^moderntables_tubelib_metal_drawer_side.png",
|
|
"moderntables_tubelib_side.png^moderntables_tubelib_metal_drawer_side.png",
|
|
"moderntables_tubelib_side.png^moderntables_tubelib_metal_drawer_front.png^moderntables_drawer_handle.png",
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = table_drawer_nodebox,
|
|
},
|
|
selection_box = {
|
|
type = "fixed",
|
|
fixed = { -0.5, -0.5, -0.5, 0.5, 0.5, 0.5 },
|
|
},
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2 },
|
|
sounds = default.node_sound_metal_defaults(),
|
|
formspec = inv_formspec,
|
|
on_rotate = screwdriver.rotate_simple,
|
|
can_dig = can_dig,
|
|
after_place_node = after_place_node,
|
|
})
|
|
-- Four wooden legs with metal shoes to support Tubelib machines
|
|
minetest.register_node("moderntables:tubelib_stand", {
|
|
description = "Simple Tubelib Stand",
|
|
tiles = {
|
|
-- up, down, right, left, back, front
|
|
"moderntables_tubelib_legs_top.png",
|
|
"moderntables_tubelib_legs_bottom.png",
|
|
"moderntables_tubelib_legs_side.png",
|
|
"moderntables_tubelib_legs_side.png",
|
|
"moderntables_tubelib_legs_side.png",
|
|
"moderntables_tubelib_legs_side.png"
|
|
},
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{ -0.5, -0.5, 0.375, -0.375, 0.5, 0.5 },
|
|
{ 0.375, -0.5, 0.375, 0.5, 0.5, 0.5 },
|
|
{ -0.5, -0.5, -0.5, -0.375, 0.5, -0.375 },
|
|
{ 0.375, -0.5, -0.5, 0.5, 0.5, -0.375 },
|
|
}
|
|
},
|
|
paramtype = "light",
|
|
sunlight_propagates = true,
|
|
paramtype2 = "facedir",
|
|
place_param2 = 0,
|
|
groups = { choppy = 2, cracky = 2, crumbly = 2 },
|
|
is_ground_content = false,
|
|
sounds = default.node_sound_wood_defaults(),
|
|
on_rotate = screwdriver.disallow,
|
|
})
|
|
minetest.register_craft({
|
|
output = "moderntables:tubelib_stand",
|
|
recipe = {
|
|
{ "group:wood", "", "group:wood" },
|
|
{ "group:wood", "", "group:wood" },
|
|
{ "default:steel_ingot", "", "default:steel_ingot" },
|
|
},
|
|
})
|
|
minetest.register_craft({
|
|
output = "moderntables:tubelib_table",
|
|
type = "shapeless",
|
|
recipe = { "moderntables:tubelib_stand", "group:wood",
|
|
"group:wood", "group:wood" },
|
|
})
|
|
minetest.register_craft({
|
|
output = "moderntables:tubelib_metal_table",
|
|
type = "shapeless",
|
|
recipe = { "moderntables:tubelib_stand", "default:steel_ingot",
|
|
"default:steel_ingot", "default:steel_ingot" },
|
|
})
|
|
minetest.register_craft({
|
|
output = "moderntables:tubelib_storage_table",
|
|
type = "shapeless",
|
|
recipe = { "moderntables:tubelib_table", "default:chest" },
|
|
})
|
|
minetest.register_craft({
|
|
output = "moderntables:tubelib_storage_metal_table",
|
|
type = "shapeless",
|
|
recipe = { "moderntables:tubelib_metal_table", "default:chest" },
|
|
})
|
|
end
|