155 lines
5.4 KiB
Lua
155 lines
5.4 KiB
Lua
walls = {}
|
|
|
|
local S = minetest.get_translator_auto(true)
|
|
walls.S = S
|
|
|
|
walls.register = function(wall_name, wall_desc, wall_texture_table, wall_mat, wall_sounds, not_in_cinv)
|
|
-- inventory node, and pole-type wall start item
|
|
minetest.register_node(wall_name, {
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "connected",
|
|
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
|
connect_front = {-3/16, -1/2, -1/2, 3/16, 3/8, -1/4},
|
|
connect_left = {-1/2, -1/2, -3/16, -1/4, 3/8, 3/16},
|
|
connect_back = {-3/16, -1/2, 1/4, 3/16, 3/8, 1/2},
|
|
connect_right = { 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}
|
|
},
|
|
collision_box = {
|
|
type = "connected",
|
|
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2 + 3/8, 1/4},
|
|
connect_front = {-1/4, -1/2, -1/2, 1/4, 1/2 + 3/8, -1/4},
|
|
connect_left = {-1/2, -1/2, -1/4, -1/4, 1/2 + 3/8, 1/4},
|
|
connect_back = {-1/4, -1/2, 1/4, 1/4, 1/2 + 3/8, 1/2},
|
|
connect_right = {1/4, -1/2, -1/4, 1/2, 1/2 + 3/8, 1/4}
|
|
},
|
|
connects_to = {"group:wall", "group:stone", "group:fence"},
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
tiles = wall_texture_table,
|
|
walkable = true,
|
|
groups = {cracky = 3, wall = 1, stone = 2, not_in_creative_inventory = 1},
|
|
sounds = wall_sounds,
|
|
drop = wall_name .. "_inv",
|
|
after_dig_node = function(pos, _, _, digger)
|
|
local pos_under = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
local node_under = (minetest.get_node(pos_under).name):gsub("_full$", "")
|
|
if minetest.get_item_group(node_under, "wall") == 1 and
|
|
digger and digger:is_player() then
|
|
minetest.set_node(pos_under, {name = node_under})
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_node(wall_name .. "_full", {
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "connected",
|
|
fixed = {-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
|
connect_front = {-3/16, -1/2, -1/2, 3/16, 1/2, -1/4},
|
|
connect_left = {-1/2, -1/2, -3/16, -1/4, 1/2, 3/16},
|
|
connect_back = {-3/16, -1/2, 1/4, 3/16, 1/2, 1/2},
|
|
connect_right = { 1/4, -1/2, -3/16, 1/2, 1/2, 3/16},
|
|
},
|
|
connects_to = {"group:wall", "group:stone", "group:fence"},
|
|
paramtype = "light",
|
|
is_ground_content = false,
|
|
tiles = wall_texture_table,
|
|
groups = {cracky = 3, wall = 1, stone = 2, not_in_creative_inventory = 1},
|
|
sounds = wall_sounds,
|
|
drop = wall_name .. "_inv",
|
|
after_dig_node = function(pos, _, _, digger)
|
|
local pos_under = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
local node_under = (minetest.get_node(pos_under).name):gsub("_full$", "")
|
|
if minetest.get_item_group(node_under, "wall") == 1 and
|
|
digger and digger:is_player() then
|
|
minetest.set_node(pos_under, {name = node_under})
|
|
end
|
|
end
|
|
})
|
|
|
|
minetest.register_node(wall_name .. "_inv", {
|
|
description = wall_desc,
|
|
drawtype = "nodebox",
|
|
node_box = {
|
|
type = "fixed",
|
|
fixed = {
|
|
{-1/4, -1/2, -1/4, 1/4, 1/2, 1/4},
|
|
{-1/2, -1/2, -3/16, -1/4, 3/8, 3/16},
|
|
{ 1/4, -1/2, -3/16, 1/2, 3/8, 3/16}
|
|
}
|
|
},
|
|
paramtype = "light",
|
|
tiles = wall_texture_table,
|
|
groups = {cracky = 3, wall = 1, stone = 2, not_in_creative_inventory = not_in_cinv and 1 or 0},
|
|
|
|
on_construct = function(pos)
|
|
minetest.set_node(pos, {name = wall_name})
|
|
end,
|
|
after_place_node = function(pos)
|
|
local pos_under = {x = pos.x, y = pos.y - 1, z = pos.z}
|
|
local pos_above = {x = pos.x, y = pos.y + 1, z = pos.z}
|
|
local node_under = minetest.get_node(pos_under).name
|
|
local node_above = minetest.get_node(pos_above).name
|
|
if minetest.get_item_group(node_under, "wall") == 1 and
|
|
minetest.get_item_group(node_under, "wall_not_full") ~= 1 then
|
|
local node_under_can = node_under:gsub("_full$", "")
|
|
minetest.set_node(pos_under, {name = node_under_can .. "_full"})
|
|
end
|
|
|
|
if minetest.get_item_group(node_above, "wall") == 1 and
|
|
minetest.get_item_group(node_above, "wall_not_full") ~= 1 then
|
|
minetest.set_node(pos, {name = wall_name .. "_full"})
|
|
end
|
|
end
|
|
})
|
|
|
|
if not not_in_cinv then
|
|
-- crafting recipe
|
|
minetest.register_craft({
|
|
output = wall_name .. "_inv 6",
|
|
recipe = {
|
|
{"", "", ""},
|
|
{wall_mat, wall_mat, wall_mat},
|
|
{wall_mat, wall_mat, wall_mat}
|
|
}
|
|
})
|
|
end
|
|
end
|
|
|
|
walls.register("walls:cobble", S("Cobblestone Wall"), {"default_cobble.png"},
|
|
"default:cobble", default.node_sound_stone_defaults(), true)
|
|
|
|
walls.register("walls:mossycobble", S("Mossy Cobblestone Wall"), {"default_mossycobble.png"},
|
|
"default:mossycobble", default.node_sound_stone_defaults(), true)
|
|
|
|
walls.register("walls:sandstone", S("Sandstone Wall"), {"default_sandstone_normal.png"},
|
|
"default:sandstone", default.node_sound_stone_defaults())
|
|
|
|
walls.register("walls:redsandstone", S("Red Sandstone Wall"), {"default_redsandstone_normal.png"},
|
|
"default:redsandstone", default.node_sound_stone_defaults())
|
|
|
|
-- Ice Wall
|
|
walls.register("walls:ice", S("Ice Wall"), {"default_ice.png"},
|
|
"default:ice", default.node_sound_glass_defaults())
|
|
|
|
minetest.override_item("walls:ice", {
|
|
use_texture_alpha = "blend",
|
|
connects_to = {"group:wall", "group:fence", "default:ice", "default:packedice"},
|
|
groups = {cracky = 3, wall = 1, not_in_creative_inventory = 1},
|
|
})
|
|
|
|
minetest.override_item("walls:ice_full", {
|
|
use_texture_alpha = "blend",
|
|
connects_to = {"group:wall", "group:fence", "default:ice", "default:packedice"},
|
|
groups = {cracky = 3, wall = 1, not_in_creative_inventory = 1},
|
|
})
|
|
|
|
minetest.override_item("walls:ice_inv", {
|
|
use_texture_alpha = "blend",
|
|
groups = {cracky = 3, wall = 1},
|
|
})
|
|
|
|
-- Legacy, but more beautiful walls
|
|
dofile(minetest.get_modpath("walls") .. "/legacy.lua")
|