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")