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