forked from VoxeLibre/VoxeLibre
Knockback fixes:
This PR enables knockback for snowballs, and eggs. And disables knockback for the following mobs: Shulkers, Iron Golems, and Ender Dragons.
This commit is contained in:
parent
61ddec5a85
commit
45ec876167
|
@ -3210,35 +3210,36 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
|||
|
||||
local die = false
|
||||
|
||||
-- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately.
|
||||
if damage >= 0.1 then
|
||||
|
||||
-- weapon sounds
|
||||
if weapon:get_definition().sounds ~= nil then
|
||||
if damage >= 0 then
|
||||
-- only play hit sound and show blood effects if damage is 1 or over; lower to 0.1 to ensure armor works appropriately.
|
||||
if damage >= 0.1 then
|
||||
-- weapon sounds
|
||||
if weapon:get_definition().sounds ~= nil then
|
||||
|
||||
local s = random(0, #weapon:get_definition().sounds)
|
||||
local s = random(0, #weapon:get_definition().sounds)
|
||||
|
||||
minetest.sound_play(weapon:get_definition().sounds[s], {
|
||||
object = self.object, --hitter,
|
||||
max_hear_distance = 8
|
||||
}, true)
|
||||
else
|
||||
minetest.sound_play("default_punch", {
|
||||
object = self.object,
|
||||
max_hear_distance = 5
|
||||
}, true)
|
||||
minetest.sound_play(weapon:get_definition().sounds[s], {
|
||||
object = self.object, --hitter,
|
||||
max_hear_distance = 8
|
||||
}, true)
|
||||
else
|
||||
minetest.sound_play("default_punch", {
|
||||
object = self.object,
|
||||
max_hear_distance = 5
|
||||
}, true)
|
||||
end
|
||||
|
||||
damage_effect(self, damage)
|
||||
|
||||
-- do damage
|
||||
self.health = self.health - damage
|
||||
|
||||
-- skip future functions if dead, except alerting others
|
||||
if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then
|
||||
die = true
|
||||
end
|
||||
end
|
||||
|
||||
damage_effect(self, damage)
|
||||
|
||||
-- do damage
|
||||
self.health = self.health - damage
|
||||
|
||||
-- skip future functions if dead, except alerting others
|
||||
if check_for_death(self, "hit", {type = "punch", puncher = hitter}) then
|
||||
die = true
|
||||
end
|
||||
|
||||
-- knock back effect (only on full punch)
|
||||
if not die
|
||||
and self.knock_back
|
||||
|
|
|
@ -35,6 +35,7 @@ mcl_mobs:register_mob("mobs_mc:enderdragon", {
|
|||
},
|
||||
physical = true,
|
||||
damage = 10,
|
||||
knock_back = false,
|
||||
jump = true,
|
||||
jump_height = 14,
|
||||
fly = true,
|
||||
|
|
|
@ -37,6 +37,7 @@ mcl_mobs:register_mob("mobs_mc:iron_golem", {
|
|||
run_velocity = 1.2,
|
||||
-- Approximation
|
||||
damage = 14,
|
||||
knock_back = false,
|
||||
reach = 3,
|
||||
group_attack = true,
|
||||
attacks_monsters = true,
|
||||
|
|
|
@ -33,6 +33,7 @@ mcl_mobs:register_mob("mobs_mc:shulker", {
|
|||
-- TODO: Make shulker dye-able
|
||||
visual_size = {x=3, y=3},
|
||||
walk_chance = 0,
|
||||
knock_back = false,
|
||||
jump = false,
|
||||
drops = {
|
||||
{name = "mcl_mobitems:shulker_shell",
|
||||
|
|
|
@ -61,11 +61,9 @@ local function check_object_hit(self, pos, dmg)
|
|||
and entity.name ~= self.object:get_luaentity().name then
|
||||
|
||||
if object:is_player() and self._thrower ~= object:get_player_name() then
|
||||
-- TODO: Deal knockback
|
||||
self.object:remove()
|
||||
return true
|
||||
elseif (entity.is_mob == true or entity._hittable_by_projectile) and (self._thrower ~= object) then
|
||||
-- FIXME: Knockback is broken
|
||||
object:punch(self.object, 1.0, {
|
||||
full_punch_interval = 1.0,
|
||||
damage_groups = dmg,
|
||||
|
@ -185,7 +183,7 @@ local function egg_on_step(self, dtime)
|
|||
end
|
||||
|
||||
-- Destroy when hitting a mob or player (no chick spawning)
|
||||
if check_object_hit(self, pos) then
|
||||
if check_object_hit(self, pos, 0) then
|
||||
minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true)
|
||||
self.object:remove()
|
||||
return
|
||||
|
|
Loading…
Reference in New Issue