-- Minetest 0.4 mod: stairs
-- See README.txt for licensing and other information.
+
+-- Global namespace for functions
+
stairs = {}
+
+-- Get setting for replace ABM
+
+local replace = minetest.setting_getbool("enable_stairs_replace_abm")
+
+
+-- Register stairs.
-- Node will be called stairs:stair_<subname>
+
function stairs.register_stair(subname, recipeitem, groups, images, description, sounds)
minetest.register_node(":stairs:stair_" .. subname, {
description = description,
param2 = minetest.dir_to_facedir(dir)
end
- if p0.y-1 == p1.y then
+ if p0.y - 1 == p1.y then
param2 = param2 + 20
if param2 == 21 then
param2 = 23
})
-- for replace ABM
- minetest.register_node(":stairs:stair_" .. subname.."upside_down", {
- replace_name = "stairs:stair_" .. subname,
- groups = {slabs_replace=1},
- })
+ if replace then
+ minetest.register_node(":stairs:stair_" .. subname .. "upside_down", {
+ replace_name = "stairs:stair_" .. subname,
+ groups = {slabs_replace = 1},
+ })
+ end
minetest.register_craft({
output = 'stairs:stair_' .. subname .. ' 6',
})
end
+
+-- Register slabs.
-- Node will be called stairs:slab_<subname>
+
function stairs.register_slab(subname, recipeitem, groups, images, description, sounds)
minetest.register_node(":stairs:slab_" .. subname, {
description = description,
local n0_is_upside_down = (n0.name == "stairs:slab_" .. subname and
n0.param2 >= 20)
- if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and p0.y+1 == p1.y then
+ if n0.name == "stairs:slab_" .. subname and not n0_is_upside_down and
+ p0.y + 1 == p1.y then
slabpos = p0
slabnode = n0
elseif n1.name == "stairs:slab_" .. subname then
pointed_thing.above = slabpos
local success
- fakestack, success = minetest.item_place(fakestack, placer, pointed_thing)
+ fakestack, success = minetest.item_place(fakestack, placer,
+ pointed_thing)
-- If the item was taken from the fake stack, decrement original
if success then
itemstack:set_count(fakestack:get_count())
end
-- Upside down slabs
- if p0.y-1 == p1.y then
+ if p0.y - 1 == p1.y then
-- Turn into full block if pointing at a existing slab
if n0_is_upside_down then
-- Remove the slab at the position of the slab
pointed_thing.above = p0
local success
- fakestack, success = minetest.item_place(fakestack, placer, pointed_thing)
+ fakestack, success = minetest.item_place(fakestack, placer,
+ pointed_thing)
-- If the item was taken from the fake stack, decrement original
if success then
itemstack:set_count(fakestack:get_count())
end
-- If pointing at the side of a upside down slab
- if n0_is_upside_down and p0.y+1 ~= p1.y then
+ if n0_is_upside_down and p0.y + 1 ~= p1.y then
param2 = 20
end
})
-- for replace ABM
- minetest.register_node(":stairs:slab_" .. subname.."upside_down", {
- replace_name = "stairs:slab_"..subname,
- groups = {slabs_replace=1},
- })
+ if replace then
+ minetest.register_node(":stairs:slab_" .. subname .. "upside_down", {
+ replace_name = "stairs:slab_".. subname,
+ groups = {slabs_replace = 1},
+ })
+ end
minetest.register_craft({
output = 'stairs:slab_' .. subname .. ' 6',
})
end
--- Replace old "upside_down" nodes with new param2 versions
-minetest.register_abm({
- nodenames = {"group:slabs_replace"},
- interval = 8,
- chance = 1,
- action = function(pos, node)
- node.name = minetest.registered_nodes[node.name].replace_name
- node.param2 = node.param2 + 20
- if node.param2 == 21 then
- node.param2 = 23
- elseif node.param2 == 23 then
- node.param2 = 21
- end
- minetest.set_node(pos, node)
- end,
-})
+-- Optionally replace old "upside_down" nodes with new param2 versions.
+-- Disabled by default.
+
+if replace then
+ minetest.register_abm({
+ nodenames = {"group:slabs_replace"},
+ interval = 8,
+ chance = 1,
+ action = function(pos, node)
+ node.name = minetest.registered_nodes[node.name].replace_name
+ node.param2 = node.param2 + 20
+ if node.param2 == 21 then
+ node.param2 = 23
+ elseif node.param2 == 23 then
+ node.param2 = 21
+ end
+ minetest.set_node(pos, node)
+ end,
+ })
+end
+
+
+-- Stair/slab registration function.
-- Nodes will be called stairs:{stair,slab}_<subname>
-function stairs.register_stair_and_slab(subname, recipeitem, groups, images, desc_stair, desc_slab, sounds)
+
+function stairs.register_stair_and_slab(subname, recipeitem, groups, images,
+ desc_stair, desc_slab, sounds)
stairs.register_stair(subname, recipeitem, groups, images, desc_stair, sounds)
stairs.register_slab(subname, recipeitem, groups, images, desc_slab, sounds)
end
+
+-- Register default stairs and slabs
+
stairs.register_stair_and_slab("wood", "default:wood",
{snappy = 2, choppy = 2, oddly_breakable_by_hand = 2, flammable = 3},
{"default_wood.png"},
"Desert Stone Brick Slab",
default.node_sound_stone_defaults())
-stairs.register_stair_and_slab("brick", "default:brick",
- {cracky = 3},
- {"default_brick.png"},
- "Brick Stair",
- "Brick Slab",
- default.node_sound_stone_defaults())
-
stairs.register_stair_and_slab("sandstone", "default:sandstone",
{crumbly = 2, cracky = 2},
{"default_sandstone.png"},
"Obsidian Brick Stair",
"Obsidian Brick Slab",
default.node_sound_stone_defaults())
+
+stairs.register_stair_and_slab("brick", "default:brick",
+ {cracky = 3},
+ {"default_brick.png"},
+ "Brick Stair",
+ "Brick Slab",
+ default.node_sound_stone_defaults())
+
+stairs.register_stair_and_slab("straw", "farming:straw",
+ {snappy = 3, flammable = 4},
+ {"farming_straw.png"},
+ "Straw Stair",
+ "Straw Slab",
+ default.node_sound_leaves_defaults())
+
+stairs.register_stair_and_slab("steelblock", "default:steelblock",
+ {cracky = 1, level = 2},
+ {"default_steel_block.png"},
+ "Steel Block Stair",
+ "Steel Block Slab",
+ default.node_sound_stone_defaults())
+
+stairs.register_stair_and_slab("copperblock", "default:copperblock",
+ {cracky = 1, level = 2},
+ {"default_copper_block.png"},
+ "Copper Block Stair",
+ "Copper Block Slab",
+ default.node_sound_stone_defaults())
+
+stairs.register_stair_and_slab("bronzeblock", "default:bronzeblock",
+ {cracky = 1, level = 2},
+ {"default_bronze_block.png"},
+ "Bronze Block Stair",
+ "Bronze Block Slab",
+ default.node_sound_stone_defaults())
+
+stairs.register_stair_and_slab("goldblock", "default:goldblock",
+ {cracky = 1},
+ {"default_gold_block.png"},
+ "Gold Block Stair",
+ "Gold Block Slab",
+ default.node_sound_stone_defaults())