Compare commits

...

5 Commits

Author SHA1 Message Date
pithydon 38bbea697a Work with param2s higher than 31. 2020-05-23 21:46:42 -06:00
pithydon 6f67ce8570 Rewrite place logic.
Now is more like Minecraft. Node dig logic removed.
2020-05-21 18:17:26 -06:00
pithydon 8ee3b1c1d0 Add support for some mods. 2020-04-12 21:03:39 -06:00
pithydon 0820b28ae5 Port to Minetest 5 2020-04-12 18:45:02 -06:00
pithydon e2c53c3231 remove number 2019-04-07 12:35:07 -06:00
6 changed files with 387 additions and 36 deletions

View File

@ -1,4 +1,4 @@
mcstair v1.1
mcstair
Minecraft like corner stairs.
@ -35,15 +35,14 @@ For these and/or other purposes and motivations, and without any expectation of
mod api:
```lua
mcstair.add(name, stairtiles)
mcstair.register(subname)
```
"name" is the name of the node to make corner stairs for.
"subname" is the name of the node to register corner stair logic for. Eg "wood" for node "stairs:stair_wood".
"stairtiles" is an optional table of tiles to override textures for inner and outer stairs.
"stairtiles" format is...
"mcstair.add()" is deprecated. When porting to "mcstair.register()" register aliases for preexisting worlds.
```lua
{tiles_def_for_outer_stair, tiles_def_for_inner_stair}
minetest.register_alias("stairs:stair_wood_outer", "stairs:stair_outer_wood")
minetest.register_alias("stairs:stair_wood_inner", "stairs:stair_inner_wood")
```

View File

@ -1,2 +0,0 @@
stairs
farming

View File

@ -1 +0,0 @@
Minecraft like corner stairs.

404
init.lua
View File

@ -2,23 +2,321 @@ mcstair = {}
local get_stair_param = function(node)
local stair = minetest.get_item_group(node.name, "stair")
if stair == 1 then
return node.param2
local param = (node.param2 % 32) % 24
if stair == 0 or (param > 3 and param < 20) then
return
elseif stair == 1 then
return param
elseif stair == 2 then
if node.param2 < 12 then
return node.param2 + 4
if param < 12 then
return param + 4
else
return node.param2 - 4
return param - 4
end
elseif stair == 3 then
if node.param2 < 12 then
return node.param2 + 8
if param < 12 then
return param + 8
else
return node.param2 - 8
return param - 8
end
end
end
function mcstair.register(subname)
local node_def = minetest.registered_nodes["stairs:stair_"..subname]
if node_def == nil then
minetest.log("error", "mcstair: Can not register \"stairs:stair_"..subname.."\". Node not found in registered nodes.")
return
end
local outer_groups = table.copy(node_def.groups)
outer_groups.not_in_creative_inventory = 1
local inner_groups = table.copy(outer_groups)
outer_groups.stair = 2
inner_groups.stair = 3
local drop = node_def.drop or "stairs:stair_"..subname
minetest.override_item("stairs:stair_"..subname, {
after_place_node = function(pos, placer, itemstack, pointed_thing)
local node = minetest.get_node(pos)
if node.param2 == 0 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if param then
if param == 3 or param == 7 or param == 8 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 0 and param ~= 4 and param ~= 9) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 0})
return
end
elseif param == 1 or param == 6 or param == 9 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 0 and param ~= 5 and param ~= 8) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 1})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if param then
if param == 1 or param == 5 or param == 10 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 0 and param ~= 4 and param ~= 9) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 1})
return
end
elseif param == 3 or param == 4 or param == 11 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 0 and param ~= 5 and param ~= 8) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 0})
return
end
end
end
elseif node.param2 == 1 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if param then
if param == 2 or param == 7 or param == 10 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 1 and param ~= 6 and param ~= 9) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 2})
return
end
elseif param == 0 or param == 4 or param == 9 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 1 and param ~= 5 and param ~= 10) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 1})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if param then
if param == 0 or param == 5 or param == 8 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 1 and param ~= 6 and param ~= 9) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 1})
return
end
elseif param == 2 or param == 6 or param == 11 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 1 and param ~= 5 and param ~= 10) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 2})
return
end
end
end
elseif node.param2 == 2 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if param then
if param == 1 or param == 6 or param == 9 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 2 and param ~= 7 and param ~= 10) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 2})
return
end
elseif param == 3 or param == 7 or param == 8 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 2 and param ~= 6 and param ~= 11) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 3})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if param then
if param == 3 or param == 4 or param == 11 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 2 and param ~= 7 and param ~= 10) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 3})
return
end
elseif param == 1 or param == 5 or param == 10 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 2 and param ~= 6 and param ~= 11) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 2})
return
end
end
end
elseif node.param2 == 3 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if param then
if param == 0 or param == 4 or param == 9 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 3 and param ~= 7 and param ~= 8) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 0})
return
end
elseif param == 2 or param == 7 or param == 10 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 3 and param ~= 4 and param ~= 11) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 3})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if param then
if param == 2 or param == 6 or param == 11 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 3 and param ~= 7 and param ~= 8) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 3})
return
end
elseif param == 0 or param == 5 or param == 8 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 3 and param ~= 4 and param ~= 11) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 0})
return
end
end
end
elseif node.param2 == 20 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if param then
if param == 21 or param == 18 or param == 13 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 20 and param ~= 17 and param ~= 12) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 21})
return
end
elseif param == 23 or param == 19 or param == 12 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 20 and param ~= 16 and param ~= 13) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 20})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if param then
if param == 23 or param == 16 or param == 15 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 20 and param ~= 17 and param ~= 12) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 20})
return
end
elseif param == 21 or param == 17 or param == 14 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 20 and param ~= 16 and param ~= 13) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 21})
return
end
end
end
elseif node.param2 == 21 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if param then
if param == 20 or param == 17 or param == 12 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 21 and param ~= 18 and param ~= 13) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 21})
return
end
elseif param == 22 or param == 18 or param == 15 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 21 and param ~= 17 and param ~= 14) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 22})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if param then
if param == 22 or param == 19 or param == 14 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 21 and param ~= 18 and param ~= 13) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 22})
return
end
elseif param == 20 or param == 16 or param == 13 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 21 and param ~= 17 and param ~= 14) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 21})
return
end
end
end
elseif node.param2 == 22 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if param then
if param == 23 or param == 19 or param == 12 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 22 and param ~= 18 and param ~= 15) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 23})
return
end
elseif param == 21 or param == 18 or param == 13 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 22 and param ~= 19 and param ~= 14) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 22})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if param then
if param == 21 or param == 17 or param == 14 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if not param or (param ~= 22 and param ~= 18 and param ~= 15) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 22})
return
end
elseif param == 23 or param == 16 or param == 15 then
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if not param or (param ~= 22 and param ~= 19 and param ~= 14) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 23})
return
end
end
end
elseif node.param2 == 23 then
local param = get_stair_param(minetest.get_node({x = pos.x + 1, y = pos.y, z = pos.z}))
if param then
if param == 22 or param == 18 or param == 15 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 23 and param ~= 19 and param ~= 12) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 23})
return
end
elseif param == 20 or param == 17 or param == 12 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 23 and param ~= 16 and param ~= 15) then
minetest.swap_node(pos, {name = "stairs:stair_outer_"..subname, param2 = 20})
return
end
end
end
local param = get_stair_param(minetest.get_node({x = pos.x - 1, y = pos.y, z = pos.z}))
if param then
if param == 20 or param == 16 or param == 13 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z + 1}))
if not param or (param ~= 23 and param ~= 19 and param ~= 12) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 20})
return
end
elseif param == 22 or param == 19 or param == 14 then
local param = get_stair_param(minetest.get_node({x = pos.x, y = pos.y, z = pos.z - 1}))
if not param or (param ~= 23 and param ~= 16 and param ~= 15) then
minetest.swap_node(pos, {name = "stairs:stair_inner_"..subname, param2 = 23})
return
end
end
end
end
end
})
minetest.override_item("stairs:stair_outer_"..subname, {
groups = outer_groups,
drop = drop
})
minetest.override_item("stairs:stair_inner_"..subname, {
groups = inner_groups,
drop = drop
})
minetest.clear_craft({output = "stairs:stair_outer_"..subname})
minetest.clear_craft({output = "stairs:stair_inner_"..subname})
end
---[[ legacy code
local get_stair_from_param = function(param, stairs)
if param < 12 then
if param < 4 then
@ -640,29 +938,14 @@ function mcstair.add(name, stairtiles)
after_dig_node = function(pos, oldnode) after_dig_node(pos, oldnode) end
})
end
--]]
for _,v in ipairs({
"wood",
"junglewood",
"pine_wood",
"acacia_wood",
"aspen_wood"
}) do
mcstair.add("stairs:stair_"..v, {
{
"default_"..v..".png^(default_"..v..".png^[transformR90^mcstair_turntexture.png^[makealpha:255,0,255)",
"default_"..v..".png^(default_"..v..".png^mcstair_turntexture.png^[transformR270^[makealpha:255,0,255)",
"default_"..v..".png"
},
{
"default_"..v..".png^(default_"..v..".png^[transformR90^(mcstair_turntexture.png^[transformR180)^[makealpha:255,0,255)",
"default_"..v..".png^(default_"..v..".png^[transformR270^(mcstair_turntexture.png^[transformR90)^[makealpha:255,0,255)",
"default_"..v..".png"
}
})
end
for _,v in ipairs({
"aspen_wood",
"stone",
"cobble",
"mossycobble",
@ -685,5 +968,74 @@ for _,v in ipairs({
"bronzeblock",
"goldblock"
}) do
mcstair.add("stairs:stair_"..v)
mcstair.register(v)
minetest.register_alias("stairs:stair_"..v.."_outer", "stairs:stair_outer_"..v)
minetest.register_alias("stairs:stair_"..v.."_inner", "stairs:stair_inner_"..v)
end
for _,v in ipairs({
"desert_sandstone",
"desert_sandstone_brick",
"desert_sandstone_block",
"silver_sandstone",
"silver_sandstone_brick",
"silver_sandstone_block",
"tinblock",
"ice",
"snowblock",
"glass",
"obsidian_glass"
}) do
mcstair.register(v)
end
if minetest.get_modpath("mtg_plus") then
for _,v in ipairs({
"sandstone_cobble",
"desert_sandstone_cobble",
"silver_sandstone_cobble",
"jungle_cobble",
"snow_brick",
"hard_snow_brick",
"ice_snow_brick",
"ice_brick",
"ice_tile4",
"goldwood",
"goldbrick",
"bronzebrick",
"tinbrick",
"copperbrick",
"steelbrick",
"harddirtbrick",
"gravel_cobble"
}) do
mcstair.register(v)
end
end
if minetest.get_modpath("quartz") then
for _,v in ipairs({
"quartzblock",
"quartzstair"
}) do
mcstair.register(v)
end
end
if minetest.get_modpath("xdecor") then
for _,v in ipairs({
"barrel",
"cactusbrick",
"coalstone_tile",
"desertstone_tile",
"hard_clay",
"moonbrick",
"stone_tile",
"stone_rune",
"packed_ice",
"wood_tile",
"woodframed_glass"
}) do
mcstair.register(v)
end
end

View File

@ -1 +1,4 @@
name = mcstair
description = Minecraft like corner stairs.
depends = stairs, farming
optional_depends = mtg_plus, quartz, xdecor

Binary file not shown.

Before

Width:  |  Height:  |  Size: 170 B