From 1c9f0c32388a57d71f0ce44a57fa1b5d542ab6ef Mon Sep 17 00:00:00 2001
From: cora <coradelamouche@gmx.ch>
Date: Tue, 22 Mar 2022 15:17:04 +0100
Subject: [PATCH] don't spawn mobs on non opaque nodes or leaves

with the preliminary jordanspaning mobs would spawn on trees
and water regularly.
---
 mods/ENTITIES/mcl_mobs/spawning.lua | 18 ++++++++++++++----
 1 file changed, 14 insertions(+), 4 deletions(-)

diff --git a/mods/ENTITIES/mcl_mobs/spawning.lua b/mods/ENTITIES/mcl_mobs/spawning.lua
index 210c6b9c6..2e7f523ba 100644
--- a/mods/ENTITIES/mcl_mobs/spawning.lua
+++ b/mods/ENTITIES/mcl_mobs/spawning.lua
@@ -570,12 +570,22 @@ if mobs_spawn then
 							break
 						end
 
-						local gotten_node = get_node(spawning_position).name
+						local gotten_node = get_node(spawning_position)
+						local gotten_node_name = gotten_node.name
+						local gotten_node_def = minetest.registered_nodes[gotten_node_name]
 
-						if not gotten_node or gotten_node == "air" then --skip air nodes
+						if not gotten_node_name or not gotten_node_def or gotten_node_name == "air" then --skip air nodes
 							break
 						end
 
+						if gotten_node_def.use_texture_alpha and gotten_node_def.use_texture_alpha ~= "opaque" then 
+							break
+						end --don't spawn on nonopaque nodes
+
+						local leaf = minetest.get_item_group(gotten_node_name,"leaves")
+						if leaf ~= 0 then
+							break end --don't spawn on treetops
+
 						local gotten_biome = minetest.get_biome_data(spawning_position)
 
 						if not gotten_biome then
@@ -616,8 +626,8 @@ if mobs_spawn then
 							break
 						end
 
-						local is_water = get_item_group(gotten_node, "water") ~= 0
-						local is_lava  = get_item_group(gotten_node, "lava") ~= 0
+						local is_water = get_item_group(gotten_node_name, "water") ~= 0
+						local is_lava  = get_item_group(gotten_node_name, "lava") ~= 0
 
 						if mob_def.type_of_spawning == "ground" and is_water then
 							break