Botcraft 26.2
Loading...
Searching...
No Matches
ManagersClient.hpp
Go to the documentation of this file.
1#pragma once
2
3#include <atomic>
4#include <map>
5#include <shared_mutex>
6#include <thread>
7
11
12namespace Botcraft
13{
14 class World;
15 class InventoryManager;
16 class EntityManager;
17 class LocalPlayer;
18 class PhysicsManager;
19
20#if USE_GUI
21 namespace Renderer
22 {
23 class RenderingManager;
24 }
25#endif
26
27 /// @brief A client containing the different managers,
28 /// and performing client-side physics.
29 /// Can be inherited if you want to handle other packets
30 /// without a need of any behaviour tree stuff.
32 {
33 public:
35 virtual ~ManagersClient();
36
37 virtual void Disconnect() override;
38
39 void SetSharedWorld(const std::shared_ptr<World> world_);
40
41 bool GetAutoRespawn() const;
42 void SetAutoRespawn(const bool b);
43
44 std::shared_ptr<World> GetWorld() const;
45 std::shared_ptr<EntityManager> GetEntityManager() const;
46 std::shared_ptr<LocalPlayer> GetLocalPlayer() const;
47 std::shared_ptr<InventoryManager> GetInventoryManager() const;
48 std::shared_ptr<PhysicsManager> GetPhysicsManager() const;
49
50 /// @brief Get the name of a connected player
51 /// @param uuid UUID of the player
52 /// @return The name, or empty string if not present
53 std::string GetPlayerName(const ProtocolCraft::UUID& uuid) const;
54
55 /// @brief Get the list of connected player (tab list)
56 /// @return Basically an object you can use as a std::map<ProtocolCraft::UUID, std::string>*.
57 /// **ALL TAB LIST UPDATE WILL BE BLOCKED WHILE THIS OBJECT IS ALIVE**, make sure it goes out of scope
58 /// as soon as you don't need it.
60
61 /// @brief Get the current tick
62 /// @return An int representing the time of day
63 int GetDayTime() const;
64
65 protected:
66 using ConnectionClient::Handle; // Don't hide all Handle() functions from base classes
67#if PROTOCOL_VERSION < 768 /* < 1.21.2 */
68 virtual void Handle(ProtocolCraft::ClientboundGameProfilePacket& packet) override;
69#else
70 virtual void Handle(ProtocolCraft::ClientboundLoginFinishedPacket& packet) override;
71#endif
72 virtual void Handle(ProtocolCraft::ClientboundChangeDifficultyPacket& packet) override;
73 virtual void Handle(ProtocolCraft::ClientboundLoginPacket& packet) override;
74 virtual void Handle(ProtocolCraft::ClientboundSetHealthPacket& packet) override;
75 virtual void Handle(ProtocolCraft::ClientboundPlayerPositionPacket& packet) override;
76 virtual void Handle(ProtocolCraft::ClientboundRespawnPacket& packet) override;
77 virtual void Handle(ProtocolCraft::ClientboundSetTimePacket& packet) override;
78#if PROTOCOL_VERSION < 761 /* < 1.19.3 */
79 virtual void Handle(ProtocolCraft::ClientboundPlayerInfoPacket& packet) override;
80#else
81 virtual void Handle(ProtocolCraft::ClientboundPlayerInfoRemovePacket& packet) override;
82 virtual void Handle(ProtocolCraft::ClientboundPlayerInfoUpdatePacket& packet) override;
83#endif
84
85 protected:
86 std::shared_ptr<World> world;
87 std::shared_ptr<EntityManager> entity_manager;
88 std::shared_ptr<InventoryManager> inventory_manager;
89 std::shared_ptr<PhysicsManager> physics_manager;
90#if USE_GUI
91 std::shared_ptr<Renderer::RenderingManager> rendering_manager;
92#endif
93
95
97#if PROTOCOL_VERSION > 463 /* > 1.13.2 */
99#endif
101 std::atomic<int> day_time;
102
103 /// @brief Names of all connected players
104 std::map<ProtocolCraft::UUID, std::string> player_names;
105 mutable std::shared_mutex player_names_mutex;
106 };
107} //Botcraft
The base client handling connection with a server.
virtual void Handle(ProtocolCraft::ClientboundLoginDisconnectPacket &packet) override
A client containing the different managers, and performing client-side physics.
std::atomic< int > day_time
Utilities::ScopeLockedWrapper< const std::map< ProtocolCraft::UUID, std::string >, std::shared_mutex, std::shared_lock > GetOnlinePlayers() const
Get the list of connected player (tab list)
std::map< ProtocolCraft::UUID, std::string > player_names
Names of all connected players.
std::shared_ptr< EntityManager > GetEntityManager() const
std::shared_ptr< PhysicsManager > GetPhysicsManager() const
void SetSharedWorld(const std::shared_ptr< World > world_)
std::shared_ptr< Renderer::RenderingManager > rendering_manager
std::shared_ptr< LocalPlayer > GetLocalPlayer() const
void SetAutoRespawn(const bool b)
std::shared_ptr< InventoryManager > GetInventoryManager() const
virtual void Disconnect() override
std::shared_ptr< PhysicsManager > physics_manager
std::shared_ptr< InventoryManager > inventory_manager
std::shared_ptr< EntityManager > entity_manager
std::shared_mutex player_names_mutex
std::shared_ptr< World > world
virtual void Handle(ProtocolCraft::ClientboundLoginFinishedPacket &packet) override
int GetDayTime() const
Get the current tick.
std::string GetPlayerName(const ProtocolCraft::UUID &uuid) const
Get the name of a connected player.
std::shared_ptr< World > GetWorld() const
Mutex protected reference, will be locked until destroyed.
std::array< unsigned char, 16 > UUID