Fix portal cache key to use chunk coordinates

This commit is contained in:
Revela
2026-03-11 22:12:03 -05:00
parent 1036b7368e
commit 0631aefec2
+10 -1
View File
@@ -93,7 +93,7 @@ bool PortalForcer::findPortal(shared_ptr<Entity> e, double xOriginal, double yOr
int xc = Mth::floor(e->x); int xc = Mth::floor(e->x);
int zc = Mth::floor(e->z); int zc = Mth::floor(e->z);
long hash = ChunkPos::hashCode(xc, zc); long hash = ChunkPos::hashCode(xc >> 4, zc >> 4);
bool updateCache = true; bool updateCache = true;
auto it = cachedPortals.find(hash); auto it = cachedPortals.find(hash);
@@ -147,10 +147,19 @@ bool PortalForcer::findPortal(shared_ptr<Entity> e, double xOriginal, double yOr
int z = zTarget; int z = zTarget;
if (updateCache) if (updateCache)
{
auto existing = cachedPortals.find(hash);
if (existing != cachedPortals.end())
{
delete existing->second;
existing->second = new PortalPosition(x, y, z, level->getGameTime());
}
else
{ {
cachedPortals[hash] = new PortalPosition(x, y, z, level->getGameTime()); cachedPortals[hash] = new PortalPosition(x, y, z, level->getGameTime());
cachedPortalKeys.push_back(hash); cachedPortalKeys.push_back(hash);
} }
}
double xt = x + 0.5; double xt = x + 0.5;
double yt = y + 0.5; double yt = y + 0.5;