diff options
author | TenPlus1 <kinsellaja@yahoo.com> | 2018-05-07 09:18:25 +0100 |
---|---|---|
committer | TenPlus1 <kinsellaja@yahoo.com> | 2018-05-07 09:18:25 +0100 |
commit | dd422b609164b338c4a68166b78a1d7d2d9e5250 (patch) | |
tree | cf237d8f11c6cf6ee413e66af0da6a8046fce86c | |
parent | d1c962837d098866fd0eaffc030c39e57f525e08 (diff) |
add_deco() now adds to item list, set_deco() replaces item list (thanks h-v-smacker)
-rw-r--r-- | README.md | 1 | ||||
-rw-r--r-- | api.txt | 31 | ||||
-rw-r--r-- | init.lua | 82 |
3 files changed, 106 insertions, 8 deletions
@@ -29,5 +29,6 @@ Changelog: - 0.7 - Can be used on papyrus and cactus now, added coral recipe, api addition - 0.8 - Added support for farming redo's new garlic, pepper and onion crops - 0.9 - Added support for farming redo's pea and beetroot crops, checks for place_param +- 1.0 - add_deco() now adds to existing item list while set_deco() replaces item list (thanks h-v-smacker) Lucky Blocks: 5 @@ -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,15 +47,30 @@ 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 @@ -290,10 +290,87 @@ 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
@@ -385,6 +462,7 @@ minetest.register_craftitem("bonemeal:mulch", { end,
})
+
-- bonemeal (strength 2)
minetest.register_craftitem("bonemeal:bonemeal", {
description = S("Bone Meal"),
|