Apply patch

This commit is contained in:
Ayush Thoren 2026-03-12 20:53:56 +00:00
parent 643d32a301
commit f93552928c
4 changed files with 27 additions and 69 deletions

View file

@ -1222,6 +1222,30 @@ void LevelChunk::addEntity(shared_ptr<Entity> e)
#endif
}
void LevelChunk::addRidingEntities(shared_ptr<Entity> rider, CompoundTag *riderTag)
{
#ifdef _LARGE_WORLDS #This shouldnt be called when we dont have large worlds enabled
CompoundTag *mountTag = riderTag;
shared_ptr<Entity> ridingEntity = rider;
while (mountTag != NULL && mountTag->contains(Entity::RIDING_TAG))
{
CompoundTag *nextMountTag = mountTag->getCompound(Entity::RIDING_TAG);
shared_ptr<Entity> mount = EntityIO::loadStatic(nextMountTag, level);
if (mount == NULL)
{
break;
}
mount->onLoadedFromSave();
addEntity(mount);
ridingEntity->ride(mount);
ridingEntity = mount;
mountTag = nextMountTag;
}
#endif
};
void LevelChunk::removeEntity(shared_ptr<Entity> e)
{
@ -1420,29 +1444,6 @@ void LevelChunk::load()
#ifdef _LARGE_WORLDS
if(m_bUnloaded && m_unloadedEntitiesTag)
{
auto addRidingEntities = [this](shared_ptr<Entity> rider, CompoundTag *riderTag)
{
CompoundTag *mountTag = riderTag;
shared_ptr<Entity> ridingEntity = rider;
while (mountTag != NULL && mountTag->contains(Entity::RIDING_TAG))
{
CompoundTag *nextMountTag = mountTag->getCompound(Entity::RIDING_TAG);
shared_ptr<Entity> mount = EntityIO::loadStatic(nextMountTag, level);
if (mount == NULL)
{
break;
}
mount->onLoadedFromSave();
addEntity(mount);
ridingEntity->ride(mount);
ridingEntity = mount;
mountTag = nextMountTag;
}
};
ListTag<CompoundTag> *entityTags = (ListTag<CompoundTag> *) m_unloadedEntitiesTag->getList(L"Entities");
if (entityTags != NULL)
{

View file

@ -192,6 +192,7 @@ public:
virtual void setBrightness(LightLayer::variety layer, int x, int y, int z, int brightness);
virtual int getRawBrightness(int x, int y, int z, int skyDampen);
virtual void addEntity(shared_ptr<Entity> e);
virtual void addRidingEntities(shared_ptr<Entity> rider, CompoundTag *riderTag);
virtual void removeEntity(shared_ptr<Entity> e);
virtual void removeEntity(shared_ptr<Entity> e, int yc);
virtual bool isSkyLit(int x, int y, int z);

View file

@ -392,28 +392,6 @@ void OldChunkStorage::save(LevelChunk *lc, Level *level, CompoundTag *tag)
void OldChunkStorage::loadEntities(LevelChunk *lc, Level *level, CompoundTag *tag)
{
auto addRidingEntities = [lc, level](shared_ptr<Entity> rider, CompoundTag *riderTag)
{
CompoundTag *mountTag = riderTag;
shared_ptr<Entity> ridingEntity = rider;
while (mountTag != NULL && mountTag->contains(Entity::RIDING_TAG))
{
CompoundTag *nextMountTag = mountTag->getCompound(Entity::RIDING_TAG);
shared_ptr<Entity> mount = EntityIO::loadStatic(nextMountTag, level);
if (mount == NULL)
{
break;
}
lc->addEntity(mount);
ridingEntity->ride(mount);
ridingEntity = mount;
mountTag = nextMountTag;
}
};
ListTag<CompoundTag> *entityTags = (ListTag<CompoundTag> *) tag->getList(L"Entities");
if (entityTags != NULL)
{
@ -425,7 +403,7 @@ void OldChunkStorage::loadEntities(LevelChunk *lc, Level *level, CompoundTag *ta
if (te != NULL)
{
lc->addEntity(te);
addRidingEntities(te, teTag);
lc->addRidingEntities(te, teTag);
}
}
}

View file

@ -184,28 +184,6 @@ void ZonedChunkStorage::flush()
void ZonedChunkStorage::loadEntities(Level *level, LevelChunk *lc)
{
auto addRidingEntities = [level, lc](shared_ptr<Entity> rider, CompoundTag *riderTag)
{
CompoundTag *mountTag = riderTag;
shared_ptr<Entity> ridingEntity = rider;
while (mountTag != NULL && mountTag->contains(Entity::RIDING_TAG))
{
CompoundTag *nextMountTag = mountTag->getCompound(Entity::RIDING_TAG);
shared_ptr<Entity> mount = EntityIO::loadStatic(nextMountTag, level);
if (mount == nullptr)
{
break;
}
lc->addEntity(mount);
ridingEntity->ride(mount);
ridingEntity = mount;
mountTag = nextMountTag;
}
};
int slot = getSlot(lc->x, lc->z);
ZoneFile *zoneFile = getZoneFile(lc->x, lc->z, true);
vector<CompoundTag *> *tags = zoneFile->entityFile->readAll(slot);
@ -219,7 +197,7 @@ void ZonedChunkStorage::loadEntities(Level *level, LevelChunk *lc)
if (e != nullptr)
{
lc->addEntity(e);
addRidingEntities(e, tag);
lc->addRidingEntities(e, tag);
}
}
else if (type == 1)