Remove unnecessary raycast from rover (and use the mcl_burning api where we can)

This commit is contained in:
seventeenthShulker 2024-06-15 23:21:55 +01:00 committed by teknomunk
parent 14a0546dce
commit ae263a19c9
2 changed files with 14 additions and 34 deletions

View file

@ -653,7 +653,7 @@ function mob_class:do_env_damage()
local _, dim = mcl_worlds.y_to_layer(pos.y)
if (self.sunlight_damage ~= 0 or self.ignited_by_sunlight) and (sunlight or 0) >= minetest.LIGHT_MAX and dim == "overworld" then
if self.armor_list and not self.armor_list.helmet or not self.armor_list or self.armor_list and self.armor_list.helmet and self.armor_list.helmet == "" then
if (self.ignited_by_sunlight and (not mcl_weather.rain.raining or not mcl_weather.has_rain(pos))) then
if self.ignited_by_sunlight and (not mcl_weather.rain.raining or not mcl_weather.has_rain(pos)) then
if (#mcl_burning.get_touching_nodes(self.object, "group:puts_out_fire", self) == 0) then
mcl_burning.set_on_fire(self.object, 10)
end
@ -694,9 +694,11 @@ function mob_class:do_env_damage()
local nodef3 = minetest.registered_nodes[self.standing_under]
-- rain
if self.rain_damage > 0 and mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then
if self.rain_damage > 0 and mcl_burning.is_affected_by_rain(self.object) then
self.health = self.health - self.rain_damage
if self:check_for_death("rain", {type = "environment", pos = pos, node = self.standing_in}) then
if self:check_for_death("rain", {type = "environment",
pos = pos, node = self.standing_in}) then
return true
end
end

View file

@ -156,37 +156,15 @@ mcl_mobs.register_mob("mobs_mc:rover", {
-- RAIN DAMAGE / EVASIVE WARP BEHAVIOUR HERE.
local enderpos = self.object:get_pos()
local dim = mcl_worlds.pos_to_dimension(enderpos)
if dim == "overworld" then
if mcl_weather.rain.raining then
local damage = true
local enderpos = self.object:get_pos()
enderpos.y = enderpos.y+2.89
local height = {x=enderpos.x, y=enderpos.y+512,z=enderpos.z}
local ray = minetest.raycast(enderpos, height, true)
-- Check for blocks above enderman.
for pointed_thing in ray do
if pointed_thing.type == "node" then
local nn = minetest.get_node(minetest.get_pointed_thing_position(pointed_thing)).name
local def = minetest.registered_nodes[nn]
if (not def) or def.walkable then
-- There's a node in the way. Delete arrow without damage
damage = false
break
end
end
end
if damage == true then
self.state = ""
--rain hurts enderman
self.object:punch(self.object, 1.0, {
full_punch_interval=1.0,
damage_groups={fleshy=self._damage},
}, nil)
--randomly teleport hopefully under something.
self:teleport(nil)
end
end
if dim == "overworld" and mcl_burning.is_affected_by_rain(self.object) then
self.state = ""
--rain hurts enderman
self.object:punch(self.object, 1.0, {
full_punch_interval=1.0,
damage_groups={fleshy=self._damage},
}, nil)
--randomly teleport hopefully under something.
self:teleport(nil)
end
-- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE.