mirror of
https://github.com/PaperMC/Paper.git
synced 2025-03-27 17:00:34 +01:00
Add back fix swamp hut deadlock patch
This commit is contained in:
parent
a6bc17b8bb
commit
7a165c9c5d
41 changed files with 63 additions and 57 deletions
patches
removed/1.19
server
0863-Fix-swamp-hut-cat-generation-deadlock.patch0864-Don-t-allow-vehicle-movement-from-players-while-tele.patch0865-Implement-getComputedBiome-API.patch0866-Make-some-itemstacks-nonnull.patch0867-Add-debug-for-invalid-GameProfiles-on-skull-blocks-i.patch0868-Implement-enchantWithLevels-API.patch0869-Fix-saving-in-unloadWorld.patch0870-Buffer-OOB-setBlock-calls.patch0871-Add-TameableDeathMessageEvent.patch0872-Fix-new-block-data-for-EntityChangeBlockEvent-when-s.patch0873-fix-player-loottables-running-when-mob-loot-gamerule.patch0874-Ensure-entity-passenger-world-matches-ridden-entity.patch0875-Guard-against-invalid-entity-positions.patch0876-cache-resource-keys.patch0877-Allow-to-change-the-podium-for-the-EnderDragon.patch0878-Fix-NBT-pieces-overriding-a-block-entity-during-worl.patch0879-Fix-StructureGrowEvent-species-for-RED_MUSHROOM.patch0880-Prevent-tile-entity-copies-loading-chunks.patch0881-Use-username-instead-of-display-name-in-PlayerList-g.patch0882-Fix-slime-spawners-not-spawning-outside-slime-chunks.patch0883-Pass-ServerLevel-for-gamerule-callbacks.patch0884-Add-pre-unbreaking-amount-to-PlayerItemDamageEvent.patch0885-WorldCreator-keepSpawnLoaded.patch0886-Fix-NPE-for-BlockDataMeta-getBlockData.patch0887-Trigger-bee_nest_destroyed-trigger-in-the-correct-pl.patch0888-Add-EntityDyeEvent-and-CollarColorable-interface.patch0889-Fire-CauldronLevelChange-on-initial-fill.patch0890-fix-powder-snow-cauldrons-not-turning-to-water.patch0891-Sign-cleanup-filtering.patch0892-Add-PlayerStopUsingItemEvent.patch0893-FallingBlock-auto-expire-setting.patch0894-Don-t-tick-markers.patch0895-Do-not-accept-invalid-client-settings.patch0896-Add-support-for-Proxy-Protocol.patch0897-Fix-OfflinePlayer-getBedSpawnLocation.patch0898-Fix-FurnaceInventory-for-smokers-and-blast-furnaces.patch0899-Sanitize-Sent-BlockEntity-NBT.patch0900-Prevent-entity-loading-causing-async-lookups.patch0901-Disable-component-selector-resolving-in-books-by-def.patch0902-Throw-exception-on-world-create-while-being-ticked.patch
|
@ -1,56 +0,0 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||
Date: Sat, 12 Mar 2022 06:31:13 -0800
|
||||
Subject: [PATCH] Fix swamp hut cat generation deadlock
|
||||
|
||||
The worldgen thread will attempt to get structure references
|
||||
via the world's getChunkAt method, which is fine if the gen is
|
||||
not cancelled - but if the chunk was unloaded, the call will block
|
||||
indefinitely. Instead of using the world state, we use the already
|
||||
supplied generatoraccess which will always have the chunk available.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
index 5f7c394f9cc178c9cb06c90b91296b979d61239b..e4eac546836b73b5e9c8fd68ca0d32c01148313e 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
@@ -392,7 +392,7 @@ public class Cat extends TamableAnimal {
|
||||
Registry<ConfiguredStructureFeature<?, ?>> iregistry = worldserver1.registryAccess().registryOrThrow(Registry.CONFIGURED_STRUCTURE_FEATURE_REGISTRY);
|
||||
|
||||
if (ChunkGenerator.allConfigurations(iregistry, StructureFeature.SWAMP_HUT).anyMatch((structurefeature) -> {
|
||||
- return worldserver1.structureFeatureManager().getStructureWithPieceAt(this.blockPosition(), structurefeature).isValid();
|
||||
+ return worldserver1.structureFeatureManager().getStructureWithPieceAt(this.blockPosition(), structurefeature, world).isValid(); // Paper - fix deadlock
|
||||
})) {
|
||||
this.setCatType(10);
|
||||
this.setPersistenceRequired();
|
||||
diff --git a/src/main/java/net/minecraft/world/level/StructureFeatureManager.java b/src/main/java/net/minecraft/world/level/StructureFeatureManager.java
|
||||
index 2825975e5b33ea13f199008c7a4abc72ebf990b3..56c4f849d92b38537602fd77e481ee60a25bc84b 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/StructureFeatureManager.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/StructureFeatureManager.java
|
||||
@@ -56,7 +56,12 @@ public class StructureFeatureManager {
|
||||
}
|
||||
|
||||
public List<StructureStart> startsForFeature(SectionPos sectionPos, ConfiguredStructureFeature<?, ?> configuredStructureFeature) {
|
||||
- LongSet longSet = this.level.getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES).getReferencesForFeature(configuredStructureFeature);
|
||||
+ // Paper start - add world option
|
||||
+ return this.startsForFeature(sectionPos, configuredStructureFeature, (ServerLevelAccessor)null);
|
||||
+ }
|
||||
+ public List<StructureStart> startsForFeature(SectionPos sectionPos, ConfiguredStructureFeature<?, ?> configuredStructureFeature, ServerLevelAccessor world) {
|
||||
+ LongSet longSet = (world == null ? this.level : world).getChunk(sectionPos.x(), sectionPos.z(), ChunkStatus.STRUCTURE_REFERENCES).getReferencesForFeature(configuredStructureFeature);
|
||||
+ // Paper end - add world option
|
||||
ImmutableList.Builder<StructureStart> builder = ImmutableList.builder();
|
||||
this.fillStartsForFeature(configuredStructureFeature, longSet, builder::add);
|
||||
return builder.build();
|
||||
@@ -106,7 +111,12 @@ public class StructureFeatureManager {
|
||||
}
|
||||
|
||||
public StructureStart getStructureWithPieceAt(BlockPos pos, ConfiguredStructureFeature<?, ?> configuredStructureFeature) {
|
||||
- for(StructureStart structureStart : this.startsForFeature(SectionPos.of(pos), configuredStructureFeature)) {
|
||||
+ // Paper start - add world option
|
||||
+ return this.getStructureWithPieceAt(pos, configuredStructureFeature, (ServerLevelAccessor)null);
|
||||
+ }
|
||||
+ public StructureStart getStructureWithPieceAt(BlockPos pos, ConfiguredStructureFeature<?, ?> configuredStructureFeature, ServerLevelAccessor world) {
|
||||
+ // Paper end - add world option
|
||||
+ for(StructureStart structureStart : this.startsForFeature(SectionPos.of(pos), configuredStructureFeature, world)) { // Paper - add world option
|
||||
if (this.structureHasPieceAt(pos, structureStart)) {
|
||||
return structureStart;
|
||||
}
|
|
@ -0,0 +1,62 @@
|
|||
From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001
|
||||
From: Spottedleaf <Spottedleaf@users.noreply.github.com>
|
||||
Date: Sat, 12 Mar 2022 06:31:13 -0800
|
||||
Subject: [PATCH] Fix swamp hut cat generation deadlock
|
||||
|
||||
The worldgen thread will attempt to get structure references
|
||||
via the world's getChunkAt method, which is fine if the gen is
|
||||
not cancelled - but if the chunk was unloaded, the call will block
|
||||
indefinitely. Instead of using the world state, we use the already
|
||||
supplied ServerLevelAccessor which will always have the chunk available.
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
index 5ad968a2f1add27da0d6a858e683d5d771128092..e44352857272a2a4027c67bd25a28a9498b7bb49 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
@@ -361,7 +361,7 @@ public class Cat extends TamableAnimal {
|
||||
});
|
||||
ServerLevel worldserver = world.getLevel();
|
||||
|
||||
- if (worldserver.structureManager().getStructureWithPieceAt(this.blockPosition(), StructureTags.CATS_SPAWN_AS_BLACK).isValid()) {
|
||||
+ if (worldserver.structureManager().getStructureWithPieceAt(this.blockPosition(), StructureTags.CATS_SPAWN_AS_BLACK, world).isValid()) { // Paper - fix deadlock
|
||||
this.setCatVariant(CatVariant.ALL_BLACK);
|
||||
this.setPersistenceRequired();
|
||||
}
|
||||
diff --git a/src/main/java/net/minecraft/world/level/StructureManager.java b/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
index 21afcbc71fdb10994f2f3451f5b06e4bb75c60c7..bca1e39da66a889caf92c28b6348623a440e1c7f 100644
|
||||
--- a/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
+++ b/src/main/java/net/minecraft/world/level/StructureManager.java
|
||||
@@ -43,7 +43,12 @@ public class StructureManager {
|
||||
}
|
||||
|
||||
public List<StructureStart> startsForStructure(ChunkPos chunkPos, Predicate<Structure> predicate) {
|
||||
- Map<Structure, LongSet> map = this.level.getChunk(chunkPos.x, chunkPos.z, ChunkStatus.STRUCTURE_REFERENCES).getAllReferences();
|
||||
+ // Paper start
|
||||
+ return this.startsForStructure(chunkPos, predicate, null);
|
||||
+ }
|
||||
+ public List<StructureStart> startsForStructure(ChunkPos chunkPos, Predicate<Structure> predicate, @Nullable ServerLevelAccessor levelAccessor) {
|
||||
+ // Paper end
|
||||
+ Map<Structure, LongSet> map = (levelAccessor == null ? this.level : levelAccessor).getChunk(chunkPos.x, chunkPos.z, ChunkStatus.STRUCTURE_REFERENCES).getAllReferences();
|
||||
ImmutableList.Builder<StructureStart> builder = ImmutableList.builder();
|
||||
|
||||
for(Map.Entry<Structure, LongSet> entry : map.entrySet()) {
|
||||
@@ -107,13 +112,18 @@ public class StructureManager {
|
||||
}
|
||||
|
||||
public StructureStart getStructureWithPieceAt(BlockPos pos, TagKey<Structure> structureTag) {
|
||||
+ // Paper start
|
||||
+ return this.getStructureWithPieceAt(pos, structureTag, null);
|
||||
+ }
|
||||
+ public StructureStart getStructureWithPieceAt(BlockPos pos, TagKey<Structure> structureTag, @Nullable ServerLevelAccessor levelAccessor) {
|
||||
+ // Paper end
|
||||
Registry<Structure> registry = this.registryAccess().registryOrThrow(Registry.STRUCTURE_REGISTRY);
|
||||
|
||||
for(StructureStart structureStart : this.startsForStructure(new ChunkPos(pos), (structure) -> {
|
||||
return registry.getHolder(registry.getId(structure)).map((holder) -> {
|
||||
return holder.is(structureTag);
|
||||
}).orElse(false);
|
||||
- })) {
|
||||
+ }, levelAccessor)) { // Paper
|
||||
if (this.structureHasPieceAt(pos, structureStart)) {
|
||||
return structureStart;
|
||||
}
|
|
@ -5,7 +5,7 @@ Subject: [PATCH] Add EntityDyeEvent and CollarColorable interface
|
|||
|
||||
|
||||
diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
index 5ad968a2f1add27da0d6a858e683d5d771128092..4e42bcb48c75c816e89e652c898242a9bd8c9d5a 100644
|
||||
index e44352857272a2a4027c67bd25a28a9498b7bb49..ab86bfdaebe9b8791f0cfa6e0c61f80c8f891a93 100644
|
||||
--- a/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
+++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java
|
||||
@@ -399,6 +399,13 @@ public class Cat extends TamableAnimal {
|
Loading…
Add table
Reference in a new issue