lib_materials/lib_materials_node_registration.lua
2019-08-30 14:05:56 -07:00

765 lines
24 KiB
Lua

--
-- Register lib_material nodes
--
--
--
-- Define constants that can be used in csv
local S = lib_materials.intllib
local function read_node_str(node_str)
if #node_str > 0 then
local node, count = node_str:match("([^%s]+)%s*(%d*)")
return node, tonumber(count) or 1
end
end
--game.library.csv.read
--lib_materials.read_csv
--for i, stone in ipairs(game.lib.csv.read("|", lib_materials.path .. "/nodes.csv")) do
for i, stone in ipairs(lib_materials.read_csv("|", lib_materials.path .. "/nodes.csv")) do
--Node_Name|Description|Alias_Mod|Alias_Node|Tile_String|Draw_Type|Param_Type|ParamType2|LightSource|Walkable|Pointable|Climbable|Diggable|Buildable|Use_Alpha|Alpha|Sun_Prop|Damage_Per_Second|Grnd_Cnt|Legacy|Groups|Groups2|Max_Drops|Drops|Sounds|Group_Cracky|Group_Crumbly|Group_Choppy|Group_Snappy|Group_Bendy|Group_Oddly_Breakable_by_Hand|Group_Level|Group_Stone|Group_Sand|Group_Glass|Group_Ore|Group_Metal|Group_Mineral|Group_Ice|Group_Snowy|Group_Dirt|Group_Grass|Group_Soil|Group_BakedClay|Group_Liquid|Group_Lava|Group_Igniter|Group_Mud|Group_Oil|Group_Flammable|Group_Quicksand|Group_Water|Group_Puts_Out_FIre|Group_Cools_Lava|Group_Falling_Node|Group_Not_In_Creative_Inventory|Group_Drown|Group_Disable_Jump|Group_Mohs|Group_RockType|Grp_MatType|LiquidType|LiquidViscosity|LiquidRange|LiquidRenew|LiquidAltSource|LiquidAltFlow|PostEffectColor
local node_name, descript, alias_mod, alias_node, tile_string, particle_img, draw_type, param_type, param2, light, walk, point, climb, dig, build, use_alpha, alpha, sun_prop, damage, grnd_cont, leg_min, groups, groups2, max_drop, drops, sounds, grp_crack,grp_crumb,grp_chop,grp_snap,grp_bend,grp_obh,grp_lvl,grp_stone,grp_sand,grp_glass,grp_ore,grp_metal,grp_mineral,grp_ice,grp_snow,grp_dirt,grp_grass,grp_soil,grp_bclay,grp_liquid,grp_lava,grp_ignite,grp_mud,grp_oil,grp_flam,grp_quick,grp_water,grp_pof,grp_cool_lava,grp_fall_node,grp_nici,drown,grp_nojump,grp_mohs,grp_rocktype,grp_mattype, liq_type, liq_visc, liq_range, liq_renew, liq_altsrc, liq_altflow, liq_pec, vframe_w, vframe_h, vframe_l = unpack(stone)
-- Parse node names: transform empty strings into nil and separate node and count
node_name = read_node_str(node_name)
--descript = read_node_str(descript)
alias_mod = read_node_str(alias_mod)
alias_node = read_node_str(alias_node)
local new_node_def = {}
local new_node_type = 1
new_node_def.tiles = {}
new_node_def.groups = {}
new_node_def.sounds = {}
if grp_dirt ~= "" and grp_grass == "" then
if tonumber(grp_dirt) > 0 then
new_node_type = 2
end
end
if string.find(draw_type, "liquid") then
new_node_type = 3
end
if descript ~= "" then
new_node_def.description = S(""..descript.."")
end
if draw_type ~= "" then
new_node_def.drawtype = draw_type
end
if param_type ~= "" then
new_node_def.paramtype = param_type
end
if param2 ~= "" then
new_node_def.paramtype2 = param2
end
if light ~= "" then
new_node_def.light_source = tonumber(light)
end
if walk ~= "" then
if string.lower(walk) == "true" then
new_node_def.walkable = true
else
new_node_def.walkable = false
end
end
if point ~= "" then
if string.lower(point) == "true" then
new_node_def.pointable = true
else
new_node_def.pointable = false
end
end
if climb ~= "" then
if string.lower(climb) == "true" then
new_node_def.climbable = true
else
new_node_def.climbable = false
end
end
if dig ~= "" then
if string.lower(dig) == "true" then
new_node_def.diggable = true
else
new_node_def.diggable = false
end
end
if build ~= "" then
if string.lower(build) == "true" then
new_node_def.buildable_to = true
else
new_node_def.buildable_to = false
end
end
if use_alpha ~= "" then
new_node_def.use_texture_alpha = string.lower(use_alpha)
end
if alpha ~= "" then
if string.lower(alpha) == "true" then
new_node_def.alpha = true
else
new_node_def.alpha = false
end
end
if alpha ~= "" then
new_node_def.alpha = tonumber(alpha)
end
if sun_prop ~= "" then
if string.lower(sun_prop) == "true" then
new_node_def.sunlight_propagates = true
else
new_node_def.sunlight_propagates = false
end
end
if damage ~= "" then
if tonumber(damage) > 0 then
new_node_def.damage_per_second = tonumber(damage)
end
end
if grnd_cont ~= "" then
if string.lower(grnd_cont) == "true" then
new_node_def.is_ground_content = true
else
new_node_def.is_ground_content = false
end
end
if leg_min ~= "" then
if string.lower(leg_min) == "true" then
new_node_def.legacy_mineral = true
else
new_node_def.legacy_mineral = false
end
end
if drown ~= "" then
new_node_def.drowning = tonumber(drown)
end
if liq_type ~= "" then
new_node_def.liquidtype = liq_type
end
if liq_altflow ~= "" then
new_node_def.liquid_alternative_flowing = "lib_materials:" .. liq_altflow
end
if liq_altsrc ~= "" then
new_node_def.liquid_alternative_source = "lib_materials:" .. liq_altsrc
end
if liq_renew ~= "" then
if string.lower(liq_renew) == "true" then
new_node_def.liquid_renewable = true
else
new_node_def.liquid_renewable = false
end
end
if liq_renew ~= "" then
new_node_def.liquid_renewable = string.lower(liq_renew)
end
if liq_visc ~= "" then
new_node_def.liquid_viscosity = tonumber(liq_visc)
end
if liq_range ~= "" then
new_node_def.liquid_range = tonumber(liq_range)
end
if liq_pec ~= "" then
--new_node_def.post_effect_color = liq_pec
end
if drops == "" then
drops = nil
end
if drops then
if drops:find("[^%,% ]") then
local new_drop1, new_drop2, new_drop3, new_drop4, new_drop5, new_drop6
new_node_def.drop = {}
if max_drop then
new_node_def.drop.max_items = max_drop
end
new_node_def.drop.items = {}
new_drop1, new_drop2, new_drop3, new_drop4, new_drop5, new_drop6 = unpack(drops:split(",", true))
local new_drop_name, new_drop_rarity
if new_drop1 then
new_drop_name, new_drop_rarity = unpack(new_drop1:split(" ", true))
if new_drop_name then
if new_drop_rarity then
new_node_def.drop.items[1] = {items = {new_drop_name}, rarity = tonumber(new_drop_rarity)}
else
new_node_def.drop.items[1] = {items = {new_drop_name}}
end
else
new_node_def.drop.items[1] = {items = {new_drop1}}
end
else
new_node_def.drop.items[1] = {items = {drops}}
end
if new_drop2 then
new_drop_name, new_drop_rarity = unpack(new_drop2:split(" ", true))
if new_drop_name then
if new_drop_rarity then
new_node_def.drop.items[2] = {items = {new_drop_name}, rarity = tonumber(new_drop_rarity)}
else
new_node_def.drop.items[2] = {items = {new_drop_name}}
end
else
new_node_def.drop.items[2] = {items = {new_drop2}}
end
else
new_node_def.drop.items[2] = {items = {drops}}
end
if new_drop3 then
new_drop_name, new_drop_rarity = unpack(new_drop3:split(" ", true))
if new_drop_name then
if new_drop_rarity then
new_node_def.drop.items[3] = {items = {new_drop_name}, rarity = tonumber(new_drop_rarity)}
else
new_node_def.drop.items[3] = {items = {new_drop_name}}
end
else
new_node_def.drop.items[3] = {items = {new_drop3}}
end
else
new_node_def.drop.items[3] = {items = {drops}}
end
if new_drop4 then
new_drop_name, new_drop_rarity = unpack(new_drop4:split(" ", true))
if new_drop_name then
if new_drop_rarity then
new_node_def.drop.items[4] = {items = {new_drop_name}, rarity = tonumber(new_drop_rarity)}
else
new_node_def.drop.items[4] = {items = {new_drop_name}}
end
else
new_node_def.drop.items[4] = {items = {new_drop4}}
end
else
new_node_def.drop.items[4] = {items = {drops}}
end
if new_drop5 then
new_drop_name, new_drop_rarity = unpack(new_drop5:split(" ", true))
if new_drop_name then
if new_drop_rarity then
new_node_def.drop.items[5] = {items = {new_drop_name}, rarity = tonumber(new_drop_rarity)}
else
new_node_def.drop.items[5] = {items = {new_drop_name}}
end
else
new_node_def.drop.items[5] = {items = {new_drop5}}
end
else
new_node_def.drop.items[5] = {items = {drops}}
end
if new_drop6 then
new_drop_name, new_drop_rarity = unpack(new_drop6:split(" ", true))
if new_drop_name then
if new_drop_rarity then
new_node_def.drop.items[6] = {items = {new_drop_name}, rarity = tonumber(new_drop_rarity)}
else
new_node_def.drop.items[6] = {items = {new_drop_name}}
end
else
new_node_def.drop.items[6] = {items = {new_drop6}}
end
else
new_node_def.drop.items[6] = {items = {drops}}
end
else
new_node_def.drop = drops
end
end
local new_tile1, new_tile2, new_tile3, new_tile4, new_tile5, new_tile6
if tile_string then
if tile_string:find("[^%,% ]") then
new_tile1, new_tile2, new_tile3, new_tile4, new_tile5, new_tile6 = unpack(tile_string:split(",", true))
else
new_tile1 = tile_string
end
end
if particle_img then
if particle_img ~= "" then
new_node_def.particle_image = particle_img
--else
--new_node_def.particle_image = new_tile1
end
end
if new_node_type == 3 then --Fluids
if draw_type == "flowingliquid" then
new_node_def.tiles[1] = new_tile1
new_node_def.special_tiles = {
{
name = new_tile2,
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = tonumber(vframe_w),
aspect_h = tonumber(vframe_h),
length = tonumber(vframe_l),
},
},
{
name = new_tile2,
backface_culling = true,
animation = {
type = "vertical_frames",
aspect_w = tonumber(vframe_w),
aspect_h = tonumber(vframe_h),
length = tonumber(vframe_l),
},
},
}
else
new_node_def.tiles = {
{
name = new_tile1,
backface_culling = false,
animation = {
type = "vertical_frames",
aspect_w = tonumber(vframe_w),
aspect_h = tonumber(vframe_h),
length = tonumber(vframe_l),
},
},
{
name = new_tile1,
backface_culling = true,
animation = {
type = "vertical_frames",
aspect_w = tonumber(vframe_w),
aspect_h = tonumber(vframe_h),
length = tonumber(vframe_l),
},
},
}
end
else
if new_tile1 then
new_node_def.tiles[1] = new_tile1
end
if new_tile2 and new_tile2 ~= "" then
new_node_def.tiles[2] = new_tile2
else
new_node_def.tiles[2] = new_tile1
end
if new_tile3 and new_tile3 ~= "" then
new_node_def.tiles[3] = new_tile3
else
new_node_def.tiles[3] = new_tile2
end
if new_tile4 and new_tile4 ~= "" then
new_node_def.tiles[4] = new_tile4
else
new_node_def.tiles[4] = new_tile3
end
if new_tile5 and new_tile5 ~= "" then
new_node_def.tiles[5] = new_tile5
else
new_node_def.tiles[5] = new_tile3
end
if new_tile6 and new_tile6 ~= "" then
new_node_def.tiles[6] = new_tile6
else
new_node_def.tiles[6] = new_tile3
end
end
if sounds and sounds ~= "" then
--sounds = assert(loadstring(sounds))() or lib_materials.node_sound_stone_defaults(),
--new_node_def.sounds = assert(loadstring(sounds))() or lib_materials.node_sound_stone_defaults()
if sounds == "dirt" then
new_node_def.sounds = lib_materials.node_sound_dirt_defaults()
elseif sounds == "stone" then
new_node_def.sounds = lib_materials.node_sound_stone_defaults()
elseif sounds == "sand" then
new_node_def.sounds = lib_materials.node_sound_sand_defaults()
elseif sounds == "gravel" then
new_node_def.sounds = lib_materials.node_sound_gravel_defaults()
elseif sounds == "glass" then
new_node_def.sounds = lib_materials.node_sound_glass_defaults()
elseif sounds == "metal" then
new_node_def.sounds = lib_materials.node_sound_metal_defaults()
elseif sounds == "water" then
new_node_def.sounds = lib_materials.node_sound_water_defaults()
elseif sounds == "snow" then
new_node_def.sounds = lib_materials.node_sound_snow_defaults()
else
end
end
if groups2 then
local new_node_groups = groups2:split(",", true)
for _, nng in pairs(new_node_groups) do
local g_name, g_val = unpack(nng:split(" ", true))
new_node_def.groups[g_name] = tonumber(g_val)
end
end
--## register dirt nodes for with grass, with litter, and with ground cover and for biome specific ground cover.
--## Dirts:
--## Dirt,Black Dirt,Brown Dirt,Clayey Dirt,Red Clay,White Clay,Coarse Dirt,Dark Dirt,
--## Dried Dirt,Dry Dirt,Mud,Dried Mud,Permafrost,Sandy Dirt,Silt 01,Silt 02,Silty Dirt,Sod
--## Dirts are registered as standalone nodes, as well as, with each of several grass or other ground cover types, listed below.
--## Grass(es)(Bamboo,Brown,Cold,Crystal,Dry,Fiery,Gray,Green,Grove,Jungle 01,Mushroom,Prairie),
--## Coniferous Litter,Fungal Litter,Leaf Litter 01,Leaf Litter 02,Rainforest Litter,Stones,Vines,Snow,Soil,Wet Soil,Stone,Cobblestone,Desert Cobblestone
--## Dirts are also registered for each biome ground cover, according to temperature, humidity and altitude. Example: 'dirt_with_grass_warm_humid_lowland'.
local temperatures = {"hot", "warm", "temperate", "cool"}
local humidities = {"humid", "semihumid", "temperate", "semiarid"}
local elevations = {"coastal", "lowland", "shelf", "highland"}
local palettes1 = {
hot_humid = "#93fc54:80",
hot_semihumid = "#fcd953:80",
hot_temperate = "#fc9754:80",
hot_semiarid = "#fc5458:80",
warm_humid = "#81da62:72",
warm_semihumid = "#dacf61:72",
warm_temperate = "#daa062:72",
warm_semiarid = "#da6e62:72",
temperate_humid = "#36e44b:64",
temperate_semihumid = "#b1e436:64",
temperate_temperate = "#e4d136:64",
temperate_semiarid = "#e48836:64",
cool_humid = "#43e9a5:48",
cool_semihumid = "#69e942:48",
cool_temperate = "#ace943:48",
cool_semiarid = "#e9df43:48",
}
local textures = {}
if lib_materials.color_grass_use then
textures = {
coastal = {
"lib_materials_grass_jungle_01_top.png", "lib_materials_grass_jungle_01_side.png"
},
lowland = {
"lib_materials_grass_default_top.png", "lib_materials_grass_default_side.png"
},
shelf = {
"lib_materials_grass_dry_default_top.png", "lib_materials_grass_dry_default_side.png"
},
highland = {
"lib_materials_grass_brown_top.png", "lib_materials_grass_brown_side.png"
}
}
else
textures = {
coastal = {
"lib_materials_grass_coastal_top.png", "lib_materials_grass_coastal_side.png"
},
lowland = {
"lib_materials_grass_lowland_top.png", "lib_materials_grass_lowland_side.png"
},
shelf = {
"lib_materials_grass_shelf_top.png", "lib_materials_grass_shelf_side.png"
},
highland = {
"lib_materials_grass_highland_top.png", "lib_materials_grass_highland_side.png"
}
}
end
local palettes2 = {
{
"#43e9a5:80", "#36e44b:80", "#81da62:80", "#93fc54:80"
},
{
"#69e942:80", "#b1e436:80", "#dacf61:80", "#fcd953:80"
},
{
"#ace943:80", "#e4d136:80", "#daa062:80", "#fc9754:80"
},
{
"#e9df43:80", "#e48836:80", "#da6e62:80", "#fc5458:80"
}
}
local grasses = {
{"Wet", "lib_materials_grass_jungle_01_top.png", "lib_materials_grass_jungle_01_side.png"},
{"Lush", "lib_materials_grass_default_top.png", "lib_materials_grass_default_side.png"},
{"Dry", "lib_materials_grass_dry_default_top.png", "lib_materials_grass_dry_default_side.png"},
{"Brown", "lib_materials_grass_brown_top.png", "lib_materials_grass_brown_side.png"}
}
--Grass Top with Grass Sides over Dirt
local covers = {
{"grass", "Grass", "lib_materials_grass_default_top.png", "lib_materials_grass_default_side.png"},
{"grass_bamboo", "Bamboo Grass", "lib_materials_grass_bamboo_top.png", "lib_materials_grass_bamboo_side.png"},
{"grass_brown", "Brown Grass", "lib_materials_grass_brown_top.png", "lib_materials_grass_brown_side.png"},
{"grass_cold", "Cold Grass", "lib_materials_grass_cold_top.png", "lib_materials_grass_cold_side.png"},
{"grass_crystal", "Crystal Grass", "lib_materials_grass_crystal_top.png", "lib_materials_grass_crystal_side.png"},
{"grass_dry", "Dry Grass", "lib_materials_grass_dry_default_top.png", "lib_materials_grass_dry_default_side.png"},
{"grass_fiery", "Fiery Grass", "lib_materials_grass_fiery_top.png", "lib_materials_grass_fiery_side.png"},
{"grass_gray", "Gray Grass", "lib_materials_grass_gray_top.png", "lib_materials_grass_gray_side.png"},
{"grass_green", "Green Grass", "lib_materials_grass_green_top.png", "lib_materials_grass_green_side.png"},
{"grass_grove", "Grove Grass", "lib_materials_grass_grove_top.png", "lib_materials_grass_grove_side.png"},
{"grass_jungle_01", "Jungle Grass 01", "lib_materials_grass_jungle_01_top.png", "lib_materials_grass_jungle_01_side.png"},
{"grass_mushroom", "Mushroom Grass", "lib_materials_grass_mushroom_top.png", "lib_materials_grass_mushroom_side.png"},
{"grass_prairie", "Prairie Grass", "lib_materials_grass_prairie_top.png", "lib_materials_grass_prairie_side.png"},
{"litter_coniferous", "Coniferous Litter", "lib_materials_litter_coniferous.png", "lib_materials_litter_coniferous_side.png"},
{"litter_rainforest", "Rainforest Litter", "lib_materials_litter_rainforest.png", "lib_materials_litter_rainforest_side.png"},
{"snow", "Snow", "lib_materials_snow.png", "lib_materials_snow_side.png"},
}
--Soil Top with Soil Sides masked over Dirt
local soils = {
{"soil", "Soil", "lib_materials_ground_soil.png"},
{"soil_wet", "Wet Soil", "lib_materials_ground_soil_wet.png", "lib_materials_ground_soil_wet_side.png"},
}
--Dirt with Stone nodes. Uses mask over dirt.
local stone_dirts = {
{"stone", "Stone", "lib_materials_stone_default.png^(", "^[mask:lib_materials_mask_stone.png)"},
{"stone_cobble", "Cobblestone", "lib_materials_stone_cobble_default.png^(", "^[mask:lib_materials_mask_cobble.png)"},
{"stone_desert_cobble", "Desert Cobblestone", "lib_materials_stone_desert_cobble.png^(", "^[mask:lib_materials_mask_cobble.png)"},
}
--Dirt with Litter nodes that use alpha texture over dirt.
local alpha_litter_dirts = {
{"litter_fungi", "Fungal Litter", "lib_materials_litter_vine.png", "lib_materials_grass_fungi_side.png"},
{"litter_leaf_01", "Leaf Litter 01", "lib_materials_litter_leaf_01.png", "lib_materials_litter_coniferous_side.png"},
{"litter_leaf_02", "Leaf Litter 02", "lib_materials_litter_leaf_02.png", "lib_materials_litter_coniferous_side.png"},
{"litter_stones", "Stones", "lib_materials_litter_stones.png", "lib_materials_litter_stones_side.png"},
{"litter_vine", "Vines", "lib_materials_litter_vine.png", "lib_materials_litter_coniferous_side.png"},
}
if new_node_type == 2 then
new_node_def.soil = {
base = node_name,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:"..node_name.."", new_node_def)
minetest.register_alias(""..node_name.."", "lib_materials:"..node_name.."")
--game.lib.node.register("lib_materials:"..node_name.."", new_node_def)
--game.lib.node.register_alias("lib_materials", node_name, alias_mod, alias_node)
for _, sl in pairs(soils) do
local id = string.lower(sl[1])
local full = node_name .. "_with_" .. id
local new_cloned_node = table.copy(minetest.registered_nodes["lib_materials:"..node_name..""])
new_cloned_node.description = descript .. " with " .. sl[1]
if sl[4] then
new_cloned_node.tiles = {
new_tile1 .. "^" .. sl[3],
new_tile1,
new_tile1 .. "^" .. sl[4]
}
else
new_cloned_node.tiles = {
new_tile1 .. "^" .. sl[3],
new_tile1,
}
end
new_cloned_node.soil = {
base = full,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:" .. full .. "", new_cloned_node)
end
for _, cv in pairs(covers) do
local id = string.lower(cv[1])
local full = node_name .. "_with_" .. id
local new_cloned_node = table.copy(minetest.registered_nodes["lib_materials:"..node_name..""])
new_cloned_node.description = descript .. " with " .. cv[2]
if cv[4] then
new_cloned_node.tiles = {
cv[3],
new_tile1,
new_tile1 .. "^" .. cv[4]
}
else
new_cloned_node.tiles = {
cv[3],
new_tile1,
}
end
new_cloned_node.soil = {
base = full,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:" .. full .. "", new_cloned_node)
end
for _, sd in pairs(stone_dirts) do
local id = string.lower(sd[1])
local full = node_name .. "_with_" .. id
local new_cloned_node = table.copy(minetest.registered_nodes["lib_materials:"..node_name..""])
new_cloned_node.description = descript .. " with " .. sd[1]
new_cloned_node.tiles = {sd[3] .. new_tile1 .. sd[4]}
new_cloned_node.soil = {
base = full,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:" .. full .. "", new_cloned_node)
end
for _, alph in pairs(alpha_litter_dirts) do
local id = string.lower(alph[1])
local full = node_name .. "_with_" .. id
local new_cloned_node = table.copy(minetest.registered_nodes["lib_materials:"..node_name..""])
new_cloned_node.description = descript .. " with " .. alph[1]
new_cloned_node.tiles = {
new_tile1 .. "^" .. alph[3],
new_tile1,
new_tile1 .. "^" .. alph[4]
}
new_cloned_node.soil = {
base = full,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:" .. full .. "", new_cloned_node)
end
for _, t in pairs(temperatures) do
for _, h in pairs(humidities) do
for _, e in pairs(elevations) do
local id = node_name .. "_with_grass_" .. t .. "_" .. h .. "_" .. e
local new_cloned_node = table.copy(minetest.registered_nodes["lib_materials:"..node_name..""])
new_cloned_node.description = descript .. " with Grass (" .. t .. "_" .. h .. "_" .. e .. ")"
new_cloned_node.tiles = {
textures[e][1] .. "^[colorize:" .. palettes1[t .. "_" .. h],
new_tile1,
new_tile1 .. "^(" .. textures[e][2] .. "^[colorize:" .. palettes1[t .. "_" .. h] .. ")"
}
new_cloned_node.soil = {
base = id,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:" .. id .. "", new_cloned_node)
end
end
end
if lib_materials.color_grass_reg then
for _, g in pairs(grasses) do
local count = 1
for _, ps in pairs(palettes2) do
local id = string.lower(g[1])
for _, p in pairs(ps) do
local num = string.format("%02d", count)
local full = node_name .. "_with_grass_" .. id .. "_" .. num
local new_cloned_node = table.copy(minetest.registered_nodes["lib_materials:"..node_name..""])
new_cloned_node.description = descript .. " with Grass " .. g[1] .. " (" .. num .. ")"
new_cloned_node.tiles = {
g[2] .. "^[colorize:" .. p,
new_tile1,
new_tile1 .. "^(" .. g[3] .. "^[colorize:" .. p
.. ")"
}
new_cloned_node.soil = {
base = full,
dry = "lib_materials:"..node_name.."_with_soil",
wet = "lib_materials:"..node_name.."_with_soil_wet"
}
minetest.register_node("lib_materials:" .. full .. "", new_cloned_node)
count = count + 1
end
end
end
end
else
minetest.register_node("lib_materials:"..node_name.."", new_node_def)
minetest.register_alias(""..node_name.."", "lib_materials:"..node_name.."")
--game.lib.node.register("lib_materials:"..node_name.."", new_node_def)
--game.lib.node.register_alias("lib_materials", node_name, alias_mod, alias_node)
end
if alias_mod and alias_node then
minetest.register_alias(""..alias_mod..":"..alias_node.."", "lib_materials:"..node_name.."")
minetest.register_alias(""..alias_node.."", "lib_materials:"..node_name.."")
end
end