From 2366559694cef39e13a4d73d19de6b4cd958adec Mon Sep 17 00:00:00 2001 From: AJ Ferguson Date: Tue, 19 May 2020 09:41:44 -0800 Subject: [PATCH] Store villager data in the player and fix wandering trader --- .../living/merchant/VillagerEntity.java | 7 ------ .../network/session/GeyserSession.java | 7 +++--- .../bedrock/BedrockEntityEventTranslator.java | 13 +++++------ ...BedrockInventoryTransactionTranslator.java | 4 ---- .../MerchantInventoryTranslator.java | 2 +- .../java/world/JavaTradeListTranslator.java | 22 ++++++++----------- 6 files changed, 19 insertions(+), 36 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/entity/living/merchant/VillagerEntity.java b/connector/src/main/java/org/geysermc/connector/entity/living/merchant/VillagerEntity.java index adb362e0..895f8cc1 100644 --- a/connector/src/main/java/org/geysermc/connector/entity/living/merchant/VillagerEntity.java +++ b/connector/src/main/java/org/geysermc/connector/entity/living/merchant/VillagerEntity.java @@ -27,13 +27,10 @@ package org.geysermc.connector.entity.living.merchant; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.VillagerData; -import com.github.steveice10.mc.protocol.data.game.window.VillagerTrade; import com.nukkitx.math.vector.Vector3f; import com.nukkitx.protocol.bedrock.data.EntityData; import it.unimi.dsi.fastutil.ints.Int2IntMap; import it.unimi.dsi.fastutil.ints.Int2IntOpenHashMap; -import lombok.Getter; -import lombok.Setter; import org.geysermc.connector.entity.type.EntityType; import org.geysermc.connector.network.session.GeyserSession; @@ -69,10 +66,6 @@ public class VillagerEntity extends AbstractMerchantEntity { VILLAGER_REGIONS.put(6, 6); } - @Getter - @Setter - private VillagerTrade[] villagerTrades; - public VillagerEntity(long entityId, long geyserId, EntityType entityType, Vector3f position, Vector3f motion, Vector3f rotation) { super(entityId, geyserId, entityType, position, motion, rotation); } 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 1bf506e7..e66564f6 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 @@ -32,6 +32,7 @@ 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; import com.github.steveice10.mc.protocol.packet.handshake.client.HandshakePacket; import com.github.steveice10.mc.protocol.packet.ingame.client.world.ClientTeleportConfirmPacket; @@ -150,9 +151,6 @@ public class GeyserSession implements CommandSender { @Setter private boolean interacting; - @Setter - private long lastInteractedVillagerEid; - @Setter private Vector3i lastInteractionPosition; @@ -164,6 +162,9 @@ public class GeyserSession implements CommandSender { @Setter private int craftSlot = 0; + @Setter + private VillagerTrade[] villagerTrades; + private MinecraftProtocol protocol; public GeyserSession(GeyserConnector connector, BedrockServerSession bedrockServerSession) { diff --git a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityEventTranslator.java b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityEventTranslator.java index 555d1015..25eb85a9 100644 --- a/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityEventTranslator.java +++ b/connector/src/main/java/org/geysermc/connector/network/translators/bedrock/BedrockEntityEventTranslator.java @@ -31,7 +31,7 @@ import com.github.steveice10.mc.protocol.data.game.window.WindowType; import com.github.steveice10.mc.protocol.packet.ingame.client.window.ClientSelectTradePacket; import com.nukkitx.protocol.bedrock.data.EntityData; import com.nukkitx.protocol.bedrock.packet.EntityEventPacket; -import org.geysermc.connector.entity.living.merchant.VillagerEntity; +import org.geysermc.connector.entity.Entity; import org.geysermc.connector.inventory.Inventory; import org.geysermc.connector.network.session.GeyserSession; import org.geysermc.connector.network.translators.PacketTranslator; @@ -51,15 +51,12 @@ public class BedrockEntityEventTranslator extends PacketTranslator= 0 && packet.getData() < villager.getVillagerTrades().length) { - VillagerTrade trade = villager.getVillagerTrades()[packet.getData()]; + VillagerTrade[] trades = session.getVillagerTrades(); + if (trades != null && packet.getData() >= 0 && packet.getData() < trades.length) { + VillagerTrade trade = session.getVillagerTrades()[packet.getData()]; openInventory.setItem(2, trade.getOutput()); villager.getMetadata().put(EntityData.TRADE_XP, trade.getXp() + villager.getMetadata().getInt(EntityData.TRADE_XP)); villager.updateBedrockMetadata(session); 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 20b19432..b067273d 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 @@ -188,10 +188,6 @@ public class BedrockInventoryTransactionTranslator extends PacketTranslator tags = new ArrayList<>(); for (VillagerTrade trade : packet.getTrades()) { @@ -94,7 +90,7 @@ public class JavaTradeListTranslator extends PacketTranslator