Skip to content
LeviMC
English
AutoLightDark
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;
23class LevelStorage;
24struct DimensionIdType;
25struct DimensionType;
26namespace Bedrock::PubSub::ThreadModel { struct MultiThreaded; }
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 MCNAPI explicit DimensionManager(::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory);
72
73#ifdef LL_PLAT_C
74 MCNAPI DimensionManager(
75 ::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory,
76 ::DimensionDefinitionGroup dimensionDefinitions
77 );
78#endif
79
80 MCAPI void _registerCustomDimensionWithFactory(::std::string_view name, ::DimensionType type);
81
82 MCAPI bool _registerDimensionWithDimensionDefinitionGroup(
83 ::std::string_view name,
85 );
86
87#ifdef LL_PLAT_C
88 MCNAPI void _registerFixedVanillaDimensionIds();
89#endif
90
91 MCNAPI void forEachDimension(::std::function<bool(::Dimension&)> callback);
92
93 MCNAPI void forEachDimension(::std::function<bool(::Dimension const&)> callback) const;
94
95 MCAPI ::WeakRef<::Dimension> getDimension(::DimensionType dimensionType) const;
96
97#ifdef LL_PLAT_C
98 MCNAPI ::std::optional<::DimensionDefinitionGroup::DimensionDefinition>
99 getDimensionDefinition(::DimensionType dimensionType) const;
100#endif
101
102 MCNAPI ::std::string getDimensionIdentifier(::DimensionType type) const;
103
104 MCAPI ::WeakRef<::Dimension> getOrCreateDimension(::std::string_view dimensionName);
105
106 MCAPI ::WeakRef<::Dimension> getOrCreateDimension(::DimensionType dimensionType);
107
108 MCNAPI void serverInitialize(
109 ::ILevelStorageManagerConnector& levelStorageManagerConnector,
110 ::DimensionDefinitionGroup jsonDefinitionGroup
111 );
112
113 MCNAPI void serverSaveDimensionNameIdStoreTable(::LevelStorage& levelStorage) const;
114
115 MCAPI ::std::optional<::DimensionType> tryGetDimensionType(::std::string_view identifier) const;
116 // NOLINTEND
117
118public:
119 // constructor thunks
120 // NOLINTBEGIN
121 MCNAPI void* $ctor(::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory);
122
123#ifdef LL_PLAT_C
124 MCNAPI void* $ctor(
125 ::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory> dimensionFactory,
126 ::DimensionDefinitionGroup dimensionDefinitions
127 );
128#endif
129 // NOLINTEND
130
131public:
132 // virtual function thunks
133 // NOLINTBEGIN
134 MCNAPI ::Bedrock::PubSub::Connector<void(::DimensionManager&)>&
136
137 MCNAPI ::Bedrock::PubSub::Connector<void(::Dimension&)>& $getOnNewDimensionCreatedConnector();
138
139
140 // NOLINTEND
141};
Definition Publisher.h:25
Definition DimensionDefinitionGroup.h:17
MCAPI void * $ctor(::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory > dimensionFactory)
MCAPI ::Bedrock::PubSub::Connector< void(::DimensionManager &)> & $getOnReadyForCustomDimensionRegistrationConnector()
MCAPI void forEachDimension(::std::function< bool(::Dimension const &)> callback) const
MCAPI void serverSaveDimensionNameIdStoreTable(::LevelStorage &levelStorage) const
MCAPI ::Bedrock::PubSub::Connector< void(::Dimension &)> & $getOnNewDimensionCreatedConnector()
MCAPI DimensionManager(::Bedrock::NotNullNonOwnerPtr<::IDimensionFactory > dimensionFactory)
MCAPI void forEachDimension(::std::function< bool(::Dimension &)> callback)
MCAPI void serverInitialize(::ILevelStorageManagerConnector &levelStorageManagerConnector, ::DimensionDefinitionGroup jsonDefinitionGroup)
MCAPI::std::string getDimensionIdentifier(::DimensionType type) const
Definition DimensionRegistry.h:16
Definition Dimension.h:86
Definition IDimensionFactory.h:15
Definition IDimensionManagerConnector.h:14
Definition ILevelStorageManagerConnector.h:13
Definition LevelStorage.h:26
Definition DimensionDefinitionGroup.h:25
Definition DimensionIdType.h:8
Definition DimensionType.h:5