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);
98#if PROTOCOL_VERSION < 755
101 return transaction->GetUid();
170#if PROTOCOL_VERSION < 768
179 world = std::make_shared<World>(
false);
182 inventory_manager = std::make_shared<InventoryManager>();
183 entity_manager = std::make_shared<EntityManager>(network_manager);
185 network_manager->AddHandler(world.get());
186 network_manager->AddHandler(inventory_manager.get());
187 network_manager->AddHandler(entity_manager.get());
192 if (rendering_manager ==
nullptr)
194 static bool first_time =
true;
199 "Having multiple clients with renderer enabled is not supported.\n" <<
200 "Make sure to destroy the rendered client or disable Botcraft::Renderer::Options before creating another one"
206 network_manager->AddHandler(rendering_manager.get());
209 physics_manager = std::make_shared<PhysicsManager>(rendering_manager, inventory_manager, entity_manager, network_manager, world);
211 physics_manager = std::make_shared<PhysicsManager>(inventory_manager, entity_manager, network_manager, world);
213 network_manager->AddHandler(physics_manager.get());
215 physics_manager->StartPhysics();
221#if PROTOCOL_VERSION > 463
228#if PROTOCOL_VERSION > 768
232#if PROTOCOL_VERSION > 737
238#if PROTOCOL_VERSION < 464
258#if PROTOCOL_VERSION > 768
262#if PROTOCOL_VERSION < 464
270#if PROTOCOL_VERSION < 775
271 day_time = std::abs(packet.GetDayTime()) % 24000;
275 if (
world !=
nullptr)
277 if (
world->GetCurrentDimension() ==
"minecraft:overworld")
279 auto it = packet.GetClockUpdates().find(0);
280 if (it != packet.GetClockUpdates().end())
282 day_time = it->second.GetTotalTicks() % 24000;
285 else if (
world->GetCurrentDimension() ==
"minecraft:the_end")
287 auto it = packet.GetClockUpdates().find(1);
288 if (it != packet.GetClockUpdates().end())
290 day_time = it->second.GetTotalTicks() % 24000;
297#if PROTOCOL_VERSION < 761
300 if (packet.GetAction() == PlayerInfoAction::RemovePlayer)
303 for (
const auto& [uuid, infos] : packet.GetEntries())
308 else if (packet.GetAction() == PlayerInfoAction::AddPlayer)
311 for (
const auto& [uuid, infos] : packet.GetEntries())
313 if (infos.GetDisplayName().has_value())
315 player_names[uuid] = infos.GetDisplayName().value().GetText();
323 else if (packet.GetAction() == PlayerInfoAction::UpdateDisplayName)
326 for (
const auto& [uuid, infos] : packet.GetEntries())
328 if (infos.GetDisplayName().has_value())
330 player_names[uuid] = infos.GetDisplayName().value().GetText();
339 for (
const auto& uuid : packet.GetProfileIds())
347 for (
const auto& action : packet.GetActions())
349 if (action == PlayerInfoUpdateAction::AddPlayer)
352 for (
const auto& [uuid, infos] : packet.GetEntries())
358 if (action == PlayerInfoUpdateAction::UpdateDisplayName)
361 for (
const auto& [uuid, infos] : packet.GetEntries())
363 if (infos.display_name.has_value())
365 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
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_)
std::array< unsigned char, 16 > UUID