diff --git a/mods/ENTITIES/mcl_mobs/physics.lua b/mods/ENTITIES/mcl_mobs/physics.lua index 64bcfa822..705b22dbb 100644 --- a/mods/ENTITIES/mcl_mobs/physics.lua +++ b/mods/ENTITIES/mcl_mobs/physics.lua @@ -761,6 +761,61 @@ function mob_class:do_env_damage() end end + -- Cactus damage + local near = minetest.find_node_near(pos, 1, "mcl_core:cactus", true) + if not near and near ~= nil then + near = find_node_near({x=pos.x, y=pos.y-1, z=pos.z}, 1, "mcl_core:cactus", true) + end + if near then + -- is mob touching the cactus? + local dist = vector.distance(pos, near) + local dist_feet = vector.distance({x=pos.x, y=pos.y-1, z=pos.z}, near) + local large_mob = false + local medium_mob = false + if self.name == "mobs_mc:ender_dragon" or + self.name == "mobs_mc:ghast" or + self.name == "mobs_mc:guardian_elder" or + self.name == "mobs_mc:slime_big" or + self.name == "mobs_mc:magma_cube_big" or + self.name == "mobs_mc:wither" then + + large_mob = true + elseif self.name == "mobs_mc:hoglin" or + self.name == "mobs_mc:zoglin" or + self.name == "mobs_mc:horse" or + self.name == "mobs_mc:skeleton_horse" or + self.name == "mobs_mc:zombie_horse" or + self.name == "mobs_mc:donkey" or + self.name == "mobs_mc:mule" or + self.name == "mobs_mc:iron_golem" or + self.name == "mobs_mc:polar_bear" or + self.name == "mobs_mc:spider" or + self.name == "mobs_mc:cave_spider" or + self.name == "mobs_mc:strider" then + + medium_mob = true + end + if (not large_mob and not medium_mob and (dist < 1.03 or dist_feet < 1.6)) or (medium_mob and (dist < 1.165 or dist_feet < 1.73)) or (large_mob and (dist < 1.25 or dist_feet < 1.9)) then + if self.health ~= 0 then + self:damage_mob("cactus", 2) + + if self:check_for_death("cactus", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + end + end + -- is mob standing on the cactus? + if self.standing_on == "mcl_core:cactus" or self.standing_in == "mcl_core:cactus" or self.standing_under == "mcl_core:cactus" then + self:damage_mob("cactus", 2) + + if self:check_for_death("cactus", {type = "environment", + pos = pos, node = self.standing_in}) then + return true + end + end + -- Drowning damage if self.breath_max ~= -1 then local drowning = false diff --git a/mods/ITEMS/mcl_core/nodes_cactuscane.lua b/mods/ITEMS/mcl_core/nodes_cactuscane.lua index 79b440f61..805385124 100644 --- a/mods/ITEMS/mcl_core/nodes_cactuscane.lua +++ b/mods/ITEMS/mcl_core/nodes_cactuscane.lua @@ -135,4 +135,4 @@ minetest.register_node("mcl_core:reeds", { end, _mcl_blast_resistance = 0, _mcl_hardness = 0, -}) +}) \ No newline at end of file