From 447f921cf1afbbddce7ed4cf68861223064a0f99 Mon Sep 17 00:00:00 2001 From: Bloepiloepi <59421074+Bloepiloepi@users.noreply.github.com> Date: Mon, 9 Aug 2021 16:37:46 +0200 Subject: [PATCH 1/3] Send only changed attributes --- .../minestom/server/entity/LivingEntity.java | 18 +++++++++++++++--- 1 file changed, 15 insertions(+), 3 deletions(-) diff --git a/src/main/java/net/minestom/server/entity/LivingEntity.java b/src/main/java/net/minestom/server/entity/LivingEntity.java index 28657961c..34964bcd2 100644 --- a/src/main/java/net/minestom/server/entity/LivingEntity.java +++ b/src/main/java/net/minestom/server/entity/LivingEntity.java @@ -507,10 +507,11 @@ public class LivingEntity extends Entity implements EquipmentHandler { // connection null during Player initialization (due to #super call) self = playerConnection != null && playerConnection.getConnectionState() == ConnectionState.PLAY; } + EntityPropertiesPacket propertiesPacket = getPropertiesPacket(Collections.singleton(attributeInstance)); if (self) { - sendPacketToViewersAndSelf(getPropertiesPacket()); + sendPacketToViewersAndSelf(propertiesPacket); } else { - sendPacketToViewers(getPropertiesPacket()); + sendPacketToViewers(propertiesPacket); } } } @@ -632,8 +633,19 @@ public class LivingEntity extends Entity implements EquipmentHandler { */ @NotNull protected EntityPropertiesPacket getPropertiesPacket() { + return getPropertiesPacket(attributeModifiers.values()); + } + + /** + * Gets an {@link EntityPropertiesPacket} for this entity with the specified attribute values. + * + * @param attributes the attributes to include in the packet + * @return an {@link EntityPropertiesPacket} linked to this entity + */ + @NotNull + protected EntityPropertiesPacket getPropertiesPacket(@NotNull Collection attributes) { // Get all the attributes which should be sent to the client - final AttributeInstance[] instances = attributeModifiers.values().stream() + final AttributeInstance[] instances = attributes.stream() .filter(i -> i.getAttribute().isShared()) .toArray(AttributeInstance[]::new); From aaad91ff47cf40e5095c8a67a920675d919163f2 Mon Sep 17 00:00:00 2001 From: Bloepiloepi <59421074+Bloepiloepi@users.noreply.github.com> Date: Mon, 9 Aug 2021 16:41:01 +0200 Subject: [PATCH 2/3] Initialize every projectile in CrossbowMeta --- .../java/net/minestom/server/item/metadata/CrossbowMeta.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java b/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java index 5aa7d45f3..ec322db3a 100644 --- a/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java +++ b/src/main/java/net/minestom/server/item/metadata/CrossbowMeta.java @@ -81,7 +81,9 @@ public class CrossbowMeta extends ItemMeta implements ItemMetaBuilder.Provider Date: Tue, 10 Aug 2021 01:20:01 +0200 Subject: [PATCH 3/3] Use active hand when updating item state --- .../server/listener/PlayerDiggingListener.java | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/src/main/java/net/minestom/server/listener/PlayerDiggingListener.java b/src/main/java/net/minestom/server/listener/PlayerDiggingListener.java index a92f6f59a..110712475 100644 --- a/src/main/java/net/minestom/server/listener/PlayerDiggingListener.java +++ b/src/main/java/net/minestom/server/listener/PlayerDiggingListener.java @@ -2,6 +2,7 @@ package net.minestom.server.listener; import net.minestom.server.entity.GameMode; import net.minestom.server.entity.Player; +import net.minestom.server.entity.metadata.PlayerMeta; import net.minestom.server.event.EventDispatcher; import net.minestom.server.event.item.ItemUpdateStateEvent; import net.minestom.server.event.player.PlayerStartDiggingEvent; @@ -136,14 +137,9 @@ public class PlayerDiggingListener { } } else if (status == ClientPlayerDiggingPacket.Status.UPDATE_ITEM_STATE) { - Player.Hand hand = null; - if (player.isEating()) { - hand = player.getEatingHand(); - } else if (player.getItemInHand(Player.Hand.OFF).getMaterial().hasState()) { - hand = Player.Hand.OFF; - } else if (player.getItemInHand(Player.Hand.MAIN).getMaterial().hasState()) { - hand = Player.Hand.MAIN; - } + PlayerMeta meta = player.getEntityMeta(); + if (!meta.isHandActive()) return; + Player.Hand hand = meta.getActiveHand(); player.refreshEating(null); player.triggerStatus((byte) 9);