diff --git a/depends.txt b/depends.txt new file mode 100644 index 0000000..b75e061 --- /dev/null +++ b/depends.txt @@ -0,0 +1,2 @@ +default? +carpathian_mapgen? diff --git a/init.lua b/init.lua new file mode 100644 index 0000000..2f8fea6 --- /dev/null +++ b/init.lua @@ -0,0 +1,134 @@ + + +lib_materials = {} + +lib_materials.path = minetest.get_modpath(minetest.get_current_modname()) +lib_materials.gettext, lib_materials.ngettext = dofile(lib_materials.path.."/intllib.lua") +local S = lib_materials.gettext +local NS = lib_materials.ngettext + + +dofile(lib_materials.path.."/lib_materials_utils.lua") + +dofile(lib_materials.path.."/lib_materials_water.lua") + +dofile(lib_materials.path.."/type_dirt.lua") + +dofile(lib_materials.path.."/type_sand.lua") + +dofile(lib_materials.path.."/type_ore.lua") + +dofile(lib_materials.path.."/type_stone.lua") + +dofile(lib_materials.path.."/lib_materials_ore_defs.lua") + + + + +--[[ + +lib_materials.register_materials = function() + + local node_defs = {} + + for node, def in pairs(minetest.registered_nodes) do + + local node_name = node + local node_def = table.copy(def) + + if not node_def then + return false + end + + local node_groups = table.copy(node_def.groups) or {} + + if not node_groups then + return false + end + + if not node_groups.stone then + --node_def.density = 10 + --node_def.mass = 10 + --node_def.hardness = 10 + --node_def.melting_point = 500 + --node_groups.material = 3 + --node_groups.inorganic = 3 + end + if not node_groups.dirt then + + end + if not node_groups.glass then + + end + if not node_groups.tree then + + end + if not node_groups.wood then + + end + if not node_groups.plant then + + end + + + if not node_groups.crumbly then + + end + if not node_groups.cracky then + + end + if not node_groups.snappy then + + end + if not node_groups.choppy then + + end + if not node_groups.oddly_breakable_by_hand then + + end + + + if not node_groups.soil then + + end + if not node_groups.fleshy then + + end + + + if not node_groups.bouncy then + + end + if not node_groups.explody then + + end + + end + + nod_def.groups = node_groups + + + minetest.override_item(node_name, nod_def) + +end + +--]] + + +--lib_materials.register_material = function(material_name, {material_def}) + + +--local def = minetest.registered_nodes["some:name"] +--local groups = table.copy(def.groups) +--groups.my_group = 123 +--minetest.override_item("some:name", { groups=groups }) + + +--end + + + + + + + diff --git a/intllib.lua b/intllib.lua new file mode 100644 index 0000000..6669d72 --- /dev/null +++ b/intllib.lua @@ -0,0 +1,45 @@ + +-- Fallback functions for when `intllib` is not installed. +-- Code released under Unlicense . + +-- Get the latest version of this file at: +-- https://raw.githubusercontent.com/minetest-mods/intllib/master/lib/intllib.lua + +local function format(str, ...) + local args = { ... } + local function repl(escape, open, num, close) + if escape == "" then + local replacement = tostring(args[tonumber(num)]) + if open == "" then + replacement = replacement..close + end + return replacement + else + return "@"..open..num..close + end + end + return (str:gsub("(@?)@(%(?)(%d+)(%)?)", repl)) +end + +local gettext, ngettext +if minetest.get_modpath("intllib") then + if intllib.make_gettext_pair then + -- New method using gettext. + gettext, ngettext = intllib.make_gettext_pair() + else + -- Old method using text files. + gettext = intllib.Getter() + end +end + +-- Fill in missing functions. + +gettext = gettext or function(msgid, ...) + return format(msgid, ...) +end + +ngettext = ngettext or function(msgid, msgid_plural, n, ...) + return format(n==1 and msgid or msgid_plural, ...) +end + +return gettext, ngettext diff --git a/lib_materials_ore_defs.lua b/lib_materials_ore_defs.lua new file mode 100644 index 0000000..0ea486d --- /dev/null +++ b/lib_materials_ore_defs.lua @@ -0,0 +1,197 @@ + +-- Adds stone types(default types{desert_stone, sandstone, desert_sandstone, silver_sandstone}; lib_materials types{stone_brown, stone_sand}) as ores within default:stone + +minetest.register_ore({ore_type="sheet", ore="default:sandstone", wherein="default:stone", clust_num_ores=250, clust_scarcity=60, clust_size=10, y_min=-1000, y_max=31000, noise_threshhold=0.1, noise_params={offset=0, scale=1, spread={x=256, y=256, z=256}, seed=4130293965, octaves=5, persist=0.60}, random_factor=1.0}) +minetest.register_ore({ore_type="sheet", ore="default:desert_sandstone", wherein="default:stone", clust_num_ores=250, clust_scarcity=60, clust_size=10, y_min=-1000, y_max=31000, noise_threshhold=0.1, noise_params={offset=0, scale=1, spread={x=256, y=256, z=256}, seed=4130293965, octaves=5, persist=0.60}, random_factor=1.0}) +minetest.register_ore({ore_type="sheet", ore="default:silver_sandstone", wherein="default:stone", clust_num_ores=250, clust_scarcity=60, clust_size=10, y_min=-1000, y_max=31000, noise_threshhold=0.1, noise_params={offset=0, scale=1, spread={x=256, y=256, z=256}, seed=4130293965, octaves=5, persist=0.60}, random_factor=1.0}) +minetest.register_ore({ore_type="sheet", ore="default:desert_stone", wherein="default:stone", clust_num_ores=250, clust_scarcity=60, clust_size=10, y_min=-1000, y_max=31000, noise_threshhold=0.1, noise_params={offset=0, scale=1, spread={x=256, y=256, z=256}, seed=163281090, octaves=5, persist=0.60}, random_factor=1.0}) +minetest.register_ore({ore_type="sheet", ore="lib_materials:stone_brown", wherein="default:stone", clust_num_ores=250, clust_scarcity=60, clust_size=10, y_min=-1000, y_max=31000, noise_threshhold=0.1, noise_params={offset=0, scale=1, spread={x=256, y=256, z=256}, seed=163281090, octaves=5, persist=0.60}, random_factor=1.0}) +minetest.register_ore({ore_type="sheet", ore="lib_materials:stone_sand", wherein="default:stone", clust_num_ores=250, clust_scarcity=60, clust_size=10, y_min=-1000, y_max=31000, noise_threshhold=0.1, noise_params={offset=0, scale=1, spread={x=256, y=256, z=256}, seed=163281090, octaves=5, persist=0.60}, random_factor=1.0}) + +-- Adds default desert_stone, desert_sandstone, and stone_brown to stone_sand +minetest.register_ore({ + ore_type = "scatter", + ore = "default:desert_stone", + wherein = {"lib_materials:stone_sand"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.5 + }, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "default:desert_sandstone", + wherein = {"lib_materials:stone_sand"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -613, + octaves = 1, + persist = 0.5 + }, +}) + +minetest.register_ore({ + ore_type = "scatter", + ore = "lib_materials:stone_brown", + wherein = {"lib_materials:stone_sand"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -613, + octaves = 1, + persist = 0.5 + }, +}) + +-- Adds Air as ore within default:stone +minetest.register_ore({ + ore_type = "scatter", + ore = "air", + wherein = {"groups:stone"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -50, + y_max = -11, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.5 + }, +}) + +--Adds default:water_source within default:stone +minetest.register_ore({ + ore_type = "scatter", + ore = "default:river_water_source", + wherein = {"groups:stone"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -30, + y_max = 0, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.5 + }, +}) + + + +-- Baked Clay within Orange Clay +minetest.register_ore({ + ore_type = "blob", + ore = "bakedclay:red", + wherein = {"bakedclay:orange"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -316, + octaves = 1, + persist = 0.5 + }, +}) + +minetest.register_ore({ + ore_type = "blob", + ore = "bakedclay:grey", + wherein = {"bakedclay:orange"}, + clust_scarcity = 4 * 4 * 4, + clust_num_ores = 8, + clust_size = 6, + y_min = -10, + y_max = 71, + noise_params = { + offset = 0.35, + scale = 0.2, + spread = {x = 5, y = 5, z = 5}, + seed = -613, + octaves = 1, + persist = 0.5 + }, +}) + + + +--Adds default ores to desert_stone +local add_ore = function(a, b, c, d, e, f, g) + + minetest.register_ore({ + ore_type = "scatter", + ore = a, + wherein = b, + clust_scarcity = c, + clust_num_ores = d, + clust_size = e, + y_min = f, + y_max = g, + }) +end + +-- Coal + +add_ore("default:stone_with_coal", "default:desert_stone", 24*24*24, 27, 6, -31000, -16) + +-- Iron + +add_ore("default:stone_with_iron", "default:desert_stone", 9*9*9, 5, 3, -63, -16) +add_ore("default:stone_with_iron", "default:desert_stone", 24*24*24, 27, 6, -31000, -64) + +--Mese + +add_ore("default:stone_with_mese", "default:desert_stone", 14*14*14, 5, 3, -31000, -256) + +-- Gold + +add_ore("default:stone_with_gold", "default:desert_stone", 15*15*15, 3, 2, -255, -64) +add_ore("default:stone_with_gold", "default:desert_stone", 13*13*13, 5, 3, -31000, -256) + +-- Diamond + +add_ore("default:stone_with_diamond", "default:desert_stone", 17*17*17, 4, 3, -255, -128) +add_ore("default:stone_with_diamond", "default:desert_stone", 15*15*15, 4, 3, -31000, -256) + +-- Copper + +add_ore("default:stone_with_copper", "default:desert_stone", 9*9*9, 5, 3, -31000, -64) + +-- Coral Sand +add_ore("ethereal:sandy", "default:sand", 10*10*10, 24, 4, -100, -10) + + diff --git a/lib_materials_utils.lua b/lib_materials_utils.lua new file mode 100644 index 0000000..d7e977c --- /dev/null +++ b/lib_materials_utils.lua @@ -0,0 +1,19 @@ + +function table.contains_substring(t, s) + if type(s) ~= "string" then + return nil + end + + for key, value in pairs(t) do + if type(value) == 'string' and s:find(value) then + if key then + return key + else + return true + end + end + end + return false +end + + diff --git a/lib_materials_water.lua b/lib_materials_water.lua new file mode 100644 index 0000000..d930782 --- /dev/null +++ b/lib_materials_water.lua @@ -0,0 +1,37 @@ + + +if minetest.get_modpath("default") then + + local waterflow = 3 + minetest.override_item("default:river_water_source", {liquid_range = waterflow}) + minetest.override_item("default:river_water_flowing", {liquid_range = waterflow}) + minetest.override_item("default:river_water_source", {is_ground_content = true}) + minetest.override_item("default:river_water_flowing", {is_ground_content = true}) + minetest.override_item("default:water_source", {is_ground_content = true}) + minetest.override_item("default:water_flowing", {is_ground_content = true}) + + if false then + minetest.override_item("default:river_water_source", {light_source = 14}) + minetest.override_item("default:river_water_flowing", {light_source = 14}) + minetest.override_item("default:water_source", {light_source = 14}) + minetest.override_item("default:water_flowing", {light_source = 14}) + end + + if false then + local newnode = lib_materials.clone_node("default:water_source") + newnode.description = "Water" + newnode.alpha = 0 + newnode.liquid_alternative_source = "lib_materials:water_source" + newnode.liquid_alternative_flowing = "lib_materials:water_flowing" + minetest.register_node("lib_materials:water_source", newnode) + + newnode = lib_materials.clone_node("default:water_flowing") + newnode.description = "Water" + newnode.alpha = 0 + newnode.liquid_alternative_source = "lib_materials:water_source" + newnode.liquid_alternative_flowing = "lib_materials:water_flowing" + minetest.register_node("lib_materials:water_flowing", newnode) + end + +end + diff --git a/type_dirt.lua b/type_dirt.lua new file mode 100644 index 0000000..0514d25 --- /dev/null +++ b/type_dirt.lua @@ -0,0 +1,4 @@ + + +local S = lib_materials.gettext + diff --git a/type_ore.lua b/type_ore.lua new file mode 100644 index 0000000..5e90c5b --- /dev/null +++ b/type_ore.lua @@ -0,0 +1,155 @@ + +local S = lib_materials.gettext + +--Add Technic granite, marble, and ore node definitions and craftitems + +minetest.register_node("lib_materials:brass_block", { + description = S("Brass Block"), + tiles = { "technic_brass_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("lib_materials:lead_block", { + description = S("Lead Block"), + tiles = { "technic_lead_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("lib_materials:wrought_iron_block", { + description = S("Wrought Iron Block"), + tiles = { "technic_wrought_iron_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("lib_materials:cast_iron_block", { + description = S("Cast Iron Block"), + tiles = { "technic_cast_iron_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("lib_materials:carbon_steel_block", { + description = S("Carbon Steel Block"), + tiles = { "technic_carbon_steel_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + +minetest.register_node("lib_materials:stainless_steel_block", { + description = S("Stainless Steel Block"), + tiles = { "technic_stainless_steel_block.png" }, + is_ground_content = true, + groups = {cracky=1, level=2}, + sounds = default.node_sound_stone_defaults() +}) + + + +minetest.register_node( "lib_materials:mineral_lead", { + description = S("Lead Ore"), + tiles = { "default_stone.png^technic_mineral_lead.png" }, + is_ground_content = true, + groups = {cracky=3}, + sounds = default.node_sound_stone_defaults(), + drop = "lib_materials:lead_lump", +}) + + + +minetest.register_craftitem("lib_materials:brass_ingot", { + description = S("Brass Ingot"), + inventory_image = "technic_brass_ingot.png", +}) + +minetest.register_craftitem("lib_materials:lead_lump", { + description = S("Lead Lump"), + inventory_image = "technic_lead_lump.png", +}) + +minetest.register_craftitem("lib_materials:lead_ingot", { + description = S("Lead Ingot"), + inventory_image = "technic_lead_ingot.png", +}) + +minetest.register_craftitem("lib_materials:wrought_iron_ingot", { + description = S("Wrought Iron Ingot"), + inventory_image = "technic_wrought_iron_ingot.png", +}) + +minetest.register_craftitem("lib_materials:cast_iron_ingot", { + description = S("Cast Iron Ingot"), + inventory_image = "technic_cast_iron_ingot.png", +}) + +minetest.register_craftitem("lib_materials:carbon_steel_ingot", { + description = S("Carbon Steel Ingot"), + inventory_image = "technic_carbon_steel_ingot.png", +}) + +minetest.register_craftitem("lib_materials:stainless_steel_ingot", { + description = S("Stainless Steel Ingot"), + inventory_image = "technic_stainless_steel_ingot.png", +}) + + + +local function register_block(block, ingot) + minetest.register_craft({ + output = block, + recipe = { + {ingot, ingot, ingot}, + {ingot, ingot, ingot}, + {ingot, ingot, ingot}, + } + }) + + minetest.register_craft({ + output = ingot.." 9", + recipe = { + {block} + } + }) +end + +register_block("lib_materials:brass_block", "lib_materials:brass_ingot") +register_block("lib_materials:lead_block", "lib_materials:lead_ingot") +register_block("lib_materials:wrought_iron_block", "lib_materials:wrought_iron_ingot") +register_block("lib_materials:cast_iron_block", "lib_materials:cast_iron_ingot") +register_block("lib_materials:carbon_steel_block", "lib_materials:carbon_steel_ingot") +register_block("lib_materials:stainless_steel_block", "lib_materials:stainless_steel_ingot") + +minetest.register_craft({ + type = 'cooking', + recipe = "lib_materials:lead_lump", + output = "lib_materials:lead_ingot", +}) + + +minetest.register_craft({ + type = 'cooking', + recipe = "lib_materials:wrought_iron_ingot", + output = "lib_materials:cast_iron_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "lib_materials:cast_iron_ingot", + cooktime = 2, + output = "lib_materials:carbon_steel_ingot", +}) + +minetest.register_craft({ + type = 'cooking', + recipe = "lib_materials:carbon_steel_ingot", + cooktime = 2, + output = "lib_materials:wrought_iron_ingot", +}) + diff --git a/type_sand.lua b/type_sand.lua new file mode 100644 index 0000000..beb17d3 --- /dev/null +++ b/type_sand.lua @@ -0,0 +1,26 @@ + +local S = lib_materials.gettext + + + + + +-- Some sand with rocks for the river beds. +-- This drops small rocks as well. +-- if false then +-- local newnode = lib_materials.clone_node("default:sand") +-- newnode.description = "Sand and rocks" +-- newnode.tiles = {"vmg_sand_with_rocks.png"} +-- newnode.drop = {max_items=2, items={{items={"lib_materials:small_rocks"}, rarity=1}, {items={"default:sand"}, rarity=1}}} +-- minetest.register_node("lib_materials:sand_with_rocks", newnode) +-- end + +minetest.register_node("lib_materials:sand_with_rocks", { + description = "Sand and rocks", + tiles = {"vmg_sand_with_rocks.png"}, + groups = {crumbly = 3, falling_node = 1, sand = 1}, + --sounds = default.node_sound_sand_defaults(), + drop = {max_items=2, items={{items={"lib_materials:small_rocks"}, rarity=1}}}, +}) + + diff --git a/type_stone.lua b/type_stone.lua new file mode 100644 index 0000000..999e8bb --- /dev/null +++ b/type_stone.lua @@ -0,0 +1,46 @@ + + +local S = lib_materials.gettext + + + +minetest.register_node("lib_materials:stone_brown", { + description = S("Brown Stone"), + tiles = {"lib_materials_stone_brown.png"}, + is_ground_content = true, + groups = {cracky = 3, stone = 1, level = 2}, + drop = 'lib_materials:stone_brown', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node("lib_materials:stone_sand", { + description = S("Sand Stone"), + tiles = {"lib_materials_stone_sand.png"}, + is_ground_content = true, + groups = {cracky = 3, stone = 1, level = 2}, + drop = 'lib_materials:stone_sand', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node( "lib_materials:granite", { + description = S("Granite"), + tiles = { "technic_granite.png" }, + is_ground_content = true, + groups = {cracky=1, granite=1, stone = 1, level = 2}, + drop = 'lib_materials:granite', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) + +minetest.register_node( "lib_materials:marble", { + description = S("Marble"), + tiles = { "technic_marble.png" }, + is_ground_content = true, + groups = {cracky=3, marble=1, stone = 1, level = 2}, + drop = 'lib_materials:marble', + legacy_mineral = true, + sounds = default.node_sound_stone_defaults(), +}) +