diff --git a/patches/unapplied/server/0332-offset-item-frame-ticking.patch b/patches/server/0330-offset-item-frame-ticking.patch similarity index 84% rename from patches/unapplied/server/0332-offset-item-frame-ticking.patch rename to patches/server/0330-offset-item-frame-ticking.patch index 982a600c76..d20777b4c1 100644 --- a/patches/unapplied/server/0332-offset-item-frame-ticking.patch +++ b/patches/server/0330-offset-item-frame-ticking.patch @@ -5,10 +5,10 @@ Subject: [PATCH] offset item frame ticking diff --git a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -index 0ac4bd8f16fe21e519079e0f1383f4d3c482555f..2805ebfe4ffe769bcde778a1225b3101c91538d8 100644 +index 1a48108d98f89c4f2485424e6ddfadf152faddf9..334a47b5e0d205c57dfcbb17168cbd3f21d15606 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java +++ b/src/main/java/net/minecraft/world/entity/decoration/HangingEntity.java -@@ -35,7 +35,7 @@ public abstract class HangingEntity extends Entity { +@@ -38,7 +38,7 @@ public abstract class HangingEntity extends Entity { protected static final Predicate HANGING_ENTITY = (entity) -> { return entity instanceof HangingEntity; }; diff --git a/patches/unapplied/server/0333-Fix-MC-158900.patch b/patches/server/0331-Fix-MC-158900.patch similarity index 82% rename from patches/unapplied/server/0333-Fix-MC-158900.patch rename to patches/server/0331-Fix-MC-158900.patch index 963f1cf990..c65a127da8 100644 --- a/patches/unapplied/server/0333-Fix-MC-158900.patch +++ b/patches/server/0331-Fix-MC-158900.patch @@ -7,10 +7,10 @@ The problem was we were checking isExpired() on the entry, but if it was expired at that point, then it would be null. diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index fbed83f8c49267a657a3df1c6e4b42ce2046b052..7b000de3fa232a75cc3737783e4a38025d0d8bde 100644 +index 6ef66a4c040ad9ad33d363f212c70621b260b6c7..a2071ea91515c5ddd2318cc4918328d20dec224e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -606,8 +606,10 @@ public abstract class PlayerList { +@@ -610,8 +610,10 @@ public abstract class PlayerList { Player player = entity.getBukkitEntity(); PlayerLoginEvent event = new PlayerLoginEvent(player, hostname, ((java.net.InetSocketAddress) socketaddress).getAddress(), ((java.net.InetSocketAddress) loginlistener.connection.getRawAddress()).getAddress()); @@ -21,5 +21,5 @@ index fbed83f8c49267a657a3df1c6e4b42ce2046b052..7b000de3fa232a75cc3737783e4a3802 + if (getBans().isBanned(gameprofile) && (gameprofilebanentry = getBans().get(gameprofile)) != null) { + // Paper end - chatmessage = new TranslatableComponent("multiplayer.disconnect.banned.reason", new Object[]{gameprofilebanentry.getReason()}); + ichatmutablecomponent = Component.translatable("multiplayer.disconnect.banned.reason", gameprofilebanentry.getReason()); if (gameprofilebanentry.getExpires() != null) { diff --git a/patches/unapplied/server/0334-Prevent-consuming-the-wrong-itemstack.patch b/patches/server/0332-Prevent-consuming-the-wrong-itemstack.patch similarity index 87% rename from patches/unapplied/server/0334-Prevent-consuming-the-wrong-itemstack.patch rename to patches/server/0332-Prevent-consuming-the-wrong-itemstack.patch index c0768dd23f..333813b1c4 100644 --- a/patches/unapplied/server/0334-Prevent-consuming-the-wrong-itemstack.patch +++ b/patches/server/0332-Prevent-consuming-the-wrong-itemstack.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent consuming the wrong itemstack diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 8f595222d9b797d03558ec060a5f315ccfd369b3..c80c31f7e5c4a5b3f9156ac7b263a6be9456deac 100644 +index 3ea28ff50d409d1d234d17f62207b0585386a607..0da23722a326aa190dca7d610bf3cb5c42dbb7f8 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3564,9 +3564,14 @@ public abstract class LivingEntity extends Entity { +@@ -3596,9 +3596,14 @@ public abstract class LivingEntity extends Entity { } public void startUsingItem(InteractionHand hand) { @@ -24,7 +24,7 @@ index 8f595222d9b797d03558ec060a5f315ccfd369b3..c80c31f7e5c4a5b3f9156ac7b263a6be this.useItem = itemstack; this.useItemRemaining = itemstack.getUseDuration(); if (!this.level.isClientSide) { -@@ -3645,6 +3650,7 @@ public abstract class LivingEntity extends Entity { +@@ -3678,6 +3683,7 @@ public abstract class LivingEntity extends Entity { this.releaseUsingItem(); } else { if (!this.useItem.isEmpty() && this.isUsingItem()) { @@ -32,7 +32,7 @@ index 8f595222d9b797d03558ec060a5f315ccfd369b3..c80c31f7e5c4a5b3f9156ac7b263a6be this.triggerItemUseEffects(this.useItem, 16); // CraftBukkit start - fire PlayerItemConsumeEvent ItemStack itemstack; -@@ -3679,8 +3685,8 @@ public abstract class LivingEntity extends Entity { +@@ -3712,8 +3718,8 @@ public abstract class LivingEntity extends Entity { } this.stopUsingItem(); diff --git a/patches/unapplied/server/0335-Dont-send-unnecessary-sign-update.patch b/patches/server/0333-Dont-send-unnecessary-sign-update.patch similarity index 87% rename from patches/unapplied/server/0335-Dont-send-unnecessary-sign-update.patch rename to patches/server/0333-Dont-send-unnecessary-sign-update.patch index 936cbbdd39..e89dd00d79 100644 --- a/patches/unapplied/server/0335-Dont-send-unnecessary-sign-update.patch +++ b/patches/server/0333-Dont-send-unnecessary-sign-update.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Dont send unnecessary sign update diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c205534209dc1de3b0ff49762361a23d55434742..b37a611c4492a46a72bc7d1d6216efdfed4ff2de 100644 +index c7d85b95c57cd049f5a0c0fbaf06df8183c40684..6c773657094f31d52ed5e5f13726d847786d4d7b 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2888,6 +2888,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser +@@ -3091,6 +3091,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser if (!tileentitysign.isEditable() || !this.player.getUUID().equals(tileentitysign.getPlayerWhoMayEdit())) { ServerGamePacketListenerImpl.LOGGER.warn("Player {} just tried to change non-editable sign", this.player.getName().getString()); diff --git a/patches/unapplied/server/0336-Add-option-to-disable-pillager-patrols.patch b/patches/server/0334-Add-option-to-disable-pillager-patrols.patch similarity index 91% rename from patches/unapplied/server/0336-Add-option-to-disable-pillager-patrols.patch rename to patches/server/0334-Add-option-to-disable-pillager-patrols.patch index 24f8b89eae..b5becb8cf5 100644 --- a/patches/unapplied/server/0336-Add-option-to-disable-pillager-patrols.patch +++ b/patches/server/0334-Add-option-to-disable-pillager-patrols.patch @@ -20,10 +20,10 @@ index b230c79a830375a1d3b9262620f51039c30102ce..50f6eb50a20773bab78e96e9c4cbac79 } diff --git a/src/main/java/net/minecraft/world/level/levelgen/PatrolSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PatrolSpawner.java -index 38bdce99b6be6e0dfc3dcd975af3faa8dbe42f7e..d5a701b2d684bbe18f985adb6bd62e9218d3a0a6 100644 +index 65d9211b812995869e58900a2873583658122312..96765f740eb5704c977be7c037ecf81fbc1c7a92 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PatrolSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PatrolSpawner.java -@@ -24,6 +24,7 @@ public class PatrolSpawner implements CustomSpawner { +@@ -25,6 +25,7 @@ public class PatrolSpawner implements CustomSpawner { @Override public int tick(ServerLevel world, boolean spawnMonsters, boolean spawnAnimals) { diff --git a/patches/unapplied/server/0337-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch b/patches/server/0335-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch similarity index 88% rename from patches/unapplied/server/0337-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch rename to patches/server/0335-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch index bfad17e179..239eac2f01 100644 --- a/patches/unapplied/server/0337-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch +++ b/patches/server/0335-Fix-AssertionError-when-player-hand-set-to-empty-typ.patch @@ -7,10 +7,10 @@ Fixes an AssertionError when setting the player's item in hand to null or a new Fixes GH-2718 diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b37a611c4492a46a72bc7d1d6216efdfed4ff2de..d5ee915958710a65ecaf8f17d3d07e47060b3eae 100644 +index 6c773657094f31d52ed5e5f13726d847786d4d7b..1f90edd5eba696303962523439133d19514ebc32 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1757,6 +1757,10 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser +@@ -1790,6 +1790,10 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Ser this.player.getBukkitEntity().updateInventory(); // SPIGOT-2524 return; } diff --git a/patches/unapplied/server/0338-Flat-bedrock-generator-settings.patch b/patches/server/0336-Flat-bedrock-generator-settings.patch similarity index 73% rename from patches/unapplied/server/0338-Flat-bedrock-generator-settings.patch rename to patches/server/0336-Flat-bedrock-generator-settings.patch index c678f0e883..a12a4d90b4 100644 --- a/patches/unapplied/server/0338-Flat-bedrock-generator-settings.patch +++ b/patches/server/0336-Flat-bedrock-generator-settings.patch @@ -21,10 +21,10 @@ index 50f6eb50a20773bab78e96e9c4cbac79a5893310..68448d9ae6650beabcc62128772c6a18 } diff --git a/src/main/java/net/minecraft/data/worldgen/SurfaceRuleData.java b/src/main/java/net/minecraft/data/worldgen/SurfaceRuleData.java -index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49920bc185 100644 +index 06e1774dfbb667aca69bc30c9675ed472cb5728c..e380a62e44d93c434128a656d509c8892289c66d 100644 --- a/src/main/java/net/minecraft/data/worldgen/SurfaceRuleData.java +++ b/src/main/java/net/minecraft/data/worldgen/SurfaceRuleData.java -@@ -52,6 +52,65 @@ public class SurfaceRuleData { +@@ -53,6 +53,66 @@ public class SurfaceRuleData { return overworldLike(true, false, true); } @@ -33,21 +33,21 @@ index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49 + // isRoof = true if roof, false if floor + public record PaperBedrockConditionSource(net.minecraft.resources.ResourceLocation randomName, VerticalAnchor trueAtAndBelow, VerticalAnchor falseAtAndAbove, boolean isRoof) implements SurfaceRules.ConditionSource { + -+ public static final com.mojang.serialization.Codec CODEC = com.mojang.serialization.codecs.RecordCodecBuilder.create((instance) -> { ++ public static final net.minecraft.util.KeyDispatchDataCodec CODEC = net.minecraft.util.KeyDispatchDataCodec.of(com.mojang.serialization.codecs.RecordCodecBuilder.mapCodec((instance) -> { + return instance.group( + net.minecraft.resources.ResourceLocation.CODEC.fieldOf("random_name").forGetter(PaperBedrockConditionSource::randomName), + VerticalAnchor.CODEC.fieldOf("true_at_and_below").forGetter(PaperBedrockConditionSource::trueAtAndBelow), + VerticalAnchor.CODEC.fieldOf("false_at_and_above").forGetter(PaperBedrockConditionSource::falseAtAndAbove), + com.mojang.serialization.Codec.BOOL.fieldOf("roof").forGetter(PaperBedrockConditionSource::isRoof) + ).apply(instance, PaperBedrockConditionSource::new); -+ }); ++ })); + + public PaperBedrockConditionSource(String randomName, net.minecraft.world.level.levelgen.VerticalAnchor trueAtAndBelow, net.minecraft.world.level.levelgen.VerticalAnchor falseAtAndAbove, boolean invert) { + this(new net.minecraft.resources.ResourceLocation(randomName), trueAtAndBelow, falseAtAndAbove, invert); + } + + @Override -+ public com.mojang.serialization.Codec codec() { ++ public net.minecraft.util.KeyDispatchDataCodeccodec() { + return CODEC; + } + @@ -60,7 +60,8 @@ index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49 + int y = isRoof ? Math.max(falseAtY, trueAtY) - 1 : Math.min(falseAtY, trueAtY) ; + final int i = hasFlatBedrock ? y : trueAtY; + final int j = hasFlatBedrock ? y : falseAtY; -+ final net.minecraft.world.level.levelgen.PositionalRandomFactory positionalRandomFactory = context.system.getOrCreateRandomFactory(this.randomName()); ++ // TODO access transformer for randomState ++ final net.minecraft.world.level.levelgen.PositionalRandomFactory positionalRandomFactory = context.randomState.getOrCreateRandomFactory(this.randomName()); + + class VerticalGradientCondition extends SurfaceRules.LazyYCondition { + VerticalGradientCondition(SurfaceRules.Context context) { @@ -76,7 +77,7 @@ index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49 + return false; + } else { + double d = net.minecraft.util.Mth.map((double) y, (double) i, (double) j, 1.0D, 0.0D); -+ net.minecraft.world.level.levelgen.RandomSource randomSource = positionalRandomFactory.at(this.context.blockX, i, this.context.blockZ); ++ net.minecraft.util.RandomSource randomSource = positionalRandomFactory.at(this.context.blockX, i, this.context.blockZ); + return (double) randomSource.nextFloat() < d; + } + } @@ -90,8 +91,8 @@ index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49 public static SurfaceRules.RuleSource overworldLike(boolean surface, boolean bedrockRoof, boolean bedrockFloor) { SurfaceRules.ConditionSource conditionSource = SurfaceRules.yBlockCheck(VerticalAnchor.absolute(97), 2); SurfaceRules.ConditionSource conditionSource2 = SurfaceRules.yBlockCheck(VerticalAnchor.absolute(256), 0); -@@ -81,11 +140,11 @@ public class SurfaceRuleData { - SurfaceRules.RuleSource ruleSource9 = SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.WOODED_BADLANDS), SurfaceRules.ifTrue(conditionSource, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource15, COARSE_DIRT), SurfaceRules.ifTrue(conditionSource16, COARSE_DIRT), SurfaceRules.ifTrue(conditionSource17, COARSE_DIRT), ruleSource))), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.SWAMP), SurfaceRules.ifTrue(conditionSource5, SurfaceRules.ifTrue(SurfaceRules.not(conditionSource6), SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SWAMP, 0.0D), WATER)))))), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.BADLANDS, Biomes.ERODED_BADLANDS, Biomes.WOODED_BADLANDS), SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource2, ORANGE_TERRACOTTA), SurfaceRules.ifTrue(conditionSource4, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource15, TERRACOTTA), SurfaceRules.ifTrue(conditionSource16, TERRACOTTA), SurfaceRules.ifTrue(conditionSource17, TERRACOTTA), SurfaceRules.bandlands())), SurfaceRules.ifTrue(conditionSource7, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_CEILING, RED_SANDSTONE), RED_SAND)), SurfaceRules.ifTrue(SurfaceRules.not(conditionSource10), ORANGE_TERRACOTTA), SurfaceRules.ifTrue(conditionSource9, WHITE_TERRACOTTA), ruleSource3)), SurfaceRules.ifTrue(conditionSource3, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource6, SurfaceRules.ifTrue(SurfaceRules.not(conditionSource4), ORANGE_TERRACOTTA)), SurfaceRules.bandlands())), SurfaceRules.ifTrue(SurfaceRules.UNDER_FLOOR, SurfaceRules.ifTrue(conditionSource9, WHITE_TERRACOTTA)))), SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.ifTrue(conditionSource7, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource11, SurfaceRules.ifTrue(conditionSource10, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource8, AIR), SurfaceRules.ifTrue(SurfaceRules.temperature(), ICE), WATER))), ruleSource8))), SurfaceRules.ifTrue(conditionSource9, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.ifTrue(conditionSource11, SurfaceRules.ifTrue(conditionSource10, WATER))), SurfaceRules.ifTrue(SurfaceRules.UNDER_FLOOR, ruleSource7), SurfaceRules.ifTrue(conditionSource13, SurfaceRules.ifTrue(SurfaceRules.DEEP_UNDER_FLOOR, SANDSTONE)), SurfaceRules.ifTrue(conditionSource14, SurfaceRules.ifTrue(SurfaceRules.VERY_DEEP_UNDER_FLOOR, SANDSTONE)))), SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.FROZEN_PEAKS, Biomes.JAGGED_PEAKS), STONE), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.WARM_OCEAN, Biomes.LUKEWARM_OCEAN, Biomes.DEEP_LUKEWARM_OCEAN), ruleSource2), ruleSource3))); +@@ -83,11 +143,11 @@ public class SurfaceRuleData { + SurfaceRules.RuleSource ruleSource9 = SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.WOODED_BADLANDS), SurfaceRules.ifTrue(conditionSource, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource16, COARSE_DIRT), SurfaceRules.ifTrue(conditionSource17, COARSE_DIRT), SurfaceRules.ifTrue(conditionSource18, COARSE_DIRT), ruleSource))), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.SWAMP), SurfaceRules.ifTrue(conditionSource6, SurfaceRules.ifTrue(SurfaceRules.not(conditionSource7), SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SWAMP, 0.0D), WATER)))), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.MANGROVE_SWAMP), SurfaceRules.ifTrue(conditionSource5, SurfaceRules.ifTrue(SurfaceRules.not(conditionSource7), SurfaceRules.ifTrue(SurfaceRules.noiseCondition(Noises.SWAMP, 0.0D), WATER)))))), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.BADLANDS, Biomes.ERODED_BADLANDS, Biomes.WOODED_BADLANDS), SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource2, ORANGE_TERRACOTTA), SurfaceRules.ifTrue(conditionSource4, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource16, TERRACOTTA), SurfaceRules.ifTrue(conditionSource17, TERRACOTTA), SurfaceRules.ifTrue(conditionSource18, TERRACOTTA), SurfaceRules.bandlands())), SurfaceRules.ifTrue(conditionSource8, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_CEILING, RED_SANDSTONE), RED_SAND)), SurfaceRules.ifTrue(SurfaceRules.not(conditionSource11), ORANGE_TERRACOTTA), SurfaceRules.ifTrue(conditionSource10, WHITE_TERRACOTTA), ruleSource3)), SurfaceRules.ifTrue(conditionSource3, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource7, SurfaceRules.ifTrue(SurfaceRules.not(conditionSource4), ORANGE_TERRACOTTA)), SurfaceRules.bandlands())), SurfaceRules.ifTrue(SurfaceRules.UNDER_FLOOR, SurfaceRules.ifTrue(conditionSource10, WHITE_TERRACOTTA)))), SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.ifTrue(conditionSource8, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource12, SurfaceRules.ifTrue(conditionSource11, SurfaceRules.sequence(SurfaceRules.ifTrue(conditionSource9, AIR), SurfaceRules.ifTrue(SurfaceRules.temperature(), ICE), WATER))), ruleSource8))), SurfaceRules.ifTrue(conditionSource10, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.ifTrue(conditionSource12, SurfaceRules.ifTrue(conditionSource11, WATER))), SurfaceRules.ifTrue(SurfaceRules.UNDER_FLOOR, ruleSource7), SurfaceRules.ifTrue(conditionSource14, SurfaceRules.ifTrue(SurfaceRules.DEEP_UNDER_FLOOR, SANDSTONE)), SurfaceRules.ifTrue(conditionSource15, SurfaceRules.ifTrue(SurfaceRules.VERY_DEEP_UNDER_FLOOR, SANDSTONE)))), SurfaceRules.ifTrue(SurfaceRules.ON_FLOOR, SurfaceRules.sequence(SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.FROZEN_PEAKS, Biomes.JAGGED_PEAKS), STONE), SurfaceRules.ifTrue(SurfaceRules.isBiome(Biomes.WARM_OCEAN, Biomes.LUKEWARM_OCEAN, Biomes.DEEP_LUKEWARM_OCEAN), ruleSource2), ruleSource3))); ImmutableList.Builder builder = ImmutableList.builder(); if (bedrockRoof) { - builder.add(SurfaceRules.ifTrue(SurfaceRules.not(SurfaceRules.verticalGradient("bedrock_roof", VerticalAnchor.belowTop(5), VerticalAnchor.top())), BEDROCK)); @@ -104,7 +105,7 @@ index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49 } SurfaceRules.RuleSource ruleSource10 = SurfaceRules.ifTrue(SurfaceRules.abovePreliminarySurface(), ruleSource9); -@@ -110,7 +169,7 @@ public class SurfaceRuleData { +@@ -112,7 +172,7 @@ public class SurfaceRuleData { SurfaceRules.ConditionSource conditionSource11 = SurfaceRules.noiseCondition(Noises.NETHER_WART, 1.17D); SurfaceRules.ConditionSource conditionSource12 = SurfaceRules.noiseCondition(Noises.NETHER_STATE_SELECTOR, 0.0D); SurfaceRules.RuleSource ruleSource = SurfaceRules.ifTrue(conditionSource9, SurfaceRules.ifTrue(conditionSource3, SurfaceRules.ifTrue(conditionSource4, GRAVEL))); @@ -114,37 +115,37 @@ index 8e9be92361fbec7346e664dea35a40d26bde00f0..bce04d26335d5fb148fda77a19619e49 public static SurfaceRules.RuleSource end() { diff --git a/src/main/java/net/minecraft/server/Bootstrap.java b/src/main/java/net/minecraft/server/Bootstrap.java -index 248b7ca7dbd75d4eab52fb937cace2b2d9ee3467..ebefbb9d2a29db9e6abb41a2340e44f7b778cb5d 100644 +index 813bf8974d0c565f8f4ba255902276156288c0f1..5fc05273e22a6d15852822cbe7298c06e8a73476 100644 --- a/src/main/java/net/minecraft/server/Bootstrap.java +++ b/src/main/java/net/minecraft/server/Bootstrap.java -@@ -77,6 +77,7 @@ public class Bootstrap { +@@ -75,6 +75,7 @@ public class Bootstrap { + EntitySelectorOptions.bootStrap(); DispenseItemBehavior.bootStrap(); CauldronInteraction.bootStrap(); - ArgumentTypes.bootStrap(); + Registry.register(net.minecraft.core.Registry.CONDITION, new net.minecraft.resources.ResourceLocation("paper", "bedrock_condition_source"), net.minecraft.data.worldgen.SurfaceRuleData.PaperBedrockConditionSource.CODEC); // Paper - register custom flat bedrock thing. TODO is this the best place to do this? Registry.freezeBuiltins(); Bootstrap.wrapStreams(); } diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -index bc7eda79df872d26c5f55e489ba99e7396370e31..51864ad3fbc874332da63254097a1b8048c46ce4 100644 +index 49f88abe2b9833c324d2b93f7ed3094fb5739e07..df1db87d2dd5076fccea6a1ac9271a9d786729bb 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -@@ -233,7 +233,7 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { +@@ -210,7 +210,7 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { @Override - public void buildSurface(WorldGenRegion region, StructureFeatureManager structures, ChunkAccess chunk) { + public void buildSurface(WorldGenRegion region, StructureManager structures, RandomState noiseConfig, ChunkAccess chunk) { if (!SharedConstants.debugVoidTerrain(chunk.getPos())) { - WorldGenerationContext worldgenerationcontext = new WorldGenerationContext(this, region); + WorldGenerationContext worldgenerationcontext = new WorldGenerationContext(this, region, region.getMinecraftWorld()); // Paper - NoiseGeneratorSettings generatorsettingbase = (NoiseGeneratorSettings) this.settings.value(); - NoiseChunk noisechunk = chunk.getOrCreateNoiseChunk(this.router, () -> { - return new Beardifier(structures, chunk); -@@ -255,7 +255,7 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { - return new Beardifier(structureAccessor, chunk); - }, (NoiseGeneratorSettings) this.settings.value(), this.globalFluidPicker, Blender.of(chunkRegion)); + + this.buildSurface(chunk, worldgenerationcontext, noiseConfig, structures, region.getBiomeManager(), region.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY), Blender.of(region)); + } +@@ -238,7 +238,7 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { + return this.createNoiseChunk(ichunkaccess1, structureAccessor, Blender.of(chunkRegion), noiseConfig); + }); Aquifer aquifer = noisechunk.aquifer(); -- CarvingContext carvingcontext = new CarvingContext(this, chunkRegion.registryAccess(), chunk.getHeightAccessorForGeneration(), noisechunk); -+ CarvingContext carvingcontext = new CarvingContext(this, chunkRegion.registryAccess(), chunk.getHeightAccessorForGeneration(), noisechunk, chunkRegion.getMinecraftWorld()); // Paper - CarvingMask carvingmask = ((ProtoChunk) chunk).getOrCreateCarvingMask(generationStep); +- CarvingContext carvingcontext = new CarvingContext(this, chunkRegion.registryAccess(), chunk.getHeightAccessorForGeneration(), noisechunk, noiseConfig, ((NoiseGeneratorSettings) this.settings.value()).surfaceRule()); ++ CarvingContext carvingcontext = new CarvingContext(this, chunkRegion.registryAccess(), chunk.getHeightAccessorForGeneration(), noisechunk, noiseConfig, ((NoiseGeneratorSettings) this.settings.value()).surfaceRule(), chunkRegion.getMinecraftWorld()); // Paper + CarvingMask carvingmask = ((ProtoChunk) chunk).getOrCreateCarvingMask(carverStep); for (int j = -8; j <= 8; ++j) { diff --git a/src/main/java/net/minecraft/world/level/levelgen/WorldGenerationContext.java b/src/main/java/net/minecraft/world/level/levelgen/WorldGenerationContext.java @@ -181,20 +182,20 @@ index b99283c31193e2110f6e3f39c23dbfc2442bab2b..1c9d9ecdafb2bd04348045ba0404da05 + // Paper end } diff --git a/src/main/java/net/minecraft/world/level/levelgen/carver/CarvingContext.java b/src/main/java/net/minecraft/world/level/levelgen/carver/CarvingContext.java -index b4b194751beed05a49ba7ece1dcbaad91ca932c1..32ed5f5485e697de018e48331d9f8d1ee78e00f7 100644 +index a745458ea3581ea91a68c863e3fd0a0292d73a61..f84ee8afe95f912a972e37fbae7a06ecdd3aba06 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/carver/CarvingContext.java +++ b/src/main/java/net/minecraft/world/level/levelgen/carver/CarvingContext.java -@@ -18,8 +18,8 @@ public class CarvingContext extends WorldGenerationContext { - private final RegistryAccess registryAccess; - private final NoiseChunk noiseChunk; +@@ -21,8 +21,8 @@ public class CarvingContext extends WorldGenerationContext { + private final RandomState randomState; + private final SurfaceRules.RuleSource surfaceRule; -- public CarvingContext(NoiseBasedChunkGenerator chunkGenerator, RegistryAccess registryManager, LevelHeightAccessor heightLimitView, NoiseChunk chunkNoiseSampler) { -- super(chunkGenerator, heightLimitView); -+ public CarvingContext(NoiseBasedChunkGenerator chunkGenerator, RegistryAccess registryManager, LevelHeightAccessor heightLimitView, NoiseChunk chunkNoiseSampler, @org.jetbrains.annotations.Nullable net.minecraft.world.level.Level level) { // Paper -+ super(chunkGenerator, heightLimitView, level); // Paper - this.generator = chunkGenerator; +- public CarvingContext(NoiseBasedChunkGenerator noiseChunkGenerator, RegistryAccess registryManager, LevelHeightAccessor heightLimitView, NoiseChunk chunkNoiseSampler, RandomState noiseConfig, SurfaceRules.RuleSource materialRule) { +- super(noiseChunkGenerator, heightLimitView); ++ public CarvingContext(NoiseBasedChunkGenerator noiseChunkGenerator, RegistryAccess registryManager, LevelHeightAccessor heightLimitView, NoiseChunk chunkNoiseSampler, RandomState noiseConfig, SurfaceRules.RuleSource materialRule, @javax.annotation.Nullable net.minecraft.world.level.Level level) { // Paper ++ super(noiseChunkGenerator, heightLimitView, level); // Paper this.registryAccess = registryManager; this.noiseChunk = chunkNoiseSampler; + this.randomState = noiseConfig; diff --git a/src/main/java/net/minecraft/world/level/levelgen/placement/PlacementContext.java b/src/main/java/net/minecraft/world/level/levelgen/placement/PlacementContext.java index 640c2683c842655bbaee8f293f1c2613ef44844e..53d818b0cc602f827d0b907e293515f6810c6792 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/placement/PlacementContext.java diff --git a/patches/unapplied/server/0339-Prevent-sync-chunk-loads-when-villagers-try-to-find-.patch b/patches/server/0337-Prevent-sync-chunk-loads-when-villagers-try-to-find-.patch similarity index 100% rename from patches/unapplied/server/0339-Prevent-sync-chunk-loads-when-villagers-try-to-find-.patch rename to patches/server/0337-Prevent-sync-chunk-loads-when-villagers-try-to-find-.patch diff --git a/patches/unapplied/server/0340-MC-145656-Fix-Follow-Range-Initial-Target.patch b/patches/server/0338-MC-145656-Fix-Follow-Range-Initial-Target.patch similarity index 100% rename from patches/unapplied/server/0340-MC-145656-Fix-Follow-Range-Initial-Target.patch rename to patches/server/0338-MC-145656-Fix-Follow-Range-Initial-Target.patch diff --git a/patches/unapplied/server/0341-Duplicate-UUID-Resolve-Option.patch b/patches/server/0339-Duplicate-UUID-Resolve-Option.patch similarity index 96% rename from patches/unapplied/server/0341-Duplicate-UUID-Resolve-Option.patch rename to patches/server/0339-Duplicate-UUID-Resolve-Option.patch index fa4467c24d..be8f44e81a 100644 --- a/patches/unapplied/server/0341-Duplicate-UUID-Resolve-Option.patch +++ b/patches/server/0339-Duplicate-UUID-Resolve-Option.patch @@ -83,7 +83,7 @@ index 297adb65c486abccd42cdb3b042e651a767c69cf..ce892ab0a2f5c648c1e6f4b3d4332102 private void countAllMobsForSpawning() { countAllMobsForSpawning = getBoolean("count-all-mobs-for-spawning", false); diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index ebb2b7323b4e11749b7b905cc76863a841a74784..5685ffe47fd68230cf30ca9f0e49e471b86eab00 100644 +index ef7ef7fa4116e0def1d73e604ee706deb4c94330..e08245037aeb6fd8a24ae7402b5853933e5eed34 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -1,6 +1,7 @@ @@ -112,7 +112,7 @@ index ebb2b7323b4e11749b7b905cc76863a841a74784..5685ffe47fd68230cf30ca9f0e49e471 import java.util.concurrent.CompletableFuture; import java.util.concurrent.CompletionException; import java.util.concurrent.CompletionStage; -@@ -845,6 +850,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -871,6 +876,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider entity.discard(); needsRemoval = true; } @@ -120,7 +120,7 @@ index ebb2b7323b4e11749b7b905cc76863a841a74784..5685ffe47fd68230cf30ca9f0e49e471 return !needsRemoval; })); // CraftBukkit end -@@ -895,6 +901,43 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -921,6 +927,43 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider }); } @@ -165,7 +165,7 @@ index ebb2b7323b4e11749b7b905cc76863a841a74784..5685ffe47fd68230cf30ca9f0e49e471 ChunkPos chunkcoordintpair = holder.getPos(); CompletableFuture, ChunkHolder.ChunkLoadingFailure>> completablefuture = this.getChunkRangeFuture(chunkcoordintpair, 1, (i) -> { diff --git a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java -index aadadee393332d84fad20644c349107e3ec3a92d..1407f30d467fa78bc207a91da0e6395c0a9ba83d 100644 +index dfd1afc57664dd18c11f8a2547616074ccc55690..e55ec74ac0363def04c2d7bf1b2a9d873388ea70 100644 --- a/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java +++ b/src/main/java/net/minecraft/world/level/entity/PersistentEntitySectionManager.java @@ -78,7 +78,22 @@ public class PersistentEntitySectionManager implements A diff --git a/patches/unapplied/server/0342-Optimize-Hoppers.patch b/patches/server/0340-Optimize-Hoppers.patch similarity index 95% rename from patches/unapplied/server/0342-Optimize-Hoppers.patch rename to patches/server/0340-Optimize-Hoppers.patch index 44fa8f89e5..3ec985121c 100644 --- a/patches/unapplied/server/0342-Optimize-Hoppers.patch +++ b/patches/server/0340-Optimize-Hoppers.patch @@ -35,10 +35,10 @@ index ce892ab0a2f5c648c1e6f4b3d4332102ae7b8be2..4e90cc3970c77d8a488ac8bbcbaacf78 } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 30c10b151503a1710d3adce81640bfbd727eabe0..d2580936b6e8a2e8b23331cc3f563bab3434486e 100644 +index 03a8b247aa1045a70e559e4cda8350a2b7bc5ed4..71bed00743ec7ef026a59fc84f8e9153a32e269a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1451,6 +1451,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper @@ -47,10 +47,10 @@ index 30c10b151503a1710d3adce81640bfbd727eabe0..d2580936b6e8a2e8b23331cc3f563bab this.profiler.push(() -> { return worldserver + " " + worldserver.dimension().location(); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index f1289d7251783c5203828c2b76785dd22c7e2992..b78769cf6a70fb7513ea8d3302cb2dd4bf242752 100644 +index 59723d34be0517d3d747598f275f4f2829c258a3..db8db2ab4c81cbf6eb4f21b8916e487c4e2d51fb 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java -@@ -613,11 +613,12 @@ public final class ItemStack { +@@ -627,11 +627,12 @@ public final class ItemStack { return this.getItem().interactLivingEntity(this, user, entity, hand); } @@ -100,7 +100,7 @@ index a05acf709735b40ca86f978508c63a86065fd405..6a1405a8630e90db3b5a3c9152259ba6 double getLevelY(); diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e82a463aaa 100644 +index d732d00af7870b4b9d7eefe0fc97041b09c12a64..80ca90806bc1e52b6995ba287bc4195617aa9e67 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -3,7 +3,6 @@ package net.minecraft.world.level.block.entity; @@ -111,7 +111,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 import java.util.stream.IntStream; import javax.annotation.Nullable; import net.minecraft.core.BlockPos; -@@ -33,7 +32,6 @@ import net.minecraft.world.level.block.state.BlockState; +@@ -32,7 +31,6 @@ import net.minecraft.world.level.block.state.BlockState; import net.minecraft.world.phys.AABB; import net.minecraft.world.phys.shapes.BooleanOp; import net.minecraft.world.phys.shapes.Shapes; @@ -119,7 +119,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 import org.bukkit.craftbukkit.entity.CraftHumanEntity; import org.bukkit.craftbukkit.inventory.CraftItemStack; import org.bukkit.entity.HumanEntity; -@@ -191,6 +189,158 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -190,6 +188,158 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen return false; } @@ -278,7 +278,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 private static boolean ejectItems(Level world, BlockPos blockposition, BlockState iblockdata, Container iinventory, HopperBlockEntity hopper) { // CraftBukkit Container iinventory1 = HopperBlockEntity.getAttachedContainer(world, blockposition, iblockdata); -@@ -203,6 +353,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -202,6 +352,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen if (HopperBlockEntity.isFullContainer(iinventory1, enumdirection)) { return false; } else { @@ -286,7 +286,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 for (int i = 0; i < iinventory.getContainerSize(); ++i) { if (!iinventory.getItem(i).isEmpty()) { ItemStack itemstack = iinventory.getItem(i).copy(); -@@ -240,7 +391,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -239,7 +390,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } } @@ -295,7 +295,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 } } } -@@ -250,27 +401,68 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -249,27 +400,68 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } private static boolean isFullContainer(Container inventory, Direction direction) { @@ -374,7 +374,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 }); } else { Iterator iterator = HopperBlockEntity.getItemsAtAndAbove(world, hopper).iterator(); -@@ -289,10 +481,12 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -288,10 +480,12 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } } @@ -388,7 +388,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 ItemStack itemstack1 = itemstack.copy(); // ItemStack itemstack2 = addItem(iinventory, ihopper, iinventory.removeItem(i, 1), (EnumDirection) null); // CraftBukkit start - Call event on collection of items from inventories into the hopper -@@ -329,7 +523,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -328,7 +522,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } itemstack1.shrink(origCount - itemstack2.getCount()); // Spigot @@ -397,7 +397,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 } return false; -@@ -338,7 +532,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -337,7 +531,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public static boolean addItem(Container inventory, ItemEntity itemEntity) { boolean flag = false; // CraftBukkit start @@ -406,7 +406,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 itemEntity.level.getCraftServer().getPluginManager().callEvent(event); if (event.isCancelled()) { return false; -@@ -397,7 +591,9 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -396,7 +590,9 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen stack = stack.split(to.getMaxStackSize()); } // Spigot end @@ -416,7 +416,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 stack = ItemStack.EMPTY; flag = true; } else if (HopperBlockEntity.canMergeItems(itemstack1, stack)) { -@@ -448,18 +644,23 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -447,18 +643,23 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } public static List getItemsAtAndAbove(Level world, Hopper hopper) { @@ -445,7 +445,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 Object object = null; BlockPos blockposition = new BlockPos(x, y, z); if ( !world.hasChunkAt( blockposition ) ) return null; // Spigot -@@ -479,7 +680,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -478,7 +679,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } } @@ -455,7 +455,7 @@ index 43b0e6a4c2bcd1d2026add39f64b5993eb614d40..ae680111d01470881e5dc4914cc7e8e8 if (!list.isEmpty()) { diff --git a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java -index f23fff80d07ac7d06715efe67cb49ebbe704967b..ed3518fe7c841d9e1a9c97626acaa3d765a6d76f 100644 +index e3bee2df77d87630e96621470e940d9d9e152e7f..d559f93a9a09bac414dd5d58afccad42c127f09b 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java @@ -95,12 +95,19 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc diff --git a/patches/unapplied/server/0343-PlayerDeathEvent-shouldDropExperience.patch b/patches/server/0341-PlayerDeathEvent-shouldDropExperience.patch similarity index 85% rename from patches/unapplied/server/0343-PlayerDeathEvent-shouldDropExperience.patch rename to patches/server/0341-PlayerDeathEvent-shouldDropExperience.patch index c94cfd00dc..6135fb25b6 100644 --- a/patches/unapplied/server/0343-PlayerDeathEvent-shouldDropExperience.patch +++ b/patches/server/0341-PlayerDeathEvent-shouldDropExperience.patch @@ -5,10 +5,10 @@ Subject: [PATCH] PlayerDeathEvent#shouldDropExperience diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 572f7092a416793e726c794b7de34def47196e1e..41392a92af27b85e213eed3ac0fff281bb5c32b3 100644 +index 321b6a74fadd0aa8b5b956743bde289e69b65578..b19ca7f62e78035ed5f52e1eb1a76066af97de80 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -888,7 +888,7 @@ public class ServerPlayer extends Player { +@@ -896,7 +896,7 @@ public class ServerPlayer extends Player { this.tellNeutralMobsThatIDied(); } // SPIGOT-5478 must be called manually now diff --git a/patches/unapplied/server/0344-Prevent-bees-loading-chunks-checking-hive-position.patch b/patches/server/0342-Prevent-bees-loading-chunks-checking-hive-position.patch similarity index 85% rename from patches/unapplied/server/0344-Prevent-bees-loading-chunks-checking-hive-position.patch rename to patches/server/0342-Prevent-bees-loading-chunks-checking-hive-position.patch index 16e42ecce0..3e8d451777 100644 --- a/patches/unapplied/server/0344-Prevent-bees-loading-chunks-checking-hive-position.patch +++ b/patches/server/0342-Prevent-bees-loading-chunks-checking-hive-position.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent bees loading chunks checking hive position diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index 2275601d784df397cb2a19328a3c2bcd7e0c1e96..6ea223224e984058f0c6d3443ce49a3a46688434 100644 +index 255ebdcddb46653d70b810b8ca94b86ccde80343..bdc9911f5a72d2f23a3a01d0420ac9ba6cb78570 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java -@@ -495,6 +495,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { +@@ -496,6 +496,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { if (!this.hasHive()) { return false; } else { diff --git a/patches/unapplied/server/0345-Don-t-load-Chunks-from-Hoppers-and-other-things.patch b/patches/server/0343-Don-t-load-Chunks-from-Hoppers-and-other-things.patch similarity index 100% rename from patches/unapplied/server/0345-Don-t-load-Chunks-from-Hoppers-and-other-things.patch rename to patches/server/0343-Don-t-load-Chunks-from-Hoppers-and-other-things.patch diff --git a/patches/unapplied/server/0346-Guard-against-serializing-mismatching-chunk-coordina.patch b/patches/server/0344-Guard-against-serializing-mismatching-chunk-coordina.patch similarity index 90% rename from patches/unapplied/server/0346-Guard-against-serializing-mismatching-chunk-coordina.patch rename to patches/server/0344-Guard-against-serializing-mismatching-chunk-coordina.patch index 64048f55c3..bc391d7a2a 100644 --- a/patches/unapplied/server/0346-Guard-against-serializing-mismatching-chunk-coordina.patch +++ b/patches/server/0344-Guard-against-serializing-mismatching-chunk-coordina.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Guard against serializing mismatching chunk coordinate Should help if something dumb happens diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index 9a4fe42da43037a65738b978c0c6c9969de59e76..73d26c9eb902f19b0c3ffdd911898845277655b0 100644 +index 8480310bd389ad55b8138a20da59cbcffb973819..864e591b10360b0f12fe5c5a650da372555ebd10 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -@@ -77,6 +77,18 @@ public class ChunkSerializer { +@@ -84,6 +84,18 @@ public class ChunkSerializer { public ChunkSerializer() {} @@ -28,7 +28,7 @@ index 9a4fe42da43037a65738b978c0c6c9969de59e76..73d26c9eb902f19b0c3ffdd911898845 // Paper start public static final class InProgressChunkHolder { -@@ -102,7 +114,7 @@ public class ChunkSerializer { +@@ -109,7 +121,7 @@ public class ChunkSerializer { public static InProgressChunkHolder loadChunk(ServerLevel world, PoiManager poiStorage, ChunkPos chunkPos, CompoundTag nbt, boolean distinguish) { java.util.ArrayDeque tasksToExecuteOnMain = new java.util.ArrayDeque<>(); // Paper end @@ -38,10 +38,10 @@ index 9a4fe42da43037a65738b978c0c6c9969de59e76..73d26c9eb902f19b0c3ffdd911898845 if (!Objects.equals(chunkPos, chunkcoordintpair1)) { ChunkSerializer.LOGGER.error("Chunk file at {} is in the wrong location; relocating. (Expected {}, got {})", new Object[]{chunkPos, chunkPos, chunkcoordintpair1}); diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java -index ba677f282f2c8a05d1bad88226655549a81679bb..392fd2f5919d6a8f37c9f2b0421831d6ce381e0c 100644 +index 694778b5c23dbe9c8603c3483476b5252aa079bc..315be30daf0be84efbb4d634dc01e1bf9e6e696e 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkStorage.java -@@ -148,6 +148,13 @@ public class ChunkStorage implements AutoCloseable { +@@ -178,6 +178,13 @@ public class ChunkStorage implements AutoCloseable { // Paper start - async chunk io public void write(ChunkPos chunkPos, CompoundTag nbt) throws IOException { diff --git a/patches/unapplied/server/0347-Optimise-IEntityAccess-getPlayerByUUID.patch b/patches/server/0345-Optimise-IEntityAccess-getPlayerByUUID.patch similarity index 59% rename from patches/unapplied/server/0347-Optimise-IEntityAccess-getPlayerByUUID.patch rename to patches/server/0345-Optimise-IEntityAccess-getPlayerByUUID.patch index 19e02d11be..b8246b54d7 100644 --- a/patches/unapplied/server/0347-Optimise-IEntityAccess-getPlayerByUUID.patch +++ b/patches/server/0345-Optimise-IEntityAccess-getPlayerByUUID.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Optimise IEntityAccess#getPlayerByUUID Use the world entity map instead of iterating over all players diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 13966539626742b6914b940c6dd74c83485e588e..9b883af58fd87751bdad909a015cb78ca5647e90 100644 +index 97f1679c2a549b27fd70b6773819feae26fc54bb..06d4c948241f121f4ccafe869b3e37c8a6279622 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -385,6 +385,14 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -390,6 +390,14 @@ public class ServerLevel extends Level implements WorldGenLevel { public final com.destroystokyo.paper.io.chunk.ChunkTaskManager asyncChunkTaskManager; // Paper end @@ -21,6 +21,6 @@ index 13966539626742b6914b940c6dd74c83485e588e..9b883af58fd87751bdad909a015cb78c + } + // Paper end + - // Add env and gen to constructor, WorldData -> WorldDataServer - public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, ServerLevelData iworlddataserver, ResourceKey resourcekey, Holder holder, ChunkProgressListener worldloadlistener, ChunkGenerator chunkgenerator, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { - // Objects.requireNonNull(minecraftserver); // CraftBukkit - decompile error + // Add env and gen to constructor, IWorldDataServer -> WorldDataServer + public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PrimaryLevelData iworlddataserver, ResourceKey resourcekey, LevelStem worlddimension, ChunkProgressListener worldloadlistener, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { + // Holder holder = worlddimension.typeHolder(); // CraftBukkit - decompile error diff --git a/patches/unapplied/server/0348-Fix-items-not-falling-correctly.patch b/patches/server/0346-Fix-items-not-falling-correctly.patch similarity index 93% rename from patches/unapplied/server/0348-Fix-items-not-falling-correctly.patch rename to patches/server/0346-Fix-items-not-falling-correctly.patch index ef789b9361..27a2f1d45d 100644 --- a/patches/unapplied/server/0348-Fix-items-not-falling-correctly.patch +++ b/patches/server/0346-Fix-items-not-falling-correctly.patch @@ -15,10 +15,10 @@ This patch resolves the conflict by offsetting checking Spigot's entity activation range check from an item's move method. diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index ff3182c40d2e3942190cac8ddb008ba6c5a72d99..4e9e0ef895c29cfc1e925c0c3ffead23c4e4dc0a 100644 +index 75575f73ab0f4b7fad92843a1d11bae059b50366..85fc33183ff01611bfa90ddd33a9c885d1dd7172 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -@@ -134,7 +134,7 @@ public class ItemEntity extends Entity { +@@ -144,7 +144,7 @@ public class ItemEntity extends Entity { } } diff --git a/patches/unapplied/server/0349-Lag-compensate-eating.patch b/patches/server/0347-Lag-compensate-eating.patch similarity index 88% rename from patches/unapplied/server/0349-Lag-compensate-eating.patch rename to patches/server/0347-Lag-compensate-eating.patch index a3c79fe6ad..8a2af0f730 100644 --- a/patches/unapplied/server/0349-Lag-compensate-eating.patch +++ b/patches/server/0347-Lag-compensate-eating.patch @@ -7,10 +7,10 @@ When the server is lagging, players will wait longer when eating. Change to also use a time check instead if it passes. diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index c80c31f7e5c4a5b3f9156ac7b263a6be9456deac..1ebd099af4abd40e848787ac96a53aa7287f469b 100644 +index 0da23722a326aa190dca7d610bf3cb5c42dbb7f8..5330ce940918cc858cbce74665f1c928249bb957 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -3507,6 +3507,11 @@ public abstract class LivingEntity extends Entity { +@@ -3539,6 +3539,11 @@ public abstract class LivingEntity extends Entity { return ((Byte) this.entityData.get(LivingEntity.DATA_LIVING_ENTITY_FLAGS) & 2) > 0 ? InteractionHand.OFF_HAND : InteractionHand.MAIN_HAND; } @@ -22,7 +22,7 @@ index c80c31f7e5c4a5b3f9156ac7b263a6be9456deac..1ebd099af4abd40e848787ac96a53aa7 private void updatingUsingItem() { if (this.isUsingItem()) { if (ItemStack.isSameIgnoreDurability(this.getItemInHand(this.getUsedItemHand()), this.useItem)) { -@@ -3524,8 +3529,12 @@ public abstract class LivingEntity extends Entity { +@@ -3556,8 +3561,12 @@ public abstract class LivingEntity extends Entity { if (this.shouldTriggerItemUseEffects()) { this.triggerItemUseEffects(stack, 5); } @@ -37,7 +37,7 @@ index c80c31f7e5c4a5b3f9156ac7b263a6be9456deac..1ebd099af4abd40e848787ac96a53aa7 this.completeUsingItem(); } -@@ -3573,7 +3582,10 @@ public abstract class LivingEntity extends Entity { +@@ -3605,7 +3614,10 @@ public abstract class LivingEntity extends Entity { if (!itemstack.isEmpty() && !this.isUsingItem() || forceUpdate) { // Paper use override flag this.useItem = itemstack; @@ -49,7 +49,7 @@ index c80c31f7e5c4a5b3f9156ac7b263a6be9456deac..1ebd099af4abd40e848787ac96a53aa7 if (!this.level.isClientSide) { this.setLivingEntityFlag(1, true); this.setLivingEntityFlag(2, hand == InteractionHand.OFF_HAND); -@@ -3597,7 +3609,10 @@ public abstract class LivingEntity extends Entity { +@@ -3630,7 +3642,10 @@ public abstract class LivingEntity extends Entity { } } else if (!this.isUsingItem() && !this.useItem.isEmpty()) { this.useItem = ItemStack.EMPTY; @@ -61,7 +61,7 @@ index c80c31f7e5c4a5b3f9156ac7b263a6be9456deac..1ebd099af4abd40e848787ac96a53aa7 } } -@@ -3725,7 +3740,10 @@ public abstract class LivingEntity extends Entity { +@@ -3763,7 +3778,10 @@ public abstract class LivingEntity extends Entity { } this.useItem = ItemStack.EMPTY; diff --git a/patches/unapplied/server/0350-Optimize-call-to-getFluid-for-explosions.patch b/patches/server/0348-Optimize-call-to-getFluid-for-explosions.patch similarity index 87% rename from patches/unapplied/server/0350-Optimize-call-to-getFluid-for-explosions.patch rename to patches/server/0348-Optimize-call-to-getFluid-for-explosions.patch index 6dc5f5aa31..2c306ee70e 100644 --- a/patches/unapplied/server/0350-Optimize-call-to-getFluid-for-explosions.patch +++ b/patches/server/0348-Optimize-call-to-getFluid-for-explosions.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimize call to getFluid for explosions diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index afac23f1741baaf2a4ee2729f25a0ddf5f2b9d7d..fc1b86828c8a38950f7a26735d8f5d125ee3e914 100644 +index 2a10a50381b6d6229b7c6e1d32f0d8f96db70bd5..85e9c23b8dde4266696c6c62fc124b7508a0bb4f 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java -@@ -174,7 +174,7 @@ public class Explosion { +@@ -172,7 +172,7 @@ public class Explosion { for (float f1 = 0.3F; f > 0.0F; f -= 0.22500001F) { BlockPos blockposition = new BlockPos(d4, d5, d6); BlockState iblockdata = this.level.getBlockState(blockposition); diff --git a/patches/unapplied/server/0351-Fix-last-firework-in-stack-not-having-effects-when-d.patch b/patches/server/0349-Fix-last-firework-in-stack-not-having-effects-when-d.patch similarity index 90% rename from patches/unapplied/server/0351-Fix-last-firework-in-stack-not-having-effects-when-d.patch rename to patches/server/0349-Fix-last-firework-in-stack-not-having-effects-when-d.patch index 1b7f466946..448854642c 100644 --- a/patches/unapplied/server/0351-Fix-last-firework-in-stack-not-having-effects-when-d.patch +++ b/patches/server/0349-Fix-last-firework-in-stack-not-having-effects-when-d.patch @@ -9,10 +9,10 @@ dispensed. The resulting item would have size == 0 and therefore be convertered to air, hence why the effects disappeared. diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index 4830da3279c1f5b18307dfe148f42b05e5b6b9d3..047dd5600e3aae8b19bfc33566ee60541131e60a 100644 +index 6219b89cf04febe0a8ceb93b4212827c297cf7aa..15fc100e468e68cbb0c43363c0eb25dc2ef8c6e0 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -@@ -509,7 +509,7 @@ public interface DispenseItemBehavior { +@@ -510,7 +510,7 @@ public interface DispenseItemBehavior { } itemstack1 = CraftItemStack.asNMSCopy(event.getItem()); diff --git a/patches/unapplied/server/0352-Add-effect-to-block-break-naturally.patch b/patches/server/0350-Add-effect-to-block-break-naturally.patch similarity index 100% rename from patches/unapplied/server/0352-Add-effect-to-block-break-naturally.patch rename to patches/server/0350-Add-effect-to-block-break-naturally.patch diff --git a/patches/unapplied/server/0353-Entity-Activation-Range-2.0.patch b/patches/server/0351-Entity-Activation-Range-2.0.patch similarity index 96% rename from patches/unapplied/server/0353-Entity-Activation-Range-2.0.patch rename to patches/server/0351-Entity-Activation-Range-2.0.patch index a921362a20..6efa68de4e 100644 --- a/patches/unapplied/server/0353-Entity-Activation-Range-2.0.patch +++ b/patches/server/0351-Entity-Activation-Range-2.0.patch @@ -14,7 +14,7 @@ Adds flying monsters to control ghast and phantoms Adds villagers as separate config diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985ebcd44333 100644 +index 06d4c948241f121f4ccafe869b3e37c8a6279622..1d036031889a41134b5c475c18a85c5b678fa1f7 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -2,7 +2,6 @@ package net.minecraft.server.level; @@ -25,7 +25,7 @@ index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985e import com.google.common.collect.Lists; import com.mojang.datafixers.DataFixer; import com.mojang.datafixers.util.Pair; -@@ -969,17 +968,17 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -987,17 +986,17 @@ public class ServerLevel extends Level implements WorldGenLevel { ++TimingHistory.entityTicks; // Paper - timings // Spigot start co.aikar.timings.Timing timer; // Paper @@ -47,7 +47,7 @@ index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985e try { // Paper end - timings entity.setOldPosAndRot(); -@@ -990,9 +989,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1008,9 +1007,13 @@ public class ServerLevel extends Level implements WorldGenLevel { return Registry.ENTITY_TYPE.getKey(entity.getType()).toString(); }); gameprofilerfiller.incrementCounter("tickNonPassenger"); @@ -61,7 +61,7 @@ index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985e Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1000,13 +1003,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1018,13 +1021,18 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(entity, entity1); } @@ -81,7 +81,7 @@ index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985e passenger.setOldPosAndRot(); ++passenger.tickCount; ProfilerFiller gameprofilerfiller = this.getProfiler(); -@@ -1015,8 +1023,17 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1033,8 +1041,17 @@ public class ServerLevel extends Level implements WorldGenLevel { return Registry.ENTITY_TYPE.getKey(passenger.getType()).toString(); }); gameprofilerfiller.incrementCounter("tickPassenger"); @@ -99,7 +99,7 @@ index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985e gameprofilerfiller.pop(); Iterator iterator = passenger.getPassengers().iterator(); -@@ -1026,6 +1043,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1044,6 +1061,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(passenger, entity2); } @@ -108,10 +108,10 @@ index 9b883af58fd87751bdad909a015cb78ca5647e90..12162ff2dc7c82f50f1d892bc807985e } else { passenger.stopRiding(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 30b79e3dfbc50fee70d52367092c102dbad2d304..339031b16c856d29509916e6178151cc0f790dde 100644 +index 6f426a028e9158bf6ff554d9b9e1f0d097505ecf..dff627579f775dbe0a6323ffa60d9a65299b121a 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -322,6 +322,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -343,6 +343,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public void inactiveTick() { } // Spigot end // Paper start @@ -120,7 +120,7 @@ index 30b79e3dfbc50fee70d52367092c102dbad2d304..339031b16c856d29509916e6178151cc protected int numCollisions = 0; // Paper public boolean spawnedViaMobSpawner; // Paper - Yes this name is similar to above, upstream took the better one @javax.annotation.Nullable -@@ -794,6 +796,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -816,6 +818,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } else { this.wasOnFire = this.isOnFire(); if (movementType == MoverType.PISTON) { @@ -129,7 +129,7 @@ index 30b79e3dfbc50fee70d52367092c102dbad2d304..339031b16c856d29509916e6178151cc movement = this.limitPistonMovement(movement); if (movement.equals(Vec3.ZERO)) { return; -@@ -806,6 +810,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -828,6 +832,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.stuckSpeedMultiplier = Vec3.ZERO; this.setDeltaMovement(Vec3.ZERO); } @@ -144,10 +144,10 @@ index 30b79e3dfbc50fee70d52367092c102dbad2d304..339031b16c856d29509916e6178151cc movement = this.maybeBackOffFromEdge(movement, movementType); Vec3 vec3d1 = this.collide(movement); diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index affa1d906beb49cf599a467d582144d9407b2e0e..78e28d40292ec99ac0a22bd7f834c30c68c00098 100644 +index dc5cb767c91252b1049c76841cbe14b29287572c..9e0f1938f534a61abc00ed80c8effd7d15056195 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -205,6 +205,19 @@ public abstract class Mob extends LivingEntity { +@@ -210,6 +210,19 @@ public abstract class Mob extends LivingEntity { return this.lookControl; } @@ -168,7 +168,7 @@ index affa1d906beb49cf599a467d582144d9407b2e0e..78e28d40292ec99ac0a22bd7f834c30c if (this.isPassenger() && this.getVehicle() instanceof Mob) { Mob entityinsentient = (Mob) this.getVehicle(); diff --git a/src/main/java/net/minecraft/world/entity/PathfinderMob.java b/src/main/java/net/minecraft/world/entity/PathfinderMob.java -index ff458abb221daaddaa734811eaaa35ea43883343..d1ab31d03ae421e628448fe2492ff138dc57c00f 100644 +index 2df5b50be11297941d13ec9d17001f488af11750..3db309e709cd72e3aae184ff2f8b1a7b98f2c7a8 100644 --- a/src/main/java/net/minecraft/world/entity/PathfinderMob.java +++ b/src/main/java/net/minecraft/world/entity/PathfinderMob.java @@ -19,6 +19,7 @@ public abstract class PathfinderMob extends Mob { @@ -248,7 +248,7 @@ index 6efba52c2e5d7811ee329ed22c1c76f75d7ddbe1..26bf383caea68834c654b25653ced901 } } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index ecd7083b40ce6230d49ea4487766a6f06b4e96d0..f7b8804394ad55e3f6c7c8c3a8f0fe7894385c90 100644 +index f957c0aca36b7228ac3a33ca04c948b1d10642d1..39fc94b1e1555fd6706391223dd2783139b16016 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -225,17 +225,29 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -303,10 +303,10 @@ index ecd7083b40ce6230d49ea4487766a6f06b4e96d0..f7b8804394ad55e3f6c7c8c3a8f0fe78 super.customServerAiStep(); } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index dab1b7491fff4da9f606d041536adb649bfccd9a..27bd21ec70a446537d24952cb7ea04b0c2f4ef86 100644 +index 6d5d67aec4be3205032ce3b97e12356b89a0f5fe..dca25847a2d8cf2ae74121c9e8840dfab38e43e8 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -152,6 +152,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -158,6 +158,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public Map capturedTileEntities = new HashMap<>(); public List captureDrops; public final it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap ticksPerSpawnCategory = new it.unimi.dsi.fastutil.objects.Object2LongOpenHashMap<>(); diff --git a/patches/unapplied/server/0354-Increase-Light-Queue-Size.patch b/patches/server/0352-Increase-Light-Queue-Size.patch similarity index 93% rename from patches/unapplied/server/0354-Increase-Light-Queue-Size.patch rename to patches/server/0352-Increase-Light-Queue-Size.patch index dff03c4a6f..eaba454d22 100644 --- a/patches/unapplied/server/0354-Increase-Light-Queue-Size.patch +++ b/patches/server/0352-Increase-Light-Queue-Size.patch @@ -29,10 +29,10 @@ index 4e90cc3970c77d8a488ac8bbcbaacf78b147f8b2..60d76eb048186d2f1bc0f1ed02741f8a } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d2580936b6e8a2e8b23331cc3f563bab3434486e..632743678f8c65e078080fda7c8eeee9a2d5753c 100644 +index 71bed00743ec7ef026a59fc84f8e9153a32e269a..5b9cd88e77a492bbd9c52d5c245b35bb53cf024e 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -809,7 +809,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> worldgenMailbox; public final ProcessorHandle> mainThreadMailbox; @@ -150,7 +150,7 @@ index 5685ffe47fd68230cf30ca9f0e49e471b86eab00..071d821094ce1c13ad5755a1ba76d9a8 public final ChunkProgressListener progressListener; private final ChunkStatusUpdateListener chunkStatusListener; public final ChunkMap.ChunkDistanceManager distanceManager; -@@ -247,11 +253,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -259,11 +265,12 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.progressListener = worldGenerationProgressListener; this.chunkStatusListener = chunkStatusChangeListener; diff --git a/patches/unapplied/server/0356-Anti-Xray.patch b/patches/server/0354-Anti-Xray.patch similarity index 88% rename from patches/unapplied/server/0356-Anti-Xray.patch rename to patches/server/0354-Anti-Xray.patch index fcddd72018..5bdcca5298 100644 --- a/patches/unapplied/server/0356-Anti-Xray.patch +++ b/patches/server/0354-Anti-Xray.patch @@ -1050,7 +1050,7 @@ index 0000000000000000000000000000000000000000..80a2dfb266ae1221680a7b24fee2f7e2 + } +} diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java -index d004997cb94648a24135f0478be3a25393b67925..52f68d7611862b0e904305f8a16f04422b2b5b3f 100644 +index 7cf356a700e47686e093e2f2f880af919dc0414a..e902b437ee089907b34ae30c0a6bdf1d42e1e674 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java +++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundLevelChunkPacketData.java @@ -33,7 +33,10 @@ public class ClientboundLevelChunkPacketData { @@ -1133,10 +1133,10 @@ index 7825d6f0fdcfda6212cff8033ec55fb7db236154..2072aa8710f6e285f7c8f76c63b7bcf8 public ClientboundLevelChunkWithLightPacket(FriendlyByteBuf buf) { diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 071d821094ce1c13ad5755a1ba76d9a8f27bba97..0fad7ad13be138cbc7c4b09f457adbde570cf6fa 100644 +index 77ecefbdda8ed2d52085eb31f857012f6bc905fc..4ff1c09b4db2edbcf39c13a1942dd95bd566173d 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -966,7 +966,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -992,7 +992,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider completablefuture1.thenAcceptAsync((either) -> { either.ifLeft((chunk) -> { this.tickingGenerated.getAndIncrement(); @@ -1145,7 +1145,7 @@ index 071d821094ce1c13ad5755a1ba76d9a8f27bba97..0fad7ad13be138cbc7c4b09f457adbde this.getPlayers(chunkcoordintpair, false).forEach((entityplayer) -> { this.playerLoadedChunk(entityplayer, mutableobject, chunk); -@@ -1145,7 +1145,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1171,7 +1171,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider while (objectiterator.hasNext()) { ChunkHolder playerchunk = (ChunkHolder) objectiterator.next(); ChunkPos chunkcoordintpair = playerchunk.getPos(); @@ -1154,7 +1154,7 @@ index 071d821094ce1c13ad5755a1ba76d9a8f27bba97..0fad7ad13be138cbc7c4b09f457adbde this.getPlayers(chunkcoordintpair, false).forEach((entityplayer) -> { SectionPos sectionposition = entityplayer.getLastSectionPos(); -@@ -1159,7 +1159,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1185,7 +1185,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } @@ -1163,7 +1163,7 @@ index 071d821094ce1c13ad5755a1ba76d9a8f27bba97..0fad7ad13be138cbc7c4b09f457adbde if (player.level == this.level) { if (newWithinViewDistance && !oldWithinViewDistance) { ChunkHolder playerchunk = this.getVisibleChunkIfPresent(pos.toLong()); -@@ -1679,12 +1679,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1722,12 +1722,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } @@ -1186,23 +1186,23 @@ index 071d821094ce1c13ad5755a1ba76d9a8f27bba97..0fad7ad13be138cbc7c4b09f457adbde List list = Lists.newArrayList(); List list1 = Lists.newArrayList(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 12162ff2dc7c82f50f1d892bc807985ebcd44333..9e779490dfea57112ce088fd398892052b4d9d73 100644 +index 1d036031889a41134b5c475c18a85c5b678fa1f7..989f0da37f20c7989183986ffa14e9fe12c7af7f 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -395,7 +395,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - // Add env and gen to constructor, WorldData -> WorldDataServer - public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, ServerLevelData iworlddataserver, ResourceKey resourcekey, Holder holder, ChunkProgressListener worldloadlistener, ChunkGenerator chunkgenerator, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { +@@ -401,7 +401,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + public ServerLevel(MinecraftServer minecraftserver, Executor executor, LevelStorageSource.LevelStorageAccess convertable_conversionsession, PrimaryLevelData iworlddataserver, ResourceKey resourcekey, LevelStem worlddimension, ChunkProgressListener worldloadlistener, boolean flag, long i, List list, boolean flag1, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { + // Holder holder = worlddimension.typeHolder(); // CraftBukkit - decompile error // Objects.requireNonNull(minecraftserver); // CraftBukkit - decompile error -- super(iworlddataserver, resourcekey, holder, minecraftserver::getProfiler, false, flag, i, gen, biomeProvider, env); -+ super(iworlddataserver, resourcekey, holder, minecraftserver::getProfiler, false, flag, i, gen, biomeProvider, env, executor); // Paper - Async-Anti-Xray - Pass executor +- super(iworlddataserver, resourcekey, worlddimension.typeHolder(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env); ++ super(iworlddataserver, resourcekey, worlddimension.typeHolder(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, executor); // Paper - Async-Anti-Xray - Pass executor this.pvpMode = minecraftserver.isPvpAllowed(); this.convertable = convertable_conversionsession; - this.uuid = WorldUUID.getUUID(convertable_conversionsession.levelPath.toFile()); + this.uuid = WorldUUID.getUUID(convertable_conversionsession.levelDirectory.path().toFile()); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index eb58536e37af9da5e3ae7e43f874a1ef09c20944..d4f57fde2f02071dfde08cb2a5c8359984056aef 100644 +index 3fadf6b46cc722ad81cf810c0761cf717e9f9b78..312768054e02847bbc7d2ec7fa6198dad52b86d2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -@@ -50,7 +50,7 @@ import org.bukkit.event.player.PlayerInteractEvent; +@@ -49,7 +49,7 @@ import org.bukkit.event.player.PlayerInteractEvent; public class ServerPlayerGameMode { private static final Logger LOGGER = LogUtils.getLogger(); @@ -1211,7 +1211,7 @@ index eb58536e37af9da5e3ae7e43f874a1ef09c20944..d4f57fde2f02071dfde08cb2a5c83599 protected final ServerPlayer player; private GameType gameModeForPlayer; @Nullable -@@ -326,6 +326,8 @@ public class ServerPlayerGameMode { +@@ -318,6 +318,8 @@ public class ServerPlayerGameMode { } } @@ -1219,12 +1219,12 @@ index eb58536e37af9da5e3ae7e43f874a1ef09c20944..d4f57fde2f02071dfde08cb2a5c83599 + this.level.chunkPacketBlockController.onPlayerLeftClickBlock(this, pos, action, direction, worldHeight); // Paper - Anti-Xray } - public void destroyAndAck(BlockPos pos, ServerboundPlayerActionPacket.Action action, String reason) { + public void destroyAndAck(BlockPos pos, int sequence, String reason) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 27bd21ec70a446537d24952cb7ea04b0c2f4ef86..bfbd1922d77602628e57326b3251459f45b1aed9 100644 +index dca25847a2d8cf2ae74121c9e8840dfab38e43e8..b56fe14e7b7de95876ba2b1d084856d6935e591c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -162,6 +162,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -168,6 +168,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public final org.spigotmc.SpigotWorldConfig spigotConfig; // Spigot public final com.destroystokyo.paper.PaperWorldConfig paperConfig; // Paper @@ -1232,16 +1232,16 @@ index 27bd21ec70a446537d24952cb7ea04b0c2f4ef86..bfbd1922d77602628e57326b3251459f public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot -@@ -181,7 +182,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -187,7 +188,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); -- protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env) { -+ protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor +- protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env) { ++ protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = new com.destroystokyo.paper.PaperWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), this.spigotConfig); // Paper this.generator = gen; -@@ -260,6 +261,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -271,6 +272,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.keepSpawnInMemory = this.paperConfig.keepSpawnInMemory; // Paper this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime); this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime); @@ -1249,7 +1249,7 @@ index 27bd21ec70a446537d24952cb7ea04b0c2f4ef86..bfbd1922d77602628e57326b3251459f } // Paper start -@@ -440,6 +442,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -451,6 +453,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // CraftBukkit end BlockState iblockdata1 = chunk.setBlockState(pos, state, (flags & 64) != 0, (flags & 1024) == 0); // CraftBukkit custom NO_PLACE flag @@ -1258,10 +1258,10 @@ index 27bd21ec70a446537d24952cb7ea04b0c2f4ef86..bfbd1922d77602628e57326b3251459f if (iblockdata1 == null) { // CraftBukkit start - remove blockstate if failed (or the same) diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -index eea6816c52e6c0329f3bea0e7789cda9dd4a5a08..8038b37bdfdd41eadb4f3cb4dd7ef245051ed3a4 100644 +index 0d815a39d50bb8c06f81e3386764db6a00d84985..a5160f0336f1ab50e415bddaa958616e8a08dfee 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkAccess.java -@@ -112,7 +112,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom +@@ -109,7 +109,7 @@ public abstract class ChunkAccess implements BlockGetter, BiomeManager.NoiseBiom private static void replaceMissingSections(LevelHeightAccessor world, Registry biome, LevelChunkSection[] sectionArray) { for (int i = 0; i < sectionArray.length; ++i) { if (sectionArray[i] == null) { @@ -1271,7 +1271,7 @@ index eea6816c52e6c0329f3bea0e7789cda9dd4a5a08..8038b37bdfdd41eadb4f3cb4dd7ef245 } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index e2ecbd60ed5200589313d767a17600dca1231931..1a64618e533426147ad6ab1211afb9cc676cc185 100644 +index 605ec3ac08845178795721977b685dfbaab33156..74952112182ac94942474f1c7cf21a6301abbcc7 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -93,7 +93,7 @@ public class LevelChunk extends ChunkAccess { @@ -1284,10 +1284,10 @@ index e2ecbd60ed5200589313d767a17600dca1231931..1a64618e533426147ad6ab1211afb9cc this.clientLightReady = false; this.level = (ServerLevel) world; // CraftBukkit - type diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index c696358102086257033b55adbef84b1a259cb46e..67b06640358e04752bf149e9380f5f83d5d1d0f6 100644 +index ae37e97e52557b48f129cc02eeea395378a48444..ba4da27861236eb62d208f2a660e232a143232ac 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -@@ -34,10 +34,13 @@ public class LevelChunkSection { +@@ -36,10 +36,13 @@ public class LevelChunkSection { this.recalcBlockCounts(); } @@ -1304,8 +1304,8 @@ index c696358102086257033b55adbef84b1a259cb46e..67b06640358e04752bf149e9380f5f83 } public static int getBottomBlockY(int chunkPos) { -@@ -172,10 +175,13 @@ public class LevelChunkSection { - this.biomes.read(buf); +@@ -177,10 +180,13 @@ public class LevelChunkSection { + this.biomes = datapaletteblock; } - public void write(FriendlyByteBuf buf) { @@ -1322,10 +1322,10 @@ index c696358102086257033b55adbef84b1a259cb46e..67b06640358e04752bf149e9380f5f83 public int getSerializedSize() { diff --git a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java -index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0810778db 100644 +index 1152bf7f7a7784457c778b215db91b9e02066fba..0a174b07e58f638e75a013552c964a9fb833d4cb 100644 --- a/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java +++ b/src/main/java/net/minecraft/world/level/chunk/PalettedContainer.java -@@ -29,6 +29,7 @@ public class PalettedContainer implements PaletteResize { +@@ -29,6 +29,7 @@ public class PalettedContainer implements PaletteResize, PalettedContainer return 0; }; public final IdMap registry; @@ -1333,22 +1333,46 @@ index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0 private volatile PalettedContainer.Data data; private final PalettedContainer.Strategy strategy; private final ThreadingDetector threadingDetector = new ThreadingDetector("PalettedContainer"); -@@ -41,29 +42,65 @@ public class PalettedContainer implements PaletteResize { +@@ -41,43 +42,82 @@ public class PalettedContainer implements PaletteResize, PalettedContainer this.threadingDetector.checkAndUnlock(); } -- public static Codec> codec(IdMap idList, Codec entryCodec, PalettedContainer.Strategy provider, T object) { -+ // Paper start - Anti-Xray - Add preset values -+ @Deprecated public static Codec> codec(IdMap idList, Codec entryCodec, PalettedContainer.Strategy provider, T object) { return PalettedContainer.codec(idList, entryCodec, provider, object, null); } // Notice for updates: Please make sure this function isn't used anywhere -+ public static Codec> codec(IdMap idList, Codec entryCodec, PalettedContainer.Strategy provider, T object, T @org.jetbrains.annotations.Nullable [] presetValues) { - return RecordCodecBuilder.>create((instance) -> { // Paper - decompile fix - return instance.group(entryCodec.mapResult(ExtraCodecs.orElsePartial(object)).listOf().fieldOf("palette").forGetter(PalettedContainer.DiscData::paletteEntries), Codec.LONG_STREAM.optionalFieldOf("data").forGetter(PalettedContainer.DiscData::storage)).apply(instance, PalettedContainer.DiscData::new); - }).comapFlatMap((serialized) -> { -- return read(idList, provider, serialized); -+ return read(idList, provider, serialized, object, presetValues); -+ // Paper end - }, (container) -> { - return container.write(idList, provider); +- public static Codec> codecRW(IdMap idMap, Codec codec, PalettedContainer.Strategy strategy, T object) { +- PalettedContainerRO.Unpacker> unpacker = PalettedContainer::unpack; +- return codec(idMap, codec, strategy, object, unpacker); ++ // Paper start ++ public interface UnpackerPaper> { ++ DataResult read(IdMap idMap, PalettedContainer.Strategy strategy, PalettedContainerRO.PackedData packedData, T defaultValue, T @org.jetbrains.annotations.Nullable [] presetValues); + } ++ // Paper end + +- public static Codec> codecRO(IdMap idMap, Codec codec, PalettedContainer.Strategy strategy, T object) { +- PalettedContainerRO.Unpacker> unpacker = (idMapx, strategyx, packedData) -> { +- return unpack(idMapx, strategyx, packedData).map((palettedContainer) -> { ++ public static Codec> codecRW(IdMap idMap, Codec codec, PalettedContainer.Strategy strategy, T object, T @org.jetbrains.annotations.Nullable [] presetValues) { // Paper - add preset values, paper unpacker ++ UnpackerPaper> unpacker = PalettedContainer::unpack; // Paper - add preset values, paper unpacker ++ return codec(idMap, codec, strategy, object, unpacker, presetValues); // Paper - add preset values, paper unpacker ++ } ++ ++ public static Codec> codecRO(IdMap idMap, Codec codec, PalettedContainer.Strategy strategy, T object) { // Paper - add preset values, paper unpacker ++ UnpackerPaper> unpacker = (idMapx, strategyx, packedData, object2, presetvalues) -> { // Paper - add preset values, paper unpacker ++ return unpack(idMapx, strategyx, packedData, object, presetvalues).map((palettedContainer) -> { // Paper - add preset values, paper unpacker + return palettedContainer; + }); + }; +- return codec(idMap, codec, strategy, object, unpacker); ++ return codec(idMap, codec, strategy, object, unpacker, null); // Paper - add preset values, paper unpacker + } + +- private static > Codec codec(IdMap idMap, Codec entryCodec, PalettedContainer.Strategy provider, T object, PalettedContainerRO.Unpacker unpacker) { ++ private static > Codec codec(IdMap idMap, Codec entryCodec, PalettedContainer.Strategy provider, T object, UnpackerPaper unpacker, T @org.jetbrains.annotations.Nullable [] presetValues) { // Paper - add preset values, paper unpacker + return RecordCodecBuilder.>create((instance) -> { // Paper - decompile fix + return instance.group(entryCodec.mapResult(ExtraCodecs.orElsePartial(object)).listOf().fieldOf("palette").forGetter(PalettedContainerRO.PackedData::paletteEntries), Codec.LONG_STREAM.optionalFieldOf("data").forGetter(PalettedContainerRO.PackedData::storage)).apply(instance, PalettedContainerRO.PackedData::new); + }).comapFlatMap((packedData) -> { +- return unpacker.read(idMap, provider, packedData); ++ return unpacker.read(idMap, provider, packedData, object ,presetValues); // Paper - add preset values + }, (palettedContainerRO) -> { + return palettedContainerRO.pack(idMap, provider); }); } @@ -1404,7 +1428,7 @@ index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0 this.strategy = paletteProvider; this.registry = idList; this.data = this.createOrReuseData((PalettedContainer.Data)null, 0); -@@ -78,11 +115,33 @@ public class PalettedContainer implements PaletteResize { +@@ -92,11 +132,33 @@ public class PalettedContainer implements PaletteResize, PalettedContainer @Override public int onResize(int newBits, T object) { PalettedContainer.Data data = this.data; @@ -1439,7 +1463,7 @@ index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0 public T getAndSet(int x, int y, int z, T value) { this.acquire(); -@@ -150,24 +209,34 @@ public class PalettedContainer implements PaletteResize { +@@ -166,25 +228,34 @@ public class PalettedContainer implements PaletteResize, PalettedContainer data.palette.read(buf); buf.readLongArray(data.storage.getRaw()); this.data = data; @@ -1450,9 +1474,10 @@ index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0 } +- @Override - public void write(FriendlyByteBuf buf) { + // Paper start - Anti-Xray - Add chunk packet info -+ @Deprecated public void write(FriendlyByteBuf buf) { this.write(buf, null, 0); } // Notice for updates: Please make sure this method isn't used anywhere ++ @Override @Deprecated public void write(FriendlyByteBuf buf) { this.write(buf, null, 0); } // Notice for updates: Please make sure this method isn't used anywhere + public void write(FriendlyByteBuf buf, @Nullable com.destroystokyo.paper.antixray.ChunkPacketInfo chunkPacketInfo, int bottomBlockY) { this.acquire(); @@ -1472,30 +1497,30 @@ index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0 } -- private static DataResult> read(IdMap idList, PalettedContainer.Strategy provider, PalettedContainer.DiscData serialized) { -+ private static DataResult> read(IdMap idList, PalettedContainer.Strategy provider, PalettedContainer.DiscData serialized, T defaultValue, T @org.jetbrains.annotations.Nullable [] presetValues) { // Paper - Anti-Xray - Add preset values - List list = serialized.paletteEntries(); - int i = provider.size(); - int j = provider.calculateBitsForSerialization(idList, list.size()); -@@ -203,7 +272,7 @@ public class PalettedContainer implements PaletteResize { +- private static DataResult> unpack(IdMap idMap, PalettedContainer.Strategy strategy, PalettedContainerRO.PackedData packedData) { ++ private static DataResult> unpack(IdMap idMap, PalettedContainer.Strategy strategy, PalettedContainerRO.PackedData packedData, T defaultValue, T @org.jetbrains.annotations.Nullable [] presetValues) { // Paper - Anti-Xray - Add preset values) { + List list = packedData.paletteEntries(); + int i = strategy.size(); + int j = strategy.calculateBitsForSerialization(idMap, list.size()); +@@ -220,7 +291,7 @@ public class PalettedContainer implements PaletteResize, PalettedContainer } } -- return DataResult.success(new PalettedContainer<>(idList, provider, configuration, bitStorage, list)); -+ return DataResult.success(new PalettedContainer<>(idList, provider, configuration, bitStorage, list, defaultValue, presetValues)); // Paper - Anti-Xray - Add preset values +- return DataResult.success(new PalettedContainer<>(idMap, strategy, configuration, bitStorage, list)); ++ return DataResult.success(new PalettedContainer<>(idMap, strategy, configuration, bitStorage, list, defaultValue, presetValues)); // Paper - Anti-Xray - Add preset values } - private PalettedContainer.DiscData write(IdMap idList, PalettedContainer.Strategy provider) { -@@ -260,7 +329,7 @@ public class PalettedContainer implements PaletteResize { + @Override +@@ -280,7 +351,7 @@ public class PalettedContainer implements PaletteResize, PalettedContainer } public PalettedContainer copy() { -- return new PalettedContainer<>(this.registry, this.strategy, new PalettedContainer.Data<>(this.data.configuration(), this.data.storage().copy(), this.data.palette().copy())); -+ return new PalettedContainer<>(this.registry, this.strategy, new PalettedContainer.Data<>(this.data.configuration(), this.data.storage().copy(), this.data.palette().copy()), this.presetValues); // Paper - Anti-Xray - Add preset values +- return new PalettedContainer<>(this.registry, this.strategy, this.data.copy()); ++ return new PalettedContainer<>(this.registry, this.strategy, this.data.copy(), this.presetValues); // Paper - Anti-Xray - Add preset values } - public void count(PalettedContainer.CountConsumer counter) { -@@ -303,9 +372,20 @@ public class PalettedContainer implements PaletteResize { + @Override +@@ -329,9 +400,20 @@ public class PalettedContainer implements PaletteResize, PalettedContainer return 1 + this.palette.getSerializedSize() + FriendlyByteBuf.getVarIntSize(this.storage.getSize()) + this.storage.getRaw().length * 8; } @@ -1516,21 +1541,21 @@ index 8bb59da19f2faabb980fbebc4d9825ae74a1b6c5..ea7b92b9ecb99bc995ab9a6ee5a974a0 + buf.writeLongArray(this.storage.getRaw()); } - } + diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java -index 73d26c9eb902f19b0c3ffdd911898845277655b0..78058b505742541a484cadc790c445bdfb9c1136 100644 +index 864e591b10360b0f12fe5c5a650da372555ebd10..f26a08f81495dde6205b34254d159b042e5a6ea9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/ChunkSerializer.java @@ -69,7 +69,7 @@ import org.slf4j.Logger; public class ChunkSerializer { -- public static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codec(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState()); -+ public static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codec(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState(), null); // Paper - Anti-Xray - Add preset block states +- public static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState()); ++ public static final Codec> BLOCK_STATE_CODEC = PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState(), null); // Paper - Anti-Xray - Add preset block states private static final Logger LOGGER = LogUtils.getLogger(); private static final String TAG_UPGRADE_DATA = "UpgradeData"; private static final String BLOCK_TICKS_TAG = "block_ticks"; -@@ -148,16 +148,20 @@ public class ChunkSerializer { +@@ -149,16 +149,20 @@ public class ChunkSerializer { if (k >= 0 && k < achunksection.length) { Logger logger; PalettedContainer datapaletteblock; @@ -1539,7 +1564,7 @@ index 73d26c9eb902f19b0c3ffdd911898845277655b0..78058b505742541a484cadc790c445bd if (nbttagcompound1.contains("block_states", 10)) { - dataresult = ChunkSerializer.BLOCK_STATE_CODEC.parse(NbtOps.INSTANCE, nbttagcompound1.getCompound("block_states")).promotePartial((s) -> { -+ Codec> blockStateCodec = presetBlockStates == null ? ChunkSerializer.BLOCK_STATE_CODEC : PalettedContainer.codec(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState(), presetBlockStates); ++ Codec> blockStateCodec = presetBlockStates == null ? ChunkSerializer.BLOCK_STATE_CODEC : PalettedContainer.codecRW(Block.BLOCK_STATE_REGISTRY, BlockState.CODEC, PalettedContainer.Strategy.SECTION_STATES, Blocks.AIR.defaultBlockState(), presetBlockStates); + dataresult = blockStateCodec.parse(NbtOps.INSTANCE, nbttagcompound1.getCompound("block_states")).promotePartial((s) -> { ChunkSerializer.logErrors(chunkPos, b0, s); }); @@ -1552,30 +1577,30 @@ index 73d26c9eb902f19b0c3ffdd911898845277655b0..78058b505742541a484cadc790c445bd + // Paper end } - PalettedContainer datapaletteblock1; -@@ -170,7 +174,7 @@ public class ChunkSerializer { + PalettedContainer object; // CraftBukkit - read/write +@@ -171,7 +175,7 @@ public class ChunkSerializer { Objects.requireNonNull(logger); - datapaletteblock1 = (PalettedContainer) ((DataResult>>) dataresult).getOrThrow(false, logger::error); // CraftBukkit - decompile error + object = ((DataResult>>) dataresult).getOrThrow(false, logger::error); // CraftBukkit - decompile error } else { -- datapaletteblock1 = new PalettedContainer<>(iregistry.asHolderIdMap(), iregistry.getHolderOrThrow(Biomes.PLAINS), PalettedContainer.Strategy.SECTION_BIOMES); -+ datapaletteblock1 = new PalettedContainer<>(iregistry.asHolderIdMap(), iregistry.getHolderOrThrow(Biomes.PLAINS), PalettedContainer.Strategy.SECTION_BIOMES, null); // Paper - Anti-Xray - Add preset biomes); +- object = new PalettedContainer<>(iregistry.asHolderIdMap(), iregistry.getHolderOrThrow(Biomes.PLAINS), PalettedContainer.Strategy.SECTION_BIOMES); ++ object = new PalettedContainer<>(iregistry.asHolderIdMap(), iregistry.getHolderOrThrow(Biomes.PLAINS), PalettedContainer.Strategy.SECTION_BIOMES, null); // Paper - Anti-Xray - Add preset biomes } - LevelChunkSection chunksection = new LevelChunkSection(b0, datapaletteblock, datapaletteblock1); -@@ -423,7 +427,7 @@ public class ChunkSerializer { - } + LevelChunkSection chunksection = new LevelChunkSection(b0, datapaletteblock, (PalettedContainer) object); // CraftBukkit - read/write +@@ -439,7 +443,7 @@ public class ChunkSerializer { - private static Codec>> makeBiomeCodec(Registry biomeRegistry) { -- return PalettedContainer.codec(biomeRegistry.asHolderIdMap(), biomeRegistry.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, biomeRegistry.getHolderOrThrow(Biomes.PLAINS)); -+ return PalettedContainer.codec(biomeRegistry.asHolderIdMap(), biomeRegistry.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, biomeRegistry.getHolderOrThrow(Biomes.PLAINS), null); // Paper - Anti-Xray - Add preset biomes + // CraftBukkit start - read/write + private static Codec>> makeBiomeCodecRW(Registry iregistry) { +- return PalettedContainer.codecRW(iregistry.asHolderIdMap(), iregistry.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, iregistry.getHolderOrThrow(Biomes.PLAINS)); ++ return PalettedContainer.codecRW(iregistry.asHolderIdMap(), iregistry.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, iregistry.getHolderOrThrow(Biomes.PLAINS), null); // Paper - Anti-Xray - Add preset biomes } + // CraftBukkit end - public static CompoundTag write(ServerLevel world, ChunkAccess chunk) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java -index f3c67a815c570beb14136905cbf5aa4046ee8394..f8f44cb6e823a0150f3abdab133f8ae247c9b89c 100644 +index 63d4277d9d62cc26cf96af21f11015e003f9eb26..e28efd61e5b773064af077be6497caec63df1140 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java -@@ -53,7 +53,7 @@ public class CraftChunk implements Chunk { +@@ -54,7 +54,7 @@ public class CraftChunk implements Chunk { private final ServerLevel worldServer; private final int x; private final int z; @@ -1584,16 +1609,7 @@ index f3c67a815c570beb14136905cbf5aa4046ee8394..f8f44cb6e823a0150f3abdab133f8ae2 private static final byte[] emptyLight = new byte[2048]; public CraftChunk(net.minecraft.world.level.chunk.LevelChunk chunk) { -@@ -326,7 +326,7 @@ public class CraftChunk implements Chunk { - PalettedContainer>[] biome = (includeBiome || includeBiomeTempRain) ? new PalettedContainer[cs.length] : null; - - Registry iregistry = this.worldServer.registryAccess().registryOrThrow(Registry.BIOME_REGISTRY); -- Codec>> biomeCodec = PalettedContainer.codec(iregistry.asHolderIdMap(), iregistry.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, iregistry.getHolderOrThrow(Biomes.PLAINS)); -+ Codec>> biomeCodec = PalettedContainer.codec(iregistry.asHolderIdMap(), iregistry.holderByNameCodec(), PalettedContainer.Strategy.SECTION_BIOMES, iregistry.getHolderOrThrow(Biomes.PLAINS), null); // Paper - Anti-Xray - Add preset biomes - - for (int i = 0; i < cs.length; i++) { - CompoundTag data = new CompoundTag(); -@@ -391,7 +391,7 @@ public class CraftChunk implements Chunk { +@@ -392,7 +392,7 @@ public class CraftChunk implements Chunk { empty[i] = true; if (biome != null) { @@ -1603,10 +1619,10 @@ index f3c67a815c570beb14136905cbf5aa4046ee8394..f8f44cb6e823a0150f3abdab133f8ae2 } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 43038b4772975c1fb171c30382ae0a6c43d13676..dacec59aa5e6154ae311720ef70e7a05a75bef29 100644 +index ab13a26a1391ad7403dca09a366fc11163849632..abab21e657dc13d48006bf87e434e3343a00f1ca 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -2222,7 +2222,7 @@ public final class CraftServer implements Server { +@@ -2205,7 +2205,7 @@ public final class CraftServer implements Server { public ChunkGenerator.ChunkData createChunkData(World world) { Validate.notNull(world, "World cannot be null"); ServerLevel handle = ((CraftWorld) world).getHandle(); @@ -1616,7 +1632,7 @@ index 43038b4772975c1fb171c30382ae0a6c43d13676..dacec59aa5e6154ae311720ef70e7a05 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 0edb08a391f806e56ed1bd4812eb9c9d2b966bd7..6bdf3679ea9461475b139a0622857b1dc56ea5b2 100644 +index 2fd677796c6393d6997dca455a7daeef191e51b7..4685879eadff725311d648d165e2aa9ad851f6fc 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -401,11 +401,16 @@ public class CraftWorld extends CraftRegionAccessor implements World {