diff options
| author | Ayush Thoren <ayushthoren@gmail.com> | 2026-03-13 04:16:05 -0700 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2026-03-13 11:16:05 +0000 |
| commit | d131a551bff13b76d98dc708756daa1fd975e7ca (patch) | |
| tree | 536443a04a20bf261d798f67fde43e398eba9482 /Minecraft.World/LevelChunk.cpp | |
| parent | ad74d443001ff17c5ab10e4438952e2805e05f38 (diff) | |
Fix mounted minecarts not persisting across world reloads (#979)
* Fix mounted minecarts not persisting across world reloads
Signed-off-by: Ayush Thoren <ayushthoren@gmail.com>
* Apply patch
---------
Signed-off-by: Ayush Thoren <ayushthoren@gmail.com>
Diffstat (limited to 'Minecraft.World/LevelChunk.cpp')
| -rw-r--r-- | Minecraft.World/LevelChunk.cpp | 25 |
1 files changed, 25 insertions, 0 deletions
diff --git a/Minecraft.World/LevelChunk.cpp b/Minecraft.World/LevelChunk.cpp index 29308e29..584e3df1 100644 --- a/Minecraft.World/LevelChunk.cpp +++ b/Minecraft.World/LevelChunk.cpp @@ -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) { @@ -1431,6 +1455,7 @@ void LevelChunk::load() { ent->onLoadedFromSave(); addEntity(ent); + addRidingEntities(ent, teTag); } } } |
