|
8 | 8 | import net.kyori.adventure.text.event.ClickEvent; |
9 | 9 | import net.minestom.arena.Messenger; |
10 | 10 | import net.minestom.arena.game.ArenaCommand; |
11 | | -import net.minestom.server.MinecraftServer; |
12 | 11 | import net.minestom.server.coordinate.Point; |
13 | 12 | import net.minestom.server.coordinate.Pos; |
14 | 13 | import net.minestom.server.entity.*; |
|
18 | 17 | import net.minestom.server.event.entity.EntityAttackEvent; |
19 | 18 | import net.minestom.server.event.player.PlayerEntityInteractEvent; |
20 | 19 | import net.minestom.server.instance.Instance; |
21 | | -import net.minestom.server.network.packet.server.play.PlayerInfoPacket; |
22 | | -import net.minestom.server.network.packet.server.play.PlayerInfoPacket.AddPlayer.Property; |
23 | | -import net.minestom.server.network.packet.server.play.PlayerInfoPacket.RemovePlayer; |
| 20 | +import net.minestom.server.network.packet.server.play.PlayerInfoUpdatePacket; |
24 | 21 | import net.minestom.server.sound.SoundEvent; |
25 | | -import net.minestom.server.timer.TaskSchedule; |
26 | 22 | import org.jetbrains.annotations.NotNull; |
27 | 23 |
|
28 | 24 | import java.io.IOException; |
29 | 25 | import java.util.HashMap; |
30 | 26 | import java.util.List; |
31 | 27 | import java.util.function.Consumer; |
32 | 28 |
|
33 | | -import static net.minestom.server.network.packet.server.play.PlayerInfoPacket.Action.ADD_PLAYER; |
34 | | -import static net.minestom.server.network.packet.server.play.PlayerInfoPacket.Action.REMOVE_PLAYER; |
35 | | -import static net.minestom.server.network.packet.server.play.PlayerInfoPacket.AddPlayer; |
36 | | - |
37 | 29 | // https://gist.github.com/iam4722202468/36630043ca89e786bb6318e296f822f8 |
38 | 30 | final class NPC extends EntityCreature { |
39 | 31 | private final String name; |
@@ -92,14 +84,15 @@ public void handle(@NotNull PlayerEntityInteractEvent event) { |
92 | 84 | @Override |
93 | 85 | public void updateNewViewer(@NotNull Player player) { |
94 | 86 | // Required to spawn player |
95 | | - final List<Property> properties = List.of(new Property("textures", skin.textures(), skin.signature())); |
96 | | - player.sendPacket(new PlayerInfoPacket(ADD_PLAYER, new AddPlayer(getUuid(), name, properties, |
97 | | - GameMode.SURVIVAL, 0, null, null))); |
98 | | - |
99 | | - // Remove from tab list after 1 second, seems not to load skin if 1 or 2 ticks |
100 | | - MinecraftServer.getSchedulerManager().scheduleTask( |
101 | | - () -> player.sendPacket(new PlayerInfoPacket(REMOVE_PLAYER, new RemovePlayer(getUuid()))), |
102 | | - TaskSchedule.seconds(1), TaskSchedule.stop()); |
| 87 | + final List<PlayerInfoUpdatePacket.Property> properties = List.of( |
| 88 | + new PlayerInfoUpdatePacket.Property("textures", skin.textures(), skin.signature()) |
| 89 | + ); |
| 90 | + player.sendPacket(new PlayerInfoUpdatePacket(PlayerInfoUpdatePacket.Action.ADD_PLAYER, |
| 91 | + new PlayerInfoUpdatePacket.Entry( |
| 92 | + getUuid(), name, properties, false, 0, GameMode.SURVIVAL, null, |
| 93 | + null) |
| 94 | + ) |
| 95 | + ); |
103 | 96 |
|
104 | 97 | super.updateNewViewer(player); |
105 | 98 | } |
|
0 commit comments