|
1 | 1 | --- a/net/minecraft/server/level/ServerChunkCache.java |
2 | 2 | +++ b/net/minecraft/server/level/ServerChunkCache.java |
3 | | -@@ -66,6 +_,7 @@ |
| 3 | +@@ -65,6 +_,7 @@ |
| 4 | + private final SavedDataStorage savedDataStorage; |
4 | 5 | private final TicketStorage ticketStorage; |
5 | | - private long lastInhabitedUpdate; |
6 | 6 | public boolean spawnEnemies = true; |
7 | 7 | + public boolean spawnFriendlies = true; // Paper - add back spawnFriendlies field |
8 | 8 | private static final int CACHE_SIZE = 4; |
9 | 9 | private final long[] lastChunkPos = new long[4]; |
10 | 10 | private final @Nullable ChunkStatus[] lastChunkStatus = new ChunkStatus[4]; |
11 | | -@@ -74,6 +_,13 @@ |
| 11 | +@@ -73,6 +_,13 @@ |
12 | 12 | private final Set<ChunkHolder> chunkHoldersToBroadcast = new ReferenceOpenHashSet<>(); |
13 | 13 | @VisibleForDebug |
14 | 14 | private NaturalSpawner.@Nullable SpawnState lastSpawnState; |
|
22 | 22 |
|
23 | 23 | public ServerChunkCache( |
24 | 24 | final ServerLevel level, |
25 | | -@@ -86,6 +_,7 @@ |
| 25 | +@@ -85,6 +_,7 @@ |
26 | 26 | final int simulationDistance, |
27 | 27 | final boolean syncWrites, |
28 | 28 | final ChunkStatusUpdateListener chunkStatusListener |
29 | 29 | + , final SavedDataStorage savedDataStorage // Paper - initialize SavedDataStorage earlier |
30 | 30 | ) { |
31 | 31 | this.level = level; |
32 | 32 | this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(level); |
33 | | -@@ -98,7 +_,7 @@ |
| 33 | +@@ -97,7 +_,7 @@ |
34 | 34 | LOGGER.error("Failed to create dimension data storage directory", e); |
35 | 35 | } |
36 | 36 |
|
|
39 | 39 | this.ticketStorage = this.savedDataStorage.computeIfAbsent(TicketStorage.TYPE); |
40 | 40 | this.chunkMap = new ChunkMap( |
41 | 41 | level, |
42 | | -@@ -120,6 +_,64 @@ |
| 42 | +@@ -119,6 +_,64 @@ |
43 | 43 | this.clearCache(); |
44 | 44 | } |
45 | 45 |
|
|
104 | 104 | @Override |
105 | 105 | public ThreadedLevelLightEngine getLightEngine() { |
106 | 106 | return this.lightEngine; |
107 | | -@@ -154,7 +_,7 @@ |
| 107 | +@@ -153,7 +_,7 @@ |
108 | 108 | for (int i = 0; i < 4; i++) { |
109 | 109 | if (pos == this.lastChunkPos[i] && targetStatus == this.lastChunkStatus[i]) { |
110 | 110 | ChunkAccess chunkAccess = this.lastChunk[i]; |
|
113 | 113 | return chunkAccess; |
114 | 114 | } |
115 | 115 | } |
116 | | -@@ -233,7 +_,15 @@ |
| 116 | +@@ -232,7 +_,15 @@ |
117 | 117 | long key = pos.pack(); |
118 | 118 | int targetTicketLevel = ChunkLevel.byStatus(targetStatus); |
119 | 119 | ChunkHolder chunkHolder = this.getVisibleChunkIfPresent(key); |
|
130 | 130 | this.addTicket(new Ticket(TicketType.UNKNOWN, targetTicketLevel), pos); |
131 | 131 | if (this.chunkAbsent(chunkHolder, targetTicketLevel)) { |
132 | 132 | ProfilerFiller profiler = Profiler.get(); |
133 | | -@@ -253,7 +_,7 @@ |
| 133 | +@@ -252,7 +_,7 @@ |
134 | 134 | } |
135 | 135 |
|
136 | 136 | private boolean chunkAbsent(final @Nullable ChunkHolder chunkHolder, final int targetTicketLevel) { |
|
139 | 139 | } |
140 | 140 |
|
141 | 141 | @Override |
142 | | -@@ -307,17 +_,39 @@ |
| 142 | +@@ -306,17 +_,39 @@ |
143 | 143 |
|
144 | 144 | @Override |
145 | 145 | public void close() throws IOException { |
|
181 | 181 | this.ticketStorage.purgeStaleTickets(this.chunkMap); |
182 | 182 | } |
183 | 183 |
|
184 | | -@@ -341,7 +_,7 @@ |
| 184 | +@@ -337,7 +_,7 @@ |
185 | 185 | if (!this.level.isDebug()) { |
186 | 186 | ProfilerFiller profiler = Profiler.get(); |
187 | 187 | profiler.push("pollingChunks"); |
188 | 188 | - if (this.level.tickRateManager().runsNormally()) { |
189 | 189 | + if (this.level.tickRateManager().runsNormally() && this.level.paperConfig().unsupportedSettings.ticking.chunks) { // Paper - option to disable ticking |
190 | 190 | profiler.push("tickingChunks"); |
191 | | - this.tickChunks(profiler, timeDiff); |
| 191 | + this.tickChunks(profiler); |
192 | 192 | profiler.pop(); |
193 | | -@@ -371,12 +_,20 @@ |
| 193 | +@@ -367,12 +_,20 @@ |
194 | 194 | int chunkCount = this.distanceManager.getNaturalSpawnChunkCount(); |
195 | 195 | NaturalSpawner.SpawnState spawnCookie = NaturalSpawner.createState(chunkCount, this.level, this::getFullChunk, new LocalMobCapCalculator(this.chunkMap)); |
196 | 196 | this.lastSpawnState = spawnCookie; |
|
215 | 215 | } else { |
216 | 216 | spawningCategories = List.of(); |
217 | 217 | } |
218 | | -@@ -563,7 +_,13 @@ |
| 218 | +@@ -557,7 +_,13 @@ |
219 | 219 |
|
220 | 220 | @Override |
221 | 221 | public void setSpawnSettings(final boolean spawnEnemies) { |
|
229 | 229 | } |
230 | 230 |
|
231 | 231 | public String getChunkDebugData(final ChunkPos pos) { |
232 | | -@@ -630,12 +_,18 @@ |
| 232 | +@@ -624,12 +_,18 @@ |
233 | 233 |
|
234 | 234 | @Override |
235 | 235 | protected boolean pollTask() { |
|
0 commit comments