mirror of
https://git.minetest.land/VoxeLibre/VoxeLibre.git
synced 2024-11-23 02:51:06 +01:00
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
5 changed files with 30 additions and 28 deletions
|
@ -3210,35 +3210,36 @@ local mob_punch = function(self, hitter, tflp, tool_capabilities, dir)
|
||||||
|
|
||||||
local die = false
|
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 damage >= 0 then
|
||||||
if weapon:get_definition().sounds ~= nil 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], {
|
minetest.sound_play(weapon:get_definition().sounds[s], {
|
||||||
object = self.object, --hitter,
|
object = self.object, --hitter,
|
||||||
max_hear_distance = 8
|
max_hear_distance = 8
|
||||||
}, true)
|
}, true)
|
||||||
else
|
else
|
||||||
minetest.sound_play("default_punch", {
|
minetest.sound_play("default_punch", {
|
||||||
object = self.object,
|
object = self.object,
|
||||||
max_hear_distance = 5
|
max_hear_distance = 5
|
||||||
}, true)
|
}, 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
|
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)
|
-- knock back effect (only on full punch)
|
||||||
if not die
|
if not die
|
||||||
and self.knock_back
|
and self.knock_back
|
||||||
|
|
|
@ -35,6 +35,7 @@ mcl_mobs:register_mob("mobs_mc:enderdragon", {
|
||||||
},
|
},
|
||||||
physical = true,
|
physical = true,
|
||||||
damage = 10,
|
damage = 10,
|
||||||
|
knock_back = false,
|
||||||
jump = true,
|
jump = true,
|
||||||
jump_height = 14,
|
jump_height = 14,
|
||||||
fly = true,
|
fly = true,
|
||||||
|
|
|
@ -37,6 +37,7 @@ mcl_mobs:register_mob("mobs_mc:iron_golem", {
|
||||||
run_velocity = 1.2,
|
run_velocity = 1.2,
|
||||||
-- Approximation
|
-- Approximation
|
||||||
damage = 14,
|
damage = 14,
|
||||||
|
knock_back = false,
|
||||||
reach = 3,
|
reach = 3,
|
||||||
group_attack = true,
|
group_attack = true,
|
||||||
attacks_monsters = true,
|
attacks_monsters = true,
|
||||||
|
|
|
@ -33,6 +33,7 @@ mcl_mobs:register_mob("mobs_mc:shulker", {
|
||||||
-- TODO: Make shulker dye-able
|
-- TODO: Make shulker dye-able
|
||||||
visual_size = {x=3, y=3},
|
visual_size = {x=3, y=3},
|
||||||
walk_chance = 0,
|
walk_chance = 0,
|
||||||
|
knock_back = false,
|
||||||
jump = false,
|
jump = false,
|
||||||
drops = {
|
drops = {
|
||||||
{name = "mcl_mobitems:shulker_shell",
|
{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
|
and entity.name ~= self.object:get_luaentity().name then
|
||||||
|
|
||||||
if object:is_player() and self._thrower ~= object:get_player_name() then
|
if object:is_player() and self._thrower ~= object:get_player_name() then
|
||||||
-- TODO: Deal knockback
|
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
return true
|
return true
|
||||||
elseif (entity.is_mob == true or entity._hittable_by_projectile) and (self._thrower ~= object) then
|
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, {
|
object:punch(self.object, 1.0, {
|
||||||
full_punch_interval = 1.0,
|
full_punch_interval = 1.0,
|
||||||
damage_groups = dmg,
|
damage_groups = dmg,
|
||||||
|
@ -185,7 +183,7 @@ local function egg_on_step(self, dtime)
|
||||||
end
|
end
|
||||||
|
|
||||||
-- Destroy when hitting a mob or player (no chick spawning)
|
-- 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)
|
minetest.sound_play("mcl_throwing_egg_impact", { pos = self.object:get_pos(), max_hear_distance=10, gain=0.5 }, true)
|
||||||
self.object:remove()
|
self.object:remove()
|
||||||
return
|
return
|
||||||
|
|
Loading…
Reference in a new issue