mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-12-23 08:29:34 +01:00
Fix endermen teleporting in the rain in the end per issue #1169.
This commit is contained in:
parent
73616453a4
commit
2ace4ccc68
1 changed files with 29 additions and 26 deletions
|
@ -242,36 +242,39 @@ mobs:register_mob("mobs_mc:enderman", {
|
|||
})
|
||||
end
|
||||
-- RAIN DAMAGE / EVASIVE WARP BEHAVIOUR HERE.
|
||||
if mcl_weather.state == "rain" or mcl_weather.state == "lightning" 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
|
||||
local dim = mcl_worlds.pos_to_dimension(enderpos)
|
||||
if dim == "overworld" then
|
||||
if mcl_weather.state == "rain" or mcl_weather.state == "lightning" 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
|
||||
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)
|
||||
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
|
||||
end
|
||||
else return end
|
||||
-- AGRESSIVELY WARP/CHASE PLAYER BEHAVIOUR HERE.
|
||||
if self.state == "attack" then
|
||||
--if (minetest.get_timeofday() * 24000) > 5001 and (minetest.get_timeofday() * 24000) < 19000 then
|
||||
|
|
Loading…
Reference in a new issue