Compare commits
10 Commits
3140afa50a
...
2b9efd94b9
Author | SHA1 | Date | |
---|---|---|---|
|
2b9efd94b9 | ||
|
d805ac59a0 | ||
|
afed754b20 | ||
|
2734139214 | ||
|
b5f65bd7d2 | ||
|
bb60f77f3e | ||
|
f820f70298 | ||
|
09ed4e8aca | ||
|
1ed82c4186 | ||
|
237e036d78 |
68
init.lua
68
init.lua
@ -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")
|
||||
|
3
mod.conf
3
mod.conf
@ -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
105
readme.MD
@ -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
|
||||
-----
|
||||

|
||||
|
||||
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
5
settingtypes.txt
Normal 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
|
Loading…
x
Reference in New Issue
Block a user