28#if PROTOCOL_VERSION > 463
53 std::thread::id network_process_thread_id;
62#if PROTOCOL_VERSION > 463
80 world->UnloadAllChunks(network_process_thread_id);
160#if PROTOCOL_VERSION < 768
169 world = std::make_shared<World>(
false);
172 inventory_manager = std::make_shared<InventoryManager>(network_manager);
173 entity_manager = std::make_shared<EntityManager>(network_manager);
175 network_manager->AddHandler(world.get());
176 network_manager->AddHandler(inventory_manager.get());
177 network_manager->AddHandler(entity_manager.get());
182 if (rendering_manager ==
nullptr)
184 static bool first_time =
true;
189 "Having multiple clients with renderer enabled is not supported.\n" <<
190 "Make sure to destroy the rendered client or disable Botcraft::Renderer::Options before creating another one"
196 network_manager->AddHandler(rendering_manager.get());
199 physics_manager = std::make_shared<PhysicsManager>(rendering_manager, inventory_manager, entity_manager, network_manager, world);
201 physics_manager = std::make_shared<PhysicsManager>(inventory_manager, entity_manager, network_manager, world);
203 network_manager->AddHandler(physics_manager.get());
205 physics_manager->StartPhysics();
211#if PROTOCOL_VERSION > 463
218#if PROTOCOL_VERSION > 768
222#if PROTOCOL_VERSION > 737
228#if PROTOCOL_VERSION < 464
248#if PROTOCOL_VERSION > 768
252#if PROTOCOL_VERSION < 464
260#if PROTOCOL_VERSION < 775
261 day_time = std::abs(packet.GetDayTime()) % 24000;
265 if (
world !=
nullptr)
267 if (
world->GetCurrentDimension() ==
"minecraft:overworld")
269 auto it = packet.GetClockUpdates().find(0);
270 if (it != packet.GetClockUpdates().end())
272 day_time = it->second.GetTotalTicks() % 24000;
275 else if (
world->GetCurrentDimension() ==
"minecraft:the_end")
277 auto it = packet.GetClockUpdates().find(1);
278 if (it != packet.GetClockUpdates().end())
280 day_time = it->second.GetTotalTicks() % 24000;
287#if PROTOCOL_VERSION < 761
290 if (packet.GetAction() == PlayerInfoAction::RemovePlayer)
293 for (
const auto& [uuid, infos] : packet.GetEntries())
298 else if (packet.GetAction() == PlayerInfoAction::AddPlayer)
301 for (
const auto& [uuid, infos] : packet.GetEntries())
303 if (infos.GetDisplayName().has_value())
305 player_names[uuid] = infos.GetDisplayName().value().GetText();
313 else if (packet.GetAction() == PlayerInfoAction::UpdateDisplayName)
316 for (
const auto& [uuid, infos] : packet.GetEntries())
318 if (infos.GetDisplayName().has_value())
320 player_names[uuid] = infos.GetDisplayName().value().GetText();
329 for (
const auto& uuid : packet.GetProfileIds())
337 for (
const auto& action : packet.GetActions())
339 if (action == PlayerInfoUpdateAction::AddPlayer)
342 for (
const auto& [uuid, infos] : packet.GetEntries())
348 if (action == PlayerInfoUpdateAction::UpdateDisplayName)
351 for (
const auto& [uuid, infos] : packet.GetEntries())
353 if (infos.display_name.has_value())
355 player_names[uuid] = infos.display_name.value().GetText();
#define LOG_WARNING(osstream)
static AssetsManager & getInstance()
void Respawn()
Ask to respawn when dead.
virtual void Handle(ProtocolCraft::ClientboundLoginDisconnectPacket &packet) override
virtual void Disconnect()
std::shared_ptr< NetworkManager > network_manager
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
virtual ~ManagersClient()
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)
bool GetAutoRespawn() const
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
static std::shared_ptr< RenderingManager > CreateRenderingManagerIfPossible(std::shared_ptr< World > world_, std::shared_ptr< InventoryManager > inventory_manager_, std::shared_ptr< EntityManager > entity_manager_)
Mutex protected reference, will be locked until destroyed.
std::array< unsigned char, 16 > UUID