local ns = firefly function ns.register_node(name, def) local needs_alias if not name:find ":" then def._name = name name = "firefly:"..name needs_alias = true end if not def.groups then def.groups = {} end def.groups.everything = 1 def.groups.dig_immediate = 3 if def._variants then for i, x in ipairs(def.tiles) do if not x.name then def.tiles[i] = {name = x, align_style = "world"} end end for _, x in ipairs(def._variants) do if x == "slab" then ns.register_slab(def) elseif x == "stair" then ns.register_stair(def) end end end minetest.register_node(":"..name, def) if needs_alias then minetest.register_alias(def._name, name) end end function ns.register_slab(def) def = table.copy(def) def._variants = nil local paramtype2 = def.paramtype2 == "color" and "colorfacedir" or "facedir" ns.register_node(def._name.."_slab", extend(def, { drawtype = "nodebox", node_box = { type = "fixed", fixed = {-0.5, -0.5, -0.5, 0.5, 0, 0.5} }, paramtype = "light", paramtype2 = paramtype2 })) end function ns.register_stair(def) def = table.copy(def) def._variants = nil def.groups[def._name.."_stair"] = 1 local paramtype2 = def.paramtype2 == "color" and "colorfacedir" or "facedir" ns.register_node(def._name.."_stair", extend(table.copy(def), { drawtype = "nodebox", node_box = { type = "fixed", fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, -0.5, 0, 0.5, 0.5, 0.5}} }, paramtype = "light", paramtype2 = paramtype2 })) ns.register_node(def._name.."_stair_inner", extend(table.copy(def), { drawtype = "nodebox", node_box = { type = "fixed", fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, -0.5, 0, 0.5, 0.5, 0.5}, {-0.5, -0.5, -0.5, 0, 0.5, 0.5}} }, paramtype = "light", paramtype2 = paramtype2 })) ns.register_node(def._name.."_stair_outer", extend(def, { drawtype = "nodebox", node_box = { type = "fixed", fixed = {{-0.5, -0.5, -0.5, 0.5, 0, 0.5}, {-0.5, 0, 0.5, 0, 0.5, 0}} }, paramtype = "light", paramtype2 = paramtype2 })) end ns.register_node("dirt", { tiles = {"firefly_dirt.png"} }) ns.register_node("dirt_grass", { tiles = {"firefly_grass_top.png", "firefly_dirt.png", "firefly_dirt.png^firefly_grass_side.png"} }) ns.register_node("grass", { drawtype = "plantlike", tiles = {"firefly_grass.png"}, paramtype = "light", sunlight_propagates = true, walkable = false, }) ns.register_node("snow", { tiles = {"firefly_snow_top.png"} }) ns.register_node("snow_leveled", { drawtype = "nodebox", tiles = {"firefly_snow_top.png"}, node_box = { type = "leveled", fixed = { -0.5, -0.5, -0.5, 0.5, 6/16, 0.5 } }, paramtype = "light", paramtype2 = "leveled", place_param2 = 8 }) ns.register_node("snow_grass", { drawtype = "plantlike", tiles = {"firefly_snow_grass.png"}, paramtype = "light", sunlight_propagates = true, walkable = false, }) ns.register_node("sand", { tiles = {"firefly_sand.png"} }) ns.register_node("sand_leveled", { drawtype = "nodebox", tiles = {"firefly_sand.png"}, node_box = { type = "leveled", fixed = { -0.5, -0.5, -0.5, 0.5, 6/16, 0.5 } }, paramtype = "light", paramtype2 = "leveled", place_param2 = 64 }) ns.register_node("sandstone", { tiles = {"firefly_sandstone.png"}, _variants = {"slab", "stair"}, }) ns.register_node("sandstone_sandy", { tiles = {"firefly_sand.png", "firefly_sandstone.png", "firefly_sandstone.png^firefly_sand_side_2.png"} }) ns.register_node("sandstone_bricks", { tiles = {"firefly_sandstone_bricks.png"}, _variants = {"slab", "stair"}, }) ns.register_node("sandstone_bricks_sandy", { tiles = {"firefly_sand.png", "firefly_sandstone_bricks.png", "firefly_sandstone_bricks.png^firefly_sand_side.png"} }) ns.register_node("cactus", { tiles = {"firefly_cactus_top.png", "firefly_cactus_top.png", "firefly_cactus_side.png"}, paramtype2 = "facedir" }) ns.register_node("stone", { tiles = {"firefly_stone.png"}, _variants = {"slab", "stair"}, }) ns.register_node("stone_bricks", { tiles = {"firefly_stone_bricks.png"}, _variants = {"slab", "stair"}, }) ns.register_node("metal_floor", { tiles = {"firefly_metal_floor.png"}, _variants = {"slab", "stair"}, }) ns.register_node("orange_light", { tiles = {"firefly_orange_light.png"}, paramtype = "light", light_source = 14 }) ns.register_node("gray_pillar", { tiles = {"firefly_gray_pillar_top.png", "firefly_gray_pillar_top.png", "firefly_gray_pillar_side.png"}, paramtype2 = "facedir", _variants = {"slab", "stair"}, }) ns.register_node("gray_column", { tiles = {{name = "firefly_gray_column.png"}}, paramtype2 = "4dir", _variants = {"slab", "stair"}, }) ns.register_node("gray_wall", { tiles = {"firefly_gray_wall.png"}, _variants = {"slab", "stair"}, }) ns.register_node("gray_tile", { tiles = {"firefly_gray_tile.png"}, _variants = {"slab", "stair"}, }) local brown = "#584e2d" ns.register_node("brown_wall", { tiles = {"firefly_wall.png"}, _variants = {"slab", "stair"}, color = brown, }) ns.register_node("brown_column", { tiles = {{name = "firefly_column.png"}}, paramtype2 = "4dir", _variants = {"slab", "stair"}, color = brown, }) ns.register_node("brown_pillar", { tiles = {"firefly_pillar_top.png", "firefly_pillar_top.png", "firefly_pillar_side.png"}, paramtype2 = "facedir", _variants = {"slab", "stair"}, color = brown, }) ns.register_node("glass", { paramtype = "light", sunlight_propagates = true, tiles = {{name = "firefly_glass.png", align_style = "world"}}, use_texture_alpha = "clip", _variants = {"slab", "stair"}, }) ns.register_node("colored_glass", { drawtype = "glasslike", paramtype = "light", paramtype2 = "color", palette = "firefly_glass_palette.png", sunlight_propagates = true, tiles = {{name = "firefly_colored_glass.png", align_style = "world"}}, use_texture_alpha = "blend", _variants = {"slab", "stair"}, }) ns.register_node("steel_grate", { drawtype = "mesh", mesh = "firefly_steel_grate.obj", tiles = {{name = "firefly_steel_grate.png", backface_culling = true}}, use_texture_alpha = "clip", paramtype = "light", sunlight_propagates = true, paramtype2 = "facedir", collision_box = { type = "fixed", fixed = { -0.5, 6/16, -0.5, 0.5, 0.5, 0.5 } }, selection_box = { type = "fixed", fixed = { -0.5, 6/16, -0.5, 0.5, 0.5, 0.5 } } }) minetest.register_chatcommand("chest", { privs = {give = true}, func = function(name) minetest.registered_chatcommands.giveme.func(name, "chest_with_everything:chest") end })