From 8478e87a38ce369bc2841fbe61fe8a7f2b72d5d5 Mon Sep 17 00:00:00 2001 From: huanmeng-qwq <1871735932@qq.com> Date: Tue, 8 Jul 2025 02:00:05 +0800 Subject: [PATCH 1/2] fix: correct player spawn in 1.20.1- --- .../entitylib/wrapper/WrapperEntity.java | 14 ++------- .../entitylib/wrapper/WrapperPlayer.java | 30 +++++++++++++++---- 2 files changed, 26 insertions(+), 18 deletions(-) diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java index e3e7041..40c8de9 100644 --- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java @@ -77,17 +77,7 @@ public class WrapperEntity implements Tickable { this.spawned = true; sendPacketsToViewers( - new WrapperPlayServerSpawnEntity( - entityId, - Optional.of(this.uuid), - entityType, - location.getPosition(), - location.getPitch(), - location.getYaw(), - location.getYaw(), - getObjectData(), - createVeloPacket() - ), + createSpawnPacket(), entityMeta.createPacket() ); @@ -238,7 +228,7 @@ public class WrapperEntity implements Tickable { sendPacketToViewers(new WrapperPlayServerSystemChatMessage(true, message)); } - protected WrapperPlayServerSpawnEntity createSpawnPacket() { + protected PacketWrapper createSpawnPacket() { return new WrapperPlayServerSpawnEntity( entityId, Optional.of(this.uuid), diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java index ad4e0cd..d5b020f 100644 --- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java @@ -1,17 +1,22 @@ package me.tofaa.entitylib.wrapper; +import com.github.retrooper.packetevents.manager.server.ServerVersion; import com.github.retrooper.packetevents.protocol.entity.type.EntityTypes; -import com.github.retrooper.packetevents.protocol.player.*; -import com.github.retrooper.packetevents.protocol.world.Location; -import com.github.retrooper.packetevents.util.Vector3d; +import com.github.retrooper.packetevents.protocol.player.GameMode; +import com.github.retrooper.packetevents.protocol.player.TextureProperty; +import com.github.retrooper.packetevents.protocol.player.UserProfile; import com.github.retrooper.packetevents.wrapper.PacketWrapper; -import com.github.retrooper.packetevents.wrapper.play.server.*; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDestroyEntities; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoRemove; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoUpdate; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnPlayer; import me.tofaa.entitylib.EntityLib; import me.tofaa.entitylib.meta.EntityMeta; +import java.util.EnumSet; +import java.util.List; +import java.util.UUID; import net.kyori.adventure.text.Component; -import java.util.*; - public class WrapperPlayer extends WrapperLivingEntity { private UserProfile profile; @@ -25,6 +30,19 @@ public class WrapperPlayer extends WrapperLivingEntity { this.profile = profile; } + @Override + protected PacketWrapper createSpawnPacket() { + if (EntityLib.getApi().getPacketEvents().getServerManager().getVersion().isOlderThanOrEquals(ServerVersion.V_1_20_1)) { + return new WrapperPlayServerSpawnPlayer( + getEntityId(), + profile.getUUID(), + getLocation(), + getEntityMeta().entityData() + ); + } + return super.createSpawnPacket(); + } + public WrapperPlayServerPlayerInfoUpdate tabListPacket() { EnumSet actions = EnumSet.of( WrapperPlayServerPlayerInfoUpdate.Action.ADD_PLAYER, From 8bc8bfb76a8926f3cf5443276ab4aab21da2a91c Mon Sep 17 00:00:00 2001 From: huanmeng-qwq <1871735932@qq.com> Date: Tue, 8 Jul 2025 02:35:47 +0800 Subject: [PATCH 2/2] feat: Add rotation packet handling after player spawn. --- .../me/tofaa/entitylib/wrapper/WrapperPlayer.java | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java index d5b020f..d50a91b 100644 --- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java +++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java @@ -7,6 +7,8 @@ import com.github.retrooper.packetevents.protocol.player.TextureProperty; import com.github.retrooper.packetevents.protocol.player.UserProfile; import com.github.retrooper.packetevents.wrapper.PacketWrapper; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerDestroyEntities; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityHeadLook; +import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerEntityRotation; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoRemove; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerPlayerInfoUpdate; import com.github.retrooper.packetevents.wrapper.play.server.WrapperPlayServerSpawnPlayer; @@ -16,6 +18,7 @@ import java.util.EnumSet; import java.util.List; import java.util.UUID; import net.kyori.adventure.text.Component; +import org.jetbrains.annotations.NotNull; public class WrapperPlayer extends WrapperLivingEntity { @@ -43,6 +46,14 @@ public class WrapperPlayer extends WrapperLivingEntity { return super.createSpawnPacket(); } + @Override + public @NotNull List> createSpawnPackets() { + final List> packets = super.createSpawnPackets(); + packets.add(new WrapperPlayServerEntityRotation(getEntityId(), getYaw(), getPitch(), isOnGround())); + packets.add(new WrapperPlayServerEntityHeadLook(getEntityId(), getYaw())); + return packets; + } + public WrapperPlayServerPlayerInfoUpdate tabListPacket() { EnumSet actions = EnumSet.of( WrapperPlayServerPlayerInfoUpdate.Action.ADD_PLAYER,