Compare commits

...

10 Commits

Author SHA1 Message Date
tenplus1
2b9efd94b9 add multibiomegen fruits 2024-08-24 11:46:13 +01:00
tenplus1
d805ac59a0 fix typo 2024-08-24 11:32:34 +01:00
tenplus1
afed754b20 add some missing fruits 2024-08-24 11:31:48 +01:00
tenplus1
2734139214 tweak and tidy code 2024-08-24 11:08:09 +01:00
tenplus1
b5f65bd7d2 update readme (thanks mckaygerhard) 2023-01-02 09:07:00 +00:00
tenplus1
bb60f77f3e 0.4.x and 5.x checks 2023-01-02 09:01:20 +00:00
tenplus1
f820f70298 fix for moretrees attached fruit 2022-12-26 10:59:31 +00:00
tenplus1
09ed4e8aca few additions 2022-12-19 16:56:33 +00:00
tenplus1
1ed82c4186 change comment 2022-12-16 10:14:43 +00:00
tenplus1
237e036d78 add regrow_min_interval and regrow_max_interval settings 2022-12-16 10:13:38 +00:00
4 changed files with 150 additions and 31 deletions

View File

@ -1,7 +1,13 @@
regrow = {}
-- setup global with min and max growth invertals from settings
regrow = {
min_interval = tonumber(minetest.settings:get("regrow_min_interval")) or 600,
max_interval = tonumber(minetest.settings:get("regrow_max_interval")) or 1200
}
-- hidden node that runs timer and regrows fruit stored in meta
minetest.register_node("regrow:hidden", {
drawtype = "airlike",
paramtype = "light",
@ -13,10 +19,10 @@ minetest.register_node("regrow:hidden", {
drop = "",
groups = {not_in_creative_inventory = 1},
-- once placed start random timer between 20 and 30 minutes
-- once placed start random timer between min and max interval setting
on_construct = function(pos)
local time = math.random(60 * 20, 60 * 30)
local time = math.random(regrow.min_interval, regrow.max_interval)
minetest.get_node_timer(pos):start(time)
end,
@ -26,9 +32,7 @@ minetest.register_node("regrow:hidden", {
local meta = minetest.get_meta(pos)
if not meta then
return
end
if not meta then return end
local fruit = meta:get_string("fruit") or ""
local leaf = meta:get_string("leaf") or ""
@ -43,23 +47,29 @@ minetest.register_node("regrow:hidden", {
end
})
-- helper function to register fruit nodes
-- global function to register fruit nodes
regrow.add_fruit = function(nodename, leafname, ignore_param2)
-- does node actually exist ?
if not minetest.registered_nodes[nodename] then
return
end
if not minetest.registered_nodes[nodename] then return end
-- change attached_node values so fruits regrow instead of dropping
local def = minetest.registered_nodes[nodename]
local groups = def.groups and table.copy(def.groups) or {}
groups.attached_node = 0
-- override after_dig_node to start regrowth
minetest.override_item(nodename, {
-- override on_dig to remove any special functions
on_dig = minetest.node_dig,
-- override after_dig_node to start regrowth
after_dig_node = function(pos, oldnode, oldmetadata, digger)
-- if node has been placed by player then do not regrow
if ignore_param2 ~= true and oldnode.param2 > 0 then
return
end
if ignore_param2 ~= true and oldnode.param2 > 0 then return end
-- replace fruit with regrowth node, set fruit & leaf name
minetest.set_node(pos, {name = "regrow:hidden"})
@ -68,13 +78,14 @@ regrow.add_fruit = function(nodename, leafname, ignore_param2)
meta:set_string("fruit", nodename)
meta:set_string("leaf", leafname)
meta:set_int("p2", oldnode.param2 or 0)
meta:set_int("p2", (oldnode.param2 or 0))
end,
})
end
-- wait until mods are loaded to save dependency mess
minetest.after(0.1, function()
-- override fruits helper
local function add_fruits()
-- default
regrow.add_fruit("default:apple", "default:leaves")
@ -96,8 +107,9 @@ minetest.after(0.1, function()
regrow.add_fruit("lemontree:lemon", "lemontree:leaves")
regrow.add_fruit("oak:acorn", "oak:leaves")
regrow.add_fruit("palm:coconut", "palm:leaves")
--regrow.add_fruit("plumtree:plum", "plumtree:leaves") -- regrows itself
-- regrow.add_fruit("plumtree:plum", "plumtree:leaves") -- regrows already
regrow.add_fruit("pomegranate:pomegranate", "pomegranate:leaves")
regrow.add_fruit("chestnuttree:bur", "chestnuttree:leaves")
-- farming plus
regrow.add_fruit("farming_plus:cocoa", "farming_plus:cocoa_leaves")
@ -123,4 +135,22 @@ minetest.after(0.1, function()
regrow.add_fruit("moretrees:cedar_cone", "moretrees:cedar_leaves")
regrow.add_fruit("moretrees:fir_cone", "moretrees:fir_leaves")
regrow.add_fruit("moretrees:spruce_cone", "moretrees:spruce_leaves")
end)
-- xnether
regrow.add_fruit("xnether:fruit", "xnether:blue_leaves")
-- multibiomegen
for f = 0, 230 do
regrow.add_fruit("multibiomegen:fruit_" .. f, "multibiomegen:leaf_" .. f)
end
end
-- wait until mods are loaded to save dependency mess
if minetest.register_on_mods_loaded then
minetest.register_on_mods_loaded(add_fruits)
else
minetest.after(0, add_fruits)
end
print("[MOD] Regrow loaded")

View File

@ -1,4 +1,3 @@
name = regrow
depends =
optional_depends =
description = Helps to regrow tree fruits instead of replanting saplings.
min_minetest_version = 5.0

105
readme.MD
View File

@ -1,25 +1,103 @@
REGROW
------
minetest mod REGROW
===================
Mod to regrow fruits with self-contained API
## Information
-----------
This mod helps to regrow tree fruits instead of the need for replanting
saplings each time.
USAGE
-----
![screenshot.jpg](screenshot.jpg)
The regrow.add_fruit() function is used to override each fruits after_dig_node
function so that an invisible node is placed once it is taken, then a timer is
## Technical info
--------------
This mod is named `regrow` a simplified optimized version
of fruits nodes to reappears on place after dig using timer parameters.
#### Dependences
none, core minetest api, the mod has a node detection inside the api function
so its secure to use no matter if the corresponding node exits or not.
### Configuration
Each fruit will grow depending of the minimun and maximun value,
the time the fruit appears is random between the two configured values:
| setting name | description | type | default | observations |
| ------------------- | ----------------------- | --- | ------- | ----------- |
| regrow_min_interval | Minimum Regrow Interval | int | 600 | Seconds |
| regrow_max_interval | Maximum Regrow Interval | int | 1200 | seconds |
### Overview:
Based on "endless_apples" by Shara RedCat (2018). Its starting
at https://forum.minetest.net/viewtopic.php?p=379158#p379158 to solve
an issue over growing fruits and now is mantained.
The mod works as is but can be used for other mods, currently the mod
has support for `ethereal`, `farming_plus`, `australia`, `aotearoa`,
and `moretrees`. It also support some special others.
#### Nodes
| MOD supported | Fruit to regrow (node) | Sustitute when growing (node) |
| ------------- | ---------------------- | ----------------------------- |
| default | default:apple | default:leaves |
| ethereal | ethereal:banana | ethereal:bananaleaves |
| ethereal | ethereal:banana_bunch | ethereal:bananaleaves |
| ethereal | ethereal:orange | ethereal:orange_leaves |
| ethereal | ethereal:coconut | ethereal:palmleaves |
| ethereal | ethereal:lemon | ethereal:lemon_leaves |
| ethereal | ethereal:olive | ethereal:olive_leaves |
| ethereal | ethereal:golden_apple | ethereal:yellowleaves (disabled) |
| cool_trees | cacaotree:pod | cacaotree:trunk (override) |
| cool_trees | cherrytree:cherries | cherrytree:blossom_leaves |
| cool_trees | clementinetree:clementine | clementinetree:leaves |
| cool_trees | ebony:persimmon | ebony:leaves |
| cool_trees | lemontree:lemon | lemontree:leaves |
| cool_trees | oak:acorn | oak:leaves |
| cool_trees | palm:coconut | palm:leaves |
| cool_trees | pomegranate:pomegranate | pomegranate:leaves |
| farming_plus | farming_plus:cocoa | farming_plus:cocoa_leaves |
| farming_plus | farming_plus:banana | farming_plus:banana_leaves |
| aotearoa | aotearoa:karaka_fruit | aotearoa:karaka_leaves |
| aotearoa | aotearoa:miro_fruit | aotearoa:miro_leaves |
| aotearoa | aotearoa:tawa_fruit | aotearoa:tawa_leaves |
| aotearoa | aotearoa:hinau_fruit | aotearoa:hinau_leaves |
| aotearoa | aotearoa:kawakawa_fruit | aotearoa:kawakawa_leaves |
| australia | australia:cherry | australia:cherry_leaves |
| australia | australia:lilly_pilly_berries | australia:lilly_pilly_leaves |
| australia | australia:macadamia | australia:macadamia_leaves |
| australia | australia:mangrove_apple | australia:mangrove_apple_leaves |
| australia | australia:moreton_bay_fig | australia:moreton_bay_fig_leaves |
| australia | australia:quandong | australia:quandong_leaves |
| moretrees | moretrees:acorn | moretrees:oak_leaves |
| moretrees | moretrees:cedar_cone | moretrees:cedar_leaves |
| moretrees | moretrees:fir_cone | moretrees:fir_leaves |
| moretrees | moretrees:spruce_cone | moretrees:spruce_leaves |
#### API usage
The `regrow.add_fruit()` function is used to override each fruits `after_dig_node`
function so that an placeholder node (nostly leaves) is placed once it is taken, then a timer is
started that will regrow the fruit on completion (unless tree is chopped down).
regrow.add_fruit(fruit_node, leaves_node, param2_check_override)
#### Definition
Examples:
`regrow.add_fruit(fruit_node, leaves_node, param2_check_override)`
#### Examples:
```
regrow.add_fruit("default:apple", "default:leaves")
regrow.add_fruit("cacaotree:pod", "cacaotree:trunk", true)
```
Changelog
---------
@ -31,3 +109,10 @@ Changelog
- 0.5 - Ethereal Lemons and Olives can now regrow.
- 0.6 - Add support for cool_trees, farming_plus, aotearoa, australia and moretrees
- 0.7 - Add param2 override for cacao with placement param2 check
- 0.8 - Add custom min and max time regrow interval settings (defaults are 600 and 1200)
## LICENSE
MIT see [license.txt](license.txt) file.

5
settingtypes.txt Normal file
View File

@ -0,0 +1,5 @@
# Minimum interval in seconds it takes to regrow fruits
regrow_min_interval (Minimum Regrow Interval) int 600
# Maximum interval in seconds it takes to regrow fruits
regrow_max_interval (Maximum Regrow Interval) int 1200