From d5c6126a6b8260dfc06033dc08bf6603bb8f1b57 Mon Sep 17 00:00:00 2001 From: GreatWyrm Date: Tue, 25 Jun 2024 05:25:16 -0700 Subject: [PATCH] Fix LivingEntity Damage Event Packet (#2209) --- .../java/net/minestom/server/entity/LivingEntity.java | 8 ++------ .../net/minestom/server/entity/damage/Damage.java | 11 ++++++++++- 2 files changed, 12 insertions(+), 7 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index a356be89f..238f30b66 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -21,10 +21,7 @@ import net.minestom.server.inventory.EquipmentHandler; import net.minestom.server.item.ItemStack; import net.minestom.server.network.ConnectionState; import net.minestom.server.network.packet.server.LazyPacket; -import net.minestom.server.network.packet.server.play.CollectItemPacket; -import net.minestom.server.network.packet.server.play.EntityAnimationPacket; -import net.minestom.server.network.packet.server.play.EntityAttributesPacket; -import net.minestom.server.network.packet.server.play.SoundEffectPacket; +import net.minestom.server.network.packet.server.play.*; import net.minestom.server.network.player.PlayerConnection; import net.minestom.server.registry.DynamicRegistry; import net.minestom.server.scoreboard.Team; @@ -333,8 +330,7 @@ public class LivingEntity extends Entity implements EquipmentHandler { sendPacketToViewersAndSelf(new EntityAnimationPacket(getEntityId(), EntityAnimationPacket.Animation.TAKE_DAMAGE)); } - //todo -// sendPacketToViewersAndSelf(new DamageEventPacket(getEntityId(), damage.getType().id(), 0, 0, null)); + sendPacketToViewersAndSelf(new DamageEventPacket(getEntityId(), damage.getTypeId(), damage.getAttacker() == null ? 0 : damage.getAttacker().getEntityId() + 1, damage.getSource() == null ? 0 : damage.getSource().getEntityId() + 1, damage.getSourcePosition())); // Additional hearts support if (this instanceof Player player) { diff --git a/src/main/java/net/minestom/server/entity/damage/Damage.java b/src/main/java/net/minestom/server/entity/damage/Damage.java index 1246b7d13..fdaab6bb4 100644 --- a/src/main/java/net/minestom/server/entity/damage/Damage.java +++ b/src/main/java/net/minestom/server/entity/damage/Damage.java @@ -35,8 +35,11 @@ public class Damage implements Taggable { /** * Creates a new damage type. * + * @param attacker The attacker that initiated this damage + * @param source The source of the damage. For direct hits (melee), this will be the same as the attacker. For indirect hits (projectiles), this will be the projectile * @param type the type of this damage * @param amount amount of damage + * @param sourcePosition The position of the source of damage */ public Damage(@NotNull DynamicRegistry.Key type, @Nullable Entity source, @Nullable Entity attacker, @Nullable Point sourcePosition, float amount) { this.typeKey = type; @@ -51,7 +54,7 @@ public class Damage implements Taggable { /** * Gets the type of this damage. *

- * It does not have to be unique to this object.o + * It does not have to be unique to this object. * * @return the damage type */ @@ -59,6 +62,12 @@ public class Damage implements Taggable { return typeKey; } + /** + * Gets the integer id of the damage type that has been set + * @return The integer id of the damage type + */ + public int getTypeId() { return DAMAGE_TYPE_REGISTRY.getId(typeKey); } + /** * Gets the "attacker" of the damage. * This is the indirect cause of the damage, like the shooter of a projectile, or null if there was none.