Skip to content

Commit 889c661

Browse files
committed
Flush region storage if configured for ChunkMap#synchronize
This is just to maintain closer behaviour to Vanilla if mods invoke this function. Tuinity/Moonrise@adddf3c
1 parent b786cbe commit 889c661

2 files changed

Lines changed: 28 additions & 25 deletions

File tree

paper-server/patches/features/0001-Moonrise-optimisation-patches.patch

Lines changed: 26 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -23831,7 +23831,7 @@ index 3a6fb3b46d94e23357be8af241340e3de06b7c7c..a5ce3593e92e6771f3c8df23ba1bf4d7
2383123831
private static final ChunkStep FULL_CHUNK_STEP = ChunkPyramid.GENERATION_PYRAMID.getStepTo(ChunkStatus.FULL);
2383223832
public static final int RADIUS_AROUND_FULL_CHUNK = FULL_CHUNK_STEP.accumulatedDependencies().getRadius();
2383323833
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
23834-
index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73409941ad 100644
23834+
index 8519ad77190ef51acdd940794faf73e292169c63..de59ab95562157cb838ac4273728937e4a180632 100644
2383523835
--- a/net/minecraft/server/level/ChunkMap.java
2383623836
+++ b/net/minecraft/server/level/ChunkMap.java
2383723837
@@ -108,7 +108,7 @@ import org.apache.commons.lang3.mutable.MutableBoolean;
@@ -24272,7 +24272,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2427224272
}
2427324273

2427424274
private ChunkAccess handleChunkLoadFailure(Throwable exception, ChunkPos chunkPos) {
24275-
@@ -665,230 +448,134 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24275+
@@ -665,230 +448,137 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2427624276

2427724277
@Override
2427824278
public GenerationChunkHolder acquireGeneration(long chunkPos) {
@@ -24529,8 +24529,8 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2452924529
private static void dropChunk(ServerPlayer player, ChunkPos chunkPos) {
2453024530
- player.connection.chunkSender.dropChunk(player, chunkPos);
2453124531
+ // Paper - rewrite chunk system
24532-
+ }
24533-
+
24532+
}
24533+
2453424534
+ // Paper start - rewrite chunk system
2453524535
+ @Override
2453624536
+ public CompletableFuture<Optional<CompoundTag>> read(final ChunkPos pos) {
@@ -24557,12 +24557,15 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2455724557
+ ca.spottedleaf.moonrise.patches.chunk_system.io.MoonriseRegionFileIO.RegionFileType.CHUNK_DATA
2455824558
+ );
2455924559
+ return null;
24560-
}
24561-
24560+
+ }
24561+
+
2456224562
+ @Override
24563-
+ public CompletableFuture<Void> synchronize(boolean flush) {
24563+
+ public CompletableFuture<Void> synchronize(final boolean flush) {
2456424564
+ try {
2456524565
+ ca.spottedleaf.moonrise.patches.chunk_system.io.MoonriseRegionFileIO.flush(this.level);
24566+
+ if (flush) {
24567+
+ ca.spottedleaf.moonrise.patches.chunk_system.io.MoonriseRegionFileIO.flushRegionStorages(this.level);
24568+
+ }
2456624569
+ return CompletableFuture.completedFuture(null);
2456724570
+ } catch (final Exception ex) {
2456824571
+ return CompletableFuture.failedFuture(ex);
@@ -24573,7 +24576,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2457324576
public @Nullable LevelChunk getChunkToSend(long chunkPos) {
2457424577
ChunkHolder visibleChunkIfPresent = this.getVisibleChunkIfPresent(chunkPos);
2457524578
return visibleChunkIfPresent == null ? null : visibleChunkIfPresent.getChunkToSend();
24576-
@@ -968,7 +655,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24579+
@@ -968,7 +658,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2457724580
return this.read(pos).thenApplyAsync(optional -> optional.map(this::upgradeChunkTag), Util.backgroundExecutor().forName("upgradeChunk"));
2457824581
}
2457924582

@@ -24582,7 +24585,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2458224585
return this.upgradeChunkTag(tag, -1, getChunkDataFixContextTag(this.level.getTypeKey(), this.generator().getTypeNameForDataFixer()), this.level); // CraftBukkit
2458324586
}
2458424587

24585-
@@ -979,23 +666,66 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24588+
@@ -979,23 +669,66 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2458624589
return compoundTag;
2458724590
}
2458824591

@@ -24658,7 +24661,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2465824661
if (chunkHolder != null) {
2465924662
LevelChunk tickingChunk = chunkHolder.getTickingChunk();
2466024663
if (tickingChunk != null) {
24661-
@@ -1011,8 +741,8 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24664+
@@ -1011,8 +744,8 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2466224665
}
2466324666

2466424667
boolean anyPlayerCloseEnoughForSpawning(ChunkPos chunkPos, boolean reducedRange) {
@@ -24669,7 +24672,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2466924672
// Spigot end
2467024673
}
2467124674

24672-
@@ -1036,7 +766,20 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24675+
@@ -1036,7 +769,20 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2467324676
private boolean anyPlayerCloseEnoughForSpawningInternal(ChunkPos chunkPos, boolean reducedRange) {
2467424677
double blockRange; // Paper - use from event
2467524678
// Spigot end
@@ -24691,7 +24694,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2469124694
// Paper start - PlayerNaturallySpawnCreaturesEvent
2469224695
com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent event;
2469324696
blockRange = 16384.0D;
24694-
@@ -1052,26 +795,41 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24697+
@@ -1052,26 +798,41 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2469524698
}
2469624699

2469724700
return false;
@@ -24744,7 +24747,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2474424747
if (player.isSpectator()) {
2474524748
return false;
2474624749
} else {
24747-
@@ -1109,18 +867,20 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24750+
@@ -1109,18 +870,20 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2474824751
this.updatePlayerPos(player);
2474924752
if (!flag) {
2475024753
this.distanceManager.addPlayer(SectionPos.of(player), player);
@@ -24767,7 +24770,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2476724770
}
2476824771
}
2476924772

24770-
@@ -1130,13 +890,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24773+
@@ -1130,13 +893,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2477124774
}
2477224775

2477324776
public void move(ServerPlayer player) {
@@ -24782,15 +24785,15 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2478224785

2478324786
SectionPos lastSectionPos = player.getLastSectionPos();
2478424787
SectionPos sectionPos = SectionPos.of(player);
24785-
@@ -1145,6 +899,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24788+
@@ -1145,6 +902,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2478624789
boolean flag2 = lastSectionPos.asLong() != sectionPos.asLong();
2478724790
if (flag2 || flag != flag1) {
2478824791
this.updatePlayerPos(player);
2478924792
+ ((ca.spottedleaf.moonrise.patches.chunk_tick_iteration.ChunkTickDistanceManager)this.distanceManager).moonrise$updatePlayer(player, lastSectionPos, sectionPos, flag, flag1); // Paper - chunk tick iteration optimisation
2479024793
if (!flag) {
2479124794
this.distanceManager.removePlayer(lastSectionPos, player);
2479224795
}
24793-
@@ -1161,49 +916,29 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24796+
@@ -1161,49 +919,29 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2479424797
this.playerMap.unIgnorePlayer(player);
2479524798
}
2479624799

@@ -24851,7 +24854,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2485124854
}
2485224855

2485324856
public void addEntity(Entity entity) {
24854-
@@ -1227,6 +962,12 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24857+
@@ -1227,6 +965,12 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2485524858
} else {
2485624859
ChunkMap.TrackedEntity trackedEntity = new ChunkMap.TrackedEntity(entity, i, updateInterval, type.trackDeltas());
2485724860
this.entityMap.put(entity.getId(), trackedEntity);
@@ -24864,7 +24867,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2486424867
trackedEntity.updatePlayers(this.level.players());
2486524868
if (entity instanceof ServerPlayer serverPlayer) {
2486624869
this.updatePlayerStatus(serverPlayer, true);
24867-
@@ -1256,12 +997,38 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24870+
@@ -1256,12 +1000,38 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2486824871
if (trackedEntity1 != null) {
2486924872
trackedEntity1.broadcastRemoved();
2487024873
}
@@ -24905,7 +24908,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2490524908

2490624909
List<ServerPlayer> list = Lists.newArrayList();
2490724910
List<ServerPlayer> list1 = this.level.players();
24908-
@@ -1359,17 +1126,11 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24911+
@@ -1359,17 +1129,11 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2490924912
}
2491024913

2491124914
public void waitForLightBeforeSending(ChunkPos chunkPos, int range) {
@@ -24925,7 +24928,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2492524928
LevelChunk chunkToSend = chunkHolder.getChunkToSend();
2492624929
if (chunkToSend != null) {
2492724930
action.accept(chunkToSend);
24928-
@@ -1377,14 +1138,21 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24931+
@@ -1377,14 +1141,21 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2492924932
}
2493024933
}
2493124934

@@ -24949,7 +24952,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2494924952
}
2495024953

2495124954
@Override
24952-
@@ -1398,13 +1166,96 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
24955+
@@ -1398,13 +1169,96 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2495324956
}
2495424957
}
2495524958

@@ -25047,7 +25050,7 @@ index 8519ad77190ef51acdd940794faf73e292169c63..b0b4e5c96498eef48fe0cb2637faed73
2504725050
public TrackedEntity(final Entity entity, final int range, final int updateInterval, final boolean trackDelta) {
2504825051
this.serverEntity = new ServerEntity(ChunkMap.this.level, entity, updateInterval, trackDelta, this, this.seenBy); // Paper
2504925052
this.entity = entity;
25050-
@@ -1514,17 +1365,24 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
25053+
@@ -1514,17 +1368,24 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
2505125054
}
2505225055

2505325056
private int getEffectiveRange() {
@@ -27025,7 +27028,7 @@ index f25d50bcccf9b35ae70f8162c6b2b67fffcd319a..5494b92ab1c3c202a640e483e8a4bcb6
2702527028
}
2702627029

2702727030
diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java
27028-
index b09e6a9fa5fbe9a0d3df615d02109992612b4416..8688d1eb7427b8d07757af84d615781867a34288 100644
27031+
index 09470e7c4238a66be16b3cf8cf93444700cc2508..55d27aa4cff91ea61ff2ab9256acd2cd8694304a 100644
2702927032
--- a/net/minecraft/server/level/ServerPlayer.java
2703027033
+++ b/net/minecraft/server/level/ServerPlayer.java
2703127034
@@ -201,7 +201,7 @@ import net.minecraft.world.scores.criteria.ObjectiveCriteria;

paper-server/patches/features/0013-Fix-entity-tracker-desync-when-new-players-are-added.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,10 +48,10 @@ index 2a86ca1de6920017be6cd4a3a5251e892067f07c..f571ff64ae1007f8f0632febd2dcca70
4848
serverEntity.getLastSentYRot(),
4949
entity.getType(),
5050
diff --git a/net/minecraft/server/level/ChunkMap.java b/net/minecraft/server/level/ChunkMap.java
51-
index b0b4e5c96498eef48fe0cb2637faed73409941ad..dfd7a60192c46f01d245045adf86dec42eec4da7 100644
51+
index de59ab95562157cb838ac4273728937e4a180632..c8ee2be08a7b31db5719f495deb3cc0ae4e91bae 100644
5252
--- a/net/minecraft/server/level/ChunkMap.java
5353
+++ b/net/minecraft/server/level/ChunkMap.java
54-
@@ -1353,6 +1353,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
54+
@@ -1356,6 +1356,7 @@ public class ChunkMap extends SimpleRegionStorage implements ChunkHolder.PlayerP
5555
ChunkMap.this.level.debugSynchronizers().startTrackingEntity(player, this.entity);
5656
}
5757
// Paper end - entity tracking events

0 commit comments

Comments
 (0)