LeviLamina
Loading...
Searching...
No Matches
ChunkBlockPos.h
1#pragma once
2
3#include "ll/api/utils/HashUtils.h"
4#include "mc/_HeaderOutputPredefine.h"
5#include "mc/world/level/BlockPos.h"
6
7// auto generated inclusion list
8#include "mc/world/level/ChunkLocalHeight.h"
9
11public:
12 // member variables
13 // NOLINTBEGIN
14 uchar x;
15 uchar z;
17 // NOLINTEND
18
19 constexpr ChunkBlockPos(::BlockPos const& pos, short minDimensionHeight)
20 : x((uchar)(pos.x & 0xF)),
21 z((uchar)(pos.z & 0xF)),
22 y(::ChunkLocalHeight{(short)(pos.y - minDimensionHeight)}) {}
23
24 constexpr ChunkBlockPos(uchar x, ::ChunkLocalHeight y, uchar z) : x(x), z(z), y(y) {}
25
26 constexpr static ::ChunkBlockPos from2D(uchar x, uchar z) { return ::ChunkBlockPos{x, ::ChunkLocalHeight{0}, z}; }
27
28 constexpr static ::ChunkBlockPos fromLegacyIndex(ushort idx) {
29 return ::ChunkBlockPos{(uint8)((idx >> 12) & 0xF), ChunkLocalHeight{(uint8)idx}, (uint8)((idx >> 8) & 0xF)};
30 }
31 constexpr bool operator==(::ChunkBlockPos const& other) const {
32 return x == other.x && z == other.z && y.mVal == other.y.mVal;
33 }
34 constexpr ushort toLegacyIndex() const { return (ushort)((x & 0xF) << 12 | (z & 0xF) << 8 | (uint8)y.mVal); }
35};
36
37
38namespace std {
39template <>
40class hash<ChunkBlockPos> {
41public:
42 size_t operator()(ChunkBlockPos const& t) const {
43 ll::utils::hash_utils::HashCombiner hc;
44 hc.add(std::hash<short>()(t.x));
45 hc.add(std::hash<short>()(t.y.mVal));
46 hc.add(std::hash<short>()(t.z));
47 return hc.hash();
48 }
49};
50} // namespace std
Definition BlockPos.h:17
Definition ChunkBlockPos.h:10
Definition ChunkLocalHeight.h:5
STL namespace.