summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--api.txt31
-rw-r--r--init.lua74
2 files changed, 97 insertions, 8 deletions
diff --git a/api.txt b/api.txt
index bc450fd..e399bdc 100644
--- a/api.txt
+++ b/api.txt
@@ -14,7 +14,9 @@ Function Usage
Adding Crops
------------
-bonemeal:add_crop({ nodename_start, growing_steps, seed_name })
+bonemeal:add_crop({
+ { nodename_start, growing_steps, seed_name }
+})
This command is used to add new crops for bonemeal to work on.
@@ -29,7 +31,9 @@ bonemeal:add_crop({
Adding Saplings
---------------
-bonemeal:add_sapling({ sapling_node, function, soil_type[sand, dirt, nodename] })
+bonemeal:add_sapling({
+ { sapling_node, function, soil_type[sand, dirt, nodename] }
+})
This command will add new saplings for bonemeal to grow on sand, soil or a
specified node type.
@@ -43,16 +47,31 @@ bonemeal:add_sapling({
Adding Dirt Decoration
----------------------
-bonemeal:add_deco({ dirt_node, {grass_node_list}, {decor_node_list} })
+bonemeal:add_deco({
+ { dirt_node, {grass_node_list}, {decor_node_list} }
+})
This command will add grass and decoration to specific dirt types, use "" to
-add an empty node.
+add an empty node. If some decorations have been already defined for this dirt type, new
+will be added to the respective list. All empty ("") entries will be added regardless,
+which allows to decrease the frequency of decoration emergence, if needed.
e.g.
-bonemeal:add_deco({"default:dirt_with_dry_grass", {"default:dry_grass_1", ""},
- {"flowers:rose", "flowers:viola"} })
+bonemeal:add_deco({
+ {"default:dirt_with_dry_grass", {"default:dry_grass_1", ""},
+ {"flowers:rose", "flowers:viola"} }
+})
+
+Thus, add_deco() always adds (to) a definition, and never overrides. To discard an existing
+definiton in favor of the new one, use
+
+bonemeal:set_deco({
+ { dirt_node, {grass_node_list}, {decor_node_list} }
+})
+This command will set decoration for a given dirt type, fully replacing any existing definition.
+
Global ON_USE Function
----------------------
diff --git a/init.lua b/init.lua
index f4f8f32..35526f8 100644
--- a/init.lua
+++ b/init.lua
@@ -290,13 +290,83 @@ end
-- add grass and flower/plant decoration for specific dirt types
-- {dirt_node, {grass_nodes}, {flower_nodes}
-- e.g. {"default:dirt_with_dry_grass", dry_grass, flowers}
+-- if an entry already exists for a given dirt type, it will add new entries and all empty
+-- entries, allowing to both add decorations and decrease their frequency.
function bonemeal:add_deco(list)
- for n = 1, #list do
- table.insert(deco, list[n])
+ for l = 1, #list do
+
+ for n = 1, #deco do
+
+ -- update existing entry
+ if list[l][1] == deco[n][1] then
+
+ -- adding grass types
+ for _,extra in ipairs(list[l][2]) do
+ if extra ~= "" then
+ for __,entry in ipairs(deco[n][2]) do
+ if extra == entry then
+ extra = false
+ break
+ end
+ end
+ end
+ if extra then
+ table.insert(deco[n][2], extra)
+ end
+ end
+
+ -- adding decoration types
+ for _,extra in ipairs(list[l][3]) do
+ if extra ~= "" then
+ for __,entry in ipairs(deco[n][3]) do
+ if extra == entry then
+ extra = false
+ break
+ end
+ end
+ end
+ if extra then
+ table.insert(deco[n][3], extra)
+ end
+ end
+
+ list[l] = false
+ break
+ end
+
+ end
+
+ if list[l] then
+ table.insert(deco, list[l])
+ end
+
end
end
+-- definitively set a decration scheme
+-- this function will either add a new entry as is, or replace the existing one
+function bonemeal:set_deco(list)
+
+ for l = 1, #list do
+
+ for n = 1, #deco do
+
+ -- replace existing entry
+ if list[l][1] == deco[n][1] then
+ deco[n][2] = list[l][2]
+ deco[n][3] = list[l][3]
+ list[l] = false
+ break
+ end
+ end
+
+ if list[l] then
+ table.insert(deco, list[l])
+ end
+
+ end
+end
-- global on_use function for bonemeal
function bonemeal:on_use(pos, strength, node)