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);
103#if PROTOCOL_VERSION < 755
106 return transaction->GetUid();
175#if PROTOCOL_VERSION < 768
184 world = std::make_shared<World>(
false);
187 inventory_manager = std::make_shared<InventoryManager>();
188 entity_manager = std::make_shared<EntityManager>(network_manager);
190 network_manager->AddHandler(world.get());
191 network_manager->AddHandler(inventory_manager.get());
192 network_manager->AddHandler(entity_manager.get());
197 if (rendering_manager ==
nullptr)
199 static bool first_time =
true;
204 "Having multiple clients with renderer enabled is not supported.\n" <<
205 "Make sure to destroy the rendered client or disable Botcraft::Renderer::Options before creating another one"
211 network_manager->AddHandler(rendering_manager.get());
214 physics_manager = std::make_shared<PhysicsManager>(rendering_manager, inventory_manager, entity_manager, network_manager, world);
216 physics_manager = std::make_shared<PhysicsManager>(inventory_manager, entity_manager, network_manager, world);
218 network_manager->AddHandler(physics_manager.get());
220 physics_manager->StartPhysics();
226#if PROTOCOL_VERSION > 463
233#if PROTOCOL_VERSION > 768
237#if PROTOCOL_VERSION > 737
243#if PROTOCOL_VERSION < 464
263#if PROTOCOL_VERSION > 768
267#if PROTOCOL_VERSION < 464
275#if PROTOCOL_VERSION < 775
276 day_time = std::abs(packet.GetDayTime()) % 24000;
280 if (
world !=
nullptr)
282 if (
world->GetCurrentDimension() ==
"minecraft:overworld")
284 auto it = packet.GetClockUpdates().find(0);
285 if (it != packet.GetClockUpdates().end())
287 day_time = it->second.GetTotalTicks() % 24000;
290 else if (
world->GetCurrentDimension() ==
"minecraft:the_end")
292 auto it = packet.GetClockUpdates().find(1);
293 if (it != packet.GetClockUpdates().end())
295 day_time = it->second.GetTotalTicks() % 24000;
302#if PROTOCOL_VERSION < 761
305 if (packet.GetAction() == PlayerInfoAction::RemovePlayer)
308 for (
const auto& [uuid, infos] : packet.GetEntries())
313 else if (packet.GetAction() == PlayerInfoAction::AddPlayer)
316 for (
const auto& [uuid, infos] : packet.GetEntries())
318 if (infos.GetDisplayName().has_value())
320 player_names[uuid] = infos.GetDisplayName().value().GetText();
328 else if (packet.GetAction() == PlayerInfoAction::UpdateDisplayName)
331 for (
const auto& [uuid, infos] : packet.GetEntries())
333 if (infos.GetDisplayName().has_value())
335 player_names[uuid] = infos.GetDisplayName().value().GetText();
344 for (
const auto& uuid : packet.GetProfileIds())
352 for (
const auto& action : packet.GetActions())
354 if (action == PlayerInfoUpdateAction::AddPlayer)
357 for (
const auto& [uuid, infos] : packet.GetEntries())
363 if (action == PlayerInfoUpdateAction::UpdateDisplayName)
366 for (
const auto& [uuid, infos] : packet.GetEntries())
368 if (infos.display_name.has_value())
370 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
int SendInventoryTransaction(const std::shared_ptr< ProtocolCraft::ServerboundContainerClickPacket > &transaction)
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