3#include "mc/_HeaderOutputPredefine.h"
6#include "mc/client/gui/DirtyFlag.h"
7#include "mc/client/gui/ViewRequest.h"
8#include "mc/client/gui/screens/controllers/MainMenuScreenController.h"
9#include "mc/client/gui/screens/controllers/RealmPlayer.h"
10#include "mc/client/network/realms/RealmsAPI.h"
11#include "mc/client/network/realms/World.h"
12#include "mc/server/commands/PlayerPermissionLevel.h"
21namespace Json {
class Value; }
22namespace Realms {
struct Player; }
29 enum class SearchState :
int {
35 enum class RealmPlayerList :
int {
36 InvalidMemberList = -1,
38 InvitedFriendsList = 1,
39 UninvitedFriendsList = 2,
40 BlockedPlayersList = 3,
43 using InviteList = ::std::map<::std::string, ::RealmsAPI::InviteAction>;
48 ::ll::TypedStorage<8, 208, ::RealmPlayer> EMPTY_PLAYER;
49 ::ll::TypedStorage<1, 1, bool> mLoading;
50 ::ll::TypedStorage<1, 1, bool> mListsLoaded;
51 ::ll::TypedStorage<1, 1, bool> mFromExistingWorld;
52 ::ll::TypedStorage<8, 64, ::std::function<void()>> mFollowUpActionAfterCreation;
53 ::ll::TypedStorage<1, 1, bool> mRefreshUI;
54 ::ll::TypedStorage<1, 1, bool> mClickedRefresh;
55 ::ll::TypedStorage<8, 656, ::Realms::World> mWorld;
56 ::ll::TypedStorage<1, 1, bool> mInvitesSent;
57 ::ll::TypedStorage<8, 8, ::std::chrono::steady_clock::time_point> mLastRefreshUpdate;
58 ::ll::TypedStorage<8, 8, ::std::chrono::steady_clock::time_point> mLastFriendListUpdate;
59 ::ll::TypedStorage<1, 1, bool> mNewWorld;
60 ::ll::TypedStorage<1, 1, bool> mPermissionsDirty;
61 ::ll::TypedStorage<1, 1, bool> mMembersListDirty;
62 ::ll::TypedStorage<8, 8, ::std::chrono::steady_clock::time_point> mLastTryJoin;
63 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::ProgressHandler>> mProgressHandler;
64 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::PlatformMultiplayerRestrictions>> mPlatformMultiplayerRestrictions;
65 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::DropdownScreenController>> mMembersDropdownController;
66 ::ll::TypedStorage<8, 16, ::std::shared_ptr<::DropdownScreenController>> mInvitedFriendsDropdownController;
67 ::ll::TypedStorage<4, 4, int> mUninvitedFriendsPageIndex;
68 ::ll::TypedStorage<4, 4, int> mInvitedFriendsPageIndex;
69 ::ll::TypedStorage<4, 4, int> mMembersPageIndex;
70 ::ll::TypedStorage<4, 4, int> mBlockedPlayersPageIndex;
71 ::ll::TypedStorage<1, 1, ::PlayerPermissionLevel> mDefaultPermission;
72 ::ll::TypedStorage<1, 1, ::PlayerPermissionLevel> mDefaultPermissionOld;
73 ::ll::TypedStorage<8, 32, ::std::string> mUninvitedFriendsLastFilter;
74 ::ll::TypedStorage<8, 32, ::std::string> mInvitedFriendsLastFilter;
75 ::ll::TypedStorage<8, 32, ::std::string> mMembersLastFilter;
76 ::ll::TypedStorage<8, 32, ::std::string> mBlockedPlayersLastFilter;
77 ::ll::TypedStorage<4, 4, int> mPreviousMembersPageIndex;
78 ::ll::TypedStorage<4, 4, int> mPreviousInvitedFriendsPageIndex;
79 ::ll::TypedStorage<4, 4, int> mPreviousUninvitedFriendsPageIndex;
80 ::ll::TypedStorage<4, 4, int> mPreviousBlockedPlayersPageIndex;
81 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::RealmPlayer>> mCompleteWorldPlayerList;
82 ::ll::TypedStorage<8, 64, ::std::unordered_map<::std::string, ::Social::PlatformUserProfileData>>
83 mLinkedPlatformAccounts;
84 ::ll::TypedStorage<4, 4, ::std::atomic<uint>> mLinkedAccountLoadCounter;
85 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mCurrentMembersList;
86 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFullMembersList;
87 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFilteredMembersList;
88 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mCurrentInvitedFriendsList;
89 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFullInvitedFriendsList;
90 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFilteredInvitedFriendsList;
91 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mCurrentUninvitedFriendsList;
92 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFullUninvitedFriendsList;
93 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFilteredUninvitedFriendsList;
94 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mCurrentBlockedPlayersList;
95 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFullBlockedPlayersList;
96 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mFilteredBlockedPlayersList;
97 ::ll::TypedStorage<8, 24, ::std::vector<::std::string>> mPendingXuidsForLinkedAccounts;
98 ::ll::TypedStorage<8, 64, ::std::unordered_set<::std::string>> mPreviouslyObservedXboxLiveFriends;
99 ::ll::TypedStorage<8, 32, ::std::string> mSharePopupBButtonDescription;
100 ::ll::TypedStorage<4, 4, uint> mCurrentUpdatedPlayers;
101 ::ll::TypedStorage<1, 1, bool> mShowLinkedAccounts;
106 RealmsAllowListScreenController();
111 virtual ~RealmsAllowListScreenController() ;
113 virtual void onLeave() ;
115 virtual ::ui::DirtyFlag tick() ;
117 virtual void addStaticScreenVars(::Json::Value& globalVars) ;
119 virtual ::std::string _getButtonBDescription() ;
121 virtual bool _getGamepadHelperVisible() const ;
127 MCAPI RealmsAllowListScreenController(
128 ::std::shared_ptr<::MainMenuScreenModel> model,
129 ::Realms::World const& world,
130 bool const& fromExistingWorld,
131 ::std::function<
void()> followUpCallbackAfterCreation,
132 bool fromSettingsOrAllowListEntryPoint
135 MCAPI
void _buildPlayerList();
137 MCAPI
void _clearFromFriendLists(::std::
string const& xuid);
139 MCAPI
void _clearMemberList();
141 MCAPI
void _finalizeLinkedAccountLoading();
143 MCAPI
void _getBlocklistProfiles(::std::vector<::std::
string> allXuids, ::std::vector<::std::
string> blockList);
145 MCAPI ::std::map<::std::
string, ::RealmsAPI::InviteAction> _getInvitesToSend() const;
148 _getRealmPlayerAtIndex(
int index, ::RealmsAllowListScreenController::RealmPlayerList realmPlayerList);
150 MCAPI ::RealmPlayer* _getRealmPlayerFromXuid(::std::
string const& xuid);
152 MCAPI ::RealmsAllowListScreenController::RealmPlayerList const
153 _getRealmPlayerListFromCollection(::UIPropertyBag const* bag) const;
155 MCAPI
void _handleDoesNotHavePermission(::std::function<
void()> newWorldCallback);
157 MCAPI ::ui::ViewRequest _handleInviteClick(::UIPropertyBag* bag);
159 MCAPI
void _handlePlayerInvite(::RealmPlayer& player);
161 MCAPI
void _handleUpdateFailed(::std::function<
void()> callback);
163 MCAPI
void _initializeLinkedAccounts(
164 ::std::vector<::std::
string>& platformIds,
165 ::std::vector<::Social::PlatformUserProfileData> const& platformProfiles
168 MCAPI
void _initializePlayerList(::std::function<
void()> callback);
170 MCAPI
void _joinRealm();
172 MCAPI
void _registerBindings();
174 MCAPI
void _registerEventHandlers();
176 MCAPI
void _requestPlatformGamerpic(::Social::PlatformUserProfileData const& platformEntry);
178 MCAPI
void _sendInvites(::std::function<
void()> callback);
180 MCAPI
bool _shouldUpdateFriendsList();
182 MCAPI
void _sortPlayerList();
184 MCAPI
void _updateFriendsList();
186 MCAPI
void _updateLinkedAccountLoading();
188 MCAPI
void _updatePlayerList(
189 ::std::vector<::Realms::Player> const& newPlayers,
190 ::std::vector<::Realms::Player> const& newBlockList
193 MCAPI
void _updatePlayerlistModel(
194 ::std::
string const& filter,
195 ::RealmsAllowListScreenController::RealmPlayerList realmPlayerList,
199 MCAPI
void sendDefaultPermission(::PlayerPermissionLevel const& permission);
201 MCAPI
void sendInvitesWithProgress(::std::function<
void()> callback);
203 MCAPI
void sendUserPermission(
204 ::std::
string const& xuid,
205 ::PlayerPermissionLevel permission,
206 ::PlayerPermissionLevel oldPermission
209 MCAPI
void updateWorld(::Realms::World const& world, ::std::function<
void()> callback);
216 ::std::shared_ptr<::MainMenuScreenModel> model,
217 ::Realms::World const& world,
218 bool const& fromExistingWorld,
219 ::std::function<
void()> followUpCallbackAfterCreation,
220 bool fromSettingsOrAllowListEntryPoint
233 MCAPI
void $onLeave();
235 MCAPI ::ui::DirtyFlag $tick();
237 MCAPI
void $addStaticScreenVars(::Json::Value& globalVars);
239 MCAPI ::std::
string $_getButtonBDescription();
241 MCAPI
bool $_getGamepadHelperVisible() const;
Definition DropdownScreenController.h:5
Definition MainMenuScreenController.h:5
Definition MainMenuScreenModel.h:5
Definition ProgressHandler.h:5
Definition RealmsAllowListScreenController.h:5
static MCAPI void ** $vftableForScreenController()
static MCAPI void ** $vftableForEnableNonOwnerReferences()
Definition UIPropertyBag.h:5