LeviLamina
Loading...
Searching...
No Matches
Spawner.h
1#pragma once
2
3#include "mc/_HeaderOutputPredefine.h"
4
5// auto generated inclusion list
6#include "mc/deps/shared_types/v1_26_20/block/MaterialType.h"
7#include "mc/world/actor/spawn_category/Type.h"
8#include "mc/world/level/SpawnBlockRequirements.h"
9#include "mc/world/level/chunk/LevelChunk.h"
10
11// auto generated forward declare list
12// clang-format off
13class Actor;
15class Biome;
16class BlockPos;
17class BlockSource;
18class ChunkPos;
19class Experiments;
21class IRandom;
23class ItemActor;
24class ItemStack;
25class Level;
26class LevelChunk;
28class Mob;
29class MobSpawnRules;
30class Random;
32class SpawnConditions;
34class Vec3;
36struct ActorUniqueID;
37struct SpawnSettings;
38namespace br::spawn { class EntityTypeCache; }
39namespace br::spawn { class SpawnPlacements; }
40namespace br::spawn { struct State; }
41// clang-format on
42
43class Spawner {
44public:
45 // Spawner inner types define
46 using AncientCityPredicate = ::std::function<bool(::BlockSource const&, ::BlockPos)>;
47
48 using GetSpawningAreasCallback =
49 ::std::function<::gsl::span<::LevelChunk::SpawningArea const>(::LevelChunk const&)>;
50
51 using MobSpawnedCallback = ::std::function<void(::Mob&)>;
52
53 using SpawnMobClusterCallback = ::std::function<void(::BlockPos const&, ::SpawnConditions&)>;
54
55 using SpawnStructureMobCallback =
56 ::std::function<void(::BlockPos const&, ::LevelChunk::SpawningArea const&, ::SpawnConditions const&)>;
57
58 using SpawnTickCallback = ::std::function<void(::BlockPos, ::SpawnConditions)>;
59
60public:
61 // virtual functions
62 // NOLINTBEGIN
63 virtual ~Spawner();
64
65 virtual void initializeServerSide(::ResourcePackManager& rpm, ::IWorldRegistriesProvider& registries) = 0;
66
67 virtual ::SpawnSettings const& getSpawnSettings() const = 0;
68
69 virtual void setSpawnSettings(::SpawnSettings const& spawnSettings) = 0;
70
71 virtual ::ActorSpawnRuleGroup const* getSpawnRules() const = 0;
72
73 virtual ::ActorSpawnRuleGroup* getSpawnRulesMutable() const = 0;
74
75 virtual ::SpawnGroupRegistry const* getSpawnGroupRegistry() const = 0;
76
77 virtual ::br::spawn::EntityTypeCache* getEntityTypeCache() const = 0;
78
79 virtual ::Mob* spawnMob(
80 ::BlockSource& region,
82 ::Actor* spawner,
83 ::Vec3 const& pos,
84 bool naturalSpawn,
85 bool surface,
86 bool fromSpawner
87 );
88
89 virtual ::ItemActor*
90 spawnItem(::BlockSource& region, ::ItemStack const& inst, ::Actor* spawner, ::Vec3 const& pos, int throwTime);
91
92 virtual ::Actor* spawnProjectile(
93 ::BlockSource& region,
95 ::Actor* spawner,
96 ::Vec3 const& position,
97 ::Vec3 const& direction
98 );
99
100 virtual void postProcessSpawnMobs(::BlockSource& region, int xo, int zo, ::Random& random) = 0;
101
102 virtual void
103 tick(::BlockSource& region, ::LevelChunkVolumeData const& levelChunkVolumeData, ::ChunkPos const chunkPos) = 0;
104
105 virtual void tickMobCount() = 0;
106
107 virtual void incrementSpawnableTickedMob() = 0;
108
109 virtual uint getSpawnableTickedMobCountPrevious() const = 0;
110
111 virtual ::std::unordered_set<::ActorUniqueID> spawnMobGroup(
112 ::BlockSource& region,
113 ::std::string const& spawnGroupId,
114 ::Vec3 const& pos,
115 bool doScatter,
116 bool validateDistToPlayer,
117 ::std::function<void(::Mob&)>&& spawnedCallback
118 ) = 0;
119
120 virtual ::br::spawn::SpawnPlacements& getSpawnPlacements() = 0;
121
122 virtual ::std::tuple<::std::array<::SpawnCategory::Type, 8>, uint64>
123 filteredSpawningCategories(::br::spawn::State const&, bool, bool, bool) const;
124
125 virtual void spawnForChunk(
129 ::gsl::span<::SpawnCategory::Type>,
130 ::IRandom&
131 ) const;
132
133 virtual void spawnMobsForChunkGeneration(::BlockSource&, ::Biome const&, ::ChunkPos, ::IRandom&) const;
134 // NOLINTEND
135
136public:
137 // static functions
138 // NOLINTBEGIN
139 MCAPI static bool findNextSpawnBlockUnder(
140 ::BlockSource const& region,
141 ::BlockPos& pos,
142 ::std::optional<::SharedTypes::v1_26_20::MaterialType> materialToSpawnIn,
143 ::SpawnBlockRequirements spawnBlockRequirements
144 );
145
146 MCAPI static ::std::unique_ptr<::Spawner>
147 from(::Level& level, ::Experiments const& experiments, ::IMinecraftEventing& eventing);
148
149 MCAPI static bool isSpawnPositionOk(
150 ::MobSpawnRules const& rules,
151 ::BlockSource& region,
152 ::BlockPos const& pos,
153 bool validateDistToPlayer
154 );
155 // NOLINTEND
156
157public:
158 // destructor thunk
159 // NOLINTBEGIN
160 MCFOLD void $dtor();
161 // NOLINTEND
162
163public:
164 // virtual function thunks
165 // NOLINTBEGIN
166 MCAPI ::Mob* $spawnMob(
167 ::BlockSource& region,
169 ::Actor* spawner,
170 ::Vec3 const& pos,
171 bool naturalSpawn,
172 bool surface,
173 bool fromSpawner
174 );
175
176 MCAPI ::ItemActor*
177 $spawnItem(::BlockSource& region, ::ItemStack const& inst, ::Actor* spawner, ::Vec3 const& pos, int throwTime);
178
179 MCAPI ::Actor* $spawnProjectile(
180 ::BlockSource& region,
182 ::Actor* spawner,
183 ::Vec3 const& position,
184 ::Vec3 const& direction
185 );
186
187 MCAPI ::std::tuple<::std::array<::SpawnCategory::Type, 8>, uint64>
188 $filteredSpawningCategories(::br::spawn::State const&, bool, bool, bool) const;
189
190 MCFOLD void $spawnForChunk(
194 ::gsl::span<::SpawnCategory::Type>,
195 ::IRandom&
196 ) const;
197
198 MCFOLD void $spawnMobsForChunkGeneration(::BlockSource&, ::Biome const&, ::ChunkPos, ::IRandom&) const;
199
200
201 // NOLINTEND
202};
Definition ActorSpawnRuleGroup.h:20
Definition Actor.h:125
Definition Biome.h:24
Definition BlockPos.h:21
Definition BlockSource.h:73
Definition ChunkPos.h:11
Definition Experiments.h:14
Definition IMinecraftEventing.h:138
Definition IRandom.h:10
Definition IWorldRegistriesProvider.h:25
Definition ItemActor.h:31
Definition ItemStack.h:35
Definition LevelChunkVolumeData.h:23
Definition LevelChunk.h:87
Definition Level.h:255
Definition MobSpawnRules.h:21
Definition Mob.h:57
Definition Random.h:10
Definition ResourcePackManager.h:35
Definition SpawnConditions.h:13
Definition SpawnGroupRegistry.h:19
Definition Spawner.h:43
Definition Vec3.h:10
Definition EntityTypeCache.h:13
Definition SpawnPlacements.h:28
Definition ActorDefinitionIdentifier.h:15
Definition ActorUniqueID.h:10
Definition LevelChunk.h:147
Definition SpawnSettings.h:9
Definition State.h:10