mirror of
https://github.com/minetest-mods/moreblocks.git
synced 2024-11-15 23:10:18 +01:00
246 lines
5.9 KiB
Lua
246 lines
5.9 KiB
Lua
local rotate_and_place = minetest.rotate_and_place
|
|
|
|
local get_node_vars = stairs.util.get_node_vars
|
|
local get_stair_images = stairs.util.get_stair_images
|
|
|
|
local legacy = {}
|
|
|
|
local nodeboxes = {
|
|
stair = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
|
{-0.5, 0.0, 0.0, 0.5, 0.5, 0.5},
|
|
},
|
|
},
|
|
slab = {
|
|
type = "fixed",
|
|
fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5},
|
|
},
|
|
stair_inner = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
|
{-0.5, 0.0, 0.0, 0.5, 0.5, 0.5},
|
|
{-0.5, 0.0, -0.5, 0.0, 0.5, 0.0},
|
|
},
|
|
},
|
|
stair_outer = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-0.5, -0.5, -0.5, 0.5, 0.0, 0.5},
|
|
{-0.5, 0.0, 0.0, 0.0, 0.5, 0.5},
|
|
},
|
|
},
|
|
}
|
|
|
|
local function register_generic(name, recipeitem, groups, images, description, sounds, worldaligntex, nodebox)
|
|
if not nodebox then
|
|
error()
|
|
end
|
|
|
|
local light_source, texture_alpha, sunlight = get_node_vars(recipeitem)
|
|
|
|
local stair_images = get_stair_images(images, worldaligntex)
|
|
|
|
minetest.register_node(name, {
|
|
description = description,
|
|
drawtype = "nodebox",
|
|
tiles = stair_images,
|
|
use_texture_alpha = texture_alpha,
|
|
sunlight_propagates = sunlight,
|
|
light_source = light_source,
|
|
paramtype = "light",
|
|
paramtype2 = "facedir",
|
|
is_ground_content = false,
|
|
groups = groups,
|
|
sounds = sounds,
|
|
node_box = nodebox,
|
|
on_place = function(itemstack, placer, pointed_thing)
|
|
if pointed_thing.type ~= "node" then
|
|
return itemstack
|
|
end
|
|
|
|
return rotate_and_place(itemstack, placer, pointed_thing)
|
|
end,
|
|
})
|
|
end
|
|
|
|
function legacy.register_stair(subname, recipeitem, groups, images, description, sounds, worldaligntex)
|
|
local new_groups = table.copy(groups)
|
|
new_groups.stair = 1
|
|
|
|
register_generic(":stairs:stair_" .. subname, recipeitem, new_groups, images, description, sounds,
|
|
worldaligntex, nodeboxes.stair)
|
|
|
|
if recipeitem and minetest.registered_nodes[recipeitem] then
|
|
-- Recipe matches appearence in inventory
|
|
minetest.register_craft({
|
|
output = "stairs:stair_" .. subname .. " 8",
|
|
recipe = {
|
|
{"", "", recipeitem},
|
|
{"", recipeitem, recipeitem},
|
|
{recipeitem, recipeitem, recipeitem},
|
|
},
|
|
})
|
|
|
|
-- Use stairs to craft full blocks again (1:1)
|
|
minetest.register_craft({
|
|
output = recipeitem .. " 3",
|
|
recipe = {
|
|
{"stairs:stair_" .. subname, "stairs:stair_" .. subname},
|
|
{"stairs:stair_" .. subname, "stairs:stair_" .. subname},
|
|
},
|
|
})
|
|
|
|
-- Fuel
|
|
local baseburntime = minetest.get_craft_result({
|
|
method = "fuel",
|
|
width = 1,
|
|
items = {recipeitem}
|
|
}).time
|
|
|
|
if baseburntime > 0 then
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "stairs:stair_" .. subname,
|
|
burntime = math.floor(baseburntime * 0.75),
|
|
})
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- Register slab
|
|
-- Node will be called stairs:slab_<subname>
|
|
|
|
function legacy.register_slab(subname, recipeitem, groups, images, description, sounds, worldaligntex)
|
|
local new_groups = table.copy(groups)
|
|
new_groups.slab = 1
|
|
|
|
register_generic(":stairs:slab_" .. subname, recipeitem, new_groups, images, description, sounds,
|
|
worldaligntex, nodeboxes.slab)
|
|
|
|
if recipeitem and minetest.registered_nodes[recipeitem] then
|
|
minetest.register_craft({
|
|
output = "stairs:slab_" .. subname .. " 6",
|
|
recipe = {
|
|
{recipeitem, recipeitem, recipeitem},
|
|
},
|
|
})
|
|
|
|
-- Use 2 slabs to craft a full block again (1:1)
|
|
minetest.register_craft({
|
|
output = recipeitem,
|
|
recipe = {
|
|
{"stairs:slab_" .. subname},
|
|
{"stairs:slab_" .. subname},
|
|
},
|
|
})
|
|
|
|
-- Fuel
|
|
local baseburntime = minetest.get_craft_result({
|
|
method = "fuel",
|
|
width = 1,
|
|
items = {recipeitem}
|
|
}).time
|
|
if baseburntime > 0 then
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "stairs:slab_" .. subname,
|
|
burntime = math.floor(baseburntime * 0.5),
|
|
})
|
|
end
|
|
end
|
|
end
|
|
|
|
-- Register inner stair
|
|
-- Node will be called stairs:stair_inner_<subname>
|
|
|
|
function legacy.register_stair_inner(subname, recipeitem, groups, images, description, sounds, worldaligntex,
|
|
full_description)
|
|
|
|
local new_groups = table.copy(groups)
|
|
new_groups.stair = 1
|
|
if full_description then
|
|
description = full_description
|
|
else
|
|
description = "Inner " .. description
|
|
end
|
|
|
|
register_generic(":stairs:stair_inner_" .. subname, recipeitem, new_groups, images, description, sounds,
|
|
worldaligntex, nodeboxes.stair_inner)
|
|
|
|
if recipeitem and minetest.registered_nodes[recipeitem] then
|
|
minetest.register_craft({
|
|
output = "stairs:stair_inner_" .. subname .. " 7",
|
|
recipe = {
|
|
{"", recipeitem, ""},
|
|
{recipeitem, "", recipeitem},
|
|
{recipeitem, recipeitem, recipeitem},
|
|
},
|
|
})
|
|
|
|
-- Fuel
|
|
local baseburntime = minetest.get_craft_result({
|
|
method = "fuel",
|
|
width = 1,
|
|
items = {recipeitem}
|
|
}).time
|
|
|
|
if baseburntime > 0 then
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "stairs:stair_inner_" .. subname,
|
|
burntime = math.floor(baseburntime * 0.875),
|
|
})
|
|
end
|
|
end
|
|
end
|
|
|
|
|
|
-- Register outer stair
|
|
-- Node will be called stairs:stair_outer_<subname>
|
|
|
|
function legacy.register_stair_outer(subname, recipeitem, groups, images, description, sounds, worldaligntex,
|
|
full_description)
|
|
local new_groups = table.copy(groups)
|
|
new_groups.stair = 1
|
|
|
|
if full_description then
|
|
description = full_description
|
|
else
|
|
description = "Outer " .. description
|
|
end
|
|
|
|
register_generic(":stairs:stair_outer_" .. subname, recipeitem, new_groups, images, description, sounds,
|
|
worldaligntex, nodeboxes.stair_outer)
|
|
|
|
if recipeitem and minetest.registered_nodes[recipeitem] then
|
|
minetest.register_craft({
|
|
output = "stairs:stair_outer_" .. subname .. " 6",
|
|
recipe = {
|
|
{"", recipeitem, ""},
|
|
{recipeitem, recipeitem, recipeitem},
|
|
},
|
|
})
|
|
|
|
-- Fuel
|
|
local baseburntime = minetest.get_craft_result({
|
|
method = "fuel",
|
|
width = 1,
|
|
items = {recipeitem}
|
|
}).time
|
|
|
|
if baseburntime > 0 then
|
|
minetest.register_craft({
|
|
type = "fuel",
|
|
recipe = "stairs:stair_outer_" .. subname,
|
|
burntime = math.floor(baseburntime * 0.625),
|
|
})
|
|
end
|
|
end
|
|
end
|
|
|
|
stairs.legacy = legacy
|