Fix enderman griefing in protected areas.
This commit is contained in:
parent
046bca1080
commit
a7b9107d31
|
@ -342,44 +342,47 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
local r = pr:next(1, #takable_nodes)
|
local r = pr:next(1, #takable_nodes)
|
||||||
local take_pos = takable_nodes[r]
|
local take_pos = takable_nodes[r]
|
||||||
local node = minetest.get_node(take_pos)
|
local node = minetest.get_node(take_pos)
|
||||||
local dug = minetest.dig_node(take_pos)
|
-- Don't destroy protected stuff.
|
||||||
if dug then
|
if not minetest.is_protected(take_pos, "") then
|
||||||
if mobs_mc.enderman_replace_on_take[node.name] then
|
local dug = minetest.dig_node(take_pos)
|
||||||
self._taken_node = mobs_mc.enderman_replace_on_take[node.name]
|
if dug then
|
||||||
else
|
if mobs_mc.enderman_replace_on_take[node.name] then
|
||||||
self._taken_node = node.name
|
self._taken_node = mobs_mc.enderman_replace_on_take[node.name]
|
||||||
end
|
else
|
||||||
local def = minetest.registered_nodes[self._taken_node]
|
self._taken_node = node.name
|
||||||
-- Update animation and texture accordingly (adds visibly carried block)
|
end
|
||||||
local block_type
|
local def = minetest.registered_nodes[self._taken_node]
|
||||||
-- Cube-shaped
|
-- Update animation and texture accordingly (adds visibly carried block)
|
||||||
if def.drawtype == "normal" or
|
local block_type
|
||||||
def.drawtype == "nodebox" or
|
-- Cube-shaped
|
||||||
def.drawtype == "liquid" or
|
if def.drawtype == "normal" or
|
||||||
def.drawtype == "flowingliquid" or
|
def.drawtype == "nodebox" or
|
||||||
def.drawtype == "glasslike" or
|
def.drawtype == "liquid" or
|
||||||
def.drawtype == "glasslike_framed" or
|
def.drawtype == "flowingliquid" or
|
||||||
def.drawtype == "glasslike_framed_optional" or
|
def.drawtype == "glasslike" or
|
||||||
def.drawtype == "allfaces" or
|
def.drawtype == "glasslike_framed" or
|
||||||
def.drawtype == "allfaces_optional" or
|
def.drawtype == "glasslike_framed_optional" or
|
||||||
def.drawtype == nil then
|
def.drawtype == "allfaces" or
|
||||||
block_type = "cube"
|
def.drawtype == "allfaces_optional" or
|
||||||
elseif def.drawtype == "plantlike" then
|
def.drawtype == nil then
|
||||||
-- Flowers and stuff
|
block_type = "cube"
|
||||||
block_type = "plantlike45"
|
elseif def.drawtype == "plantlike" then
|
||||||
elseif def.drawtype == "airlike" then
|
-- Flowers and stuff
|
||||||
-- Just air
|
block_type = "plantlike45"
|
||||||
block_type = nil
|
elseif def.drawtype == "airlike" then
|
||||||
else
|
-- Just air
|
||||||
-- Fallback for complex drawtypes
|
block_type = nil
|
||||||
block_type = "unknown"
|
else
|
||||||
end
|
-- Fallback for complex drawtypes
|
||||||
self.base_texture = create_enderman_textures(block_type, self._taken_node)
|
block_type = "unknown"
|
||||||
self.object:set_properties({ textures = self.base_texture })
|
end
|
||||||
self.animation = select_enderman_animation("block")
|
self.base_texture = create_enderman_textures(block_type, self._taken_node)
|
||||||
mobs:set_animation(self, self.animation.current)
|
self.object:set_properties({ textures = self.base_texture })
|
||||||
if def.sounds and def.sounds.dug then
|
self.animation = select_enderman_animation("block")
|
||||||
minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true)
|
mobs:set_animation(self, self.animation.current)
|
||||||
|
if def.sounds and def.sounds.dug then
|
||||||
|
minetest.sound_play(def.sounds.dug, {pos = take_pos, max_hear_distance = 16}, true)
|
||||||
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
@ -391,7 +394,8 @@ mobs:register_mob("mobs_mc:enderman", {
|
||||||
local yaw = self.object:get_yaw()
|
local yaw = self.object:get_yaw()
|
||||||
-- Place node at looking direction
|
-- Place node at looking direction
|
||||||
local place_pos = vector.subtract(pos, minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(yaw))))
|
local place_pos = vector.subtract(pos, minetest.facedir_to_dir(minetest.dir_to_facedir(minetest.yaw_to_dir(yaw))))
|
||||||
if minetest.get_node(place_pos).name == "air" then
|
-- Also check to see if protected.
|
||||||
|
if minetest.get_node(place_pos).name == "air" and not minetest.is_protected(place_pos, "") then
|
||||||
-- ... but only if there's a free space
|
-- ... but only if there's a free space
|
||||||
local success = minetest.place_node(place_pos, {name = self._taken_node})
|
local success = minetest.place_node(place_pos, {name = self._taken_node})
|
||||||
if success then
|
if success then
|
||||||
|
|
Loading…
Reference in New Issue