From 372c76866f50fe4b54bb43bc774833e42bc5d670 Mon Sep 17 00:00:00 2001 From: MattMX Date: Tue, 4 Feb 2025 16:29:12 +0000 Subject: [PATCH] =?UTF-8?q?=F0=9F=94=81=20Refactor=20to=20not=20use=20stre?= =?UTF-8?q?ams=20on=20netty=20for=20efficiency?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- gradle.properties | 2 +- .../nametags/OutgoingPacketListener.java | 86 +++++++++++-------- 2 files changed, 52 insertions(+), 36 deletions(-) diff --git a/gradle.properties b/gradle.properties index a443a65..faba47f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ kotlin.code.style=official # Project configuration group_name = com.mattmx id = nametags -version = 1.5.1 +version = 1.5.2 plugin_name = NameTags plugin_main_class_name = NameTags diff --git a/src/main/java/com/mattmx/nametags/OutgoingPacketListener.java b/src/main/java/com/mattmx/nametags/OutgoingPacketListener.java index e85060b..42ef012 100644 --- a/src/main/java/com/mattmx/nametags/OutgoingPacketListener.java +++ b/src/main/java/com/mattmx/nametags/OutgoingPacketListener.java @@ -74,51 +74,60 @@ public void onPacketSend(@NotNull PacketSendEvent event) { ? PRE_1_20_2_TRANSLATION_INDEX : POST_1_20_2_TRANSLATION_INDEX; - packet.getEntityMetadata() - .stream() - .filter((meta) -> meta.getIndex() == index) - .findFirst() - .ifPresentOrElse((data) -> { - Vector3f vec = (Vector3f) data.getValue(); - data.setValue(vec.add(PRE_1_20_2_TRANSLATION_OFFSET)); - }, () -> packet.getEntityMetadata().add(new EntityData( - index, - EntityDataTypes.VECTOR3F, - PRE_1_20_2_TRANSLATION_OFFSET - )) - ); + boolean found = false; + for (final EntityData entry : packet.getEntityMetadata()) { + if (entry.getIndex() != index) { + continue; + } + + found = true; + Vector3f vec = (Vector3f) entry.getValue(); + entry.setValue(vec.add(PRE_1_20_2_TRANSLATION_OFFSET)); + break; + } + + if (!found) { + packet.getEntityMetadata().add(new EntityData( + index, + EntityDataTypes.VECTOR3F, + PRE_1_20_2_TRANSLATION_OFFSET + )); + } + event.markForReEncode(true); } // Apply relational placeholders to the text of an outgoing display entity if (nameTagEntity.getBukkitEntity() instanceof Player from) { - packet.getEntityMetadata() - .stream() - .filter((meta) -> meta.getIndex() == TEXT_DISPLAY_TEXT_INDEX && meta.getValue() instanceof Component) - .findFirst() - .ifPresent((data) -> { - final Component originalText = (Component) data.getValue(); - final Player to = event.getPlayer(); + for (final EntityData entry : packet.getEntityMetadata()) { + if (entry.getIndex() != TEXT_DISPLAY_TEXT_INDEX || !(entry.getType() instanceof Component)) { + continue; + } + + final Component originalText = (Component) entry.getValue(); + final Player to = event.getPlayer(); + + // TODO(Matt): Replace use of legacy serializer + String legacy = LegacyComponentSerializer + .legacyAmpersand() + .serialize(originalText); - // TODO(Matt): Replace use of legacy serializer - String legacy = LegacyComponentSerializer - .legacyAmpersand() - .serialize(originalText); + // If it doesn't have any placeholders in then stop + if (!legacy.contains("%rel_")) break; - // If it doesn't have any placeholders in then stop - if (!legacy.contains("%rel_")) return; + final Component appliedText = LegacyComponentSerializer + .legacyAmpersand() + .deserialize(PapiHook.setRelationalPlaceholders(from, to, legacy)); - final Component appliedText = LegacyComponentSerializer - .legacyAmpersand() - .deserialize(PapiHook.setRelationalPlaceholders(from, to, legacy)); + if (!originalText.equals(appliedText)) { - if (!originalText.equals(appliedText)) { + entry.setValue(appliedText); - data.setValue(appliedText); + event.markForReEncode(true); + } - event.markForReEncode(true); - } - }); + break; + } } } case PacketType.Play.Server.DESTROY_ENTITIES -> { @@ -164,7 +173,14 @@ public void onPacketSend(@NotNull PacketSendEvent event) { if (nameTagEntity == null) return; // If the packet doesn't already contain our entity - if (Arrays.stream(packet.getPassengers()).noneMatch((i) -> nameTagEntity.getPassenger().getEntityId() == i)) { + boolean containsNameTagPassenger = false; + for (final int passengerId : packet.getPassengers()) { + if (passengerId == nameTagEntity.getPassenger().getEntityId()) { + containsNameTagPassenger = true; + } + } + + if (!containsNameTagPassenger) { // Add our entity int[] passengers = Arrays.copyOf(packet.getPassengers(), packet.getPassengers().length + 1);