forked from VoxeLibre/VoxeLibre
Compare commits
6 Commits
master
...
burning_in
Author | SHA1 | Date |
---|---|---|
seventeenthShulker | 54d99008e9 | |
seventeenthShulker | 875a5f659c | |
seventeenthShulker | 75d16b56eb | |
seventeenthShulker | ea6e65e459 | |
seventeenthShulker | 945a98f9e9 | |
seventeenthShulker | ac55e100af |
|
@ -14,7 +14,8 @@ function mcl_burning.is_burning(obj)
|
|||
end
|
||||
|
||||
function mcl_burning.is_affected_by_rain(obj)
|
||||
return mcl_weather.get_weather() == "rain" and mcl_weather.is_outdoor(obj:get_pos())
|
||||
local pos = obj:get_pos()
|
||||
return mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) and mcl_weather.has_rain(pos)
|
||||
end
|
||||
|
||||
function mcl_burning.get_collisionbox(obj, smaller, storage)
|
||||
|
|
|
@ -653,8 +653,10 @@ 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 then
|
||||
mcl_burning.set_on_fire(self.object, 10)
|
||||
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
|
||||
else
|
||||
self:deal_light_damage(pos, self.sunlight_damage)
|
||||
return true
|
||||
|
@ -693,7 +695,7 @@ function mob_class:do_env_damage()
|
|||
|
||||
-- rain
|
||||
if self.rain_damage > 0 then
|
||||
if mcl_weather.rain.raining and mcl_weather.is_outdoor(pos) then
|
||||
if mcl_burning.is_affected_by_rain(self.object) then
|
||||
self.health = self.health - self.rain_damage
|
||||
|
||||
if self:check_for_death("rain", {type = "environment",
|
||||
|
|
|
@ -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.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
|
||||
|
||||
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.
|
||||
|
|
Loading…
Reference in New Issue