From b691c43c44ff180d10e7d4a9afc83b98551ff586 Mon Sep 17 00:00:00 2001 From: daoge_cmd <3523206925@qq.com> Date: Sun, 1 Mar 2026 12:16:08 +0800 Subject: Initial commit --- Minecraft.Client/TrackedEntity.h | 65 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 Minecraft.Client/TrackedEntity.h (limited to 'Minecraft.Client/TrackedEntity.h') diff --git a/Minecraft.Client/TrackedEntity.h b/Minecraft.Client/TrackedEntity.h new file mode 100644 index 00000000..9fb564a4 --- /dev/null +++ b/Minecraft.Client/TrackedEntity.h @@ -0,0 +1,65 @@ +#pragma once +class Entity; +//class ServerPlayer; +#include "ServerPlayer.h" +class Packet; +using namespace std; + +class EntityTracker; + +#define TRACKED_ENTITY_MINIMUM_VIEW_DISTANCE 4 + +class TrackedEntity +{ +private: + static const int TOLERANCE_LEVEL = 4; + +public: + shared_ptr e; + + int range, updateInterval; + int xp, yp, zp, yRotp, xRotp, yHeadRotp; + double xap, yap, zap; + int tickCount; + +private: + double xpu, ypu, zpu; + bool updatedPlayerVisibility; + bool trackDelta; + int teleportDelay; + shared_ptr wasRiding; + +public: + bool moved; + + unordered_set , PlayerKeyHash, PlayerKeyEq > seenBy; + + TrackedEntity(shared_ptr e, int range, int updateInterval, bool trackDelta); + + void tick(EntityTracker *tracker, vector > *players); + void broadcast(shared_ptr packet); + void broadcastAndSend(shared_ptr packet); + void broadcastRemoved(); + void removePlayer(shared_ptr sp); + +private: + bool canBySeenBy(shared_ptr player); + + enum eVisibility + { + eVisibility_NotVisible = 0, + eVisibility_IsVisible = 1, + eVisibility_SeenAndVisible = 2, + }; + + eVisibility isVisible(EntityTracker *tracker, shared_ptr sp, bool forRider = false); // 4J Added forRider + +public: + void updatePlayer(EntityTracker *tracker, shared_ptr sp); + void updatePlayers(EntityTracker *tracker, vector > *players); +private: + void sendEntityData(shared_ptr conn); + shared_ptr getAddEntityPacket(); +public: + void clear(shared_ptr sp); +}; -- cgit v1.2.3