LeviLamina
Loading...
Searching...
No Matches
DimensionManager.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/deps/game_refs/OwnerPtr.h"
5
6// auto generated inclusion list
7#include "mc/deps/core/utility/NonOwnerPointer.h"
8#include "mc/deps/core/utility/pub_sub/Connector.h"
9#include "mc/deps/core/utility/pub_sub/Publisher.h"
10#include "mc/deps/core/utility/pub_sub/Subscription.h"
11#include "mc/deps/game_refs/WeakRef.h"
12#include "mc/util/NameIdStore.h"
13#include "mc/world/level/IDimensionManagerConnector.h"
14#include "mc/world/level/dimension/DimensionDefinitionGroup.h"
15
16// auto generated forward declare list
17// clang-format off
18class Dimension;
22class LevelStorage;
23struct DimensionIdType;
24struct DimensionType;
25namespace Bedrock::PubSub::ThreadModel { struct MultiThreaded; }
26namespace mce { class UUID; }
27// clang-format on
29
30class DimensionManager : public ::IDimensionManagerConnector {
31public:
32 // member variables
33 // NOLINTBEGIN
34 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::Util::NameIdStore<::DimensionIdType>>>>
35 mDimensionNameIdStore;
36 ::ll::TypedStorage<8, 8, ::gsl::not_null<::std::unique_ptr<::DimensionRegistry>>> mDimensionRegistry;
37 ::ll::TypedStorage<8, 24, ::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> const> mDimensionFactory;
38 ::ll::TypedStorage<8, 16, ::DimensionDefinitionGroup> mDimensionDefinitionGroup;
39 ::ll::TypedStorage<
40 8,
41 128,
43 mOnReadyForCustomDimensionRegistrationPublisher;
44 ::ll::TypedStorage<
45 8,
46 128,
48 mOnNewDimensionCreatedPublisher;
49 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelStorageSaveSubscription;
50 ::ll::TypedStorage<8, 16, ::Bedrock::PubSub::Subscription> mOnLevelStorageStartLeaveGameSubscription;
51 // NOLINTEND
52
53public:
54 // prevent constructor by default
55 DimensionManager();
56
57public:
58 // virtual functions
59 // NOLINTBEGIN
60 virtual ~DimensionManager() = default;
61
62 virtual ::Bedrock::PubSub::Connector<void(::DimensionManager&)>&
63 getOnReadyForCustomDimensionRegistrationConnector() /*override*/;
64
65 virtual ::Bedrock::PubSub::Connector<void(::Dimension&)>& getOnNewDimensionCreatedConnector() /*override*/;
66 // NOLINTEND
67
68public:
69 // member functions
70 // NOLINTBEGIN
71 MCAPI explicit DimensionManager(::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory);
72
73#ifdef LL_PLAT_C
74 MCAPI DimensionManager(
75 ::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory,
76 ::DimensionDefinitionGroup dimensionDefinitions
77 );
78#endif
79
80 MCAPI bool _registerCustomDimensionWithDimensionDefinitionGroup(
81 ::std::string_view name,
82 ::DimensionType type,
83 ::mce::UUID const& packId
84 );
85
86 MCAPI void _registerCustomDimensionWithFactory(::std::string_view name, ::DimensionType type);
87
88#ifdef LL_PLAT_C
89 MCAPI void _registerFixedVanillaDimensionIds();
90#endif
91
92 MCFOLD void forEachDimension(::std::function<bool(::Dimension&)> callback);
93
94 MCFOLD void forEachDimension(::std::function<bool(::Dimension const&)> callback) const;
95
96 MCAPI ::WeakRef<::Dimension> getDimension(::DimensionType dimensionType) const;
97
98#ifdef LL_PLAT_C
99 MCAPI ::std::optional<::DimensionDefinitionGroup::DimensionDefinition>
100 getDimensionDefinition(::DimensionType dimensionType) const;
101#endif
102
103 MCAPI ::WeakRef<::Dimension> getOrCreateDimension(::std::string_view dimensionName);
104
105 MCAPI ::WeakRef<::Dimension> getOrCreateDimension(::DimensionType dimensionType);
106
107 MCAPI void serverInitialize(
108 ::ILevelStorageManagerConnector& levelStorageManagerConnector,
109 ::DimensionDefinitionGroup jsonDefinitionGroup
110 );
111
112 MCAPI void serverSaveDimensionNameIdStoreTable(::LevelStorage& levelStorage) const;
113 // NOLINTEND
114
115public:
116 // constructor thunks
117 // NOLINTBEGIN
118 MCAPI void* $ctor(::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory);
119
120#ifdef LL_PLAT_C
121 MCAPI void* $ctor(
122 ::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory,
123 ::DimensionDefinitionGroup dimensionDefinitions
124 );
125#endif
126 // NOLINTEND
127
128public:
129 // virtual function thunks
130 // NOLINTBEGIN
131#ifdef LL_PLAT_S
132 MCAPI ::Bedrock::PubSub::Connector<void(::DimensionManager&)>& $getOnReadyForCustomDimensionRegistrationConnector();
133#else // LL_PLAT_C
134 MCFOLD ::Bedrock::PubSub::Connector<void(::DimensionManager&)>&
135 $getOnReadyForCustomDimensionRegistrationConnector();
136#endif
137
138#ifdef LL_PLAT_S
139 MCAPI ::Bedrock::PubSub::Connector<void(::Dimension&)>& $getOnNewDimensionCreatedConnector();
140#else // LL_PLAT_C
141 MCFOLD ::Bedrock::PubSub::Connector<void(::Dimension&)>& $getOnNewDimensionCreatedConnector();
142#endif
143
144
145 // NOLINTEND
146};
Definition Publisher.h:25
Definition DimensionDefinitionGroup.h:17
Definition DimensionRegistry.h:16
Definition Dimension.h:86
Definition IDimensionFactory.h:15
Definition IDimensionManagerConnector.h:14
Definition ILevelStorageManagerConnector.h:13
Definition LevelStorage.h:25
Definition UUID.h:7
Definition DimensionIdType.h:8
Definition DimensionType.h:5