From 3c9f628ac426f7537ec0ffc47dde95439acd28da Mon Sep 17 00:00:00 2001 From: caoli5288 Date: Thu, 17 Jun 2021 07:23:01 +0800 Subject: [PATCH] Fix item spawning up (#2278) --- .../geysermc/connector/entity/ItemEntity.java | 31 +++++++++++++------ 1 file changed, 22 insertions(+), 9 deletions(-) diff --git a/connector/src/main/java/org/geysermc/connector/entity/ItemEntity.java b/connector/src/main/java/org/geysermc/connector/entity/ItemEntity.java index ad269e41b..1615ac8d8 100644 --- a/connector/src/main/java/org/geysermc/connector/entity/ItemEntity.java +++ b/connector/src/main/java/org/geysermc/connector/entity/ItemEntity.java @@ -28,6 +28,7 @@ package org.geysermc.connector.entity; import com.github.steveice10.mc.protocol.data.game.entity.metadata.EntityMetadata; import com.github.steveice10.mc.protocol.data.game.entity.metadata.ItemStack; import com.nukkitx.math.vector.Vector3f; +import com.nukkitx.protocol.bedrock.data.inventory.ItemData; import com.nukkitx.protocol.bedrock.packet.AddItemEntityPacket; import org.geysermc.connector.entity.type.EntityType; import org.geysermc.connector.network.session.GeyserSession; @@ -35,6 +36,8 @@ import org.geysermc.connector.network.translators.item.ItemTranslator; public class ItemEntity extends Entity { + protected ItemData item; + public ItemEntity(long entityId, long geyserId, EntityType entityType, Vector3f position, Vector3f motion, Vector3f rotation) { super(entityId, geyserId, entityType, position.add(0d, entityType.getOffset(), 0d), motion, rotation); } @@ -52,18 +55,28 @@ public class ItemEntity extends Entity { super.moveAbsolute(session, position.add(0d, this.entityType.getOffset(), 0d), rotation, isOnGround, teleported); } + @Override + public void spawnEntity(GeyserSession session) { + if (item == null) { + return; + } + valid = true; + AddItemEntityPacket itemPacket = new AddItemEntityPacket(); + itemPacket.setRuntimeEntityId(geyserId); + itemPacket.setPosition(position.add(0d, this.entityType.getOffset(), 0d)); + itemPacket.setMotion(motion); + itemPacket.setUniqueEntityId(geyserId); + itemPacket.setFromFishing(false); + itemPacket.setItemInHand(item); + session.sendUpstreamPacket(itemPacket); + } + @Override public void updateBedrockMetadata(EntityMetadata entityMetadata, GeyserSession session) { if (entityMetadata.getId() == 8) { - AddItemEntityPacket itemPacket = new AddItemEntityPacket(); - itemPacket.setRuntimeEntityId(geyserId); - itemPacket.setPosition(position.add(0d, this.entityType.getOffset(), 0d)); - itemPacket.setMotion(motion); - itemPacket.setUniqueEntityId(geyserId); - itemPacket.setFromFishing(false); - itemPacket.getMetadata().putAll(metadata); - itemPacket.setItemInHand(ItemTranslator.translateToBedrock(session, (ItemStack) entityMetadata.getValue())); - session.sendUpstreamPacket(itemPacket); + item = ItemTranslator.translateToBedrock(session, (ItemStack) entityMetadata.getValue()); + despawnEntity(session); + spawnEntity(session); } super.updateBedrockMetadata(entityMetadata, session);