From 4f7ec3b3ae7962b567335852becf729cda37d9f8 Mon Sep 17 00:00:00 2001 From: James Clarke Date: Mon, 15 Jan 2024 23:24:12 +0000 Subject: [PATCH 1/4] Add mineclone2, mineclonia and mineclone5 support (#55) * Added mineclone2 support apart from with mg * Add Mineclone2 adjustments * Fix, Ores now spawn in stone in Mineclone2 * Added Bronze ingot recipe and copper rail * Made ores breakable * Made tools work with Mineclone2 * Nerf mithril sword to be same as diamond --------- Co-authored-by: Hugo Locurcio --- .luacheckrc | 6 ++ _config.txt | 64 ++++++++++++------- init.lua | 175 ++++++++++++++++++++++++++++++++++++++++++---------- mod.conf | 4 +- 4 files changed, 192 insertions(+), 57 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index 16e7350..c28dcf0 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -3,6 +3,11 @@ unused_args = false allow_defined_top = true max_line_length = 90 +ignore = { + "default_stone_sounds", + "default_metal_sounds" +} + stds.minetest = { read_globals = { "DIR_DELIM", @@ -30,4 +35,5 @@ read_globals = { "frame", "mg", "toolranks", + "mcl_sounds" } diff --git a/_config.txt b/_config.txt index 0db26c8..46ca079 100644 --- a/_config.txt +++ b/_config.txt @@ -54,27 +54,47 @@ moreores.mithril_clust_size_high = 3 moreores.mithril_clust_size = 3 moreores.mithril_clust_size_deep = 3 --- Maximal and minimal depths of ore generation (Y coordinate, 0 being sea level by default) --- Tin -moreores.tin_max_depth_high = 31000 -moreores.tin_min_depth_high = 1025 -moreores.tin_max_depth = -64 -- For v6 mapgen, -32 fits better -moreores.tin_min_depth = -127 -moreores.tin_max_depth_deep = -128 -moreores.tin_min_depth_deep = -31000 --- Silver -moreores.silver_max_depth_high = 31000 -moreores.silver_min_depth_high = 1025 -moreores.silver_max_depth = -64 -- For v6 mapgen, -32 fits better -moreores.silver_min_depth = -127 -- For v6 mapgen, -63 fits better -moreores.silver_max_depth_deep = -128 -- For v6 mapgen, -64 fits better -moreores.silver_min_depth_deep = -31000 +if minetest.get_modpath("mcl_core") then + -- Example adjustments for MineClone2 + moreores.tin_max_depth_high = 0 + moreores.tin_min_depth_high = -10 + moreores.tin_max_depth = -11 + moreores.tin_min_depth = -57 --- Mithril -moreores.mithril_max_depth_high = 31000 -moreores.mithril_min_depth_high = 2049 -moreores.mithril_max_depth = -2048 -- For v6 mapgen, -256 fits better -moreores.mithril_min_depth = -4095 -- For v6 mapgen, -511 fits better -moreores.mithril_max_depth_deep = -4096 -- For v6 mapgen, -512 fits better -moreores.mithril_min_depth_deep = -31000 + -- Similar adjustments for silver and mithril + moreores.silver_max_depth_high = 0 + moreores.silver_min_depth_high = -10 + moreores.silver_max_depth = -11 + moreores.silver_min_depth = -57 + + moreores.mithril_max_depth_high = 0 + moreores.mithril_min_depth_high = -20 + moreores.mithril_max_depth = -21 + moreores.mithril_min_depth = -57 +else + -- Maximal and minimal depths of ore generation (Y coordinate, 0 being sea level by default) + -- Tin + moreores.tin_max_depth_high = 31000 + moreores.tin_min_depth_high = 1025 + moreores.tin_max_depth = -64 -- For v6 mapgen, -32 fits better + moreores.tin_min_depth = -127 + moreores.tin_max_depth_deep = -128 + moreores.tin_min_depth_deep = -31000 + + -- Silver + moreores.silver_max_depth_high = 31000 + moreores.silver_min_depth_high = 1025 + moreores.silver_max_depth = -64 -- For v6 mapgen, -32 fits better + moreores.silver_min_depth = -127 -- For v6 mapgen, -63 fits better + moreores.silver_max_depth_deep = -128 -- For v6 mapgen, -64 fits better + moreores.silver_min_depth_deep = -31000 + + -- Mithril + moreores.mithril_max_depth_high = 31000 + moreores.mithril_min_depth_high = 2049 + moreores.mithril_max_depth = -2048 -- For v6 mapgen, -256 fits better + moreores.mithril_min_depth = -4095 -- For v6 mapgen, -511 fits better + moreores.mithril_max_depth_deep = -4096 -- For v6 mapgen, -512 fits better + moreores.mithril_min_depth_deep = -31000 +end diff --git a/init.lua b/init.lua index 332f6f7..fc47c13 100644 --- a/init.lua +++ b/init.lua @@ -25,11 +25,29 @@ end -- `frame` support local use_frame = minetest.get_modpath("frame") +local is_mcl_core_present = minetest.get_modpath("mcl_core") ~= nil +local is_mcl_sounds_present = minetest.get_modpath("mcl_sounds") ~= nil +local is_mcl_copper_present = minetest.registered_items["mcl_copper:copper_ingot"] ~= nil +local stone_ingredient = is_mcl_core_present and "mcl_core:stone" or "default:stone" + +local copper_ingredient = +is_mcl_core_present and "mcl_copper:copper_ingot" or 'default:copper_ingot' + +if is_mcl_sounds_present then +local default_stone_sounds = mcl_sounds.node_sound_stone_defaults() +local default_metal_sounds = mcl_sounds.node_sound_metal_defaults() +else local default_stone_sounds = default.node_sound_stone_defaults() local default_metal_sounds = default.node_sound_metal_defaults() +end + -- Returns the crafting recipe table for a given material and item. local function get_recipe(material, item) + if is_mcl_core_present then + material = material:gsub("default:", "mcl_core:") + end + if item == "sword" then return { {material}, @@ -74,7 +92,12 @@ local function get_recipe(material, item) end end -local function add_ore(modname, description, mineral_name, oredef) +local function add_ore(modname, description, mineral_name, oredef, extra_node_def) + + if mineral_name == "copper" and is_mcl_copper_present then + return + end + local img_base = modname .. "_" .. mineral_name local toolimg_base = modname .. "_tool_"..mineral_name local tool_base = modname .. ":" @@ -83,14 +106,27 @@ local function add_ore(modname, description, mineral_name, oredef) local ingot = item_base .. "_ingot" local lump_item = item_base .. "_lump" + local function merge_tables(t1, t2) + if t2 then + for k,v in pairs(t2) do t1[k] = v end + end + return t1 + end + if oredef.makes.ore then - minetest.register_node(modname .. ":mineral_" .. mineral_name, { - description = S("@1 Ore", S(description)), - tiles = {"default_stone.png^" .. modname .. "_mineral_" .. mineral_name .. ".png"}, - groups = {cracky = 2}, - sounds = default_stone_sounds, - drop = lump_item, - }) + local node_def_tbl = { + description = S("@1 Ore", S(description)), + tiles = {"default_stone.png^" .. modname .. "_mineral_" .. mineral_name .. + ".png"}, + groups = {cracky = 2}, + sounds = default_stone_sounds, + drop = lump_item, + } + if extra_node_def then + node_def_tbl = merge_tables(node_def_tbl, extra_node_def) + end + minetest.register_node(modname .. ":mineral_" .. mineral_name, node_def_tbl) + if use_frame then frame.register(modname .. ":mineral_" .. mineral_name) @@ -153,6 +189,7 @@ local function add_ore(modname, description, mineral_name, oredef) end if oredef.makes.chest then + if not is_mcl_core_present then minetest.register_craft( { output = "default:chest_locked", recipe = { @@ -160,23 +197,25 @@ local function add_ore(modname, description, mineral_name, oredef) {"default:chest"}, } }) + minetest.register_craft( { output = "default:chest_locked", recipe = get_recipe(ingot, "lockedchest") }) end + end oredef.oredef_high.ore_type = "scatter" oredef.oredef_high.ore = modname .. ":mineral_" .. mineral_name - oredef.oredef_high.wherein = "default:stone" + oredef.oredef_high.wherein = stone_ingredient oredef.oredef.ore_type = "scatter" oredef.oredef.ore = modname .. ":mineral_" .. mineral_name - oredef.oredef.wherein = "default:stone" + oredef.oredef.wherein = stone_ingredient oredef.oredef_deep.ore_type = "scatter" oredef.oredef_deep.ore = modname .. ":mineral_" .. mineral_name - oredef.oredef_deep.wherein = "default:stone" + oredef.oredef_deep.wherein = stone_ingredient minetest.register_ore(oredef.oredef_high) minetest.register_ore(oredef.oredef) @@ -193,26 +232,46 @@ local function add_ore(modname, description, mineral_name, oredef) full_punch_interval = oredef.full_punch_interval, }, sound = {breaks = "default_tool_breaks"}, + _repair_material = ingot, + _mcl_toollike_wield = true, + mcl_diggroups = tooldef._mcl_diggroups, + groups = tooldef.groups, } if tool_name == "sword" then tdef.description = S("@1 Sword", S(description)) - tdef.groups = {sword = 1} + if tdef.groups then + tdef.groups = merge_tables(tdef.groups, {sword = 1}) + else + tdef.groups = {sword = 1} + end end if tool_name == "pick" then tdef.description = S("@1 Pickaxe", S(description)) - tdef.groups = {pickaxe = 1} + if tdef.groups then + tdef.groups = merge_tables(tdef.groups, {pickaxe = 1, tool=1}) + else + tdef.groups = {pickaxe = 1, tool=1} + end end if tool_name == "axe" then tdef.description = S("@1 Axe", S(description)) - tdef.groups = {axe = 1} + if tdef.groups then + tdef.groups = merge_tables(tdef.groups, {axe = 1, tool=1}) + else + tdef.groups = {axe = 1, tool=1} + end end if tool_name == "shovel" then tdef.description = S("@1 Shovel", S(description)) - tdef.groups = {shovel = 1} + if tdef.groups then + tdef.groups = merge_tables(tdef.groups, {shovel = 1, tool=1}) + else + tdef.groups = {shovel = 1, tool=1} + end tdef.wield_image = toolimg_base .. tool_name .. ".png^[transformR90" end @@ -286,15 +345,23 @@ local oredefs = { cracky = {times = {[1] = 2.60, [2] = 1.00, [3] = 0.60}, uses = 100, maxlevel = 1}, }, damage_groups = {fleshy = 4}, + groups = {dig_speed_class=4, enchantability=14}, + _mcl_diggroups = { + pickaxey = { speed = 6, level = 4, uses = 126 } + }, }, hoe = { - max_uses = 300, + max_uses = 150, }, shovel = { groupcaps = { crumbly = {times = {[1] = 1.10, [2] = 0.40, [3] = 0.25}, uses = 100, maxlevel = 1}, }, damage_groups = {fleshy = 3}, + groups = {dig_speed_class=4, enchantability=14}, + _mcl_diggroups = { + shovely = { speed = 6, level = 4, uses = 126 } + }, }, axe = { groupcaps = { @@ -302,6 +369,10 @@ local oredefs = { fleshy = {times = {[2] = 1.10, [3] = 0.60}, uses = 100, maxlevel = 1}, }, damage_groups = {fleshy = 5}, + groups = {dig_speed_class=4, enchantability=14}, + _mcl_diggroups = { + axey = { speed = 6, level = 4, uses = 126 } + }, }, sword = { groupcaps = { @@ -310,9 +381,19 @@ local oredefs = { choppy = {times = {[3] = 0.80}, uses = 100, maxlevel = 0}, }, damage_groups = {fleshy = 6}, + _mcl_diggroups = { + swordy = { speed = 6, level = 4, uses = 126 }, + swordy_cobweb = { speed = 6, level = 4, uses = 126 } + }, }, }, full_punch_interval = 1.0, + extra_node_def = { + _mcl_blast_resistance = 3, + _mcl_hardness = 4, + _mcl_silk_touch_drop = true, + groups = {pickaxey = 4} + } }, mithril = { description = "Mithril", @@ -341,36 +422,58 @@ local oredefs = { tools = { pick = { groupcaps = { - cracky = {times = {[1] = 2.25, [2] = 0.55, [3] = 0.35}, uses = 200, maxlevel = 3}, + cracky = {times = {[1] = 2.60, [2] = 1.00, [3] = 0.60}, uses = 3126, maxlevel = 3}, }, damage_groups = {fleshy = 6}, + groups = {dig_speed_class=5, enchantability=10}, + _mcl_diggroups = { + pickaxey = { speed = 8, level = 5, uses = 3126 } + }, }, hoe = { - max_uses = 1000, + max_uses = 2000, }, shovel = { groupcaps = { - crumbly = {times = {[1] = 0.70, [2] = 0.35, [3] = 0.20}, uses = 200, maxlevel = 3}, + crumbly = {times = {[1] = 1.10, [2] = 0.40, [3] = 0.25}, uses = 3126, maxlevel = 3}, + }, + damage_groups = {fleshy = 6}, + groups = {dig_speed_class=5, enchantability=10}, + _mcl_diggroups = { + shovely = { speed = 8, level = 5, uses = 3126 } }, - damage_groups = {fleshy = 5}, }, axe = { groupcaps = { - choppy = {times = {[1] = 1.75, [2] = 0.45, [3] = 0.45}, uses = 200, maxlevel = 3}, - fleshy = {times = {[2] = 0.95, [3] = 0.30}, uses = 200, maxlevel = 2}, + choppy = {times = {[1] = 2.50, [2] = 0.80, [3] = 0.50}, uses = 3126, maxlevel = 3}, + fleshy = {times = {[2] = 1.10, [3] = 0.60}, uses = 3126, maxlevel = 3}, + }, + damage_groups = {fleshy = 10}, + groups = {dig_speed_class=5, enchantability=10}, + _mcl_diggroups = { + axey = { speed = 8, level = 5, uses = 3126 } }, - damage_groups = {fleshy = 8}, }, sword = { groupcaps = { - fleshy = {times = {[2] = 0.65, [3] = 0.25}, uses = 200, maxlevel = 2}, - snappy = {times = {[1] = 1.70, [2] = 0.70, [3] = 0.25}, uses = 200, maxlevel = 3}, - choppy = {times = {[3] = 0.65}, uses = 200, maxlevel = 0}, + fleshy = {times = {[2] = 0.70, [3] = 0.30}, uses = 3126, maxlevel = 3}, + snappy = {times = {[1] = 1.70, [2] = 0.70, [3] = 0.30}, uses = 3126, maxlevel = 3}, + choppy = {times = {[3] = 0.80}, uses = 3126, maxlevel = 0}, + }, + damage_groups = {fleshy = 7}, + _mcl_diggroups = { + swordy = { speed = 8, level = 5, uses = 3126 }, + swordy_cobweb = { speed = 8, level = 5, uses = 3126 } }, - damage_groups = {fleshy = 10}, }, }, full_punch_interval = 0.45, + extra_node_def = { + _mcl_blast_resistance = 3, + _mcl_hardness = 5, + _mcl_silk_touch_drop = true, + groups = {pickaxey = 5} + }, } } @@ -413,6 +516,12 @@ else y_max = moreores.tin_max_depth_deep, }, tools = {}, + extra_node_def = { + _mcl_blast_resistance = 3, + _mcl_hardness = 3, + _mcl_silk_touch_drop = true, + groups = {pickaxey = 3} + }, } -- Bronze has some special cases, because it is made from copper and tin @@ -421,8 +530,8 @@ else output = "default:bronze_ingot 3", recipe = { "moreores:tin_ingot", - "default:copper_ingot", - "default:copper_ingot", + copper_ingredient, + copper_ingredient, }, }) end @@ -446,13 +555,13 @@ end minetest.register_craft({ output = "moreores:copper_rail 24", recipe = { - {"default:copper_ingot", "", "default:copper_ingot"}, - {"default:copper_ingot", "group:stick", "default:copper_ingot"}, - {"default:copper_ingot", "", "default:copper_ingot"}, + {copper_ingredient, "", copper_ingredient}, + {copper_ingredient, "group:stick", copper_ingredient}, + {copper_ingredient, "", copper_ingredient}, }, }) for orename, def in pairs(oredefs) do -- Register everything - add_ore("moreores", def.description, orename, def) + add_ore("moreores", def.description, orename, def, def.extra_node_def) end diff --git a/mod.conf b/mod.conf index 341e834..fab3de5 100644 --- a/mod.conf +++ b/mod.conf @@ -1,5 +1,5 @@ name = moreores description = Adds new ore types. -depends = default -optional_depends = carts,farming,frame,mg,toolranks +optional_depends = carts,farming,frame,mg,toolranks,mcl_core,mcl_sounds min_minetest_version = 5.0.0 +supported_games = mineclone2,mineclonia,minetest_game From c9e25aca43d8a0106dc733174cdad704a22dbc0f Mon Sep 17 00:00:00 2001 From: James Clarke Date: Wed, 17 Jan 2024 14:31:39 +0000 Subject: [PATCH 2/4] Fixed regression with merge_tables, fixes #56 (#57) --- init.lua | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/init.lua b/init.lua index fc47c13..572bfb4 100644 --- a/init.lua +++ b/init.lua @@ -107,11 +107,18 @@ local function add_ore(modname, description, mineral_name, oredef, extra_node_de local lump_item = item_base .. "_lump" local function merge_tables(t1, t2) - if t2 then - for k,v in pairs(t2) do t1[k] = v end - end - return t1 - end + for k, v in pairs(t2) do + if type(v) == "table" and type(t1[k]) == "table" then + -- If both t1[k] and v are tables, merge them recursively + merge_tables(t1[k], v) + else + -- Otherwise, simply set the value + t1[k] = v + end + end + return t1 + end + if oredef.makes.ore then local node_def_tbl = { From 0d1e32ce725eed32bd645049b9c011e1e6b01c9d Mon Sep 17 00:00:00 2001 From: Luke aka SwissalpS Date: Thu, 29 Feb 2024 21:41:48 +0100 Subject: [PATCH 3/4] block-nodes aren't ground content (#58) --- init.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/init.lua b/init.lua index 572bfb4..a31a8b8 100644 --- a/init.lua +++ b/init.lua @@ -146,6 +146,7 @@ local function add_ore(modname, description, mineral_name, oredef, extra_node_de description = S("@1 Block", S(description)), tiles = {img_base .. "_block.png"}, groups = {snappy = 1, bendy = 2, cracky = 1, melty = 2, level = 2}, + is_ground_content = false, sounds = default_metal_sounds, }) minetest.register_alias(mineral_name.."_block", block_item) From bf02115f31b98bf4fb058683cadcbd9338814bad Mon Sep 17 00:00:00 2001 From: imre84 Date: Thu, 4 Apr 2024 16:01:22 +0200 Subject: [PATCH 4/4] Fix `default_stone_sounds` undeclared global variable warnings (#59) * to fix these messages: 2024-04-04 01:04:37: [Main] Undeclared global variable "default_stone_sounds" accessed at .../moreores/init.lua:129 * to further drive the point home: luacheck is still happy --- .luacheckrc | 5 ----- init.lua | 11 +++++++---- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/.luacheckrc b/.luacheckrc index c28dcf0..fe0b58e 100644 --- a/.luacheckrc +++ b/.luacheckrc @@ -3,11 +3,6 @@ unused_args = false allow_defined_top = true max_line_length = 90 -ignore = { - "default_stone_sounds", - "default_metal_sounds" -} - stds.minetest = { read_globals = { "DIR_DELIM", diff --git a/init.lua b/init.lua index a31a8b8..6911d51 100644 --- a/init.lua +++ b/init.lua @@ -33,12 +33,15 @@ local stone_ingredient = is_mcl_core_present and "mcl_core:stone" or "default:st local copper_ingredient = is_mcl_core_present and "mcl_copper:copper_ingot" or 'default:copper_ingot' +local default_stone_sounds +local default_metal_sounds + if is_mcl_sounds_present then -local default_stone_sounds = mcl_sounds.node_sound_stone_defaults() -local default_metal_sounds = mcl_sounds.node_sound_metal_defaults() + default_stone_sounds = mcl_sounds.node_sound_stone_defaults() + default_metal_sounds = mcl_sounds.node_sound_metal_defaults() else -local default_stone_sounds = default.node_sound_stone_defaults() -local default_metal_sounds = default.node_sound_metal_defaults() + default_stone_sounds = default.node_sound_stone_defaults() + default_metal_sounds = default.node_sound_metal_defaults() end