diff options
| -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"),
 | 
