Skip to content

Commit 7fa8870

Browse files
Updated Upstream (Bukkit/CraftBukkit) (#7672)
Upstream has released updates that appear to apply and compile correctly. This update has not been tested by PaperMC and as with ANY update, please do your own testing Bukkit Changes: 7902647 PR-737: Update WorldCreator#generatorSettings docs 67556a5 PR-736: Update README CraftBukkit Changes: 1092219 Java 18 support d53c4fb PR-1039: Use correct ops in GeneratorSettings a567e4a PR-1038: Removed the no longer needed getChunkUnchecked method from ChunkProviderServer. 4ac8fcc SPIGOT-6980: Since 1.18.2, World#isChunkLoaded returned false for chunks that have just been loaded (e.g. inside ChunkLoadEvent). e6cc7c7 PR-1035: Update README 3ec79a2 SPIGOT-5140: Call EntityChangeBlockEvent when a ChorusFlower is destroyed by a projectile
1 parent e2f743d commit 7fa8870

File tree

32 files changed

+148
-188
lines changed

32 files changed

+148
-188
lines changed

patches/server/0004-Paper-config-files.patch

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -661,10 +661,10 @@ index 882fe0e84c0607c69ad729aa7732f41554975c82..ebd94265f56ecc946ff1834ec0d45673
661661
this.setPvpAllowed(dedicatedserverproperties.pvp);
662662
this.setFlightAllowed(dedicatedserverproperties.allowFlight);
663663
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
664-
index b1a9ac4bb5f5f7b55a722b60994672c6a2f3406d..2015e527044db26bed960b2915b5422a7d7ad0e3 100644
664+
index 081c324b42cea97fce2220aa2c86d02daef7688f..7c034b62dbebbbc4c9c4ceb427b1509fe8f986e3 100644
665665
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
666666
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
667-
@@ -334,6 +334,12 @@ public class ServerChunkCache extends ChunkSource {
667+
@@ -326,6 +326,12 @@ public class ServerChunkCache extends ChunkSource {
668668
}
669669
}
670670

@@ -777,7 +777,7 @@ index 05364e743e5000f1eff292b17bbd19dae58e3dac..e71bc0315f9e4559e2df6a83a3c11f10
777777
+ // Paper end
778778
}
779779
diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java
780-
index b698d6a8d6b59eefd721639b62bfd8bcffcf5c6f..70aa37fe043f56ef1b2f722ca946c4ac2cf4a98b 100644
780+
index e75ff70c52b097af447b7a91ef2c20c08a904d92..fae37b7b353cb7b0f8d4a79407fcc219a3c45b64 100644
781781
--- a/src/main/java/org/bukkit/craftbukkit/Main.java
782782
+++ b/src/main/java/org/bukkit/craftbukkit/Main.java
783783
@@ -129,6 +129,14 @@ public class Main {

patches/server/0005-MC-Dev-fixes.patch

Lines changed: 0 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -345,16 +345,3 @@ index e6b1663d4ccdd3842f711ad7547df8ccf973e4b1..524f3c42964eb83c9109bcc548a1075f
345345
}
346346
}
347347

348-
diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java
349-
index f1aee097318f91d582aa143a77662ec12e812c93..3f46bf0358fd9bb4d0fa41026f138ffd21952bde 100644
350-
--- a/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java
351-
+++ b/src/main/java/net/minecraft/world/level/levelgen/WorldGenSettings.java
352-
@@ -35,7 +35,7 @@ import org.apache.commons.lang3.StringUtils;
353-
import org.slf4j.Logger;
354-
355-
public class WorldGenSettings {
356-
- public static final Codec<WorldGenSettings> CODEC = RecordCodecBuilder.create((instance) -> {
357-
+ public static final Codec<WorldGenSettings> CODEC = RecordCodecBuilder.<WorldGenSettings>create((instance) -> { // Paper - decompile fix
358-
return instance.group(Codec.LONG.fieldOf("seed").stable().forGetter(WorldGenSettings::seed), Codec.BOOL.fieldOf("generate_features").orElse(true).stable().forGetter(WorldGenSettings::generateFeatures), Codec.BOOL.fieldOf("bonus_chest").orElse(false).stable().forGetter(WorldGenSettings::generateBonusChest), RegistryCodecs.dataPackAwareCodec(Registry.LEVEL_STEM_REGISTRY, Lifecycle.stable(), LevelStem.CODEC).xmap(LevelStem::sortMap, Function.identity()).fieldOf("dimensions").forGetter(WorldGenSettings::dimensions), Codec.STRING.optionalFieldOf("legacy_custom_options").stable().forGetter((worldGenSettings) -> {
359-
return worldGenSettings.legacyCustomOptions;
360-
})).apply(instance, instance.stable(WorldGenSettings::new));

patches/server/0007-MC-Utils.patch

Lines changed: 22 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -5052,7 +5052,7 @@ index 868f6799a0e406401eecf18bc939fbdf88f534a2..dd8d14a1b128f801a4e1c811de5990d2
50525052
} catch (Throwable throwable) {
50535053
// Spigot Start
50545054
diff --git a/src/main/java/net/minecraft/server/level/ChunkHolder.java b/src/main/java/net/minecraft/server/level/ChunkHolder.java
5055-
index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81eff0e4358 100644
5055+
index a6dc73ddb58465667b9e227bece32f2952aa2270..e9523a7a3e1c6ee944ba539b952c8f25350bf815 100644
50565056
--- a/src/main/java/net/minecraft/server/level/ChunkHolder.java
50575057
+++ b/src/main/java/net/minecraft/server/level/ChunkHolder.java
50585058
@@ -52,9 +52,9 @@ public class ChunkHolder {
@@ -5077,38 +5077,31 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
50775077
public ChunkHolder(ChunkPos pos, int level, LevelHeightAccessor world, LevelLightEngine lightingProvider, ChunkHolder.LevelChangeListener levelUpdateListener, ChunkHolder.PlayerProvider playersWatchingChunkProvider) {
50785078
this.futures = new AtomicReferenceArray(ChunkHolder.CHUNK_STATUSES.size());
50795079
this.fullChunkFuture = ChunkHolder.UNLOADED_LEVEL_CHUNK_FUTURE;
5080-
@@ -93,8 +95,30 @@ public class ChunkHolder {
5080+
@@ -93,8 +95,23 @@ public class ChunkHolder {
50815081
this.queueLevel = this.oldTicketLevel;
50825082
this.setTicketLevel(level);
50835083
this.changedBlocksPerSection = new ShortSet[world.getSectionsCount()];
50845084
+ this.chunkMap = (ChunkMap)playersWatchingChunkProvider; // Paper
5085-
+ }
5086-
+
5087-
+ // Paper start
5088-
+ public LevelChunk getFullChunkUnchecked() {
5089-
+ CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> statusFuture = this.getFutureIfPresentUnchecked(ChunkStatus.FULL);
5090-
+ Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure> either = (Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>) statusFuture.getNow(null);
5091-
+ return (either == null) ? null : (LevelChunk) either.left().orElse(null);
50925085
}
50935086

5094-
+ public ChunkAccess getAvailableChunkNow() {
5087+
+ // Paper start
5088+
+ public @Nullable ChunkAccess getAvailableChunkNow() {
50955089
+ // TODO can we just getStatusFuture(EMPTY)?
50965090
+ for (ChunkStatus curr = ChunkStatus.FULL, next = curr.getParent(); curr != next; curr = next, next = next.getParent()) {
50975091
+ CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> future = this.getFutureIfPresentUnchecked(curr);
50985092
+ Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure> either = future.getNow(null);
5099-
+ if (either == null || !either.left().isPresent()) {
5093+
+ if (either == null || either.left().isEmpty()) {
51005094
+ continue;
51015095
+ }
51025096
+ return either.left().get();
51035097
+ }
51045098
+ return null;
51055099
+ }
51065100
+ // Paper end
5107-
+
5108-
public CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> getFutureIfPresentUnchecked(ChunkStatus leastStatus) {
5109-
CompletableFuture<Either<ChunkAccess, ChunkHolder.ChunkLoadingFailure>> completablefuture = (CompletableFuture) this.futures.get(leastStatus.getIndex());
5110-
5111-
@@ -105,20 +129,20 @@ public class ChunkHolder {
5101+
// CraftBukkit start
5102+
public LevelChunk getFullChunkNow() {
5103+
// Note: We use the oldTicketLevel for isLoaded checks.
5104+
@@ -119,20 +136,20 @@ public class ChunkHolder {
51125105
return ChunkHolder.getStatus(this.ticketLevel).isOrAfter(leastStatus) ? this.getFutureIfPresentUnchecked(leastStatus) : ChunkHolder.UNLOADED_CHUNK_FUTURE;
51135106
}
51145107

@@ -5133,7 +5126,7 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
51335126
CompletableFuture<Either<LevelChunk, ChunkHolder.ChunkLoadingFailure>> completablefuture = this.getTickingChunkFuture();
51345127
Either<LevelChunk, ChunkHolder.ChunkLoadingFailure> either = (Either) completablefuture.getNow(null); // CraftBukkit - decompile error
51355128

5136-
@@ -126,7 +150,7 @@ public class ChunkHolder {
5129+
@@ -140,7 +157,7 @@ public class ChunkHolder {
51375130
}
51385131

51395132
@Nullable
@@ -5142,7 +5135,7 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
51425135
CompletableFuture<Either<LevelChunk, ChunkHolder.ChunkLoadingFailure>> completablefuture = this.getFullChunkFuture();
51435136
Either<LevelChunk, ChunkHolder.ChunkLoadingFailure> either = (Either) completablefuture.getNow(null); // CraftBukkit - decompile error
51445137

5145-
@@ -147,6 +171,21 @@ public class ChunkHolder {
5138+
@@ -161,6 +178,21 @@ public class ChunkHolder {
51465139
return null;
51475140
}
51485141

@@ -5164,7 +5157,7 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
51645157
@Nullable
51655158
public ChunkAccess getLastAvailable() {
51665159
for (int i = ChunkHolder.CHUNK_STATUSES.size() - 1; i >= 0; --i) {
5167-
@@ -165,7 +204,7 @@ public class ChunkHolder {
5160+
@@ -179,7 +211,7 @@ public class ChunkHolder {
51685161
return null;
51695162
}
51705163

@@ -5173,7 +5166,7 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
51735166
return this.chunkToSave;
51745167
}
51755168

5176-
@@ -342,11 +381,11 @@ public class ChunkHolder {
5169+
@@ -356,11 +388,11 @@ public class ChunkHolder {
51775170
return ChunkHolder.getFullChunkStatus(this.ticketLevel);
51785171
}
51795172

@@ -5187,7 +5180,7 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
51875180
return this.ticketLevel;
51885181
}
51895182

5190-
@@ -435,14 +474,27 @@ public class ChunkHolder {
5183+
@@ -449,14 +481,27 @@ public class ChunkHolder {
51915184

51925185
this.wasAccessibleSinceLastSave |= flag3;
51935186
if (!flag2 && flag3) {
@@ -5215,7 +5208,7 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
52155208
}
52165209

52175210
boolean flag4 = playerchunk_state.isOrAfter(ChunkHolder.FullChunkStatus.TICKING);
5218-
@@ -451,12 +503,29 @@ public class ChunkHolder {
5211+
@@ -465,12 +510,29 @@ public class ChunkHolder {
52195212
if (!flag4 && flag5) {
52205213
this.tickingChunkFuture = chunkStorage.prepareTickingChunk(this);
52215214
this.scheduleFullChunkPromotion(chunkStorage, this.tickingChunkFuture, executor, ChunkHolder.FullChunkStatus.TICKING);
@@ -5238,15 +5231,15 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
52385231
+ this.tickingChunkFuture.complete(ChunkHolder.UNLOADED_LEVEL_CHUNK); this.isTickingReady = false; // Paper - cache chunk ticking stage
52395232
this.tickingChunkFuture = ChunkHolder.UNLOADED_LEVEL_CHUNK_FUTURE;
52405233
+ // Paper start - ticking chunk set
5241-
+ LevelChunk chunkIfCached = this.getFullChunkUnchecked();
5234+
+ LevelChunk chunkIfCached = this.getFullChunkNowUnchecked();
52425235
+ if (chunkIfCached != null) {
52435236
+ this.chunkMap.level.getChunkSource().tickingChunks.remove(chunkIfCached);
52445237
+ }
52455238
+ // Paper end - ticking chunk set
52465239
}
52475240

52485241
boolean flag6 = playerchunk_state.isOrAfter(ChunkHolder.FullChunkStatus.ENTITY_TICKING);
5249-
@@ -469,12 +538,28 @@ public class ChunkHolder {
5242+
@@ -483,12 +545,28 @@ public class ChunkHolder {
52505243

52515244
this.entityTickingChunkFuture = chunkStorage.prepareEntityTickingChunk(this.pos);
52525245
this.scheduleFullChunkPromotion(chunkStorage, this.entityTickingChunkFuture, executor, ChunkHolder.FullChunkStatus.ENTITY_TICKING);
@@ -5268,15 +5261,15 @@ index d1a053dbade32fde28784c79659d9b150c90ed93..2b936c67265f3c672d3b623e6aedd81e
52685261
+ this.entityTickingChunkFuture.complete(ChunkHolder.UNLOADED_LEVEL_CHUNK); this.isEntityTickingReady = false; // Paper - cache chunk ticking stage
52695262
this.entityTickingChunkFuture = ChunkHolder.UNLOADED_LEVEL_CHUNK_FUTURE;
52705263
+ // Paper start - entity ticking chunk set
5271-
+ LevelChunk chunkIfCached = this.getFullChunkUnchecked();
5264+
+ LevelChunk chunkIfCached = this.getFullChunkNowUnchecked();
52725265
+ if (chunkIfCached != null) {
52735266
+ this.chunkMap.level.getChunkSource().entityTickingChunks.remove(chunkIfCached);
52745267
+ }
52755268
+ // Paper end - entity ticking chunk set
52765269
}
52775270

52785271
if (!playerchunk_state1.isOrAfter(playerchunk_state)) {
5279-
@@ -590,4 +675,18 @@ public class ChunkHolder {
5272+
@@ -604,4 +682,18 @@ public class ChunkHolder {
52805273
}
52815274
};
52825275
}
@@ -5496,7 +5489,7 @@ index 6c98676827ceb6999f340fa2b06a0b3e1cb4cae2..f08089b8672454acf8c2309e850466b3
54965489

54975490
while (objectiterator.hasNext()) {
54985491
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
5499-
index 2015e527044db26bed960b2915b5422a7d7ad0e3..94d717f43336ace9375409b48d1e0e4291072656 100644
5492+
index 7c034b62dbebbbc4c9c4ceb427b1509fe8f986e3..e4d0035bbf17008642cdcc0e1dca5bae832bbbaa 100644
55005493
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
55015494
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
55025495
@@ -49,6 +49,7 @@ import net.minecraft.world.level.storage.LevelStorageSource;
@@ -5842,7 +5835,7 @@ index 2015e527044db26bed960b2915b5422a7d7ad0e3..94d717f43336ace9375409b48d1e0e42
58425835

58435836
public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureManager structureManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier<DimensionDataStorage> persistentStateManagerFactory) {
58445837
this.level = world;
5845-
@@ -127,6 +456,49 @@ public class ServerChunkCache extends ChunkSource {
5838+
@@ -119,6 +448,49 @@ public class ServerChunkCache extends ChunkSource {
58465839
this.lastChunk[0] = chunk;
58475840
}
58485841

@@ -5859,7 +5852,7 @@ index 2015e527044db26bed960b2915b5422a7d7ad0e3..94d717f43336ace9375409b48d1e0e42
58595852
+ return null;
58605853
+ }
58615854
+
5862-
+ return playerChunk.getFullChunkUnchecked();
5855+
+ return playerChunk.getFullChunkNowUnchecked();
58635856
+ }
58645857
+
58655858
+ @Nullable

patches/server/0012-Timings-v2.patch

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1118,10 +1118,10 @@ index d9202f7a5b17d8a5c063c8aba4ce22a53d8f59af..f9e9e00855627b78e8ff018bf6d52c97
11181118

11191119
}
11201120
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
1121-
index 94d717f43336ace9375409b48d1e0e4291072656..3bbee4d08f4125a6499c0a8790c6bda6935e5ccc 100644
1121+
index e4d0035bbf17008642cdcc0e1dca5bae832bbbaa..d198303d4d0cff34156c00176ec2f3f2ad42ada4 100644
11221122
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
11231123
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
1124-
@@ -524,13 +524,15 @@ public class ServerChunkCache extends ChunkSource {
1124+
@@ -516,13 +516,15 @@ public class ServerChunkCache extends ChunkSource {
11251125
}
11261126

11271127
gameprofilerfiller.incrementCounter("getChunkCacheMiss");
@@ -1139,7 +1139,7 @@ index 94d717f43336ace9375409b48d1e0e4291072656..3bbee4d08f4125a6499c0a8790c6bda6
11391139
ichunkaccess = (ChunkAccess) ((Either) completablefuture.join()).map((ichunkaccess1) -> {
11401140
return ichunkaccess1;
11411141
}, (playerchunk_failure) -> {
1142-
@@ -728,7 +730,9 @@ public class ServerChunkCache extends ChunkSource {
1142+
@@ -720,7 +722,9 @@ public class ServerChunkCache extends ChunkSource {
11431143

11441144
public void save(boolean flush) {
11451145
this.runDistanceManagerUpdates();
@@ -1149,7 +1149,7 @@ index 94d717f43336ace9375409b48d1e0e4291072656..3bbee4d08f4125a6499c0a8790c6bda6
11491149
}
11501150

11511151
@Override
1152-
@@ -767,7 +771,9 @@ public class ServerChunkCache extends ChunkSource {
1152+
@@ -759,7 +763,9 @@ public class ServerChunkCache extends ChunkSource {
11531153
this.level.timings.doChunkMap.stopTiming(); // Spigot
11541154
this.level.getProfiler().popPush("chunks");
11551155
if (tickChunks) {
@@ -1159,7 +1159,7 @@ index 94d717f43336ace9375409b48d1e0e4291072656..3bbee4d08f4125a6499c0a8790c6bda6
11591159
}
11601160

11611161
this.level.timings.doChunkUnload.startTiming(); // Spigot
1162-
@@ -796,13 +802,16 @@ public class ServerChunkCache extends ChunkSource {
1162+
@@ -788,13 +794,16 @@ public class ServerChunkCache extends ChunkSource {
11631163
boolean flag1 = level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && worlddata.getGameTime() % level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit
11641164

11651165
gameprofilerfiller.push("naturalSpawnCount");
@@ -1176,7 +1176,7 @@ index 94d717f43336ace9375409b48d1e0e4291072656..3bbee4d08f4125a6499c0a8790c6bda6
11761176

11771177
while (iterator.hasNext()) {
11781178
ChunkHolder playerchunk = (ChunkHolder) iterator.next();
1179-
@@ -831,27 +840,27 @@ public class ServerChunkCache extends ChunkSource {
1179+
@@ -823,27 +832,27 @@ public class ServerChunkCache extends ChunkSource {
11801180
}
11811181

11821182
if (this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) {

patches/server/0168-PlayerNaturallySpawnCreaturesEvent.patch

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -40,10 +40,10 @@ index f5cf71258732aa040443eb82e09ab28f130e4c79..81eb73e9fde37e3b196bd899ecd4d614
4040

4141
return true;
4242
diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
43-
index 3bbee4d08f4125a6499c0a8790c6bda6935e5ccc..efb735f2cf0d232db83ade7332250e455c276bea 100644
43+
index d198303d4d0cff34156c00176ec2f3f2ad42ada4..f2d92cd125cbc1bd6fdab774e7002d6b7eda29fc 100644
4444
--- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java
4545
+++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java
46-
@@ -826,6 +826,15 @@ public class ServerChunkCache extends ChunkSource {
46+
@@ -818,6 +818,15 @@ public class ServerChunkCache extends ChunkSource {
4747
boolean flag2 = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit
4848

4949
Collections.shuffle(list);

0 commit comments

Comments
 (0)