From e3bf5f92a7d6faccce0f6e0f8569d43d20ddf897 Mon Sep 17 00:00:00 2001 From: tenplus1 Date: Sun, 15 Sep 2024 11:36:11 +0100 Subject: [PATCH] revert to old cocoa register_on_generate function, new one had memory leak --- crops/cocoa.lua | 46 ++++++++++++++++++++++++++++----- crops/cocoa_mapgen.lua | 58 ------------------------------------------ 2 files changed, 40 insertions(+), 64 deletions(-) delete mode 100644 crops/cocoa_mapgen.lua diff --git a/crops/cocoa.lua b/crops/cocoa.lua index 9f35174..db555a5 100644 --- a/crops/cocoa.lua +++ b/crops/cocoa.lua @@ -143,10 +143,44 @@ farming.registered_plants["farming:cocoa_beans"] = { steps = 4 } --- register async mapgen script +-- add random cocoa pods to jungle tree's -if minetest.register_mapgen_script then - minetest.register_mapgen_script(farming.path .. "/crops/cocoa_mapgen.lua") -else - dofile(farming.path .. "/crops/cocoa_mapgen.lua") -end +local random = math.random -- localise for speed + +minetest.register_on_generated(function(minp, maxp) + + if maxp.y < 0 then return end + + local pos, dir + local cocoa = minetest.find_nodes_in_area(minp, maxp, + {"default:jungletree", "mcl_core:jungletree"}) + + for n = 1, #cocoa do + + pos = cocoa[n] + + if minetest.find_node_near(pos, 1, + {"default:jungleleaves", "moretrees:jungletree_leaves_green", + "mcl_core:jungleleaves"}) then + + dir = random(80) + + if dir == 1 then pos.x = pos.x + 1 + elseif dir == 2 then pos.x = pos.x - 1 + elseif dir == 3 then pos.z = pos.z + 1 + elseif dir == 4 then pos.z = pos.z -1 + end + + if dir < 5 + and minetest.get_node(pos).name == "air" + and minetest.get_node_light(pos) > 12 then + +--print ("Cocoa Pod added at " .. minetest.pos_to_string(pos)) + + minetest.set_node(pos, { + name = "farming:cocoa_" .. tostring(random(4)) + }) + end + end + end +end) diff --git a/crops/cocoa_mapgen.lua b/crops/cocoa_mapgen.lua deleted file mode 100644 index f4bc191..0000000 --- a/crops/cocoa_mapgen.lua +++ /dev/null @@ -1,58 +0,0 @@ - --- Localize things for speed - -local random = math.random -local jungletree_nodes = {"default:jungletree", "mcl_core:jungletree"} -local jungletree_leaves = { - "default:jungleleaves", "moretrees:jungletree_leaves_green", "mcl_core:jungleleaves"} - --- check area to place cocoa pods near jungle trees - -local function generate(vmanip, minp, maxp) - - if maxp.y < 0 then return end - - local min, max = vmanip:get_emerged_area() - local area = VoxelArea:new({MinEdge = min, MaxEdge = max}) - local data = vmanip:get_light_data() - local cocoa = minetest.find_nodes_in_area(minp, maxp, jungletree_nodes) - - for n = 1, #cocoa do - - local pos = cocoa[n] - - if minetest.find_node_near(pos, 1, jungletree_leaves) then - - local dir = random(80) - - if dir == 1 then pos.x = pos.x + 1 - elseif dir == 2 then pos.x = pos.x - 1 - elseif dir == 3 then pos.z = pos.z + 1 - elseif dir == 4 then pos.z = pos.z -1 - end - - if dir < 5 and minetest.get_node(pos).name == "air" then - - local index = area:index(pos.x, pos.y, pos.z) - - if data[index] > 12 then -- light at pos > 12 - - minetest.set_node(pos, {name = "farming:cocoa_" .. random(4)}) ---print("Cocoa Pod added at " .. minetest.pos_to_string(pos)) - end - end - end - end -end - --- mapgen - -if minetest.save_gen_notify then -- async env (5.9+) - minetest.register_on_generated(function(vmanip, minp, maxp, blockseed) - generate(vmanip, minp, maxp) - end) -else -- main thread (5.8 and earlier) - minetest.register_on_generated(function(minp, maxp, blockseed) - generate(minetest.get_mapgen_object("voxelmanip"), minp, maxp) - end) -end