From 154d23ecdb4e92ebbe89075eeda067f3d38a8af7 Mon Sep 17 00:00:00 2001 From: thunderdog1138 Date: Fri, 17 Jul 2020 12:39:11 +0000 Subject: [PATCH] Upload files to 'mods/farming' --- mods/farming/README.md | 70 +++++++++++++ mods/farming/screenshot.png | Bin 0 -> 42499 bytes mods/farming/settingtypes.txt | 2 + mods/farming/soil.lua | 176 ++++++++++++++++++++++++++++++++ mods/farming/statistics.lua | 185 ++++++++++++++++++++++++++++++++++ 5 files changed, 433 insertions(+) create mode 100644 mods/farming/README.md create mode 100644 mods/farming/screenshot.png create mode 100644 mods/farming/settingtypes.txt create mode 100644 mods/farming/soil.lua create mode 100644 mods/farming/statistics.lua diff --git a/mods/farming/README.md b/mods/farming/README.md new file mode 100644 index 00000000..353d6f93 --- /dev/null +++ b/mods/farming/README.md @@ -0,0 +1,70 @@ +# Farming Redo Mod +### by TenPlus1 + +https://forum.minetest.net/viewtopic.php?id=9019 + +Farming Redo is a simplified version of the built-in farming mod in minetest and comes with wheat, cotton, carrot, cucumber, potato and tomato to start out with which spawn throughout the map... new foods need only be planted on tilled soil so no seeds are required, original wheat and cotton will require seeds which are found inside normal and jungle grass... + +This mod works by adding your new plant to the {growing=1} group and numbering the stages from _1 to as many stages as you like, but the underscore MUST be used only once in the node name to separate plant from stage number e.g. + +"farming:cotton_1" through to "farming:cotton_8" +"farming:wheat_1" through to "farming:wheat_8" +"farming:cucumber_4" through to "farming:cucumber_4" + +### Changelog: + +- 1.45 - Dirt and Hoes are more in line with default by using dry/wet/base, added cactus juice, added pasta, spaghetti, cabbage, korean bibimbap, code tidy +options, onion soup added (thanks edcrypt), Added apple pie, added wild cotton to savanna +- 1.44 - Added 'farming_stage_length' in mod settings for speed of crop growth, also thanks to TheDarkTiger for translation updates +- 1.43 - Scythe works on use instead of right-click, added seed=1 groups to actual seeds and seed=2 group for plantable food items. +- 1.42 - Soil needs water to be present within 3 blocks horizontally and 1 below to make wet soil, Jack 'o Lanterns now check protection, add chocolate block. +- 1.41 - Each crop has it's own spawn rate (can be changed in farming.conf) +- 1.40 - Added Mithril Scythe to quick harvest and replant crops on right-click. Added Hoe's for MoreOres with Toolrank support. +- 1.39 - Added Rice, Rye and Oats thanks to Ademants Grains mod. Added Jaffa Cake and multigrain bread. +- 1.38 - Pumpkin grows into block, use chopping board to cut into 4x slices, same with melon block, 2x2 slices makes a block, cocoa pods are no longer walkable +- 1.37 - Added custom 'growth_check(pos, nodename) function for crop nodes to use (check cocoa.lua for example) +- 1.36 - Added Beetroot, Beetroot Soup (6x beetroot, 1x bowl), fix register_plant() issue, add new recipes +- 1.35 - Deprecated bronze/mese/diamond hoe's, added hoe bomb and deprecated hoe's as lucky block prizes +- 1.34 - Added scarecrow Base (5x sticks in a cross shape) +- 1.33 - Added cooking utensils (wooden bowl, saucepan, cooking pot, baking tray, skillet, cutting board, mortar & pestle, juicer, glass mixing bowl) for easier food crafts. +- 1.32 - Added Pea plant (textures by Andrey01) - also added Wooden Bowl and Pea Soup crafts +- 1.31 - Added Pineapple which can be found growing in savannah areas (place pineapple in crafting to obtain 5x rings to eat and a top for re-planting), also Salt which is made from cooking a bucket of water, added food groups so it's more compatible with Ruben's food mods. +- 1.30 - Added Garlic, Pepper and Onions thanks to Grizzly Adam for sharing textures +- 1.29 - Updating functions so requires Minetest 0.4.16 and above to run +- 1.28 - Added chili peppers and bowl of chili, optimized code and fixed a few bugs, added porridge +- 1.27 - Added meshoptions to api and wheat plants, added farming.rarity setting to spawn more/less crops on map, have separate cotton/string items (4x cotton = 1x wool, 2x cotton = 2x string) +- 1.26 - Added support for [toolranks] mod when using hoe's +- 1.25 - Added check for farming.conf setting file to disable specific crops globally (inside mod folder) or world specific (inside world folder) +- 1.24 - Added Hemp which can be crafted into fibre, paper, string, rope and oil. +- 1.23 - Huge code tweak and tidy done and added barley seeds to be found in dry grass, barley can make flour for bread also. +- 1.22 - Added grape bushes at high climates which can be cultivated into grape vines using trellis (9 sticks). +- 1.21 - Added auto-refill code for planting crops (thanks crabman77), also fixed a few bugs +- 1.20b - Tidied code, made api compatible with new 0.4.13 changes and changed to soil texture overlays +- 1.20 - NEW growing routine added that allows crops to grow while player is away doing other things (thanks prestidigitator) +- 1.14 - Added Green Beans from Crops mod (thanks sofar), little bushels in the wild but need to be grown using beanpoles crafted with 4 sticks (2 either side) +- 1.13 - Fixed seed double-placement glitch. Mapgen now uses 0.4.12+ for plant generation +- 1.12 - Player cannot place seeds in protected area, also growing speeds changed to match defaults +- 1.11 - Added Straw Bale, streamlined growing abm a little, fixed melon rotation bug with screwdriver +- 1.10 - Added Blueberry Bush and Blueberry Muffins, also Pumpkin/Melon easier to pick up, added check for unloaded map +- 1.09 - Corn now uses single nodes instead of 1 ontop of the other, Ethanol recipe is more expensive (requires 5 corn) and some code cleanup. +- 1.08 - Added Farming Plus compatibility, plus can be removed and no more missing nodes +- 1.07 - Added Rhubarb and Rhubarb Pie +- 1.06 - register_hoe and register_plant added for compatibility with default farming mod, although any plants registered will use farming redo to grow +- 1.05 - Added Raspberry Bushels and Raspberry Smoothie +- 1.04 - Added Donuts... normal, chocolate and apple... and a few code cleanups and now compatible with jungletree's from MoreTrees mod +- 1.03 - Bug fixes and more compatibility as drop-in replacement for built-in farming mod +- 1.02 - Added farming.mod string to help other mods identify which farming mod is running, if it returns "redo" then you're using this one, "" empty is built-in mod +- 1.01 - Crafting coffee or ethanol returns empty bucket/bottle, also Cocoa spawns a little rarer +- 1.0 - Added Cocoa which randomly grows on jungle tree's, pods give cocoa beans which can be used to farm more pods on a jungle trunk or make Cookies which have been added (or other treats) +- 0.9 - Added Pumpkin, Jack 'O Lantern, Pumpkin Slice and Sugar (a huge thanks to painterly.net for allowing me to use their textures) +- 0.8 - Added Watermelon and Melon Slice +- 0.7 - Added Coffee, Coffee Beans, Drinking Cup, Cold and Hot Cup of Coffee +- 0.6 - Added Corn, Corn on the Cob... Also reworked Abm +- 0.5 - Added Carrot, Cucumber, Potato (and Baked Potato), Tomato +- 0.4 - Checks for Protection, also performance changes +- 0.3 - Added Diamond and Mese hoe +- 0.2 - Fixed check for wet soil +- 0.1 - Fixed growing bug +- 0.0 - Initial release + +### Lucky Blocks: 39 diff --git a/mods/farming/screenshot.png b/mods/farming/screenshot.png new file mode 100644 index 0000000000000000000000000000000000000000..aba30f016aae3e97daa01c0793c2b8468a921880 GIT binary patch literal 42499 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νDV(0f4oRX)Eyy2k1#kox* zD59mAbUdP3l}P_d>7@sn%Lm#J{0axr;zb2)SvT)6ZXK}*DnCh%G@SBFzkYD(4eIC& z{0CzcAiM+YaAm((KuC-I4TcTT%fGKU*M~ER0kB}uxM595tVCY+DPjWjMQ$F*phajq7)aVenvEUF8val6nAQltVcTk+qV0XU0V=$D>nfKudeg5-1 z089p{2QCG=^*vmY4j^T4TD1HPtPh59rGYbQwSPWny?3ki}_oDz^#F$sIuDclk$z}W0R4>TrjsN%Y{{8!Ra45ve z%RXD4QdC;(P+>o8V_;dg*z6fD{iQ{EX}a_;wPJtp(0}X>!~2{2AiAZc8}ldx&3Mxt zrjLMS`wpq=5@hK4FzgQxf`uePiG{G;uPHXugUjz(=>ppccDo+7gXYrUlz6rfS*MH9 zh@K)3i^TE#+gYn^r7D6FOU24AzfbE{PZQZcJ&IH>84PHWR@6k4f>dy@EJB=fJt6fu z(yNhw#FVkXp{3||9JYjQceXV8M>;am>-8$|B?m7;6p>mSG_b&7iG zS;hNn!6d|ZhflsmSQg5+(9lWW9@E5FxgXL}oD?8I;BPM>Tt7XD6=GLv?!4;CwrV!+ zUI^DlTc{-wk?L3P=L|a|Na1M$t0VC9BOO#pI z5$aBJGLS%a=DA{IGw#w7sspiZLL*@`(88BL01)1c`-AcQ&Gg}pmb$&a0|>LnflDf} zZOjzt6xNun00@h6utD+p`dSWzJRQ{O`|D;1Zv1-@qK!(;)~Unic#6HE6I?F65R0ZK zB}%O#;aL`;m|hVQfVf69U>Jrdn>2 zIU)l%1=tk#JLV@O3s0vQoJz{>#*+XXij27UT3}U~L$d;rihkFSq>^~uXs+-CRTy=z zLwF_Vrc4$d4|juptRk$8?+~eWH+;;-_xJa>#_H(){?5mR$5A8R-$MVZ`!prL&(nH`-!X>icyg@^ExbRs>nEq$mx5HBxDw%(}1E1BqVVV zMd^a3sL>=t6u2sc0Rx*&hq!t=YfqyaK1oRp8v!*FkMjAJw#H-p(K7`FhQc_-S!e7h zTG}BDL3-lRjG-~R@)TjTl(K^neh}2Fy~JZCIs^kG^gV%Kpg;^z`Q;J(;NLY@#!RPo z0oh>qkhB~NgFyYen}<0g)M*P%7UdUC$>)eiSv*%5zCXVch8eXIib2Hg0t%3N zw*3r;?3#6A4-F0ygwcG$MogDj7)hbp5i0~438(z-u0Lp}hqMVZ?8o!@P+PBQ9Q6l? z)$QalCXZ0AZp℞1^eq+rXb`F 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 0 then + + minetest.set_node(pos, {name = ndef.soil.wet}) + + elseif node.name == ndef.soil.wet then + minetest.set_node(pos, {name = ndef.soil.dry}) + + elseif node.name == ndef.soil.dry + and minetest.get_item_group(nn, "plant") == 0 then + minetest.set_node(pos, {name = ndef.soil.base}) + end + end +}) diff --git a/mods/farming/statistics.lua b/mods/farming/statistics.lua new file mode 100644 index 00000000..b8928671 --- /dev/null +++ b/mods/farming/statistics.lua @@ -0,0 +1,185 @@ +local statistics = {} +local ROOT_2 = math.sqrt(2.0) + +-- Approximations for erf(x) and erfInv(x) from +-- https://en.wikipedia.org/wiki/Error_function + +local erf +local erf_inv + +local A = 8 * (math.pi - 3.0)/(3.0 * math.pi * (4.0 - math.pi)) +local B = 4.0 / math.pi +local C = 2.0/(math.pi * A) +local D = 1.0 / A + + +erf = function(x) + + if x == 0 then return 0; end + + local xSq = x * x + local aXSq = A * xSq + local v = math.sqrt(1.0 - math.exp(-xSq * (B + aXSq) / (1.0 + aXSq))) + + return (x > 0 and v) or -v +end + + +erf_inv = function(x) + + if x == 0 then return 0; end + + if x <= -1 or x >= 1 then return nil; end + + local y = math.log(1 - x * x) + local u = C + 0.5 * y + local v = math.sqrt(math.sqrt(u * u - D * y) - u) + + return (x > 0 and v) or -v +end + + +local function std_normal(u) + return ROOT_2 * erf_inv(2.0 * u - 1.0) +end + + +local poisson +local cdf_table = {} + + +local function generate_cdf(lambda_index, lambda) + + local max = math.ceil(4 * lambda) + local pdf = math.exp(-lambda) + local cdf = pdf + local t = { [0] = pdf } + + for i = 1, max - 1 do + pdf = pdf * lambda / i + cdf = cdf + pdf + t[i] = cdf + end + + return t +end + + +for li = 1, 100 do + cdf_table[li] = generate_cdf(li, 0.25 * li) +end + + +poisson = function(lambda, max) + + if max < 2 then + return (math.random() < math.exp(-lambda) and 0) or 1 + elseif lambda >= 2 * max then + return max + end + + local u = math.random() + local lambda_index = math.floor(4 * lambda + 0.5) + local cdfs = cdf_table[lambda_index] + + if cdfs then + + lambda = 0.25 * lambda_index + + if u < cdfs[0] then return 0; end + if max > #cdfs then max = #cdfs + 1 else max = math.floor(max); end + if u >= cdfs[max - 1] then return max; end + + if max > 4 then -- Binary search + + local s = 0 + + while s + 1 < max do + + local m = math.floor(0.5 * (s + max)) + + if u < cdfs[m] then max = m; else s = m; end + end + else + for i = 1, max - 1 do + if u < cdfs[i] then return i; end + end + end + + return max + else + local x = lambda + math.sqrt(lambda) * std_normal(u) + + return (x < 0.5 and 0) or (x >= max - 0.5 and max) or math.floor(x + 0.5) + end +end + + +-- Error function. +statistics.erf = erf + +-- Inverse error function. +statistics.erf_inv = erf_inv + +--- Standard normal distribution function (mean 0, standard deviation 1). + -- + -- @return + -- Any real number (actually between -3.0 and 3.0). + +statistics.std_normal = function() + + local u = math.random() + + if u < 0.001 then + return -3.0 + elseif u > 0.999 then + return 3.0 + end + + return std_normal(u) +end + + +--- Standard normal distribution function (mean 0, standard deviation 1). + -- + -- @param mu + -- The distribution mean. + -- @param sigma + -- The distribution standard deviation. + -- @return + -- Any real number (actually between -3*sigma and 3*sigma). + +statistics.normal = function(mu, sigma) + + local u = math.random() + + if u < 0.001 then + return mu - 3.0 * sigma + elseif u > 0.999 then + return mu + 3.0 * sigma + end + + return mu + sigma * std_normal(u) +end + + +--- Poisson distribution function. + -- + -- @param lambda + -- The distribution mean and variance. + -- @param max + -- The distribution maximum. + -- @return + -- An integer between 0 and max (both inclusive). + +statistics.poisson = function(lambda, max) + + lambda, max = tonumber(lambda), tonumber(max) + + if not lambda or not max or lambda <= 0 or max < 1 then return 0; end + + return poisson(lambda, max) +end + + +return statistics