From afb12e923bd9eb3e9c48764c9951b513e501fa7f Mon Sep 17 00:00:00 2001 From: DoctorMacc <toy.fighter1@gmail.com> Date: Sat, 6 Jun 2020 00:04:05 -0400 Subject: [PATCH] Show villager display name --- .../connector/network/session/GeyserSession.java | 3 ++- .../bedrock/BedrockInventoryTransactionTranslator.java | 5 +++++ .../inventory/MerchantInventoryTranslator.java | 1 + .../translators/java/world/JavaTradeListTranslator.java | 9 ++++++++- 4 files changed, 16 insertions(+), 2 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java index 7597e59f1..db4d6aea3 100644 --- a/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java +++ b/connector/src/main/java/org/geysermc/connector/network/session/GeyserSession.java @@ -30,7 +30,6 @@ import com.github.steveice10.mc.auth.exception.request.InvalidCredentialsExcepti import com.github.steveice10.mc.auth.exception.request.RequestException; import com.github.steveice10.mc.protocol.MinecraftProtocol; import com.github.steveice10.mc.protocol.data.SubProtocol; -import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.github.steveice10.mc.protocol.data.game.entity.player.GameMode; import com.github.steveice10.mc.protocol.data.game.window.VillagerTrade; import com.github.steveice10.mc.protocol.data.game.world.block.BlockState; @@ -173,6 +172,8 @@ public class GeyserSession implements CommandSender { @Setter private VillagerTrade[] villagerTrades; + @Setter + private long lastInteractedVillagerEid; private MinecraftProtocol protocol; diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java index 8f96b8004..777d4d9e3 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockInventoryTransactionTranslator.java @@ -45,6 +45,7 @@ import com.nukkitx.protocol.bedrock.packet.InventoryTransactionPacket; import org.geysermc.connector.entity.Entity; import org.geysermc.connector.entity.ItemFrameEntity; +import org.geysermc.connector.entity.living.merchant.AbstractMerchantEntity; import org.geysermc.connector.inventory.Inventory; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.PacketTranslator; @@ -198,6 +199,10 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator<Inve session.sendDownstreamPacket(interactAtPacket); EntitySoundInteractionHandler.handleEntityInteraction(session, vector, entity); + + if (entity instanceof AbstractMerchantEntity) { + session.setLastInteractedVillagerEid(packet.getRuntimeEntityId()); + } break; case 1: //Attack ClientPlayerInteractEntityPacket attackPacket = new ClientPlayerInteractEntityPacket((int) entity.getEntityId(), diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/MerchantInventoryTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/MerchantInventoryTranslator.java index 4bf8d51fe..3f7636b9e 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/inventory/MerchantInventoryTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/inventory/MerchantInventoryTranslator.java @@ -93,6 +93,7 @@ public class MerchantInventoryTranslator extends BaseInventoryTranslator { @Override public void closeInventory(GeyserSession session, Inventory inventory) { + session.setLastInteractedVillagerEid(-1); session.setVillagerTrades(null); } diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java index 04cee77e6..97f04ee58 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/java/world/JavaTradeListTranslator.java @@ -62,7 +62,14 @@ public class JavaTradeListTranslator extends PacketTranslator<ServerTradeListPac updateTradePacket.setTradeTier(packet.getVillagerLevel() - 1); updateTradePacket.setWindowId((short) packet.getWindowId()); updateTradePacket.setWindowType((short) ContainerType.TRADING.id()); - updateTradePacket.setDisplayName("Villager"); + String displayName; + Entity realVillager = session.getEntityCache().getEntityByGeyserId(session.getLastInteractedVillagerEid()); + if (realVillager != null && realVillager.getMetadata().containsKey(EntityData.NAMETAG) && realVillager.getMetadata().getString(EntityData.NAMETAG) != null) { + displayName = realVillager.getMetadata().getString(EntityData.NAMETAG); + } else { + displayName = packet.isRegularVillager() ? "Villager" : "Wandering Trader"; + } + updateTradePacket.setDisplayName(displayName); updateTradePacket.setUnknownInt(0); updateTradePacket.setScreen2(true); updateTradePacket.setWilling(true);