Moved growing from cWorld / cChunk to cBlockHandler descendants.
This commit is contained in:
@@ -28,7 +28,7 @@ void cDispenserEntity::DropSpenseFromSlot(cChunk & a_Chunk, int a_SlotNum)
|
||||
Vector3i dispRelCoord(GetRelPos());
|
||||
auto meta = a_Chunk.GetMeta(dispRelCoord);
|
||||
AddDropSpenserDir(dispRelCoord, meta);
|
||||
auto dispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(dispRelCoord.x, dispRelCoord.z);
|
||||
auto dispChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(dispRelCoord);
|
||||
if (dispChunk == nullptr)
|
||||
{
|
||||
// Would dispense into / interact with a non-loaded chunk, ignore the tick
|
||||
|
||||
@@ -299,7 +299,7 @@ bool cHopperEntity::MoveItemsOut(cChunk & a_Chunk, Int64 a_CurrentTick)
|
||||
|
||||
// Convert coords to relative:
|
||||
auto relCoord = a_Chunk.AbsoluteToRelative(out.second);
|
||||
auto destChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(relCoord.x, relCoord.z);
|
||||
auto destChunk = a_Chunk.GetRelNeighborChunkAdjustCoords(relCoord);
|
||||
if (destChunk == nullptr)
|
||||
{
|
||||
// The destination chunk has been unloaded, don't tick
|
||||
@@ -379,7 +379,7 @@ bool cHopperEntity::MoveItemsFromChest(cChunk & a_Chunk)
|
||||
for (const auto & ofs: neighborOfs)
|
||||
{
|
||||
auto neighborRelCoord = ofs.addedXZ(m_RelX, m_RelZ);
|
||||
auto neighbor = a_Chunk.GetRelNeighborChunkAdjustCoords(neighborRelCoord.x, neighborRelCoord.z);
|
||||
auto neighbor = a_Chunk.GetRelNeighborChunkAdjustCoords(neighborRelCoord);
|
||||
if (neighbor == nullptr)
|
||||
{
|
||||
continue;
|
||||
@@ -543,7 +543,7 @@ bool cHopperEntity::MoveItemsToChest(cChunk & a_Chunk, Vector3i a_Coords)
|
||||
for (const auto & ofs: neighborOfs)
|
||||
{
|
||||
auto otherHalfRelCoord = relCoord + ofs;
|
||||
auto neighbor = a_Chunk.GetRelNeighborChunkAdjustCoords(otherHalfRelCoord.x, otherHalfRelCoord.z);
|
||||
auto neighbor = a_Chunk.GetRelNeighborChunkAdjustCoords(otherHalfRelCoord);
|
||||
if (neighbor == nullptr)
|
||||
{
|
||||
continue;
|
||||
|
||||
@@ -151,36 +151,36 @@ void cMobSpawnerEntity::SpawnEntity(void)
|
||||
break;
|
||||
}
|
||||
|
||||
int RelX = m_RelX + static_cast<int>((Random.RandReal<double>() - Random.RandReal<double>()) * 4.0);
|
||||
int RelY = m_Pos.y + Random.RandInt(-1, 1);
|
||||
int RelZ = m_RelZ + static_cast<int>((Random.RandReal<double>() - Random.RandReal<double>()) * 4.0);
|
||||
Vector3i spawnRelPos(GetRelPos());
|
||||
spawnRelPos += Vector3i(
|
||||
static_cast<int>((Random.RandReal<double>() - Random.RandReal<double>()) * 4.0),
|
||||
Random.RandInt(-1, 1),
|
||||
static_cast<int>((Random.RandReal<double>() - Random.RandReal<double>()) * 4.0)
|
||||
);
|
||||
|
||||
cChunk * Chunk = a_Chunk.GetRelNeighborChunkAdjustCoords(RelX, RelZ);
|
||||
if ((Chunk == nullptr) || !Chunk->IsValid())
|
||||
auto chunk = a_Chunk.GetRelNeighborChunkAdjustCoords(spawnRelPos);
|
||||
if ((chunk == nullptr) || !chunk->IsValid())
|
||||
{
|
||||
continue;
|
||||
}
|
||||
EMCSBiome Biome = Chunk->GetBiomeAt(RelX, RelZ);
|
||||
EMCSBiome Biome = chunk->GetBiomeAt(spawnRelPos.x, spawnRelPos.z);
|
||||
|
||||
if (cMobSpawner::CanSpawnHere(Chunk, RelX, RelY, RelZ, MobType, Biome))
|
||||
if (cMobSpawner::CanSpawnHere(chunk, spawnRelPos, MobType, Biome))
|
||||
{
|
||||
double PosX = Chunk->GetPosX() * cChunkDef::Width + RelX;
|
||||
double PosZ = Chunk->GetPosZ() * cChunkDef::Width + RelZ;
|
||||
|
||||
auto Monster = cMonster::NewMonsterFromType(MobType);
|
||||
if (Monster == nullptr)
|
||||
auto absPos = chunk->RelativeToAbsolute(spawnRelPos);
|
||||
auto monster = cMonster::NewMonsterFromType(MobType);
|
||||
if (monster == nullptr)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
Monster->SetPosition(PosX, RelY, PosZ);
|
||||
Monster->SetYaw(Random.RandReal(360.0f));
|
||||
if (Chunk->GetWorld()->SpawnMobFinalize(std::move(Monster)) != cEntity::INVALID_ID)
|
||||
monster->SetPosition(absPos);
|
||||
monster->SetYaw(Random.RandReal(360.0f));
|
||||
if (chunk->GetWorld()->SpawnMobFinalize(std::move(monster)) != cEntity::INVALID_ID)
|
||||
{
|
||||
HaveSpawnedEntity = true;
|
||||
m_World->BroadcastSoundParticleEffect(
|
||||
EffectID::PARTICLE_MOBSPAWN,
|
||||
Vector3d(PosX, RelY, PosZ).Floor(),
|
||||
absPos,
|
||||
0
|
||||
);
|
||||
NearbyEntities++;
|
||||
|
||||
Reference in New Issue
Block a user