From 5fcfd5a9f095010f6f9d35adcabe911214b87b6d Mon Sep 17 00:00:00 2001 From: strom <> Date: Mon, 17 Jun 2024 18:14:05 +0200 Subject: [PATCH] Code cleaning and optimization --- .../geyser/entity/EntityDefinitions.java | 1 - .../geyser/entity/type/DisplayBaseEntity.java | 20 +++++++++++++++---- .../org/geysermc/geyser/util/EntityUtils.java | 19 +++++++++++------- 3 files changed, 28 insertions(+), 12 deletions(-) diff --git a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java index 45f4fba29..3f2f35305 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java +++ b/core/src/main/java/org/geysermc/geyser/entity/EntityDefinitions.java @@ -316,7 +316,6 @@ public final class EntityDefinitions { .addTranslator(null) // Height .addTranslator(null) // Glow color override .build(); - TEXT_DISPLAY = EntityDefinition.inherited(TextDisplayEntity::new, displayBase) .type(EntityType.TEXT_DISPLAY) .identifier("minecraft:armor_stand") diff --git a/core/src/main/java/org/geysermc/geyser/entity/type/DisplayBaseEntity.java b/core/src/main/java/org/geysermc/geyser/entity/type/DisplayBaseEntity.java index 3fbebb1a1..b65844067 100644 --- a/core/src/main/java/org/geysermc/geyser/entity/type/DisplayBaseEntity.java +++ b/core/src/main/java/org/geysermc/geyser/entity/type/DisplayBaseEntity.java @@ -38,8 +38,8 @@ import java.util.UUID; public class DisplayBaseEntity extends Entity { - public Vector3f baseTranslation; - + private Vector3f baseTranslation; + private boolean noBaseTranslation; public DisplayBaseEntity(GeyserSession session, int entityId, long geyserId, UUID uuid, EntityDefinition definition, Vector3f position, Vector3f motion, float yaw, float pitch, float headYaw) { super(session, entityId, geyserId, uuid, definition, position, motion, yaw, pitch, headYaw); @@ -64,12 +64,24 @@ public class DisplayBaseEntity extends Entity { public void setTranslation(EntityMetadata translationMeta){ this.baseTranslation = translationMeta.getValue(); - if(this.vehicle == null){ + if (this.baseTranslation == null){ + this.noBaseTranslation = true; + return; + } + if (this.vehicle == null){ this.setRiderSeatPosition(this.baseTranslation); this.moveRelative(0, this.baseTranslation.getY(), 0, yaw, pitch, headYaw, false); } else { EntityUtils.updateMountOffset(this, this.vehicle, true, true, false); } - } + + public Vector3f getTranslation() { + return baseTranslation; + } + + public boolean hasTranslation(){ + return !this.noBaseTranslation; + } + } diff --git a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java index 1f1acd5de..87de3b4ff 100644 --- a/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java +++ b/core/src/main/java/org/geysermc/geyser/util/EntityUtils.java @@ -154,8 +154,8 @@ public final class EntityUtils { * Adjust an entity's height if they have mounted/dismounted an entity. */ public static void updateMountOffset(Entity passenger, Entity mount, boolean rider, boolean riding, boolean moreThanOneEntity) { - if(passenger instanceof TextDisplayEntity textDisplay - && textDisplay.baseTranslation == null) return; + if (passenger instanceof TextDisplayEntity textDisplay + && !textDisplay.hasTranslation()) return; passenger.setFlag(EntityFlag.RIDING, riding); if (riding) { @@ -197,6 +197,15 @@ public final class EntityUtils { case CHEST_BOAT -> xOffset = 0.15F; case CHICKEN -> zOffset = -0.1f; case TRADER_LLAMA, LLAMA -> zOffset = -0.3f; + case TEXT_DISPLAY -> { + TextDisplayEntity textDisplay; + if (passenger instanceof TextDisplayEntity) { + textDisplay = (TextDisplayEntity) passenger; + xOffset = textDisplay.getTranslation().getX(); + yOffset = textDisplay.getTranslation().getY() + 0.2f; + zOffset = textDisplay.getTranslation().getZ(); + } + } } /* * Bedrock Differences @@ -222,11 +231,7 @@ public final class EntityUtils { if (mount instanceof ArmorStandEntity armorStand) { yOffset -= armorStand.getYOffset(); } - Vector3f offset = Vector3f.from(xOffset, yOffset, zOffset); - - passenger.setRiderSeatPosition( passenger instanceof TextDisplayEntity textDisplay ? - textDisplay.baseTranslation.add(offset).add(0f, 0.2f, 0f) : offset - ); + passenger.setRiderSeatPosition(Vector3f.from(xOffset, yOffset, zOffset)); } }