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/world/actor/spawn_category/Type.h"
7#include "mc/world/level/SpawnBlockRequirements.h"
8#include "mc/world/level/chunk/LevelChunk.h"
9#include "mc/world/level/material/MaterialType.h"
10
11// auto generated forward declare list
12// clang-format off
13class Actor;
15class Biome;
16class BlockPos;
17class BlockSource;
18class ChunkPos;
19class IRandom;
21class ItemActor;
22class ItemStack;
23class LevelChunk;
25class Mob;
26class MobSpawnRules;
27class Random;
29class SpawnConditions;
31class Vec3;
33struct ActorUniqueID;
34struct SpawnSettings;
35namespace br::spawn { class EntityTypeCache; }
36namespace br::spawn { class SpawnPlacements; }
37namespace br::spawn { struct State; }
38// clang-format on
39
40class Spawner {
41public:
42 // Spawner inner types define
43 using AncientCityPredicate = ::std::function<bool(::BlockSource const&, ::BlockPos)>;
44
45 using GetSpawningAreasCallback =
46 ::std::function<::gsl::span<::LevelChunk::SpawningArea const>(::LevelChunk const&)>;
47
48 using MobSpawnedCallback = ::std::function<void(::Mob&)>;
49
50 using SpawnMobClusterCallback = ::std::function<void(::BlockPos const&, ::SpawnConditions&)>;
51
52 using SpawnStructureMobCallback =
53 ::std::function<void(::BlockPos const&, ::LevelChunk::SpawningArea const&, ::SpawnConditions const&)>;
54
55 using SpawnTickCallback = ::std::function<void(::BlockPos, ::SpawnConditions)>;
56
57public:
58 // virtual functions
59 // NOLINTBEGIN
60 virtual ~Spawner();
61
62 virtual void initializeServerSide(::ResourcePackManager&, ::IWorldRegistriesProvider&) = 0;
63
64 virtual ::SpawnSettings const& getSpawnSettings() const = 0;
65
66 virtual void setSpawnSettings(::SpawnSettings const&) = 0;
67
68 virtual ::ActorSpawnRuleGroup const* getSpawnRules() const = 0;
69
70 virtual ::ActorSpawnRuleGroup* getSpawnRulesMutable() const = 0;
71
72 virtual ::SpawnGroupRegistry const* getSpawnGroupRegistry() const = 0;
73
74 virtual ::br::spawn::EntityTypeCache* getEntityTypeCache() const = 0;
75
76 virtual ::Mob* spawnMob(
77 ::BlockSource& region,
79 ::Actor* spawner,
80 ::Vec3 const& pos,
81 bool naturalSpawn,
82 bool surface,
83 bool fromSpawner
84 );
85
86 virtual ::ItemActor*
87 spawnItem(::BlockSource& region, ::ItemStack const& inst, ::Actor* spawner, ::Vec3 const& pos, int throwTime);
88
89 virtual ::Actor* spawnProjectile(
90 ::BlockSource& region,
92 ::Actor* spawner,
93 ::Vec3 const& position,
94 ::Vec3 const& direction
95 );
96
97 virtual void postProcessSpawnMobs(::BlockSource&, int, int, ::Random&) = 0;
98
99 virtual void tick(::BlockSource&, ::LevelChunkVolumeData const&, ::ChunkPos const) = 0;
100
101 virtual void tickMobCount() = 0;
102
103 virtual void incrementSpawnableTickedMob() = 0;
104
105 virtual uint getSpawnableTickedMobCountPrevious() const = 0;
106
107 virtual ::std::unordered_set<::ActorUniqueID>
108 spawnMobGroup(::BlockSource&, ::std::string const&, ::Vec3 const&, bool, bool, ::std::function<void(::Mob&)>&&) = 0;
109
110 virtual ::br::spawn::SpawnPlacements& getSpawnPlacements() = 0;
111
112 virtual ::std::tuple<::std::array<::SpawnCategory::Type, 8>, uint64>
113 filteredSpawningCategories(::br::spawn::State const&, bool, bool, bool) const;
114
115 virtual void spawnForChunk(
119 ::gsl::span<::SpawnCategory::Type>,
120 ::IRandom&
121 ) const;
122
123 virtual void spawnMobsForChunkGeneration(::BlockSource&, ::Biome const&, ::ChunkPos, ::IRandom&) const;
124 // NOLINTEND
125
126public:
127 // static functions
128 // NOLINTBEGIN
129 MCAPI static bool findNextSpawnBlockUnder(
130 ::BlockSource const& region,
131 ::BlockPos& pos,
132 ::std::optional<::MaterialType> materialToSpawnIn,
133 ::SpawnBlockRequirements spawnBlockRequirements
134 );
135
136 MCAPI static bool isSpawnPositionOk(
137 ::MobSpawnRules const& rules,
138 ::BlockSource& region,
139 ::BlockPos const& pos,
140 bool validateDistToPlayer
141 );
142 // NOLINTEND
143
144public:
145 // destructor thunk
146 // NOLINTBEGIN
147 MCAPI void $dtor();
148 // NOLINTEND
149
150public:
151 // virtual function thunks
152 // NOLINTBEGIN
153 MCAPI ::Mob* $spawnMob(
154 ::BlockSource& region,
156 ::Actor* spawner,
157 ::Vec3 const& pos,
158 bool naturalSpawn,
159 bool surface,
160 bool fromSpawner
161 );
162
163 MCAPI ::ItemActor*
164 $spawnItem(::BlockSource& region, ::ItemStack const& inst, ::Actor* spawner, ::Vec3 const& pos, int throwTime);
165
166 MCAPI ::Actor* $spawnProjectile(
167 ::BlockSource& region,
169 ::Actor* spawner,
170 ::Vec3 const& position,
171 ::Vec3 const& direction
172 );
173
174 MCAPI ::std::tuple<::std::array<::SpawnCategory::Type, 8>, uint64>
175 $filteredSpawningCategories(::br::spawn::State const&, bool, bool, bool) const;
176
177 MCFOLD void $spawnForChunk(
181 ::gsl::span<::SpawnCategory::Type>,
182 ::IRandom&
183 ) const;
184
185 MCFOLD void $spawnMobsForChunkGeneration(::BlockSource&, ::Biome const&, ::ChunkPos, ::IRandom&) const;
186
187
188 // NOLINTEND
189
190public:
191 // vftables
192 // NOLINTBEGIN
193 MCNAPI static void** $vftable();
194 // NOLINTEND
195};
Definition ActorSpawnRuleGroup.h:19
Definition Actor.h:105
Definition Biome.h:23
Definition BlockPos.h:19
Definition BlockSource.h:68
Definition ChunkPos.h:11
Definition IRandom.h:13
Definition IWorldRegistriesProvider.h:25
Definition ItemActor.h:29
Definition ItemStack.h:26
Definition LevelChunkVolumeData.h:18
Definition LevelChunk.h:79
Definition MobSpawnRules.h:21
Definition Mob.h:50
Definition Random.h:10
Definition ResourcePackManager.h:29
Definition SpawnConditions.h:8
Definition SpawnGroupRegistry.h:19
Definition Spawner.h:40
static MCAPI void ** $vftable()
Definition Vec3.h:10
Definition EntityTypeCache.h:13
Definition SpawnPlacements.h:28
Definition ActorDefinitionIdentifier.h:15
Definition ActorUniqueID.h:5
Definition LevelChunk.h:115
Definition SpawnSettings.h:14
Definition State.h:10