From 7f1fec6ae0bdc33585c444fb676b2a8809670c44 Mon Sep 17 00:00:00 2001 From: Vanessa Dannenberg Date: Mon, 29 Mar 2021 21:10:41 -0400 Subject: [PATCH] add compatibility for games other than minetest_game --- API.txt | 40 ++++++++++++++++++++++++++++++++++++++++ README.md | 2 +- growth.lua | 6 +++--- init.lua | 39 +++++++++++++++++++++++++++++++++++++-- mod.conf | 3 +-- 5 files changed, 82 insertions(+), 8 deletions(-) diff --git a/API.txt b/API.txt index 0dd15c3..bacbafc 100644 --- a/API.txt +++ b/API.txt @@ -588,3 +588,43 @@ And this particular one is mapped slightly differently from the others: (Note the +150 and +50 offsets) + +================== +Default game nodes +================== + +Although this project was intended to be used with minetest_game, it can be +configured to work with something else instead. All you need to do is provide +the names of the nodes in your game you want biome_lib's internals to use. + +Put these settings in your game's minetest.conf (or your client's own config, +if desired). You'll need to set all of them. + +biome_lib_default_grow_through_nodes + Comma-separated list of things that a spawned node is allowed to grow + through. Air is always added to whatever you specify. + Default: air, default:snow + +biome_lib_default_water_nodes + Comma-separated list of nodes that should be treated as water for the sake + of looking for neighboring "wet" ground. + Default: default:water_source, default:water_flowing, + default:river_water_source, default:river_water_flowing + +biome_lib_default_wet_surfaces + Comma-separated list of nodes that should be considered "wet" if one of + the aforementioned water nodes is nearby. + Default: default:dirt, default:dirt_with_grass, default:sand + +biome_lib_default_grow_nodes + Comma-separated list of nodes that something must be sitting on to be + able to actively change from one thing to another (such as a sapling + growing into a tree), to be used for ALL growable nodes, if the calling + mod doesn't provide its own lists. + Default: "default:dirt_with_grass" + +biome_lib_default_ground_nodes + Comma-separated list of nodes to use as the "root" of something that can + gradually climb up a wall, to be used for ALL such nodes, if the calling + mod doesn't provide its own lists. + Default: "default:dirt_with_grass" diff --git a/README.md b/README.md index ac39750..2cfd09d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Both mapgen-based spawning and ABM-based spawning is supported. Growing code is It is primarily intended for mapgen v6, but it should work fine when used with mapgen v7. -**Dependencies**: default from minetest_game +**Dependencies:** nothing, but if you don't use `minetest_game`, you'll need to supply some settings (see API.txt). **Recommends**: [Plantlife Modpack](https://github.com/minetest-mods/plantlife_modpack), [More Trees](https://github.com/minetest-mods/moretrees) diff --git a/growth.lua b/growth.lua index 807b69c..ba5285c 100644 --- a/growth.lua +++ b/growth.lua @@ -20,8 +20,8 @@ function biome_lib:grow_plants(opts) local options = opts options.height_limit = options.height_limit or 5 - options.ground_nodes = options.ground_nodes or { "default:dirt_with_grass" } - options.grow_nodes = options.grow_nodes or { "default:dirt_with_grass" } + options.ground_nodes = options.ground_nodes or biome_lib.default_ground_nodes + options.grow_nodes = options.grow_nodes or biome_lib.default_grow_nodes options.seed_diff = options.seed_diff or 0 local n @@ -55,7 +55,7 @@ function biome_lib:grow_plants(opts) if options.need_wall and options.verticals_list then walldir = biome_lib:find_adjacent_wall(p_top, options.verticals_list, options.choose_random_wall) end - if (n_top.name == "air" or n_top.name == "default:snow") + if biome_lib.default_grow_through_nodes[n_top.name] and (not options.need_wall or (options.need_wall and walldir)) then if options.grow_vertically and walldir then if biome_lib:search_downward(pos, options.height_limit, options.ground_nodes) then diff --git a/init.lua b/init.lua index 00e7c4f..8fcdfbb 100644 --- a/init.lua +++ b/init.lua @@ -32,6 +32,41 @@ biome_lib.total_no_aircheck_calls = 0 biome_lib.queue_run_ratio = tonumber(minetest.settings:get("biome_lib_queue_run_ratio")) or 100 +local function tableize(s) + return string.split(string.trim(string.gsub(s, " ", ""))) +end + +local c1 minetest.settings:get("biome_lib_default_grow_through_nodes") +biome_lib.default_grow_through_nodes = {["air"] = true} +if c1 then + for _, i in ipairs(tableize(c1)) do + biome_lib.default_grow_through_nodes[i] = true + end +else + biome_lib.default_grow_through_nodes["default:snow"] = true +end + +local c2 minetest.settings:get("biome_lib_default_water_nodes") +biome_lib.default_water_nodes = {} +if c2 then + for _, i in ipairs(tableize(c2)) do + biome_lib.default_water_nodes[i] = true + end +else + biome_lib.default_water_nodes["default:water_source"] = true + biome_lib.default_water_nodes["default:water_flowing"] = true + biome_lib.default_water_nodes["default:river_water_source"] = true + biome_lib.default_water_nodes["default:river_water_flowing"] = true +end + +local c3 = minetest.settings:get("biome_lib_default_wet_surfaces") +local c4 = minetest.settings:get("biome_lib_default_ground_nodes") +local c5 = minetest.settings:get("biome_lib_default_grow_nodes") + +biome_lib.default_wet_surfaces = c3 and tableize(c3) or {"default:dirt", "default:dirt_with_grass", "default:sand"} +biome_lib.default_ground_nodes = c4 and tableize(c4) or {"default:dirt_with_grass"} +biome_lib.default_grow_nodes = c5 and tableize(c5) or {"default:dirt_with_grass"} + -- Boilerplate to support localized strings if intllib mod is installed. local S if minetest.global_exists("intllib") then @@ -617,11 +652,11 @@ function biome_lib:spawn_on_surfaces(sd,sp,sr,sc,ss,sa) local currentsurface = minetest.get_node(pos).name - if currentsurface == "default:water_source" and + if biome_lib.default_water_nodes[currentsurface] and #minetest.find_nodes_in_area( {x=pos.x, y=pos.y-biome.depth_max-1, z=pos.z}, vector.new(pos), - {"default:dirt", "default:dirt_with_grass", "default:sand"} + biome_lib.default_wet_surfaces ) == 0 then return -- On water but no ground nearby end diff --git a/mod.conf b/mod.conf index b3312f6..86b044a 100644 --- a/mod.conf +++ b/mod.conf @@ -1,4 +1,3 @@ name = biome_lib min_minetest_version = 5.2.0 -depends = default -optional_depends = intllib +optional_depends = default, intllib