From b26e405d415fdf26c4b14e852fe57fad26a87d30 Mon Sep 17 00:00:00 2001
From: Tofaa <82680183+Tofaa2@users.noreply.github.com>
Date: Fri, 23 Feb 2024 01:48:27 +0400
Subject: [PATCH] add dynamic texture changing

---
 .../me/tofaa/entitylib/wrapper/WrapperEntity.java |  2 +-
 .../me/tofaa/entitylib/wrapper/WrapperPlayer.java | 15 ++++++++++++---
 2 files changed, 13 insertions(+), 4 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 8714fed..a844400 100644
--- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java
+++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperEntity.java
@@ -26,7 +26,7 @@ public class WrapperEntity implements Tickable, TrackedEntity {
     private boolean ticking;
     protected Location location;
     private Location preRidingLocation;
-    private final Set<UUID> viewers;
+    protected final Set<UUID> viewers;
     private boolean onGround;
     private boolean spawned;
     private Vector3d velocity;
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 d48e5a9..28b74f2 100644
--- a/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java
+++ b/api/src/main/java/me/tofaa/entitylib/wrapper/WrapperPlayer.java
@@ -68,10 +68,19 @@ public class WrapperPlayer extends WrapperLivingEntity {
 
     public void setTextureProperties(List<TextureProperty> textureProperties) {
         profile.setTextureProperties(textureProperties);
-        despawn();
-        System.out.println("Despawning");
-        EntityLib.getApi().runLater(() -> spawn(getLocation()), 2L);
+        WrapperPlayServerDestroyEntities destroyEntities = new WrapperPlayServerDestroyEntities(getEntityId());
+        WrapperPlayServerPlayerInfoRemove removePacket = new WrapperPlayServerPlayerInfoRemove(getUuid());
+        WrapperPlayServerPlayerInfoUpdate updatePacket = tabListPacket();
+        {
+            sendPacketToViewers(removePacket);
+            sendPacketToViewers(destroyEntities);
 
+            sendPacketToViewers(updatePacket);
+            for (UUID viewer : viewers) {
+                removeViewer(viewer);
+                addViewer(viewer);
+            }
+        }
     }
 
     public GameMode getGameMode() {