From f9372b02f6beb236ab73799d4b91b19d7a596cbc Mon Sep 17 00:00:00 2001 From: cora Date: Thu, 15 Sep 2022 05:02:48 +0200 Subject: [PATCH] Better bone mealing behavior --- mods/ITEMS/mcl_crimson/init.lua | 93 +++++++++--------- .../textures/mcl_crimson_weeping_vines.png | Bin 0 -> 6361 bytes 2 files changed, 45 insertions(+), 48 deletions(-) create mode 100644 mods/ITEMS/mcl_crimson/textures/mcl_crimson_weeping_vines.png diff --git a/mods/ITEMS/mcl_crimson/init.lua b/mods/ITEMS/mcl_crimson/init.lua index 4262e41bb4..b0ba09d336 100644 --- a/mods/ITEMS/mcl_crimson/init.lua +++ b/mods/ITEMS/mcl_crimson/init.lua @@ -28,6 +28,38 @@ function grow_vines(pos, moreontop ,vine, dir) until n.name ~= "air" and n.name ~= vine end +local nether_plants = { + ["mcl_crimson:crimson_nylium"] = { + "mcl_crimson:crimson_roots", + "mcl_crimson:crimson_fungus", + "mcl_crimson:warped_fungus", + }, + ["mcl_crimson:warped_nylium"] = { + "mcl_crimson:warped_roots", + "mcl_crimson:warped_fungus", + "mcl_crimson:twisting_vines", + "mcl_crimson:nether_sprouts", + }, +} + +local function has_nylium_neighbor(pos) + local p = minetest.find_node_near(pos,1,{"mcl_crimson:warped_nylium","mcl_crimson:crimson_nylium"}) + if p then + return minetest.get_node(p) + end +end + +local function spread_nether_plants(pos,node) + local n = node.name + local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-5,-3,-5),vector.offset(pos,5,3,5),{n}) + table.shuffle(nn) + nn[1] = pos + for i=1,math.random(1,math.min(#nn,12)) do + minetest.set_node(vector.offset(nn[i],0,1,0),{name=nether_plants[n][math.random(#nether_plants[n])]}) + mcl_dye.add_bone_meal_particle(vector.offset(nn[i],0,1,0)) + end +end + minetest.register_node("mcl_crimson:warped_fungus", { description = S("Warped Fungus Mushroom"), drawtype = "plantlike", @@ -483,54 +515,6 @@ minetest.register_node("mcl_crimson:crimson_nylium", { _mcl_silk_touch_drop = true, }) -local function has_nylium_neighbor(pos) - local p = minetest.find_node_near(pos,1,{"mcl_crimson:warped_nylium","mcl_crimson:crimson_nylium"}) - if p then - return minetest.get_node(p) - end -end - -local nether_plants = { - ["mcl_crimson:crimson_nylium"] = { - "mcl_crimson:crimson_roots", - "mcl_crimson:crimson_fungus", - "mcl_crimson:weeping_vines", - "mcl_crimson:warped_fungus", - }, - ["mcl_crimson:warped_nylium"] = { - "mcl_crimson:warped_roots", - "mcl_crimson:warped_fungus", - "mcl_crimson:twisting_vines", - "mcl_crimson:nether_sprouts", - }, -} - -local function spread_nylium(pos) - local nn = minetest.find_nodes_in_area_under_air(vector.offset(pos,-5,-3,-5),vector.offset(pos,5,3,5),{"mcl_nether:netherrack"}) - table.insert(nn,pos) - table.sort(nn,function(a, b) - return vector.distance(pos, a) < vector.distance(pos, b) - end) - for i=1,math.random(1,math.min(#nn,15)) do - local n = has_nylium_neighbor(nn[i]) - if n then - minetest.set_node(nn[i],n) - if math.random(5) == 1 then - minetest.set_node(vector.offset(nn[i],0,1,0),{name=nether_plants[n.name][math.random(#nether_plants[n.name])]}) - end - mcl_dye.add_bone_meal_particle(vector.offset(nn[i],0,1,0)) - end - end -end - -mcl_dye.register_on_bone_meal_apply(function(pt,user) - if not pt.type == "node" then return end - if minetest.get_node(pt.under).name ~= "mcl_nether:netherrack" then return end - if has_nylium_neighbor(pt.under) then - spread_nylium(pt.under) - end -end) - minetest.register_craft({ output = "mcl_crimson:crimson_hyphae_wood 4", recipe = { @@ -548,6 +532,19 @@ minetest.register_craft({ mcl_stairs.register_stair_and_slab_simple("crimson_hyphae_wood", "mcl_crimson:crimson_hyphae_wood", S("Crimson Stair"), S("Crimson Slab"), S("Double Crimson Slab")) +mcl_dye.register_on_bone_meal_apply(function(pt,user) + if not pt.type == "node" then return end + local node = minetest.get_node(pt.under) + if node.name == "mcl_nether:netherrack" then + local n = has_nylium_neighbor(pt.under) + if n then + minetest.set_node(pt.under,n) + end + elseif node.name == "mcl_crimson:warped_nylium" or node.name == "mcl_crimson:crimson_nylium" then + spread_nether_plants(pt.under,node) + end +end) + minetest.register_abm({ label = "mcl_crimson:crimson_fungus", nodenames = {"mcl_crimson:crimson_fungus"}, diff --git a/mods/ITEMS/mcl_crimson/textures/mcl_crimson_weeping_vines.png b/mods/ITEMS/mcl_crimson/textures/mcl_crimson_weeping_vines.png new file mode 100644 index 0000000000000000000000000000000000000000..efe1cb5538fa6550c001ff607d7dbecf07ac705f GIT binary patch literal 6361 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 T_fpP5=LMruT