Update players based on navigating NPC's. Update player when NPC navigates into players field of view.
Moved skin update tracker code to own class (SkinUpdateTracker)
fix use incorrect setting for tab list
rename PlayerListRemover to TabListRemover
rename recently added NMS#sendPlayerListRemove, #sendPlayerListAdd methods to #sendTabList*
fixed client sometimes disconnects for: Internal Exception: io.netty.handler.codec.DecoderException: java.io.IOException: Packet 0/56 (ki) was larger than I expected, found 917 bytes extra whilst reading packet 56;
changes in Skin#setNPCTexture
Allow retrieving Skin instance by skin name instead of entity so it can be retrieved without a spawned entity instance. Changes in Skin and SkinPacketTracker.
add SkinPacketTracker#onSpawnNPC
remove redundant scheduled skin update tasks in CitizensNPC and EventListen; provide no benefit
reset current SkinUpdateTracker instance if exists instead of creating a new one for all players in EventListen#onCitizensReload
reset rotation count in EventListen when player teleports/changes world/etc
reset update trackers for players nearby NPC's that spawn in case they are not looking at the NPC.
reset skin and profile fetcher cache on citizens reload
fix -p flag in skin command not implemented
use latest skin by default
fix Property created for cached skins uses incorrect name
fix rotation based skin update in EventListen.SkinUpdateTracker
remove redundant skin update on first move in EventListen.SkinUpdateTracker
re-implement skin fetch retry; re-add settings (since reloading can cause too many requests)
...Fixed invisible NPC's by allowing new update tasks to cancel current
tasks instead of cancelling the new task in SkinPacketTracker#updateViewer
cancel packets in SkinPacketTracker#updateViewer after getting PlayerEntry to ensure current scheduled tasks are cancelled.
remove LinkedList, replace with ArrayDeque
ensure EventListen#recalculatePlayer does not execute for NPC's
do a little less work in EventListen.SkinUpdateTracker#shouldUpdate
don't add skinnable entity to pending map if using cache skin - Skin#apply
remove redundant fetch per NPC in Skin; Skin can already fetch once for itself
fix and improve thread safety for profile fetcher; prevent external access
to threads Runnable interface; honor subscriber always invoked from main
thread.
rename ProfileFetchSubscriber to ProfileFetchHandler since subscriber implies the handler will be used continuously