From 89961bad9471522545cf653d772dc47c97112ae9 Mon Sep 17 00:00:00 2001 From: Spottedleaf Date: Fri, 21 Jun 2024 11:57:03 -0700 Subject: [PATCH] Fix unload queue storing chunks in wrong sections The unload queue stored the chunks in the same section as the chunk coordinate, when it needed to apply the unload shift. Additionally, change the default region shift to the ticket propagator shift as there is no benefit to using a low region shift since no regionizing is occuring. This makes the unload queue shift 6, which should reduce the number of sections to deal with while processing unloads. --- ...Chunk-System-Starlight-from-Moonrise.patch | 26 +++++++++++-------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/patches/server/Chunk-System-Starlight-from-Moonrise.patch b/patches/server/Chunk-System-Starlight-from-Moonrise.patch index 67f5f41e4..4cc98a33f 100644 --- a/patches/server/Chunk-System-Starlight-from-Moonrise.patch +++ b/patches/server/Chunk-System-Starlight-from-Moonrise.patch @@ -8627,12 +8627,13 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + final int shift = this.coordinateShift; + final int sectionX = chunkX >> shift; + final int sectionZ = chunkZ >> shift; ++ final long sectionKey = CoordinateUtils.getChunkKey(sectionX, sectionZ); + final long chunkKey = CoordinateUtils.getChunkKey(chunkX, chunkZ); + -+ UnloadSection section = this.unloadSections.get(chunkKey); ++ UnloadSection section = this.unloadSections.get(sectionKey); + if (section == null) { + section = new UnloadSection(this.orderGenerator.getAndIncrement()); -+ this.unloadSections.put(chunkKey, section); ++ this.unloadSections.put(sectionKey, section); + } + + return section.chunks.add(chunkKey); @@ -8644,9 +8645,10 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + final int shift = this.coordinateShift; + final int sectionX = chunkX >> shift; + final int sectionZ = chunkZ >> shift; ++ final long sectionKey = CoordinateUtils.getChunkKey(sectionX, sectionZ); + final long chunkKey = CoordinateUtils.getChunkKey(chunkX, chunkZ); + -+ final UnloadSection section = this.unloadSections.get(chunkKey); ++ final UnloadSection section = this.unloadSections.get(sectionKey); + + if (section == null) { + return false; @@ -8657,7 +8659,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + } + + if (section.chunks.isEmpty()) { -+ this.unloadSections.remove(chunkKey); ++ this.unloadSections.remove(sectionKey); + } + + return true; @@ -8678,14 +8680,16 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 + sectionJson.add("coordinates", coordinates); + + final UnloadSection actualSection = this.getSectionUnsynchronized(section.sectionX(), section.sectionZ()); -+ for (final LongIterator iterator = actualSection.chunks.clone().iterator(); iterator.hasNext();) { -+ final long coordinate = iterator.nextLong(); ++ if (actualSection != null) { ++ for (final LongIterator iterator = actualSection.chunks.clone().iterator(); iterator.hasNext(); ) { ++ final long coordinate = iterator.nextLong(); + -+ final JsonObject coordinateJson = new JsonObject(); -+ coordinates.add(coordinateJson); ++ final JsonObject coordinateJson = new JsonObject(); ++ coordinates.add(coordinateJson); + -+ coordinateJson.addProperty("chunkX", Integer.valueOf(CoordinateUtils.getChunkX(coordinate))); -+ coordinateJson.addProperty("chunkZ", Integer.valueOf(CoordinateUtils.getChunkZ(coordinate))); ++ coordinateJson.addProperty("chunkX", Integer.valueOf(CoordinateUtils.getChunkX(coordinate))); ++ coordinateJson.addProperty("chunkZ", Integer.valueOf(CoordinateUtils.getChunkZ(coordinate))); ++ } + } + } + @@ -22859,7 +22863,7 @@ index 0000000000000000000000000000000000000000..00000000000000000000000000000000 +public class TickRegions { + + public static int getRegionChunkShift() { -+ return 2; ++ return ca.spottedleaf.moonrise.patches.chunk_system.scheduling.ThreadedTicketLevelPropagator.SECTION_SHIFT; + } + +}