LeviLamina
Loading...
Searching...
No Matches
Block.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4#include "mc/world/level/block/BlockProperty.h"
5#include "mc/world/level/block/BlockType.h"
6
7// auto generated inclusion list
8#include "mc/deps/core/utility/optional_ref.h"
9#include "mc/deps/nbt/CompoundTag.h"
10#include "mc/world/level/ShapeType.h"
11#include "mc/world/level/block/BlockSupportType.h"
12#include "mc/world/level/block/CachedComponentData.h"
13#include "mc/world/level/block/actor/BlockActorType.h"
14#include "mc/world/level/block/components/BlockComponentDirectData.h"
15#include "mc/world/level/block/components/BlockComponentStorage.h"
16#include "mc/world/level/block/components/ConnectionID.h"
17
18// auto generated forward declare list
19// clang-format off
20class AABB;
21class Actor;
22class BaseGameVersion;
24class BlockPos;
25class BlockSource;
26class BlockState;
27class BlockType;
29class HashedString;
30class HitResult;
31class IRandom;
32class ItemInstance;
33class ItemStackBase;
34class Player;
35class Random;
36class Vec3;
40// clang-format on
41
42class Block {
43public:
44 using BlockStateValueType = std::variant<int, float, bool, std::string>;
45 using BlockStatesType = std::vector<std::pair<std::string, BlockStateValueType>>;
46
47 LLNDAPI static optional_ref<Block const> tryGetFromRegistry(uint runtimeID);
48 LLNDAPI static optional_ref<Block const> tryGetFromRegistry(uint legacyBlockID, ushort legacyData);
49 LLNDAPI static optional_ref<Block const> tryGetFromRegistry(HashedString const& name);
50 LLNDAPI static optional_ref<Block const> tryGetFromRegistry(HashedString const& name, ushort legacyData);
51 LLNDAPI static optional_ref<Block const>
52 tryGetFromRegistry(HashedString const& name, BlockStatesType const& states);
53 LLNDAPI static optional_ref<Block const> tryGetFromRegistry(CompoundTag const& nbt);
54
55 LLNDAPI bool isAir() const;
56 [[nodiscard]] inline bool hasProperty(BlockProperty type) const {
57 return static_cast<uint64>(type) & static_cast<uint64>(mBlockType->mProperties);
58 }
59
60 [[nodiscard]] BlockType const& getBlockType() const { return *mBlockType; }
61
62 [[nodiscard]] std::string const& getTypeName() const { return getBlockType().getTypeName(); }
63
64 [[nodiscard]] unsigned short getBlockItemId() const { return getBlockType().mID->mValue; }
65
66 [[nodiscard]] ushort getData() const { return mData; }
67
68 [[nodiscard]] Material const& getMaterial() const { return getBlockType().mMaterial; }
69
70 template <typename T>
71 std::optional<T> getState(uint64 id) const {
72 return mBlockType->getState<T>(id, mData);
73 }
74
75 template <typename T>
76 std::optional<T> getState(BlockState const& state) const {
77 return mBlockType->getState<T>(state, mData);
78 }
79
80 template <typename T>
81 optional_ref<Block const> setState(uint64 id, T value) const {
82 return mBlockType->trySetState(id, value, mData);
83 }
84
85 template <typename T>
86 optional_ref<Block const> setState(BlockState const& state, T value) const {
87 return mBlockType->trySetState(state, value, mData);
88 }
89
90 bool operator==(Block const& other) const { return mSerializationIdHash == other.mSerializationIdHash; }
91
92 template <typename T>
93 MCAPI T const* tryGetComponent() const;
94
95public:
96 // member variables
97 // NOLINTBEGIN
98 ::ll::TypedStorage<8, 96, ::BlockComponentStorage> mComponents;
99 ::ll::TypedStorage<8, 8, ::gsl::not_null<::BlockType*>> mBlockType;
100 ::ll::TypedStorage<4, 8, ::CachedComponentData> mCachedComponentData;
101 ::ll::TypedStorage<8, 96, ::BlockComponentDirectData> mDirectData;
102 ::ll::TypedStorage<8, 24, ::std::vector<::HashedString>> mTags;
103 ::ll::TypedStorage<8, 24, ::CompoundTag> mSerializationId;
104 ::ll::TypedStorage<8, 8, uint64> mSerializationIdHash;
105 ::ll::TypedStorage<4, 4, uint> mSerializationIdHashForNetwork;
106 ::ll::TypedStorage<4, 4, uint> mNetworkId;
107 ::ll::TypedStorage<8, 8, ::std::unique_ptr<::IClientBlockData>> mClientData;
108 ::ll::TypedStorage<2, 2, ushort const> mData;
109 ::ll::TypedStorage<1, 1, bool> mHasRuntimeId;
110 // NOLINTEND
111
112public:
113 // prevent constructor by default
114 Block();
115
116public:
117 // virtual functions
118 // NOLINTBEGIN
119 virtual ~Block() = default;
120 // NOLINTEND
121
122public:
123 // member functions
124 // NOLINTBEGIN
125 MCAPI Block(ushort data, ::gsl::not_null<::BlockType*> oldBlock);
126
127 MCAPI Block(ushort data, ::gsl::not_null<::BlockType*> oldBlock, ::CompoundTag serId, uint const& runId);
128
129 MCAPI bool _isSolid() const;
130
131#ifdef LL_PLAT_C
132 MCAPI void _playAmbientSounds(::BlockAnimateTickData const& tickData) const;
133#endif
134
135 MCAPI void _queueForTickBasedOnComponentConfiguration(
136 ::BlockSource& region,
137 ::BlockPos const& pos,
138 ::Random& random,
139 bool placingBlock
140 ) const;
141
142 MCAPI void _removeFromTickingQueues(::BlockSource& region, ::BlockPos const& pos) const;
143
144 MCAPI ::Block& addTag(::HashedString const& tag);
145
146 MCAPI ::ItemInstance asItemInstance(::BlockSource& region, ::BlockPos const& position, bool withData) const;
147
148 MCAPI bool breaksFallingBlocks(::BaseGameVersion version) const;
149
150 MCAPI ::std::string buildDescriptionId() const;
151
152 MCAPI ::std::string buildDescriptionName() const;
153
154 MCAPI void buildSerializationId(uint latestUpdaterVersion);
155
156 MCAPI bool canConnect(::Block const& connectionBlock, uchar toOther) const;
157
158 MCAPI bool canProvideFullSupport(uchar face) const;
159
160 MCFOLD bool canProvideSupport(uchar face, ::BlockSupportType type) const;
161
162 MCAPI bool canSurvive(::BlockSource& region, ::BlockPos const& pos) const;
163
164 MCAPI ::HitResult clip(::BlockPos const& pos, ::Vec3 const& A, ::Vec3 const& B, ::AABB const& aabb) const;
165
166 MCAPI ::HitResult clip(
167 ::BlockSource const& region,
168 ::BlockPos const& pos,
169 ::Vec3 const& A,
170 ::Vec3 const& B,
171 ::ShapeType shapeType,
173 ) const;
174
175 MCAPI uint computeRawSerializationIdHashForNetwork() const;
176
177 MCAPI ::Block const& copyState(::Block const& fromBlock, ::BlockState const& state) const;
178
179 MCAPI void executeItemEvent(
180 ::ItemStackBase& item,
181 ::std::string const& eventName,
182 ::BlockSource& region,
183 ::BlockPos const& pos,
184 ::Actor* actor
185 ) const;
186
187#ifdef LL_PLAT_C
188 MCAPI void finalizeBlockComponentStorage();
189
190 MCAPI ::BlockActorType getBlockEntityType() const;
191#endif
192
193 MCAPI ::std::optional<::ConnectionID> getConnectionID() const;
194
195#ifdef LL_PLAT_C
196 MCAPI ::std::string getCraftingLabelText() const;
197#endif
198
199 MCAPI ::std::string getDescriptionId() const;
200
201 MCAPI float getDestroySpeed(::ItemStackBase const& item) const;
202
203 MCAPI ::std::string getDisplayName() const;
204
205 MCAPI bool hasTag(::HashedString const& tagName) const;
206
207 MCAPI bool isCropBlock() const;
208
209 MCAPI bool isPartialBlock(::BlockSource const& region, ::BlockPos const& pos) const;
210
211 MCAPI bool isPreservingMediumWhenPlaced(::Block const& medium) const;
212
213 MCAPI bool isTopPartialBlock(::BlockSource const& region, ::BlockPos const& pos) const;
214
215 MCAPI ::Block const& keepStates(::std::vector<::BlockState const*> const& statesToKeep) const;
216
217 MCAPI bool mayPlace(::BlockSource& region, ::BlockPos const& pos, uchar face, ::Actor* placer) const;
218
219 MCAPI void neighborChanged(::BlockSource& region, ::BlockPos const& pos, ::BlockPos const& neighborPos) const;
220
221 MCAPI void onActorEvent(::BlockPos const& pos, ::std::string const& eventName, ::Actor& sourceEntity) const;
222
223 MCAPI void onActorInternalEvent(::BlockPos const& pos, ::std::string const& eventName, ::Actor& sourceEntity) const;
224
225#ifdef LL_PLAT_C
226 MCAPI void onFallOn(::BlockSource& region, ::BlockPos const& pos, ::Actor& entity, float fallDistance) const;
227
228 MCAPI void onPlace(
229 ::BlockSource& region,
230 ::BlockPos const& pos,
231 ::Block const& previousBlock,
232 ::BlockChangeContext const& changeSourceContext
233 ) const;
234
235 MCAPI void onRedstoneUpdate(
236 ::BlockSource& region,
237 ::BlockPos const& pos,
238 short strength,
239 short oldStrength,
240 bool isFirstTime
241 ) const;
242
243 MCAPI void onStateChange(
244 ::BlockSource& region,
245 ::BlockPos const& pos,
246 ::Block const& previousBlock,
247 ::BlockChangeContext const& changeSourceContext
248 ) const;
249
250 MCAPI void onStepOff(::Actor& entity, ::BlockPos const& pos) const;
251
252 MCAPI void onStepOn(::Actor& entity, ::BlockPos const& pos) const;
253#endif
254
255 MCAPI void playerDestroy(::Player& player, ::BlockPos const& pos) const;
256
257 MCAPI void queuedTick(::BlockSource& region, ::BlockPos const& pos, ::Random& random) const;
258
259 MCAPI void randomTick(::BlockSource& region, ::BlockPos const& pos, ::Random& random) const;
260
261#ifdef LL_PLAT_C
262 MCAPI bool shouldRandomTick() const;
263#endif
264
265 MCAPI void spawnResources(
266 ::BlockSource& region,
267 ::BlockPos const& pos,
268 ::IRandom& random,
269 ::ResourceDropsContext const& resourceDropsContext,
270 ::Actor const* actorContext
271 ) const;
272
273 MCAPI ::std::string toDebugString() const;
274
275 MCAPI bool use(::Player& player, ::BlockPos const& pos, uchar face, ::std::optional<::Vec3> hit) const;
276 // NOLINTEND
277
278public:
279 // static variables
280 // NOLINTBEGIN
281 MCAPI static ::std::string const& BLOCK_DESCRIPTION_PREFIX();
282 // NOLINTEND
283
284public:
285 // constructor thunks
286 // NOLINTBEGIN
287 MCAPI void* $ctor(ushort data, ::gsl::not_null<::BlockType*> oldBlock);
288
289 MCAPI void* $ctor(ushort data, ::gsl::not_null<::BlockType*> oldBlock, ::CompoundTag serId, uint const& runId);
290 // NOLINTEND
291
292public:
293 // vftables
294 // NOLINTBEGIN
295 MCAPI static void** $vftable();
296 // NOLINTEND
297};
Definition AABB.h:18
Definition Actor.h:114
Definition BaseGameVersion.h:8
Definition BlockChangeContext.h:10
Definition BlockPos.h:17
Definition BlockSource.h:71
Definition BlockState.h:14
Definition BlockType.h:79
Definition CompoundTag.h:18
Definition GetCollisionShapeInterface.h:13
Definition HashedString.h:5
Definition HitResult.h:18
Definition IClientBlockData.h:5
Definition IRandom.h:10
Definition ItemInstance.h:15
Definition ItemStackBase.h:44
Definition Material.h:8
Definition Player.h:129
Definition Random.h:10
Definition Vec3.h:10
Definition optional_ref.h:10
Definition BlockAnimateTickData.h:14
Definition ResourceDropsContext.h:16