forked from MTSR/moreblocks
additions mod: gravel and sand
This commit is contained in:
parent
54b2217aeb
commit
54e593572b
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
/.idea/
|
256
crafting.lua
256
crafting.lua
@ -646,3 +646,259 @@ if minetest.settings:get_bool("moreblocks.circular_saw_crafting") ~= false then
|
|||||||
}
|
}
|
||||||
})
|
})
|
||||||
end
|
end
|
||||||
|
|
||||||
|
-- add gravel
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_stonebrick 2",
|
||||||
|
recipe = {
|
||||||
|
{ "default:gravel" },
|
||||||
|
{ "default:stonebrick"},
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_slope 6",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","default:gravel", },
|
||||||
|
{ "", "default:gravel", "default:gravel" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_slope_2a 12",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "", "default:gravel", "default:gravel" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_slope_2b 4",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:gravel", },
|
||||||
|
{ "","","" },
|
||||||
|
{ "", "default:gravel", "default:gravel" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_slope_3a 18",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "default:gravel", "default:gravel", "default:gravel" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_slope_3b 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","default:gravel", },
|
||||||
|
{ "default:gravel", "default:gravel", "default:gravel" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:gravel_slope_3c 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:gravel", },
|
||||||
|
{ "","default:gravel","" },
|
||||||
|
{ "default:gravel", "default:gravel", "default:gravel" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
-- End gravel slope
|
||||||
|
|
||||||
|
-- Песок начало sand --
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_2a 12",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_2b 4",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:sand", },
|
||||||
|
{ "","","" },
|
||||||
|
{ "", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_3a 18",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "default:sand", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_3b 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","default:sand", },
|
||||||
|
{ "default:sand", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_3c 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:sand", },
|
||||||
|
{ "","default:sand","" },
|
||||||
|
{ "default:sand", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
-- Хвойная земля
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_2a 12",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_2b 4",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:dirt_with_coniferous_litter", },
|
||||||
|
{ "","","" },
|
||||||
|
{ "", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_3a 18",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_3b 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","default:dirt_with_coniferous_litter", },
|
||||||
|
{ "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_3c 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:dirt_with_coniferous_litter", },
|
||||||
|
{ "","default:dirt_with_coniferous_litter","" },
|
||||||
|
{ "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
-- Песок конец sand ---- Песок начало sand --
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_2a 12",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_2b 4",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:sand", },
|
||||||
|
{ "","","" },
|
||||||
|
{ "", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_3a 18",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "default:sand", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_3b 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","default:sand", },
|
||||||
|
{ "default:sand", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:sand_slope_3c 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:sand", },
|
||||||
|
{ "","default:sand","" },
|
||||||
|
{ "default:sand", "default:sand", "default:sand" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
-- Хвойная земля
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_2a 12",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_2b 4",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:dirt_with_coniferous_litter", },
|
||||||
|
{ "","","" },
|
||||||
|
{ "", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_3a 18",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","", },
|
||||||
|
{ "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_3b 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","" },
|
||||||
|
{ "","","default:dirt_with_coniferous_litter", },
|
||||||
|
{ "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
minetest.register_craft({
|
||||||
|
output = "moreblocks:dirt_with_coniferous_litter_slope_3c 8",
|
||||||
|
recipe = {
|
||||||
|
{ "","","default:dirt_with_coniferous_litter", },
|
||||||
|
{ "","default:dirt_with_coniferous_litter","" },
|
||||||
|
{ "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter", "default:dirt_with_coniferous_litter" },
|
||||||
|
}
|
||||||
|
})
|
||||||
|
-- Песок конец sand --
|
||||||
|
|
||||||
|
56
models/moreblocks_slope_third.obj
Normal file
56
models/moreblocks_slope_third.obj
Normal file
@ -0,0 +1,56 @@
|
|||||||
|
g top
|
||||||
|
v 0.500000 -0.1667 0.500000
|
||||||
|
v -0.500000 -0.1667 0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 0.8944 -0.4472
|
||||||
|
s off
|
||||||
|
f 2/1/1 1/2/1 4/3/1 3/4/1
|
||||||
|
g bottom
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vn 0.0000 -1.0000 -0.0000
|
||||||
|
s off
|
||||||
|
f 6/5/2 5/6/2 7/7/2 8/8/2
|
||||||
|
g right
|
||||||
|
v -0.500000 -0.1667 0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
vt 1.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
s off
|
||||||
|
f 9/9/3 11/10/3 10/11/3
|
||||||
|
g left
|
||||||
|
v 0.500000 -0.1667 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
vt 0.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
s off
|
||||||
|
f 12/12/4 13/13/4 14/14/4
|
||||||
|
g back
|
||||||
|
v 0.500000 -0.1667 0.500000
|
||||||
|
v -0.500000 -0.1667 0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 0.5000
|
||||||
|
vt 0.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 -0.0000 1.0000
|
||||||
|
s off
|
||||||
|
f 15/15/5 16/16/5 17/17/5 18/18/5
|
72
models/moreblocks_slope_third_raised.obj
Normal file
72
models/moreblocks_slope_third_raised.obj
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
g top
|
||||||
|
v -0.500000 0.166666 0.500000
|
||||||
|
v -0.500000 -0.166666 -0.500000
|
||||||
|
v 0.500000 -0.166666 -0.500000
|
||||||
|
v 0.500000 0.166666 0.500000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vn 0.0000 0.8944 -0.4472
|
||||||
|
s off
|
||||||
|
f 2/1/1 1/2/1 4/3/1 3/4/1
|
||||||
|
g bottom
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vn 0.0000 -1.0000 -0.0000
|
||||||
|
s off
|
||||||
|
f 6/5/2 5/6/2 7/7/2 8/8/2
|
||||||
|
g right
|
||||||
|
v -0.500000 0.166666 0.500000
|
||||||
|
v -0.500000 -0.166666 -0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
s off
|
||||||
|
f 9/9/3 10/10/3 11/11/3 12/12/3
|
||||||
|
g left
|
||||||
|
v 0.500000 -0.166666 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 0.166666 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 0.5000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
s off
|
||||||
|
f 13/13/4 15/14/4 16/15/4 14/16/4
|
||||||
|
g back
|
||||||
|
v -0.500000 0.166666 0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 0.166666 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 -0.0000 1.0000
|
||||||
|
s off
|
||||||
|
f 19/17/5 17/18/5 18/19/5 20/20/5
|
||||||
|
g front
|
||||||
|
v -0.500000 -0.166666 -0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.166666 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
vt 1.0000 0.5000
|
||||||
|
vt 0.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
s off
|
||||||
|
f 21/21/6 23/22/6 24/23/6 22/24/6
|
72
models/moreblocks_slope_third_top.obj
Normal file
72
models/moreblocks_slope_third_top.obj
Normal file
@ -0,0 +1,72 @@
|
|||||||
|
g top
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v -0.500000 0.166666 -0.500000
|
||||||
|
v 0.500000 0.166666 -0.500000
|
||||||
|
v 0.500000 0.500000 0.500000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vn 0.0000 0.8944 -0.4472
|
||||||
|
s off
|
||||||
|
f 2/1/1 1/2/1 4/3/1 3/4/1
|
||||||
|
g bottom
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vn 0.0000 -1.0000 -0.0000
|
||||||
|
s off
|
||||||
|
f 6/5/2 5/6/2 7/7/2 8/8/2
|
||||||
|
g right
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v -0.500000 0.166666 -0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn -1.0000 0.0000 0.0000
|
||||||
|
s off
|
||||||
|
f 9/9/3 10/10/3 11/11/3 12/12/3
|
||||||
|
g left
|
||||||
|
v 0.500000 0.166666 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 0.5000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 1.0000 0.0000 0.0000
|
||||||
|
s off
|
||||||
|
f 13/13/4 15/14/4 16/15/4 14/16/4
|
||||||
|
g back
|
||||||
|
v -0.500000 0.500000 0.500000
|
||||||
|
v -0.500000 -0.500000 0.500000
|
||||||
|
v 0.500000 0.500000 0.500000
|
||||||
|
v 0.500000 -0.500000 0.500000
|
||||||
|
vt 1.0000 1.0000
|
||||||
|
vt 0.0000 1.0000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 -0.0000 1.0000
|
||||||
|
s off
|
||||||
|
f 19/17/5 17/18/5 18/19/5 20/20/5
|
||||||
|
g front
|
||||||
|
v -0.500000 0.166666 -0.500000
|
||||||
|
v -0.500000 -0.500000 -0.500000
|
||||||
|
v 0.500000 0.166666 -0.500000
|
||||||
|
v 0.500000 -0.500000 -0.500000
|
||||||
|
vt 1.0000 0.5000
|
||||||
|
vt 0.0000 0.5000
|
||||||
|
vt 0.0000 0.0000
|
||||||
|
vt 1.0000 0.0000
|
||||||
|
vn 0.0000 0.0000 -1.0000
|
||||||
|
s off
|
||||||
|
f 21/21/6 23/22/6 24/23/6 22/24/6
|
445
nodes.lua
445
nodes.lua
@ -37,6 +37,72 @@ local function wood_tile_replace(itemstack, placer, pointed_thing)
|
|||||||
end
|
end
|
||||||
|
|
||||||
local deprecated = (" ("..S('Deprecated')..")")
|
local deprecated = (" ("..S('Deprecated')..")")
|
||||||
|
|
||||||
|
-- start gravel add part 1
|
||||||
|
local sound_gravel = default.node_sound_gravel_defaults()
|
||||||
|
|
||||||
|
local box_slope = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, -0.25, 0.5},
|
||||||
|
{-0.5, -0.25, -0.25, 0.5, 0, 0.5},
|
||||||
|
{-0.5, 0, 0, 0.5, 0.25, 0.5},
|
||||||
|
{-0.5, 0.25, 0.25, 0.5, 0.5, 0.5}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local box_slope_half = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, -0.375, 0.5},
|
||||||
|
{-0.5, -0.375, -0.25, 0.5, -0.25, 0.5},
|
||||||
|
{-0.5, -0.25, 0, 0.5, -0.125, 0.5},
|
||||||
|
{-0.5, -0.125, 0.25, 0.5, 0, 0.5},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local box_slope_half_raised = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, 0.125, 0.5},
|
||||||
|
{-0.5, 0.125, -0.25, 0.5, 0.25, 0.5},
|
||||||
|
{-0.5, 0.25, 0, 0.5, 0.375, 0.5},
|
||||||
|
{-0.5, 0.375, 0.25, 0.5, 0.5, 0.5},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
local box_slope_third = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, -0.417 , 0.5},
|
||||||
|
{-0.5, -0.417, -0.25, 0.5, -0.333 , 0.5},
|
||||||
|
{-0.5, -0.333, 0, 0.5, -0.250 , 0.5},
|
||||||
|
{-0.5, -0.250, 0.25, 0.5, -0.167, 0.5},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local box_slope_third_raised = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, -0.083 , 0.5},
|
||||||
|
{-0.5, -0.083, -0.25, 0.5, 0 , 0.5},
|
||||||
|
{-0.5, 0 , 0, 0.5, 0.083 , 0.5},
|
||||||
|
{-0.5, 0.083, 0.25, 0.5, 0.167, 0.5},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
local box_slope_third_top = {
|
||||||
|
type = "fixed",
|
||||||
|
fixed = {
|
||||||
|
{-0.5, -0.5, -0.5, 0.5, 0.250, 0.5},
|
||||||
|
{-0.5, 0.250, -0.25, 0.5, 0.333, 0.5},
|
||||||
|
{-0.5, 0.333, 0, 0.5, 0.417, 0.5},
|
||||||
|
{-0.5, 0.417, 0.25, 0.5, 0.5 , 0.5},
|
||||||
|
}
|
||||||
|
}
|
||||||
|
-- end gravel add part 1
|
||||||
|
|
||||||
local nodes = {
|
local nodes = {
|
||||||
["wood_tile"] = {
|
["wood_tile"] = {
|
||||||
description = S("Wooden Tile"),
|
description = S("Wooden Tile"),
|
||||||
@ -491,6 +557,385 @@ local nodes = {
|
|||||||
groups = {cracky = 1, level = 2},
|
groups = {cracky = 1, level = 2},
|
||||||
sounds = sound_metal,
|
sounds = sound_metal,
|
||||||
},
|
},
|
||||||
|
["gravel_stonebrick"] = {
|
||||||
|
description = S("Gravel on Stonebrick"),
|
||||||
|
tiles = {"default_gravel.png",
|
||||||
|
"default_stone_brick.png",
|
||||||
|
"default_gravel.png^[lowpart:50:default_stone_brick.png",
|
||||||
|
"default_gravel.png^[lowpart:50:default_stone_brick.png",
|
||||||
|
"default_gravel.png^[lowpart:50:default_stone_brick.png",
|
||||||
|
"default_gravel.png^[lowpart:50:default_stone_brick.png"},
|
||||||
|
no_stairs = true;
|
||||||
|
groups = {cracky = 3},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
},
|
||||||
|
-- start gravel add part 2
|
||||||
|
["gravel_slope"] = {
|
||||||
|
description = S("Gravel Slope"),
|
||||||
|
tiles = { "default_gravel.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope.obj",
|
||||||
|
collision_box = box_slope,
|
||||||
|
selection_box = box_slope,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["gravel_slope_2a"] = {
|
||||||
|
description = S("Gravel Slope 2a"),
|
||||||
|
tiles = { "default_gravel.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_half.obj",
|
||||||
|
collision_box = box_slope_half,
|
||||||
|
selection_box = box_slope_half,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["gravel_slope_2b"] = {
|
||||||
|
description = S("Gravel Slope 2b"),
|
||||||
|
tiles = { "default_gravel.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_half_raised.obj",
|
||||||
|
collision_box = box_slope_half_raised,
|
||||||
|
selection_box = box_slope_half_raised,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
["gravel_slope_3a"] = {
|
||||||
|
description = S("Gravel Slope 3a"),
|
||||||
|
tiles = { "default_gravel.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third.obj",
|
||||||
|
collision_box = box_slope_third,
|
||||||
|
selection_box = box_slope_third,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["gravel_slope_3b"] = {
|
||||||
|
description = S("Gravel Slope 3b"),
|
||||||
|
tiles = { "default_gravel.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third_raised.obj",
|
||||||
|
collision_box = box_slope_third_raised,
|
||||||
|
selection_box = box_slope_third_raised,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["gravel_slope_3c"] = {
|
||||||
|
description = S("Gravel Slope 3c"),
|
||||||
|
tiles = { "default_gravel.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_gravel,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third_top.obj",
|
||||||
|
collision_box = box_slope_third_top,
|
||||||
|
selection_box = box_slope_third_top,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
-- end gravel add part 2
|
||||||
|
---- Песок начало sand ---
|
||||||
|
|
||||||
|
["sand_slope"] = {
|
||||||
|
description = S("Sand Slope"),
|
||||||
|
tiles = { "default_sand.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_sand,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope.obj",
|
||||||
|
collision_box = box_slope,
|
||||||
|
selection_box = box_slope,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["sand_slope_2a"] = {
|
||||||
|
description = S("Sand Slope 2a"),
|
||||||
|
tiles = { "default_sand.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_sand,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_half.obj",
|
||||||
|
collision_box = box_slope_half,
|
||||||
|
selection_box = box_slope_half,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["sand_slope_2b"] = {
|
||||||
|
description = S("Sand Slope 2b"),
|
||||||
|
tiles = { "default_sand.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_sand,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_half_raised.obj",
|
||||||
|
collision_box = box_slope_half_raised,
|
||||||
|
selection_box = box_slope_half_raised,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
["sand_slope_3a"] = {
|
||||||
|
description = S("Sand Slope 3a"),
|
||||||
|
tiles = { "default_sand.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_sand,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third.obj",
|
||||||
|
collision_box = box_slope_third,
|
||||||
|
selection_box = box_slope_third,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["sand_slope_3b"] = {
|
||||||
|
description = S("Sand Slope 3b"),
|
||||||
|
tiles = { "default_sand.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_sand,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third_raised.obj",
|
||||||
|
collision_box = box_slope_third_raised,
|
||||||
|
selection_box = box_slope_third_raised,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["sand_slope_3c"] = {
|
||||||
|
description = S("Sand Slope 3c"),
|
||||||
|
tiles = { "default_sand.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = sound_sand,
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third_top.obj",
|
||||||
|
collision_box = box_slope_third_top,
|
||||||
|
selection_box = box_slope_third_top,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
--- Хвойная земля
|
||||||
|
|
||||||
|
["dirt_with_coniferous_litter_slope"] = {
|
||||||
|
description = S("Dirt with coniferous litter Slope"),
|
||||||
|
|
||||||
|
--
|
||||||
|
tiles = {"default_coniferous_litter.png",
|
||||||
|
"default_dirt.png",
|
||||||
|
|
||||||
|
"default_coniferous_litter.png^[lowpart:65:default_dirt.png"},
|
||||||
|
--
|
||||||
|
|
||||||
|
--tiles = { "default_coniferous_litter.png" } ,
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
--sounds = sound_dirt_with_coniferous_litter,
|
||||||
|
sounds = default.node_sound_dirt_defaults({
|
||||||
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
}),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope.obj",
|
||||||
|
collision_box = box_slope,
|
||||||
|
selection_box = box_slope,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["dirt_with_coniferous_litter_slope_2a"] = {
|
||||||
|
description = S("Dirt with coniferous litter Slope 2a"),
|
||||||
|
--tiles = { "default_coniferous_litter.png" } ,
|
||||||
|
tiles = {"default_coniferous_litter.png",
|
||||||
|
"default_dirt.png",
|
||||||
|
|
||||||
|
"default_coniferous_litter.png^[lowpart:65:default_dirt.png"},
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = default.node_sound_dirt_defaults({
|
||||||
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
}),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_half.obj",
|
||||||
|
collision_box = box_slope_half,
|
||||||
|
selection_box = box_slope_half,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["dirt_with_coniferous_litter_slope_2b"] = {
|
||||||
|
description = S("Dirt with coniferous litter Slope 2b"),
|
||||||
|
tiles = {"default_coniferous_litter.png",
|
||||||
|
"default_dirt.png",
|
||||||
|
|
||||||
|
"default_coniferous_litter.png^[lowpart:65:default_dirt.png"},
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = default.node_sound_dirt_defaults({
|
||||||
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
}),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_half_raised.obj",
|
||||||
|
collision_box = box_slope_half_raised,
|
||||||
|
selection_box = box_slope_half_raised,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
|
||||||
|
["dirt_with_coniferous_litter_slope_3a"] = {
|
||||||
|
description = S("Dirt with coniferous litter Slope 3a"),
|
||||||
|
tiles = {"default_coniferous_litter.png",
|
||||||
|
"default_dirt.png",
|
||||||
|
|
||||||
|
"default_coniferous_litter.png^[lowpart:60:default_dirt.png"},
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = default.node_sound_dirt_defaults({
|
||||||
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
}),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third.obj",
|
||||||
|
collision_box = box_slope_third,
|
||||||
|
selection_box = box_slope_third,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["dirt_with_coniferous_litter_slope_3b"] = {
|
||||||
|
description = S("Dirt with coniferous litter Slope 3b"),
|
||||||
|
tiles = {"default_coniferous_litter.png",
|
||||||
|
"default_dirt.png"},
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = default.node_sound_dirt_defaults({
|
||||||
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
}),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third_raised.obj",
|
||||||
|
collision_box = box_slope_third_raised,
|
||||||
|
selection_box = box_slope_third_raised,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
},
|
||||||
|
|
||||||
|
["dirt_with_coniferous_litter_slope_3c"] = {
|
||||||
|
description = S("Dirt with coniferous litter Slope 3c"),
|
||||||
|
tiles = {"default_coniferous_litter.png",
|
||||||
|
"default_dirt.png",
|
||||||
|
|
||||||
|
"default_coniferous_litter.png^[lowpart:65:default_dirt.png"},
|
||||||
|
no_stairs = true,
|
||||||
|
groups = {crumbly = 2, falling_node = 1, not_blocking_trains = 1},
|
||||||
|
sounds = default.node_sound_dirt_defaults({
|
||||||
|
footstep = {name = "default_grass_footstep", gain = 0.4},
|
||||||
|
}),
|
||||||
|
drawtype = "mesh",
|
||||||
|
mesh = "moreblocks_slope_third_top.obj",
|
||||||
|
collision_box = box_slope_third_top,
|
||||||
|
selection_box = box_slope_third_top,
|
||||||
|
sunlight_propagates = false,
|
||||||
|
light_source = 0,
|
||||||
|
paramtype = "light",
|
||||||
|
paramtype2 = "facedir", -- neu
|
||||||
|
on_rotate = screwdriver.rotate_simple , -- neu
|
||||||
|
is_ground_content = false, --neu
|
||||||
|
}
|
||||||
|
---- Песок конец sand ---
|
||||||
}
|
}
|
||||||
|
|
||||||
for name, def in pairs(nodes) do
|
for name, def in pairs(nodes) do
|
||||||
|
@ -89,10 +89,11 @@ stairsplus.register_recipes = function(category, alternate, modname, subname, re
|
|||||||
minetest.register_alias(modname.. ":panel_" ..subname.. "_bottom", modname.. ":panel_" ..subname)
|
minetest.register_alias(modname.. ":panel_" ..subname.. "_bottom", modname.. ":panel_" ..subname)
|
||||||
elseif category == "slab" then
|
elseif category == "slab" then
|
||||||
if alternate == "" then
|
if alternate == "" then
|
||||||
minetest.register_craft({
|
--отключение конфликтующего рецепта с модом stairs
|
||||||
output = modname .. ":slab_" .. subname .. " 6",
|
--minetest.register_craft({
|
||||||
recipe = {{recipeitem, recipeitem, recipeitem}},
|
-- output = modname .. ":slab_" .. subname .. " 6",
|
||||||
})
|
-- recipe = {{recipeitem, recipeitem, recipeitem}},
|
||||||
|
--})
|
||||||
|
|
||||||
minetest.register_craft({
|
minetest.register_craft({
|
||||||
type = "shapeless",
|
type = "shapeless",
|
||||||
|
Loading…
x
Reference in New Issue
Block a user