From d9df6bc5e67ff9b605a84dcf9991bcbb295cc9a0 Mon Sep 17 00:00:00 2001 From: Nassim Jahnke Date: Sun, 21 Jan 2024 17:39:05 +0100 Subject: [PATCH] [ci skip] Add more patch identifying comments, cleanup --- ...3-Vanished-players-don-t-have-rights.patch | 18 ++-- ...Allow-disabling-armor-stand-ticking.patch} | 24 +++--- ...patch => 0227-Expand-ArmorStand-API.patch} | 2 +- patches/server/0228-AnvilDamageEvent.patch | 6 +- patches/server/0229-Add-TNTPrimeEvent.patch | 24 +++--- ...nd-make-tab-spam-limits-configurable.patch | 6 +- ...ies-option-to-debug-dupe-uuid-issues.patch | 82 ++++--------------- ...dd-Early-Warning-Feature-to-WatchDog.patch | 8 +- ...35-Use-ConcurrentHashMap-in-JsonList.patch | 58 ++++++------- ...36-Use-a-Queue-for-Queueing-Commands.patch | 10 +-- ...ock-entities-from-a-chunk-without-s.patch} | 2 +- ...ptimize-BlockPosition-helper-methods.patch | 31 ++++--- .../server/0240-Slime-Pathfinder-Events.patch | 30 +++---- ...le-speed-for-water-flowing-over-lava.patch | 10 +-- ...242-Optimize-CraftBlockData-Creation.patch | 6 +- .../server/0243-Optimize-MappedRegistry.patch | 12 +-- .../0244-Add-PhantomPreSpawnEvent.patch | 8 +- .../server/0245-Add-More-Creeper-API.patch | 6 +- ...entity-dismount-during-teleportation.patch | 10 +-- patches/server/0286-BlockDestroyEvent.patch | 4 +- .../0293-Entity-getEntitySpawnReason.patch | 18 ++-- ...Optimize-Captured-BlockEntity-Lookup.patch | 4 +- ...le-Keep-Spawn-Loaded-range-per-world.patch | 6 +- .../0320-Duplicate-UUID-Resolve-Option.patch | 33 +------- ...ptimise-EntityGetter-getPlayerByUUID.patch | 4 +- .../0328-Entity-Activation-Range-2.0.patch | 24 +++--- .../0331-Tracking-Range-Improvements.patch | 4 +- ...x-items-vanishing-through-end-portal.patch | 4 +- patches/server/0334-Anti-Xray.patch | 18 ++-- .../0338-Add-debug-for-sync-chunk-loads.patch | 4 +- ...n-to-nerf-pigmen-from-nether-portals.patch | 8 +- ...-PlayerChunkMap-adds-crashing-server.patch | 10 +-- .../0362-Improved-Watchdog-Support.patch | 14 ++-- ...nEvent-when-Player-is-actually-ready.patch | 8 +- ...pawn-point-if-spawn-in-unloaded-worl.patch | 6 +- ...item-duplication-and-teleport-issues.patch | 14 ++-- ...ktraces-in-log-messages-crash-report.patch | 32 +------- ...and-End-Portal-Frames-from-being-des.patch | 6 +- ...tance-map-to-optimise-entity-tracker.patch | 14 ++-- ...-position-and-AABB-are-never-invalid.patch | 8 +- ...-incremental-chunk-and-player-saving.patch | 12 +-- ...geEvent-not-firing-for-all-use-cases.patch | 4 +- ...ortation-and-cancel-velocity-if-tele.patch | 8 +- ...p-capture-to-capture-all-items-added.patch | 6 +- ...y-Counter-to-allow-plugins-to-use-va.patch | 4 +- patches/server/0457-Entity-isTicking.patch | 4 +- ...ace-order-when-capturing-blockstates.patch | 4 +- ...-should-not-bypass-cramming-gamerule.patch | 6 +- .../server/0488-Limit-recipe-packets.patch | 4 +- .../0497-MC-4-Fix-item-position-desync.patch | 4 +- patches/server/0517-Remove-stale-POIs.patch | 4 +- ...n-for-requiring-a-player-participant.patch | 8 +- patches/server/0534-Add-EntityMoveEvent.patch | 14 ++-- ...disable-pathfinding-updates-on-block.patch | 6 +- ...n-in-sunlight-API-for-Phantoms-and-S.patch | 7 +- ...x-and-optimise-world-force-upgrading.patch | 12 +-- ...cause-to-Weather-ThunderChangeEvents.patch | 10 +-- .../0595-Add-PlayerKickEvent-causes.patch | 6 +- .../0603-Fix-dangerous-end-portal-logic.patch | 6 +- ...etChunkIfLoadedImmediately-in-places.patch | 10 +-- ...ptimize-indirect-passenger-iteration.patch | 6 +- .../0642-Add-back-EntityPortalExitEvent.patch | 6 +- ...o-find-targets-for-lightning-strikes.patch | 8 +- ...53-Add-Raw-Byte-Entity-Serialization.patch | 6 +- ...-logic-for-inventories-on-chunk-unlo.patch | 8 +- ...d-getChunkAt-has-inlined-logic-for-l.patch | 4 +- .../0669-Execute-chunk-tasks-mid-tick.patch | 16 ++-- ...primise-map-impl-for-tracked-players.patch | 4 +- .../0672-Optimise-random-block-ticking.patch | 22 ++--- ...l-more-information-in-watchdog-dumps.patch | 18 ++-- ...entory-not-closing-on-entity-removal.patch | 4 +- ...date-head-rotation-in-missing-places.patch | 6 +- ...-t-attempt-to-teleport-dead-entities.patch | 4 +- .../server/0706-Collision-optimisations.patch | 26 +++--- ...ward-CraftEntity-in-teleport-command.patch | 6 +- .../server/0734-Freeze-Tick-Lock-API.patch | 12 +-- ...assenger-world-matches-ridden-entity.patch | 4 +- patches/server/0782-Don-t-tick-markers.patch | 4 +- ...entity-loading-causing-async-lookups.patch | 4 +- ...nate-Current-redstone-implementation.patch | 16 ++-- ...mpty-items-from-being-added-to-world.patch | 4 +- ...us-missing-EntityDropItemEvent-calls.patch | 4 +- .../0807-Add-EntityPortalReadyEvent.patch | 6 +- ...-on-plugins-accessing-faraway-chunks.patch | 6 +- .../0831-Fix-a-bunch-of-vanilla-bugs.patch | 16 ++-- ...ry-onTrackingStart-during-navigation.patch | 6 +- ...tEvent-cancellation-cant-fully-preve.patch | 6 +- ...global-player-list-where-appropriate.patch | 8 +- .../0863-Player-Entity-Tracking-Events.patch | 8 +- .../server/0873-Improve-PortalEvents.patch | 4 +- ...sion-moving-velocity-to-VehicleBlock.patch | 4 +- ...when-a-captured-block-state-is-outda.patch | 4 +- ...nts-being-fired-from-unloaded-chunks.patch | 4 +- ...esh-ProjectileSource-for-projectiles.patch | 4 +- .../server/0918-Fix-block-place-logic.patch | 8 +- ...d-chunks-for-supporting-block-checks.patch | 4 +- ...Folia-scheduler-and-owned-region-API.patch | 14 ++-- ...0950-Only-capture-actual-tree-growth.patch | 6 +- ...ntity-tracking-range-by-Y-coordinate.patch | 4 +- patches/server/0970-Expand-Pose-API.patch | 8 +- ...76-Expose-hand-in-BlockCanBuildEvent.patch | 4 +- .../server/0996-Lag-compensation-ticks.patch | 10 +-- ...000-Optimise-nearby-player-retrieval.patch | 6 +- ...ix-missing-map-initialize-event-call.patch | 4 +- ...k-if-we-can-see-non-visible-entities.patch | 4 +- ...n-t-fire-sync-events-during-worldgen.patch | 14 ++-- ...estore-vanilla-entity-drops-behavior.patch | 10 +-- ...e-experience-dropping-on-block-break.patch | 6 +- ...llocation-of-Vec3D-by-entity-tracker.patch | 4 +- .../1044-Write-SavedData-IO-async.patch | 10 +-- 110 files changed, 502 insertions(+), 617 deletions(-) rename patches/server/{0224-Allow-disabling-armour-stand-ticking.patch => 0224-Allow-disabling-armor-stand-ticking.patch} (87%) rename patches/server/{0227-Implement-Expanded-ArmorStand-API.patch => 0227-Expand-ArmorStand-API.patch} (99%) rename patches/server/{0237-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch => 0237-Ability-to-get-block-entities-from-a-chunk-without-s.patch} (96%) diff --git a/patches/server/0223-Vanished-players-don-t-have-rights.patch b/patches/server/0223-Vanished-players-don-t-have-rights.patch index 5ff2477771..144ab07769 100644 --- a/patches/server/0223-Vanished-players-don-t-have-rights.patch +++ b/patches/server/0223-Vanished-players-don-t-have-rights.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Vanished players don't have rights diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index e8620ad6be2dda7fe288f884c4ae88a924be4a62..01a2c6c3ee4e1500b6ee9986943f84dbe8663860 100644 +index e8620ad6be2dda7fe288f884c4ae88a924be4a62..75f08dcce4ac923678bf8c1f25ca02b0efbab7c2 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -237,6 +237,15 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -20,12 +20,12 @@ index e8620ad6be2dda7fe288f884c4ae88a924be4a62..01a2c6c3ee4e1500b6ee9986943f84db + return false; + } + } -+ // Paper end ++ // Paper end - Cancel hit for vanished players return entity1 == null || this.leftOwner || !entity1.isPassengerOfSameVehicle(entity); } } diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index a6638e626600e4304a973497a39e3fac52203b16..e68b7a1b03783e4f9de24c5ae8773fc359bd2d37 100644 +index a6638e626600e4304a973497a39e3fac52203b16..c19069f65a9ecbc9000ea4333417a2df4ace1007 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java @@ -197,7 +197,8 @@ public class BlockItem extends Item { @@ -33,20 +33,20 @@ index a6638e626600e4304a973497a39e3fac52203b16..e68b7a1b03783e4f9de24c5ae8773fc3 CollisionContext voxelshapecollision = entityhuman == null ? CollisionContext.empty() : CollisionContext.of(entityhuman); // CraftBukkit start - store default return - boolean defaultReturn = (!this.mustSurvive() || state.canSurvive(context.getLevel(), context.getClickedPos())) && context.getLevel().isUnobstructed(state, context.getClickedPos(), voxelshapecollision); -+ Level world = context.getLevel(); // Paper -+ boolean defaultReturn = (!this.mustSurvive() || state.canSurvive(context.getLevel(), context.getClickedPos())) && world.checkEntityCollision(state, entityhuman, voxelshapecollision, context.getClickedPos(), true); // Paper ++ Level world = context.getLevel(); // Paper - Cancel hit for vanished players ++ boolean defaultReturn = (!this.mustSurvive() || state.canSurvive(context.getLevel(), context.getClickedPos())) && world.checkEntityCollision(state, entityhuman, voxelshapecollision, context.getClickedPos(), true); // Paper - Cancel hit for vanished players org.bukkit.entity.Player player = (context.getPlayer() instanceof ServerPlayer) ? (org.bukkit.entity.Player) context.getPlayer().getBukkitEntity() : null; BlockCanBuildEvent event = new BlockCanBuildEvent(CraftBlock.at(context.getLevel(), context.getClickedPos()), player, CraftBlockData.fromData(state), defaultReturn); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 4751f83571688cf1e0aa669accc813942d85c60c..4fb29ca40e1caba3f205afc13fb4d7a95fd81ce6 100644 +index 4fead0be6e8b754d0bafa1a988207fb8829b9180..30c69940c331f12dfe732052fcd917ea9231362f 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -276,6 +276,45 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); } -+ // Paper start ++ // Paper start - Cancel hit for vanished players + // ret true if no collision + public final boolean checkEntityCollision(BlockState data, Entity source, net.minecraft.world.phys.shapes.CollisionContext voxelshapedcollision, + BlockPos position, boolean checkCanSee) { @@ -84,12 +84,12 @@ index 4751f83571688cf1e0aa669accc813942d85c60c..4fb29ca40e1caba3f205afc13fb4d7a9 + + return true; + } -+ // Paper end ++ // Paper end - Cancel hit for vanished players @Override public boolean isClientSide() { return this.isClientSide; diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 49b6b109eec1220b8d669adc435baf5636cba9cd..c5736eb070209d0ecad1007e4c4c633c4615be83 100644 +index 0b847125f67e19e6f0bdc6d0f2fcc8c5ad720fe9..712c92120d2d4b8188b47141e6f0252ad57e66d8 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -1368,6 +1368,14 @@ public class CraftEventFactory { diff --git a/patches/server/0224-Allow-disabling-armour-stand-ticking.patch b/patches/server/0224-Allow-disabling-armor-stand-ticking.patch similarity index 87% rename from patches/server/0224-Allow-disabling-armour-stand-ticking.patch rename to patches/server/0224-Allow-disabling-armor-stand-ticking.patch index a8bcc90962..994e7fb60e 100644 --- a/patches/server/0224-Allow-disabling-armour-stand-ticking.patch +++ b/patches/server/0224-Allow-disabling-armor-stand-ticking.patch @@ -1,11 +1,11 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: kashike Date: Wed, 15 Aug 2018 01:26:09 -0700 -Subject: [PATCH] Allow disabling armour stand ticking +Subject: [PATCH] Allow disabling armor stand ticking diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf8340d2e6 100644 +index aff1b2195d2f187739394886d4c0bdbf0cb306b4..5ed648502268e9c4564b5a4984b68b499aeffeb9 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -93,9 +93,16 @@ public class ArmorStand extends LivingEntity { @@ -17,11 +17,11 @@ index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf + public boolean canTickSetByAPI = false; + private boolean noTickPoseDirty = false; + private boolean noTickEquipmentDirty = false; -+ // Paper end ++ // Paper end - Allow ArmorStands not to tick public ArmorStand(EntityType type, Level world) { super(type, world); -+ if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - armour stand ticking ++ if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - Allow ArmorStands not to tick this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); this.headPose = ArmorStand.DEFAULT_HEAD_POSE; @@ -29,7 +29,7 @@ index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf this.onEquipItem(enumitemslot, (ItemStack) this.armorItems.set(enumitemslot.getIndex(), itemstack), itemstack, silent); // CraftBukkit } -+ this.noTickEquipmentDirty = true; // Paper - Allow equipment to be updated even when tick disabled ++ this.noTickEquipmentDirty = true; // Paper - Allow ArmorStands not to tick; Still update equipment } @Override @@ -37,7 +37,7 @@ index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf } nbt.put("Pose", this.writePose()); -+ if (this.canTickSetByAPI) nbt.putBoolean("Paper.CanTickOverride", this.canTick); // Paper - persist no tick setting ++ if (this.canTickSetByAPI) nbt.putBoolean("Paper.CanTickOverride", this.canTick); // Paper - Allow ArmorStands not to tick } @Override @@ -45,12 +45,12 @@ index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf this.setNoBasePlate(nbt.getBoolean("NoBasePlate")); this.setMarker(nbt.getBoolean("Marker")); this.noPhysics = !this.hasPhysics(); -+ // Paper start - persist no tick ++ // Paper start - Allow ArmorStands not to tick + if (nbt.contains("Paper.CanTickOverride")) { + this.canTick = nbt.getBoolean("Paper.CanTickOverride"); + this.canTickSetByAPI = true; + } -+ // Paper end ++ // Paper end - Allow ArmorStands not to tick CompoundTag nbttagcompound1 = nbt.getCompound("Pose"); this.readPose(nbttagcompound1); @@ -58,7 +58,7 @@ index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf @Override public void tick() { -+ // Paper start ++ // Paper start - Allow ArmorStands not to tick + if (!this.canTick) { + if (this.noTickPoseDirty) { + this.noTickPoseDirty = false; @@ -72,15 +72,15 @@ index aff1b2195d2f187739394886d4c0bdbf0cb306b4..948ba97e318506dad96e59121297b5bf + + return; + } -+ // Paper end ++ // Paper end - Allow ArmorStands not to tick + super.tick(); -+ // Paper start - Split into separate method ++ // Paper start - Allow ArmorStands not to tick + updatePose(); + } + + public void updatePose() { -+ // Paper end ++ // Paper end - Allow ArmorStands not to tick Rotations vector3f = (Rotations) this.entityData.get(ArmorStand.DATA_HEAD_POSE); if (!this.headPose.equals(vector3f)) { diff --git a/patches/server/0227-Implement-Expanded-ArmorStand-API.patch b/patches/server/0227-Expand-ArmorStand-API.patch similarity index 99% rename from patches/server/0227-Implement-Expanded-ArmorStand-API.patch rename to patches/server/0227-Expand-ArmorStand-API.patch index 54d871b2b0..1112902d66 100644 --- a/patches/server/0227-Implement-Expanded-ArmorStand-API.patch +++ b/patches/server/0227-Expand-ArmorStand-API.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: willies952002 Date: Thu, 26 Jul 2018 02:25:46 -0400 -Subject: [PATCH] Implement Expanded ArmorStand API +Subject: [PATCH] Expand ArmorStand API Adds the following: - Add proper methods for getting and setting items in both hands. Deprecates old methods diff --git a/patches/server/0228-AnvilDamageEvent.patch b/patches/server/0228-AnvilDamageEvent.patch index 267d158dc2..fc3492a898 100644 --- a/patches/server/0228-AnvilDamageEvent.patch +++ b/patches/server/0228-AnvilDamageEvent.patch @@ -5,14 +5,14 @@ Subject: [PATCH] AnvilDamageEvent diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index d829173d2fc9fc0e12c24d736f1ed44417b81612..e97953e3dad164862d7e2f86bd86a6eff5b80ae2 100644 +index d829173d2fc9fc0e12c24d736f1ed44417b81612..878d3c3089635a515fa7f54c956159a1bb6ce29b 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -108,6 +108,16 @@ public class AnvilMenu extends ItemCombinerMenu { if (!player.getAbilities().instabuild && iblockdata.is(BlockTags.ANVIL) && player.getRandom().nextFloat() < 0.12F) { BlockState iblockdata1 = AnvilBlock.damage(iblockdata); -+ // Paper start ++ // Paper start - AnvilDamageEvent + com.destroystokyo.paper.event.block.AnvilDamagedEvent event = new com.destroystokyo.paper.event.block.AnvilDamagedEvent(getBukkitView(), iblockdata1 != null ? org.bukkit.craftbukkit.block.data.CraftBlockData.fromData(iblockdata1) : null); + if (!event.callEvent()) { + return; @@ -21,7 +21,7 @@ index d829173d2fc9fc0e12c24d736f1ed44417b81612..e97953e3dad164862d7e2f86bd86a6ef + } else { + iblockdata1 = ((org.bukkit.craftbukkit.block.data.CraftBlockData) event.getDamageState().getMaterial().createBlockData()).getState().setValue(AnvilBlock.FACING, iblockdata.getValue(AnvilBlock.FACING)); + } -+ // Paper end ++ // Paper end - AnvilDamageEvent if (iblockdata1 == null) { world.removeBlock(blockposition, false); world.levelEvent(1029, blockposition, 0); diff --git a/patches/server/0229-Add-TNTPrimeEvent.patch b/patches/server/0229-Add-TNTPrimeEvent.patch index b97e2a7eca..c58d9df2c7 100644 --- a/patches/server/0229-Add-TNTPrimeEvent.patch +++ b/patches/server/0229-Add-TNTPrimeEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add TNTPrimeEvent diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index d4832067f87491b8273b7957ce3eec1ad3ba9830..c00d4b8e39ef90bb06098bee290203502bd4225b 100644 +index de27517e13ecb15865aaa83257eaffb41c3eecfc..29683f0236163e5630d771d9409be0c23574a467 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -558,6 +558,11 @@ public class EnderDragon extends Mob implements Enemy { @@ -14,14 +14,14 @@ index d4832067f87491b8273b7957ce3eec1ad3ba9830..c00d4b8e39ef90bb06098bee29020350 } + // Paper start - TNTPrimeEvent + org.bukkit.block.Block tntBlock = this.level().getWorld().getBlockAt(blockposition.getX(), blockposition.getY(), blockposition.getZ()); -+ if(!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.EXPLOSION, explosionSource.getIndirectSourceEntity().getBukkitEntity()).callEvent()) ++ if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.EXPLOSION, explosionSource.getIndirectSourceEntity().getBukkitEntity()).callEvent()) + continue; -+ // Paper end ++ // Paper end - TNTPrimeEvent nmsBlock.wasExploded(this.level(), blockposition, this.explosionSource); this.level().removeBlock(blockposition, false); diff --git a/src/main/java/net/minecraft/world/level/block/FireBlock.java b/src/main/java/net/minecraft/world/level/block/FireBlock.java -index 016c8b7762c2b4eacb95a455940db4684b34e03c..80e90bae3c05bbaf978a66629d9c4132c22efd1a 100644 +index 016c8b7762c2b4eacb95a455940db4684b34e03c..c214a8a72c3fa27eaadc458b10a610e0de7937ec 100644 --- a/src/main/java/net/minecraft/world/level/block/FireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FireBlock.java @@ -302,12 +302,19 @@ public class FireBlock extends BaseFireBlock { @@ -29,7 +29,7 @@ index 016c8b7762c2b4eacb95a455940db4684b34e03c..80e90bae3c05bbaf978a66629d9c4132 world.setBlock(blockposition, this.getStateWithAge(world, blockposition, l), 3); } else { - world.removeBlock(blockposition, false); -+ if(iblockdata.getBlock() != Blocks.TNT) world.removeBlock(blockposition, false); // Paper - TNTPrimeEvent - We might be cancelling it below, move the setAir down ++ if(iblockdata.getBlock() != Blocks.TNT) world.removeBlock(blockposition, false); // Paper - TNTPrimeEvent; We might be cancelling it below, move the setAir down } Block block = iblockdata.getBlock(); @@ -41,12 +41,12 @@ index 016c8b7762c2b4eacb95a455940db4684b34e03c..80e90bae3c05bbaf978a66629d9c4132 + return; + } + world.removeBlock(blockposition, false); -+ // Paper end ++ // Paper end - TNTPrimeEvent TntBlock.explode(world, blockposition); } } diff --git a/src/main/java/net/minecraft/world/level/block/TntBlock.java b/src/main/java/net/minecraft/world/level/block/TntBlock.java -index cc20c320cbb3420e5e302a94571bab374c8553c8..443a8a8e2f0791a1455193cb125e1560f5d1edab 100644 +index cc20c320cbb3420e5e302a94571bab374c8553c8..ab53b42eec6eb57b373487e50066967042d6eb40 100644 --- a/src/main/java/net/minecraft/world/level/block/TntBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TntBlock.java @@ -49,6 +49,12 @@ public class TntBlock extends Block { @@ -58,7 +58,7 @@ index cc20c320cbb3420e5e302a94571bab374c8553c8..443a8a8e2f0791a1455193cb125e1560 + if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.REDSTONE, null).callEvent()) { + return; + } -+ // Paper end ++ // Paper end - TNTPrimeEvent TntBlock.explode(world, pos); world.removeBlock(pos, false); } @@ -71,7 +71,7 @@ index cc20c320cbb3420e5e302a94571bab374c8553c8..443a8a8e2f0791a1455193cb125e1560 + if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.REDSTONE, null).callEvent()) { + return; + } -+ // Paper end ++ // Paper end - TNTPrimeEvent TntBlock.explode(world, pos); world.removeBlock(pos, false); } @@ -85,7 +85,7 @@ index cc20c320cbb3420e5e302a94571bab374c8553c8..443a8a8e2f0791a1455193cb125e1560 + if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.EXPLOSION, source).callEvent()) { + return; + } -+ // Paper end ++ // Paper end - TNTPrimeEvent PrimedTnt entitytntprimed = new PrimedTnt(world, (double) pos.getX() + 0.5D, (double) pos.getY(), (double) pos.getZ() + 0.5D, explosion.getIndirectSourceEntity()); int i = entitytntprimed.getFuse(); @@ -98,7 +98,7 @@ index cc20c320cbb3420e5e302a94571bab374c8553c8..443a8a8e2f0791a1455193cb125e1560 + if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.ITEM, player.getBukkitEntity()).callEvent()) { + return InteractionResult.FAIL; + } -+ // Paper end ++ // Paper end - TNTPrimeEvent TntBlock.explode(world, pos, player); world.setBlock(pos, Blocks.AIR.defaultBlockState(), 11); Item item = itemstack.getItem(); @@ -111,7 +111,7 @@ index cc20c320cbb3420e5e302a94571bab374c8553c8..443a8a8e2f0791a1455193cb125e1560 + if (!new com.destroystokyo.paper.event.block.TNTPrimeEvent(tntBlock, com.destroystokyo.paper.event.block.TNTPrimeEvent.PrimeReason.PROJECTILE, projectile.getBukkitEntity()).callEvent()) { + return; + } -+ // Paper end ++ // Paper end - TNTPrimeEvent TntBlock.explode(world, blockposition, entity instanceof LivingEntity ? (LivingEntity) entity : null); world.removeBlock(blockposition, false); } diff --git a/patches/server/0230-Break-up-and-make-tab-spam-limits-configurable.patch b/patches/server/0230-Break-up-and-make-tab-spam-limits-configurable.patch index 0f0b64b09a..809ea276c8 100644 --- a/patches/server/0230-Break-up-and-make-tab-spam-limits-configurable.patch +++ b/patches/server/0230-Break-up-and-make-tab-spam-limits-configurable.patch @@ -22,7 +22,7 @@ to take the burden of this into their own hand without having to rely on plugins doing unsafe things. diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 1e6c704279fe91530a23d17a151d28aa3fb9126e..ea7eb7be6abfcfc3c70eba42cf31cc2030747428 100644 +index e6b4111ba32906d1b3705b8a2cc06a07956e2891..3cb5bd145a4a719943e9fe4bc40ff7420abdd46d 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -257,6 +257,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -37,7 +37,7 @@ index 1e6c704279fe91530a23d17a151d28aa3fb9126e..ea7eb7be6abfcfc3c70eba42cf31cc20 this.keepConnectionAlive(); // CraftBukkit start for (int spam; (spam = this.chatSpamTickCount.get()) > 0 && !this.chatSpamTickCount.compareAndSet(spam, spam - 1); ) ; -+ if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable ++ if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - configurable tab spam limits /* Use thread-safe field access instead if (this.chatSpamTickCount > 0) { --this.chatSpamTickCount; @@ -46,7 +46,7 @@ index 1e6c704279fe91530a23d17a151d28aa3fb9126e..ea7eb7be6abfcfc3c70eba42cf31cc20 // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - run this async // CraftBukkit start - if (this.chatSpamTickCount.addAndGet(1) > 500 && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { -+ if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper start - split and make configurable ++ if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper - configurable tab spam limits server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]))); // Paper return; } diff --git a/patches/server/0233-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch b/patches/server/0233-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch index 67d0628018..28ff4b9a12 100644 --- a/patches/server/0233-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch +++ b/patches/server/0233-Add-Debug-Entities-option-to-debug-dupe-uuid-issues.patch @@ -3,9 +3,6 @@ From: Aikar Date: Sat, 21 Jul 2018 08:25:40 -0400 Subject: [PATCH] Add Debug Entities option to debug dupe uuid issues -Add -Ddebug.entities=true to your JVM flags to gain more information - -1.17: Needs to be reworked for new entity storage system diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java index c9e3e104cd051a38e367653dc6c4f969665fc250..45ee0cd242271883412284625230822d9c8a5452 100644 @@ -29,101 +26,50 @@ index c9e3e104cd051a38e367653dc6c4f969665fc250..45ee0cd242271883412284625230822d protected void tick() { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 536f1380ae3387ac4d062fe2f8b934a8d49905fb..1e10d55962a7221e197723eb42434be052a7661a 100644 +index 536f1380ae3387ac4d062fe2f8b934a8d49905fb..5538e810ef0a68f00043d4e750eb735300d50664 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -222,6 +222,9 @@ public class ServerLevel extends Level implements WorldGenLevel { - public final LevelStorageSource.LevelStorageAccess convertable; - public final UUID uuid; - public boolean hasPhysicsEvent = true; // Paper -+ public static Throwable getAddToWorldStackTrace(Entity entity) { -+ return new Throwable(entity + " Added to world at " + new java.util.Date()); -+ } - - @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI - return this.chunkSource.getChunk(x, z, false); -@@ -1436,7 +1439,28 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1436,6 +1436,12 @@ public class ServerLevel extends Level implements WorldGenLevel { // CraftBukkit start private boolean addEntity(Entity entity, CreatureSpawnEvent.SpawnReason spawnReason) { org.spigotmc.AsyncCatcher.catchOp("entity add"); // Spigot -+ // Paper start ++ // Paper start - extra debug info + if (entity.valid) { -+ MinecraftServer.LOGGER.error("Attempted Double World add on " + entity, new Throwable()); -+ -+ if (DEBUG_ENTITIES) { -+ Throwable thr = entity.addedToWorldStack; -+ if (thr == null) { -+ MinecraftServer.LOGGER.error("Double add entity has no add stacktrace"); -+ } else { -+ MinecraftServer.LOGGER.error("Double add stacktrace: ", thr); -+ } -+ } ++ MinecraftServer.LOGGER.error("Attempted Double World add on {}", entity, new Throwable()); + return true; + } -+ // Paper end ++ // Paper end - extra debug info if (entity.isRemoved()) { -+ // Paper start -+ if (DEBUG_ENTITIES) { -+ new Throwable("Tried to add entity " + entity + " but it was marked as removed already").printStackTrace(); // CraftBukkit -+ getAddToWorldStackTrace(entity).printStackTrace(); -+ } -+ // Paper end // WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getKey(entity.getType())); // CraftBukkit return false; - } else { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index bebbbf9a0bca8ab94dd269d19ebf55622a3c2ef8..6d04954493680bc4fbad67ff2e43411f970f78f5 100644 +index bebbbf9a0bca8ab94dd269d19ebf55622a3c2ef8..a906fda4d5d92054f5c0cea4a8167cdb29287cc3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -241,6 +241,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -241,6 +241,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper private CraftEntity bukkitEntity; + public @org.jetbrains.annotations.Nullable net.minecraft.server.level.ChunkMap.TrackedEntity tracker; // Paper -+ public @Nullable Throwable addedToWorldStack; // Paper - entity debug public CraftEntity getBukkitEntity() { if (this.bukkitEntity == null) { this.bukkitEntity = CraftEntity.getEntity(this.level.getCraftServer(), this); -diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 71c2f082091f452cfc74557cd599cf7f080b889b..14c963d507173dae6015a0c81e3a690768012bed 100644 ---- a/src/main/java/net/minecraft/world/level/Level.java -+++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -153,6 +153,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - public boolean pvpMode; - public boolean keepSpawnInMemory = true; - public org.bukkit.generator.ChunkGenerator generator; -+ public static final boolean DEBUG_ENTITIES = Boolean.getBoolean("debug.entities"); // Paper - - public boolean preventPoiUpdated = false; // CraftBukkit - SPIGOT-5710 - public boolean captureBlockStates = false; diff --git a/src/main/java/net/minecraft/world/level/entity/EntityLookup.java b/src/main/java/net/minecraft/world/level/entity/EntityLookup.java -index 21a2800db22f287b9c6a8290326fdf3b94ae94b1..d45d832232be5017dde53816191c2b1830a0da32 100644 +index 21a2800db22f287b9c6a8290326fdf3b94ae94b1..2e561ac90a8c91ea13cfc18d09f8e0abbcff9385 100644 --- a/src/main/java/net/minecraft/world/level/entity/EntityLookup.java +++ b/src/main/java/net/minecraft/world/level/entity/EntityLookup.java -@@ -34,6 +34,26 @@ public class EntityLookup { +@@ -34,6 +34,14 @@ public class EntityLookup { UUID uUID = entity.getUUID(); if (this.byUuid.containsKey(uUID)) { LOGGER.warn("Duplicate entity UUID {}: {}", uUID, entity); + // Paper start - extra debug info -+ if (entity instanceof net.minecraft.world.entity.Entity entityCast) { -+ if (net.minecraft.server.level.ServerLevel.DEBUG_ENTITIES) { -+ entityCast.addedToWorldStack = net.minecraft.server.level.ServerLevel.getAddToWorldStackTrace(entityCast); -+ } -+ -+ T old = this.byUuid.get(entity.getUUID()); -+ if (old instanceof net.minecraft.world.entity.Entity oldCast && old != null && oldCast.getId() != entity.getId() && oldCast.valid) { -+ LOGGER.error("Overwrote an existing entity " + oldCast + " with " + entity); -+ if (net.minecraft.server.level.ServerLevel.DEBUG_ENTITIES) { -+ if (oldCast.addedToWorldStack != null) { -+ oldCast.addedToWorldStack.printStackTrace(); -+ } else { -+ LOGGER.error("Oddly, the old entity was not added to the world in the normal way. Plugins?"); -+ } -+ entityCast.addedToWorldStack.printStackTrace(); -+ } ++ if (entity instanceof net.minecraft.world.entity.Entity) { ++ final T old = this.byUuid.get(entity.getUUID()); ++ if (old instanceof net.minecraft.world.entity.Entity oldCast && oldCast.getId() != entity.getId() && oldCast.valid) { ++ LOGGER.error("Overwrote an existing entity {} with {}", oldCast, entity); + } + } -+ // Paper end ++ // Paper end - extra debug info } else { this.byUuid.put(uUID, entity); this.byId.put(entity.getId(), entity); diff --git a/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch b/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch index c3b2f0f468..11c5619fca 100644 --- a/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch +++ b/patches/server/0234-Add-Early-Warning-Feature-to-WatchDog.patch @@ -9,7 +9,7 @@ thread dumps at an interval until the point of crash. This will help diagnose what was going on in that time before the crash. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b3666442b906c59aca50c230c3a6c8f2878a5bee..1a9faaecf50f3a17561c77cb262074c741ebfcc0 100644 +index 7f68ffdb88c0c4b9d91f699d088cd81e62e94620..85beb9c7a02f7f561716d017f40ae24ad49a61a3 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1075,6 +1075,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> { @@ -44,69 +44,61 @@ index 4d6f5e627d386f9ca2d7653b0f485c82a13557f5..665120a62525f56912263a3e1b6f12f6 private static final Gson GSON = (new GsonBuilder()).setPrettyPrinting().create(); private final File file; - private final Map map = Maps.newHashMap(); -+ private final Map map = Maps.newConcurrentMap(); // Paper - replace HashMap is ConcurrentHashMap ++ private final Map map = Maps.newConcurrentMap(); // Paper - Use ConcurrentHashMap in JsonList public StoredUserList(File file) { this.file = file; -@@ -54,8 +54,13 @@ public abstract class StoredUserList> { +@@ -54,8 +54,11 @@ public abstract class StoredUserList> { @Nullable public V get(K key) { - this.removeExpired(); - return (V) this.map.get(this.getKeyForUser(key)); // CraftBukkit - fix decompile error -+ // Paper start -+ // this.g(); -+ // return (V) this.d.get(this.a(k0)); // CraftBukkit - fix decompile error ++ // Paper start - Use ConcurrentHashMap in JsonList + return (V) this.map.computeIfPresent(this.getKeyForUser(key), (k, v) -> { + return v.hasExpired() ? null : v; + }); -+ // Paper end ++ // Paper end - Use ConcurrentHashMap in JsonList } public void remove(K key) { -@@ -78,7 +83,8 @@ public abstract class StoredUserList> { +@@ -78,7 +81,7 @@ public abstract class StoredUserList> { } public boolean isEmpty() { - return this.map.size() < 1; -+ // return this.d.size() < 1; // Paper -+ return this.map.isEmpty(); // Paper - readability is the goal. As an aside, isEmpty() uses only sumCount() and a comparison. size() uses sumCount(), casts, and boolean logic ++ return this.map.isEmpty(); // Paper - Use ConcurrentHashMap in JsonList } protected String getKeyForUser(K profile) { -@@ -90,14 +96,14 @@ public abstract class StoredUserList> { +@@ -90,25 +93,7 @@ public abstract class StoredUserList> { } private void removeExpired() { - List list = Lists.newArrayList(); - Iterator iterator = this.map.values().iterator(); -+ /*List list = Lists.newArrayList(); -+ Iterator iterator = this.d.values().iterator(); - - while (iterator.hasNext()) { - V v0 = (V) iterator.next(); // CraftBukkit - decompile error - - if (v0.hasExpired()) { +- +- while (iterator.hasNext()) { +- V v0 = (V) iterator.next(); // CraftBukkit - decompile error +- +- if (v0.hasExpired()) { - list.add(v0.getUser()); -+ list.add(v0.getKey()); - } - } - -@@ -106,9 +112,11 @@ public abstract class StoredUserList> { - while (iterator.hasNext()) { - K k0 = (K) iterator.next(); // CraftBukkit - decompile error - +- } +- } +- +- iterator = list.iterator(); +- +- while (iterator.hasNext()) { +- K k0 = (K) iterator.next(); // CraftBukkit - decompile error +- - this.map.remove(this.getKeyForUser(k0)); - } -+ this.d.remove(this.a(k0)); -+ }*/ - -+ this.map.values().removeIf(StoredUserEntry::hasExpired); -+ // Paper end +- ++ this.map.values().removeIf(StoredUserEntry::hasExpired); // Paper - Use ConcurrentHashMap in JsonList } protected abstract StoredUserEntry createEntry(JsonObject json); -@@ -118,6 +126,7 @@ public abstract class StoredUserList> { +@@ -118,6 +103,7 @@ public abstract class StoredUserList> { } public void save() throws IOException { diff --git a/patches/server/0236-Use-a-Queue-for-Queueing-Commands.patch b/patches/server/0236-Use-a-Queue-for-Queueing-Commands.patch index 4eedabbc17..1aad9d2192 100644 --- a/patches/server/0236-Use-a-Queue-for-Queueing-Commands.patch +++ b/patches/server/0236-Use-a-Queue-for-Queueing-Commands.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Use a Queue for Queueing Commands Lists are bad as Queues mmmkay. diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index adae2d7f9ced8ce6d2e15aafb8b53ef85e79b6d1..90b261b23f6731f60a7d4f412a6bf4c6c6aa7095 100644 +index 1de3b2fc41e2fe2d27ebe9f93810b4503cec89cb..907129b7ca0bb2b356502c84b86518e843cecfa2 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -69,7 +69,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -14,7 +14,7 @@ index adae2d7f9ced8ce6d2e15aafb8b53ef85e79b6d1..90b261b23f6731f60a7d4f412a6bf4c6 private static final int CONVERSION_RETRY_DELAY_MS = 5000; private static final int CONVERSION_RETRIES = 2; - private final List consoleInput = Collections.synchronizedList(Lists.newArrayList()); -+ private final java.util.Queue serverCommandQueue = new java.util.concurrent.ConcurrentLinkedQueue<>(); // Paper - use a proper queuemmands ++ private final java.util.Queue serverCommandQueue = new java.util.concurrent.ConcurrentLinkedQueue<>(); // Paper - Perf: use a proper queue @Nullable private QueryThreadGs4 queryThreadGs4; // private final RemoteControlCommandListener rconConsoleSource; // CraftBukkit - remove field @@ -23,17 +23,17 @@ index adae2d7f9ced8ce6d2e15aafb8b53ef85e79b6d1..90b261b23f6731f60a7d4f412a6bf4c6 } // Paper end - rewrite chunk system - this.consoleInput.add(new ConsoleInput(command, commandSource)); -+ this.serverCommandQueue.add(new ConsoleInput(command, commandSource)); // Paper - use proper queue ++ this.serverCommandQueue.add(new ConsoleInput(command, commandSource)); // Paper - Perf: use proper queue } public void handleConsoleInputs() { MinecraftTimings.serverCommandTimer.startTiming(); // Spigot - while (!this.consoleInput.isEmpty()) { - ConsoleInput servercommand = (ConsoleInput) this.consoleInput.remove(0); -+ // Paper start - use proper queue ++ // Paper start - Perf: use proper queue + ConsoleInput servercommand; + while ((servercommand = this.serverCommandQueue.poll()) != null) { -+ // Paper end ++ // Paper end - Perf: use proper queue // CraftBukkit start - ServerCommand for preprocessing ServerCommandEvent event = new ServerCommandEvent(this.console, servercommand.msg); diff --git a/patches/server/0237-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch b/patches/server/0237-Ability-to-get-block-entities-from-a-chunk-without-s.patch similarity index 96% rename from patches/server/0237-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch rename to patches/server/0237-Ability-to-get-block-entities-from-a-chunk-without-s.patch index 45533e8ac2..5ae7d9508f 100644 --- a/patches/server/0237-Ability-to-get-Tile-Entities-from-a-chunk-without-sn.patch +++ b/patches/server/0237-Ability-to-get-block-entities-from-a-chunk-without-s.patch @@ -1,7 +1,7 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Aikar Date: Wed, 15 Aug 2018 01:16:34 -0400 -Subject: [PATCH] Ability to get Tile Entities from a chunk without snapshots +Subject: [PATCH] Ability to get block entities from a chunk without snapshots diff --git a/src/main/java/org/bukkit/craftbukkit/CraftChunk.java b/src/main/java/org/bukkit/craftbukkit/CraftChunk.java diff --git a/patches/server/0238-Optimize-BlockPosition-helper-methods.patch b/patches/server/0238-Optimize-BlockPosition-helper-methods.patch index 43c92ef89e..ed94eb3b7b 100644 --- a/patches/server/0238-Optimize-BlockPosition-helper-methods.patch +++ b/patches/server/0238-Optimize-BlockPosition-helper-methods.patch @@ -3,10 +3,9 @@ From: Spottedleaf Date: Wed, 15 Aug 2018 12:05:12 -0700 Subject: [PATCH] Optimize BlockPosition helper methods -Resolves #1338 diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index 2bb5e51f71cbf66819d198505aa4a5ecffd246c6..ef5f897164136767e9c6dd61b76c2a1dedd4f350 100644 +index 2bb5e51f71cbf66819d198505aa4a5ecffd246c6..3b3d81886d50ee6510ff366e11817a578c645089 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java @@ -132,67 +132,84 @@ public class BlockPos extends Vec3i { @@ -14,78 +13,78 @@ index 2bb5e51f71cbf66819d198505aa4a5ecffd246c6..ef5f897164136767e9c6dd61b76c2a1d @Override public BlockPos above() { - return this.relative(Direction.UP); -+ return new BlockPos(this.getX(), this.getY() + 1, this.getZ()); // Paper - Optimize BlockPosition ++ return new BlockPos(this.getX(), this.getY() + 1, this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos above(int distance) { - return this.relative(Direction.UP, distance); -+ return distance == 0 ? this : new BlockPos(this.getX(), this.getY() + distance, this.getZ()); // Paper - Optimize BlockPosition ++ return distance == 0 ? this : new BlockPos(this.getX(), this.getY() + distance, this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos below() { - return this.relative(Direction.DOWN); -+ return new BlockPos(this.getX(), this.getY() - 1, this.getZ()); // Paper - Optimize BlockPosition ++ return new BlockPos(this.getX(), this.getY() - 1, this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos below(int i) { - return this.relative(Direction.DOWN, i); -+ return i == 0 ? this : new BlockPos(this.getX(), this.getY() - i, this.getZ()); // Paper - Optimize BlockPosition ++ return i == 0 ? this : new BlockPos(this.getX(), this.getY() - i, this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos north() { - return this.relative(Direction.NORTH); -+ return new BlockPos(this.getX(), this.getY(), this.getZ() - 1); // Paper - Optimize BlockPosition ++ return new BlockPos(this.getX(), this.getY(), this.getZ() - 1); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos north(int distance) { - return this.relative(Direction.NORTH, distance); -+ return distance == 0 ? this : new BlockPos(this.getX(), this.getY(), this.getZ() - distance); // Paper - Optimize BlockPosition ++ return distance == 0 ? this : new BlockPos(this.getX(), this.getY(), this.getZ() - distance); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos south() { - return this.relative(Direction.SOUTH); -+ return new BlockPos(this.getX(), this.getY(), this.getZ() + 1); // Paper - Optimize BlockPosition ++ return new BlockPos(this.getX(), this.getY(), this.getZ() + 1); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos south(int distance) { - return this.relative(Direction.SOUTH, distance); -+ return distance == 0 ? this : new BlockPos(this.getX(), this.getY(), this.getZ() + distance); // Paper - Optimize BlockPosition ++ return distance == 0 ? this : new BlockPos(this.getX(), this.getY(), this.getZ() + distance); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos west() { - return this.relative(Direction.WEST); -+ return new BlockPos(this.getX() - 1, this.getY(), this.getZ()); // Paper - Optimize BlockPosition ++ return new BlockPos(this.getX() - 1, this.getY(), this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos west(int distance) { - return this.relative(Direction.WEST, distance); -+ return distance == 0 ? this : new BlockPos(this.getX() - distance, this.getY(), this.getZ()); // Paper - Optimize BlockPosition ++ return distance == 0 ? this : new BlockPos(this.getX() - distance, this.getY(), this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos east() { - return this.relative(Direction.EAST); -+ return new BlockPos(this.getX() + 1, this.getY(), this.getZ()); // Paper - Optimize BlockPosition ++ return new BlockPos(this.getX() + 1, this.getY(), this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos east(int distance) { - return this.relative(Direction.EAST, distance); -+ return distance == 0 ? this : new BlockPos(this.getX() + distance, this.getY(), this.getZ()); // Paper - Optimize BlockPosition ++ return distance == 0 ? this : new BlockPos(this.getX() + distance, this.getY(), this.getZ()); // Paper - Perf: Optimize BlockPosition } @Override public BlockPos relative(Direction direction) { -+ // Paper start - Optimize BlockPosition ++ // Paper start - Perf: Optimize BlockPosition + switch(direction) { + case UP: + return new BlockPos(this.getX(), this.getY() + 1, this.getZ()); @@ -102,7 +101,7 @@ index 2bb5e51f71cbf66819d198505aa4a5ecffd246c6..ef5f897164136767e9c6dd61b76c2a1d + default: return new BlockPos(this.getX() + direction.getStepX(), this.getY() + direction.getStepY(), this.getZ() + direction.getStepZ()); + } -+ // Paper end ++ // Paper end - Perf: Optimize BlockPosition } @Override diff --git a/patches/server/0240-Slime-Pathfinder-Events.patch b/patches/server/0240-Slime-Pathfinder-Events.patch index 92d79aa8c0..f41d435c06 100644 --- a/patches/server/0240-Slime-Pathfinder-Events.patch +++ b/patches/server/0240-Slime-Pathfinder-Events.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Slime Pathfinder Events diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f486161051741d 100644 +index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..ca3bf718336ef02d379c0ec670f62fafb1600153 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java @@ -115,6 +115,7 @@ public class Slime extends Mob implements Enemy { @@ -20,7 +20,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 public void readAdditionalSaveData(CompoundTag nbt) { this.setSize(nbt.getInt("Size") + 1, false); super.readAdditionalSaveData(nbt); -+ // Paper start - check exists before loading or this will be loaded as false ++ // Paper start + if (nbt.contains("Paper.canWander")) { + this.canWander = nbt.getBoolean("Paper.canWander"); + } @@ -33,7 +33,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 @Override public boolean canUse() { - return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl; -+ return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeSwimEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper ++ return (this.slime.isInWater() || this.slime.isInLava()) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeSwimEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper - Slime pathfinder events } @Override @@ -42,7 +42,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 LivingEntity entityliving = this.slime.getTarget(); - return entityliving == null ? false : (!this.slime.canAttack(entityliving) ? false : this.slime.getMoveControl() instanceof Slime.SlimeMoveControl); -+ // Paper start ++ // Paper start - Slime pathfinder events + if (entityliving == null || !entityliving.isAlive()) { + return false; + } @@ -50,7 +50,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 + return false; + } + return this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent(); -+ // Paper end ++ // Paper end - Slime pathfinder events } @Override @@ -59,7 +59,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 LivingEntity entityliving = this.slime.getTarget(); - return entityliving == null ? false : (!this.slime.canAttack(entityliving) ? false : --this.growTiredTimer > 0); -+ // Paper start ++ // Paper start - Slime pathfinder events + if (entityliving == null || !entityliving.isAlive()) { + return false; + } @@ -67,7 +67,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 + return false; + } + return --this.growTiredTimer > 0 && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeTargetLivingEntityEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), (org.bukkit.entity.LivingEntity) entityliving.getBukkitEntity()).callEvent(); -+ // Paper end ++ // Paper end - Slime pathfinder events } @Override @@ -76,12 +76,12 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 } + -+ // Paper start - clear timer and target when goal resets ++ // Paper start - Slime pathfinder events; clear timer and target when goal resets + public void stop() { + this.growTiredTimer = 0; + this.slime.setTarget(null); + } -+ // Paper end ++ // Paper end - Slime pathfinder events } private static class SlimeRandomDirectionGoal extends Goal { @@ -90,7 +90,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 @Override public boolean canUse() { - return this.slime.getTarget() == null && (this.slime.onGround() || this.slime.isInWater() || this.slime.isInLava() || this.slime.hasEffect(MobEffects.LEVITATION)) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl; -+ return this.slime.getTarget() == null && (this.slime.onGround() || this.slime.isInWater() || this.slime.isInLava() || this.slime.hasEffect(MobEffects.LEVITATION)) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander; // Paper - add canWander ++ return this.slime.getTarget() == null && (this.slime.onGround() || this.slime.isInWater() || this.slime.isInLava() || this.slime.hasEffect(MobEffects.LEVITATION)) && this.slime.getMoveControl() instanceof Slime.SlimeMoveControl && this.slime.canWander; // Paper - Slime pathfinder events } @Override @@ -98,11 +98,11 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 if (--this.nextRandomizeTime <= 0) { this.nextRandomizeTime = this.adjustedTickDelay(40 + this.slime.getRandom().nextInt(60)); this.chosenDegrees = (float) this.slime.getRandom().nextInt(360); -+ // Paper start ++ // Paper start - Slime pathfinder events + com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent event = new com.destroystokyo.paper.event.entity.SlimeChangeDirectionEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity(), this.chosenDegrees); + if (!this.slime.canWander || !event.callEvent()) return; + this.chosenDegrees = event.getNewYaw(); -+ // Paper end ++ // Paper end - Slime pathfinder events } MoveControl controllermove = this.slime.getMoveControl(); @@ -111,7 +111,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 @Override public boolean canUse() { - return !this.slime.isPassenger(); -+ return !this.slime.isPassenger() && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeWanderEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper ++ return !this.slime.isPassenger() && this.slime.canWander && new com.destroystokyo.paper.event.entity.SlimeWanderEvent((org.bukkit.entity.Slime) this.slime.getBukkitEntity()).callEvent(); // Paper - Slime pathfinder events } @Override @@ -120,7 +120,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 } } + -+ // Paper start ++ // Paper start - Slime pathfinder events + private boolean canWander = true; + public boolean canWander() { + return canWander; @@ -129,7 +129,7 @@ index ef382b08ff8e7f24500aed6752c76e6ffc3f0729..fa014c04cc51a55345a1c50098f48616 + public void setWander(boolean canWander) { + this.canWander = canWander; + } -+ // Paper end ++ // Paper end - Slime pathfinder events } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSlime.java index 3d991d9d9388108ec6d137950913209d61d132e7..3d9b7c0e128ea05bec5600c774e9685998b71cac 100644 diff --git a/patches/server/0241-Configurable-speed-for-water-flowing-over-lava.patch b/patches/server/0241-Configurable-speed-for-water-flowing-over-lava.patch index 4c146b3d29..1ae5655967 100644 --- a/patches/server/0241-Configurable-speed-for-water-flowing-over-lava.patch +++ b/patches/server/0241-Configurable-speed-for-water-flowing-over-lava.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable speed for water flowing over lava diff --git a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java -index 82afefbbc3b9d3571792d66e6d4f9d687971aa66..2bd097203f1e92d3fc343f91dc37220e09dd5066 100644 +index 82afefbbc3b9d3571792d66e6d4f9d687971aa66..9b3dcf1a4d4cece92a629506d341f6bfe79d13d0 100644 --- a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java @@ -140,11 +140,31 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -13,12 +13,12 @@ index 82afefbbc3b9d3571792d66e6d4f9d687971aa66..2bd097203f1e92d3fc343f91dc37220e public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) { if (this.shouldSpreadLiquid(world, pos, state)) { - world.scheduleTick(pos, state.getFluidState().getType(), this.fluid.getTickDelay(world)); -+ world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper ++ world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper - Configurable speed for water flowing over lava } } -+ // Paper start - Get flow speed. Throttle if its water and flowing adjacent to lava ++ // Paper start - Configurable speed for water flowing over lava + public int getFlowSpeed(Level world, BlockPos blockposition) { + if (net.minecraft.core.registries.BuiltInRegistries.FLUID.wrapAsHolder(this.fluid).is(FluidTags.WATER)) { + if ( @@ -36,7 +36,7 @@ index 82afefbbc3b9d3571792d66e6d4f9d687971aa66..2bd097203f1e92d3fc343f91dc37220e + final FluidState fluidState = world.getFluidIfLoaded(blockPos); + return fluidState != null && fluidState.is(FluidTags.LAVA); + } -+ // Paper end ++ // Paper end - Configurable speed for water flowing over lava + @Override public BlockState updateShape(BlockState state, Direction direction, BlockState neighborState, LevelAccessor world, BlockPos pos, BlockPos neighborPos) { @@ -46,7 +46,7 @@ index 82afefbbc3b9d3571792d66e6d4f9d687971aa66..2bd097203f1e92d3fc343f91dc37220e public void neighborChanged(BlockState state, Level world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { if (this.shouldSpreadLiquid(world, pos, state)) { - world.scheduleTick(pos, state.getFluidState().getType(), this.fluid.getTickDelay(world)); -+ world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper ++ world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper - Configurable speed for water flowing over lava } } diff --git a/patches/server/0242-Optimize-CraftBlockData-Creation.patch b/patches/server/0242-Optimize-CraftBlockData-Creation.patch index d8b3ca0f4c..6cf8e3c2f4 100644 --- a/patches/server/0242-Optimize-CraftBlockData-Creation.patch +++ b/patches/server/0242-Optimize-CraftBlockData-Creation.patch @@ -7,21 +7,21 @@ Avoids a hashmap lookup by cacheing a reference to the CraftBlockData and cloning it when one is needed. diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index a009fca54665cbc3f11cad776256fbf1fbbb18c7..2c7d025b2af3a66772c3f394620483045fb80242 100644 +index a009fca54665cbc3f11cad776256fbf1fbbb18c7..7e4264f87a0f81db71d49dbede32a1bad87f7ca8 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -876,6 +876,14 @@ public abstract class BlockBehaviour implements FeatureElement { this.replaceable = blockbase_info.replaceable; this.conditionallyFullOpaque = this.canOcclude & this.useShapeForLightOcclusion; // Paper } -+ // Paper start - impl cached craft block data, lazy load to fix issue with loading at the wrong time ++ // Paper start - Perf: impl cached craft block data, lazy load to fix issue with loading at the wrong time + private org.bukkit.craftbukkit.block.data.CraftBlockData cachedCraftBlockData; + + public org.bukkit.craftbukkit.block.data.CraftBlockData createCraftBlockData() { + if (cachedCraftBlockData == null) cachedCraftBlockData = org.bukkit.craftbukkit.block.data.CraftBlockData.createData(asState()); + return (org.bukkit.craftbukkit.block.data.CraftBlockData) cachedCraftBlockData.clone(); + } -+ // Paper end ++ // Paper end - Perf: impl cached craft block data, lazy load to fix issue with loading at the wrong time private boolean calculateSolid() { if (((Block) this.owner).properties.forceSolidOn) { diff --git a/patches/server/0243-Optimize-MappedRegistry.patch b/patches/server/0243-Optimize-MappedRegistry.patch index ae3bc03120..cb661e87c8 100644 --- a/patches/server/0243-Optimize-MappedRegistry.patch +++ b/patches/server/0243-Optimize-MappedRegistry.patch @@ -8,7 +8,7 @@ Use larger initial sizes to increase bucket capacity on the BiMap BiMap.get was seen to be using a good bit of CPU time. diff --git a/src/main/java/net/minecraft/core/MappedRegistry.java b/src/main/java/net/minecraft/core/MappedRegistry.java -index 33990e4f9b5e7e3d8080c80f639b81b7f798c859..742af4feb3986ca7d8f5ed136b556a41cbe0722f 100644 +index 33990e4f9b5e7e3d8080c80f639b81b7f798c859..b2d22bb25499756fe393cf562f8a4eda0649c26d 100644 --- a/src/main/java/net/minecraft/core/MappedRegistry.java +++ b/src/main/java/net/minecraft/core/MappedRegistry.java @@ -35,13 +35,13 @@ public class MappedRegistry implements WritableRegistry { @@ -16,17 +16,17 @@ index 33990e4f9b5e7e3d8080c80f639b81b7f798c859..742af4feb3986ca7d8f5ed136b556a41 final ResourceKey> key; private final ObjectList> byId = new ObjectArrayList<>(256); - private final Reference2IntMap toId = Util.make(new Reference2IntOpenHashMap<>(), (map) -> { -+ private final Reference2IntMap toId = Util.make(new Reference2IntOpenHashMap<>(2048), (map) -> { // Paper - use bigger expected size to reduce collisions ++ private final Reference2IntMap toId = Util.make(new Reference2IntOpenHashMap<>(2048), (map) -> { // Paper - Perf: Use bigger expected size to reduce collisions map.defaultReturnValue(-1); }); - private final Map> byLocation = new HashMap<>(); - private final Map, Holder.Reference> byKey = new HashMap<>(); - private final Map> byValue = new IdentityHashMap<>(); - private final Map lifecycles = new IdentityHashMap<>(); -+ private final Map> byLocation = new HashMap<>(2048); // Paper - use bigger expected size to reduce collisions -+ private final Map, Holder.Reference> byKey = new HashMap<>(2048); // Paper - use bigger expected size to reduce collisions -+ private final Map> byValue = new IdentityHashMap<>(2048); // Paper - use bigger expected size to reduce collisions -+ private final Map lifecycles = new IdentityHashMap<>(2048); // Paper - use bigger expected size to reduce collisions ++ private final Map> byLocation = new HashMap<>(2048); // Paper - Perf: Use bigger expected size to reduce collisions ++ private final Map, Holder.Reference> byKey = new HashMap<>(2048); // Paper - Perf: Use bigger expected size to reduce collisions ++ private final Map> byValue = new IdentityHashMap<>(2048); // Paper - Perf: Use bigger expected size to reduce collisions ++ private final Map lifecycles = new IdentityHashMap<>(2048); // Paper - Perf: Use bigger expected size to reduce collisions private Lifecycle registryLifecycle; private volatile Map, HolderSet.Named> tags = new IdentityHashMap<>(); private boolean frozen; diff --git a/patches/server/0244-Add-PhantomPreSpawnEvent.patch b/patches/server/0244-Add-PhantomPreSpawnEvent.patch index e92632febe..b8f3ee434f 100644 --- a/patches/server/0244-Add-PhantomPreSpawnEvent.patch +++ b/patches/server/0244-Add-PhantomPreSpawnEvent.patch @@ -48,14 +48,14 @@ index d19bf99d03bf505a1a277b49fba6ee4769802ef2..658393f451e46a93c5665fe3c580aa39 CIRCLE, SWOOP; diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 61ba99d99cc4e7782450ee6aa8b6c87b1a42cb3a..94ee9c399f59e0198b4d9bc2a4255e8b821bcd36 100644 +index 61ba99d99cc4e7782450ee6aa8b6c87b1a42cb3a..5d84bd022714f9726131d2e37d648c444052af9b 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -70,9 +70,19 @@ public class PhantomSpawner implements CustomSpawner { int k = 1 + randomsource.nextInt(difficultydamagescaler.getDifficulty().getId() + 1); for (int l = 0; l < k; ++l) { -+ // Paper start ++ // Paper start - PhantomPreSpawnEvent + com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent event = new com.destroystokyo.paper.event.entity.PhantomPreSpawnEvent(io.papermc.paper.util.MCUtil.toLocation(world, blockposition1), entityplayer.getBukkitEntity(), org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); + if (!event.callEvent()) { + if (event.shouldAbortSpawn()) { @@ -63,11 +63,11 @@ index 61ba99d99cc4e7782450ee6aa8b6c87b1a42cb3a..94ee9c399f59e0198b4d9bc2a4255e8b + } + continue; + } -+ // Paper end ++ // Paper end - PhantomPreSpawnEvent Phantom entityphantom = (Phantom) EntityType.PHANTOM.create(world); if (entityphantom != null) { -+ entityphantom.setSpawningEntity(entityplayer.getUUID()); // Paper ++ entityphantom.setSpawningEntity(entityplayer.getUUID()); // Paper - PhantomPreSpawnEvent entityphantom.moveTo(blockposition1, 0.0F, 0.0F); groupdataentity = entityphantom.finalizeSpawn(world, difficultydamagescaler, MobSpawnType.NATURAL, groupdataentity, (CompoundTag) null); world.addFreshEntityWithPassengers(entityphantom, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.NATURAL); // CraftBukkit diff --git a/patches/server/0245-Add-More-Creeper-API.patch b/patches/server/0245-Add-More-Creeper-API.patch index 7f86a576b2..6afb294abe 100644 --- a/patches/server/0245-Add-More-Creeper-API.patch +++ b/patches/server/0245-Add-More-Creeper-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add More Creeper API diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 17ce05e7f9d2615be28a095ef6d3126885df8771..7fe90ebc8eced53f72c7f935e40745075f02421b 100644 +index d85095117d7837e75640f0e447242b45e24cf00e..51ab33d805028fb739ff9fa1a22a010e70777c1e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -132,7 +132,7 @@ public class Creeper extends Monster implements PowerableMob { @@ -22,7 +22,7 @@ index 17ce05e7f9d2615be28a095ef6d3126885df8771..7fe90ebc8eced53f72c7f935e4074507 public void ignite() { - this.entityData.set(Creeper.DATA_IS_IGNITED, true); -+ // Paper start ++ // Paper start - CreeperIgniteEvent + setIgnited(true); + } + @@ -33,7 +33,7 @@ index 17ce05e7f9d2615be28a095ef6d3126885df8771..7fe90ebc8eced53f72c7f935e4074507 + this.entityData.set(Creeper.DATA_IS_IGNITED, event.isIgnited()); + } + } -+ // Paper end ++ // Paper end - CreeperIgniteEvent } public boolean canDropMobsSkull() { diff --git a/patches/server/0279-force-entity-dismount-during-teleportation.patch b/patches/server/0279-force-entity-dismount-during-teleportation.patch index d03f86d358..6a7d014e2a 100644 --- a/patches/server/0279-force-entity-dismount-during-teleportation.patch +++ b/patches/server/0279-force-entity-dismount-during-teleportation.patch @@ -20,10 +20,10 @@ this is going to be the best soultion all around. Improvements/suggestions welcome! diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6d04954493680bc4fbad67ff2e43411f970f78f5..1793fbd803bfdb5d43d83d15b238d70da06b8780 100644 +index a906fda4d5d92054f5c0cea4a8167cdb29287cc3..6f37e4fbadb287d9c099d1cc535c941aaabe1d54 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2606,11 +2606,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2605,11 +2605,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void removeVehicle() { @@ -41,7 +41,7 @@ index 6d04954493680bc4fbad67ff2e43411f970f78f5..1793fbd803bfdb5d43d83d15b238d70d } } -@@ -2641,7 +2646,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2640,7 +2645,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -53,7 +53,7 @@ index 6d04954493680bc4fbad67ff2e43411f970f78f5..1793fbd803bfdb5d43d83d15b238d70d if (entity.getVehicle() == this) { throw new IllegalStateException("Use x.stopRiding(y), not y.removePassenger(x)"); } else { -@@ -2651,7 +2659,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2650,7 +2658,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (this.getBukkitEntity() instanceof Vehicle && entity.getBukkitEntity() instanceof LivingEntity) { VehicleExitEvent event = new VehicleExitEvent( (Vehicle) this.getBukkitEntity(), @@ -62,7 +62,7 @@ index 6d04954493680bc4fbad67ff2e43411f970f78f5..1793fbd803bfdb5d43d83d15b238d70d ); // Suppress during worldgen if (this.valid) { -@@ -2664,7 +2672,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2663,7 +2671,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } diff --git a/patches/server/0286-BlockDestroyEvent.patch b/patches/server/0286-BlockDestroyEvent.patch index 789cef6bf6..fbb7e12f5c 100644 --- a/patches/server/0286-BlockDestroyEvent.patch +++ b/patches/server/0286-BlockDestroyEvent.patch @@ -11,7 +11,7 @@ floating in the air. This can replace many uses of BlockPhysicsEvent diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 14c963d507173dae6015a0c81e3a690768012bed..a683908b18114cad6100e3d5c8eb5a8dfd33163a 100644 +index 71c2f082091f452cfc74557cd599cf7f080b889b..5d6f45f7ff8f310bf78417aa9bcf8f106a1d80c6 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -31,6 +31,7 @@ import net.minecraft.nbt.CompoundTag; @@ -22,7 +22,7 @@ index 14c963d507173dae6015a0c81e3a690768012bed..a683908b18114cad6100e3d5c8eb5a8d import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.FullChunkStatus; import net.minecraft.server.level.ServerLevel; -@@ -669,9 +670,26 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -668,9 +669,26 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return false; } else { FluidState fluid = this.getFluidState(pos); diff --git a/patches/server/0293-Entity-getEntitySpawnReason.patch b/patches/server/0293-Entity-getEntitySpawnReason.patch index 5358c7e3f3..7a2fa22e3c 100644 --- a/patches/server/0293-Entity-getEntitySpawnReason.patch +++ b/patches/server/0293-Entity-getEntitySpawnReason.patch @@ -22,19 +22,19 @@ index 2eddeb8d5239bbfeefbf4d3bd363f1ad083299b6..e2b44b8ddb8afc6e1f7dddadb434c226 }); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 1e10d55962a7221e197723eb42434be052a7661a..cf2ae848a3860a5a27723047b02bde3aa8255d62 100644 +index 5538e810ef0a68f00043d4e750eb735300d50664..8e3acfcdfac1cd67456acfbede2260b8f186df70 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1454,6 +1454,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1442,6 +1442,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return true; } - // Paper end + // Paper end - extra debug info + if (entity.spawnReason == null) entity.spawnReason = spawnReason; // Paper - Entity#getEntitySpawnReason if (entity.isRemoved()) { - // Paper start - if (DEBUG_ENTITIES) { + // WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getKey(entity.getType())); // CraftBukkit + return false; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c9dbc32561ddd39b40ed42d8cc6550a904ac158e..63d793ee00b14a12d0dbad15bee579a330f1eb07 100644 +index 8ca59ff8fee55358ec6f9a480a27b45859dccfaf..dd9b5fbd23a951b1e4b3cbf3ae0763b1f8462e2e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -223,6 +223,11 @@ public abstract class PlayerList { @@ -59,7 +59,7 @@ index c9dbc32561ddd39b40ed42d8cc6550a904ac158e..63d793ee00b14a12d0dbad15bee579a3 }); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e44d983e7b44225bdd7395488d2b246761e8e02a..748bc33b9812791ffe4b811c405b45d07c18cdcd 100644 +index 6f37e4fbadb287d9c099d1cc535c941aaabe1d54..eb353e7814544c11dbae8d12958cc26200e549a3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -237,6 +237,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @@ -70,7 +70,7 @@ index e44d983e7b44225bdd7395488d2b246761e8e02a..748bc33b9812791ffe4b811c405b45d0 public com.destroystokyo.paper.loottable.PaperLootableInventoryData lootableData; // Paper private CraftEntity bukkitEntity; -@@ -2214,6 +2215,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2213,6 +2214,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } nbttagcompound.put("Paper.Origin", this.newDoubleList(origin.getX(), origin.getY(), origin.getZ())); } @@ -80,7 +80,7 @@ index e44d983e7b44225bdd7395488d2b246761e8e02a..748bc33b9812791ffe4b811c405b45d0 // Save entity's from mob spawner status if (spawnedViaMobSpawner) { nbttagcompound.putBoolean("Paper.FromMobSpawner", true); -@@ -2360,6 +2364,26 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2359,6 +2363,26 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } spawnedViaMobSpawner = nbt.getBoolean("Paper.FromMobSpawner"); // Restore entity's from mob spawner status diff --git a/patches/server/0300-Optimize-Captured-BlockEntity-Lookup.patch b/patches/server/0300-Optimize-Captured-BlockEntity-Lookup.patch index 4fb0ee109e..419495dd06 100644 --- a/patches/server/0300-Optimize-Captured-BlockEntity-Lookup.patch +++ b/patches/server/0300-Optimize-Captured-BlockEntity-Lookup.patch @@ -10,10 +10,10 @@ Optimize to check if the captured list even has values in it, and also to just do a get call since the value can never be null. diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index b10c93cbcf264a3e13d48f30a2c09ae5568a510e..c8b2399c55c8ea4fcb953202c0ea74d95b47c359 100644 +index 5d6f45f7ff8f310bf78417aa9bcf8f106a1d80c6..44290a845d15bfdd8ea87ff77e9016ece835d087 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -998,9 +998,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -997,9 +997,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Nullable public BlockEntity getBlockEntity(BlockPos blockposition, boolean validate) { diff --git a/patches/server/0306-Configurable-Keep-Spawn-Loaded-range-per-world.patch b/patches/server/0306-Configurable-Keep-Spawn-Loaded-range-per-world.patch index b468809426..e697a61bd3 100644 --- a/patches/server/0306-Configurable-Keep-Spawn-Loaded-range-per-world.patch +++ b/patches/server/0306-Configurable-Keep-Spawn-Loaded-range-per-world.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Configurable Keep Spawn Loaded range per world This lets you disable it for some worlds and lower it for others. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index f317b9fdb2bfbae9babd64d4801f190042fc1867..1d069e33f64463e96199fa336336ffc44e3ed10e 100644 +index cef1554db34a1d917fa5c7bbccfe22efd93bebfd..f92e4d6cfae684b5c8df6424d63a574cb17ef6b7 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -768,30 +768,33 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 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/server/0331-Tracking-Range-Improvements.patch b/patches/server/0331-Tracking-Range-Improvements.patch index 7b3bbb5063..051228951f 100644 --- a/patches/server/0331-Tracking-Range-Improvements.patch +++ b/patches/server/0331-Tracking-Range-Improvements.patch @@ -8,10 +8,10 @@ Sets tracking range of watermobs to animals instead of misc and simplifies code Also ignores Enderdragon, defaulting it to Mojang's setting diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 1b84c29605fb141ad286f6ae67a726d0a5088d32..2130f15d92bab1d4e35a92a681ac34cd9c929ea9 100644 +index 87edc78afea997db8935432b2c452aec6638fb06..279cb641b795b6f4ced545c3a09b61fde69c47d6 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1264,6 +1264,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1260,6 +1260,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider while (iterator.hasNext()) { Entity entity = (Entity) iterator.next(); int j = entity.getType().clientTrackingRange() * 16; diff --git a/patches/server/0332-Fix-items-vanishing-through-end-portal.patch b/patches/server/0332-Fix-items-vanishing-through-end-portal.patch index 5a1ab289a7..8093b1ad5d 100644 --- a/patches/server/0332-Fix-items-vanishing-through-end-portal.patch +++ b/patches/server/0332-Fix-items-vanishing-through-end-portal.patch @@ -13,10 +13,10 @@ Quickly loading the exact world spawn chunk before searching the heightmap resolves the issue without having to load all spawn chunks. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 26a611b8d75513690811fbbd15dc37e6f4a50dd4..f052c3eb14d5f50fb82889b011387991d5e4aac7 100644 +index 9e028513eb3809100d7292e3327051cb27f4d07a..96e0abe60d108dd61db79790962dd7b782830b57 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3411,6 +3411,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3410,6 +3410,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (flag1) { blockposition1 = ServerLevel.END_SPAWN_POINT; } else { diff --git a/patches/server/0334-Anti-Xray.patch b/patches/server/0334-Anti-Xray.patch index d58ac431c5..17352b68c7 100644 --- a/patches/server/0334-Anti-Xray.patch +++ b/patches/server/0334-Anti-Xray.patch @@ -1104,10 +1104,10 @@ index 90ec22d35edb2874417bbea590e0d3c37ad93d64..fc230d835f9aa526a4b179d36d921f0f public ClientboundLevelChunkWithLightPacket(FriendlyByteBuf buf) { diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 0ed44bc939b256a4b91eb24812e4de10a9af01b7..8eff58898faea024787e56cf98c8498c46db16d4 100644 +index dd034a7d7754c88b77731175f373e8c090e4a706..acb35d2df83ff2381f21611de358d50caee53f69 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -572,7 +572,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -569,7 +569,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Holder holder = worlddimension.type(); // CraftBukkit - decompile error // Objects.requireNonNull(minecraftserver); // CraftBukkit - decompile error @@ -1117,7 +1117,7 @@ index 0ed44bc939b256a4b91eb24812e4de10a9af01b7..8eff58898faea024787e56cf98c8498c this.convertable = convertable_conversionsession; 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 79020edc9fac79e8b186d0f57f956d2189d3dc8e..b7e6d8441e8444c36919c126a8adeaeed02df08c 100644 +index 32327f639b3cc10444ad122fb3405174e32c4f01..3629f164f05cc2d33c76bb21cfe4598539aa08e0 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -49,7 +49,7 @@ import org.bukkit.event.player.PlayerInteractEvent; @@ -1155,10 +1155,10 @@ index 5de5209e04d631bd6a50e28e8d3abebf148252c1..19b3f4fa7678a038bf25efc2a8b46dda DebugPackets.sendPoiPacketsForChunk(world, chunkPos); } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 322f2ef70273d52bf6daced17aec09f7d34c9200..a58df7552766abb0c923402bfa40e5d72d972e83 100644 +index f016d991b132775bacc961557f7e5ff78f2b52d1..473a14272e3c63e24a25fe1522aba9c0af829a2e 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -178,6 +178,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -177,6 +177,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } // Paper end - add paper world config @@ -1166,7 +1166,7 @@ index 322f2ef70273d52bf6daced17aec09f7d34c9200..a58df7552766abb0c923402bfa40e5d7 public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -196,7 +197,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -195,7 +196,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); @@ -1175,15 +1175,15 @@ index 322f2ef70273d52bf6daced17aec09f7d34c9200..a58df7552766abb0c923402bfa40e5d7 this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config this.generator = gen; -@@ -282,6 +283,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -281,6 +282,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime); this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); + this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : com.destroystokyo.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray } - // Paper start -@@ -547,6 +549,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Paper start - Cancel hit for vanished players +@@ -546,6 +548,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 diff --git a/patches/server/0338-Add-debug-for-sync-chunk-loads.patch b/patches/server/0338-Add-debug-for-sync-chunk-loads.patch index 4e0245f7f1..9e35dd1fd4 100644 --- a/patches/server/0338-Add-debug-for-sync-chunk-loads.patch +++ b/patches/server/0338-Add-debug-for-sync-chunk-loads.patch @@ -312,10 +312,10 @@ index 70f15e3af9e954483ab116500f84a9ee17f67ce4..56fe3f4edd15239533a1ae9287e86528 chunkproviderserver_b.managedBlock(completablefuture::isDone); io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.popChunkWait(); // Paper - async chunk debug // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 6d6ad6a33f3f8e4b8bc39fea00506daf7b31275c..63437e0cd8ad76e05a3ae40de673d8ff6cae00c6 100644 +index acb35d2df83ff2381f21611de358d50caee53f69..dbc13b7eccea5c97bcc6aa1ba0bd807aa34d6805 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -651,6 +651,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -648,6 +648,13 @@ public class ServerLevel extends Level implements WorldGenLevel { this.entityLookup = new io.papermc.paper.chunk.system.entity.EntityLookup(this, new EntityCallbacks()); // Paper - rewrite chunk system } diff --git a/patches/server/0342-Add-option-to-nerf-pigmen-from-nether-portals.patch b/patches/server/0342-Add-option-to-nerf-pigmen-from-nether-portals.patch index ea9d058847..a11e280112 100644 --- a/patches/server/0342-Add-option-to-nerf-pigmen-from-nether-portals.patch +++ b/patches/server/0342-Add-option-to-nerf-pigmen-from-nether-portals.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to nerf pigmen from nether portals diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 21eac12dcc3571e647b07b313015d809cb0fbcea..d1a256a0a27ebfd91497840334c94dfe1a40c980 100644 +index 96e0abe60d108dd61db79790962dd7b782830b57..a5defe250dcc0ca7aa907fe9a6b373d73d893be8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -399,6 +399,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -398,6 +398,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper start public long activatedImmunityTick = Integer.MIN_VALUE; // Paper public boolean isTemporarilyActive = false; // Paper @@ -16,7 +16,7 @@ index 21eac12dcc3571e647b07b313015d809cb0fbcea..d1a256a0a27ebfd91497840334c94dfe protected int numCollisions = 0; // Paper public boolean spawnedViaMobSpawner; // Paper - Yes this name is similar to above, upstream took the better one @javax.annotation.Nullable -@@ -2233,6 +2234,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2232,6 +2233,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (spawnedViaMobSpawner) { nbttagcompound.putBoolean("Paper.FromMobSpawner", true); } @@ -26,7 +26,7 @@ index 21eac12dcc3571e647b07b313015d809cb0fbcea..d1a256a0a27ebfd91497840334c94dfe // Paper end return nbttagcompound; } catch (Throwable throwable) { -@@ -2375,6 +2379,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2374,6 +2378,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } spawnedViaMobSpawner = nbt.getBoolean("Paper.FromMobSpawner"); // Restore entity's from mob spawner status diff --git a/patches/server/0356-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch b/patches/server/0356-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch index a792a698bf..5e250f8ba0 100644 --- a/patches/server/0356-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch +++ b/patches/server/0356-Prevent-Double-PlayerChunkMap-adds-crashing-server.patch @@ -7,10 +7,10 @@ Suspected case would be around the technique used in .stopRiding Stack will identify any causer of this and warn instead of crashing. diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 1f9efff4ddccf2569fdfe42e6cbc92792643d0ea..3b7a82761682e29fb42f683b232c789c522b632e 100644 +index 19f1432ae1405eee0ee56dec151e7d602816a943..37e6b841b3c3d8720a1947065d4fada8c25ec2cf 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -993,6 +993,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -989,6 +989,13 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public void addEntity(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity track"); // Spigot @@ -25,10 +25,10 @@ index 1f9efff4ddccf2569fdfe42e6cbc92792643d0ea..3b7a82761682e29fb42f683b232c789c EntityType entitytypes = entity.getType(); int i = entitytypes.clientTrackingRange() * 16; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 63437e0cd8ad76e05a3ae40de673d8ff6cae00c6..46101e6bef0f81968cb194303e19e437a3417733 100644 +index dbc13b7eccea5c97bcc6aa1ba0bd807aa34d6805..a3669b4d5833003c98bcf62da89560452565a451 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2514,7 +2514,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2496,7 +2496,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public void onTrackingStart(Entity entity) { org.spigotmc.AsyncCatcher.catchOp("entity register"); // Spigot @@ -37,7 +37,7 @@ index 63437e0cd8ad76e05a3ae40de673d8ff6cae00c6..46101e6bef0f81968cb194303e19e437 if (entity instanceof ServerPlayer) { ServerPlayer entityplayer = (ServerPlayer) entity; -@@ -2549,6 +2549,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2531,6 +2531,7 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.updateDynamicGameEventListener(DynamicGameEventListener::add); entity.inWorld = true; // CraftBukkit - Mark entity as in world entity.valid = true; // CraftBukkit diff --git a/patches/server/0362-Improved-Watchdog-Support.patch b/patches/server/0362-Improved-Watchdog-Support.patch index 7e569d4760..959eae7786 100644 --- a/patches/server/0362-Improved-Watchdog-Support.patch +++ b/patches/server/0362-Improved-Watchdog-Support.patch @@ -71,7 +71,7 @@ index a9a0248b1bd1ac454064e977b61f9b7d80962ff8..059b1a0bf048af6a28c322f35da3d3cb cause = cause.getCause(); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ce113cc2bc52c1135799190a22e0be21744b58cc..9a25d351df1141e9218d37c0f90e2d67f9c8c3ef 100644 +index 5cb0f93bc7d4495e65674c22de2ebd8854c696fe..570c163e4a56206d1cf259ee1ffcb6f865f72b1c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -297,7 +297,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entitytypes = entity.getType(); int i = entitytypes.clientTrackingRange() * 16; diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index cb137fe3aaa14fd4862baa0444bc62d818cf9509..32b41d88af7565665a19663227475d984cbfd7b2 100644 +index 3221fad96b077a31f6e22277c08e8a20c65afd7a..6ca90fdf844ee6aa1957e17a75a4c070de0381f2 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -271,6 +271,7 @@ public class ServerPlayer extends Player { @@ -55,7 +55,7 @@ index cb137fe3aaa14fd4862baa0444bc62d818cf9509..32b41d88af7565665a19663227475d98 // CraftBukkit end public boolean isRealPlayer; // Paper diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 077ae008b817d38082a068f4bbd76181510403bf..ffdd5b7417bb748ee5e8ad4d126bf3489c5d32ed 100644 +index 06232d823c099cb1d827491a5cccc435ecae8ffe..9ad0a672f3a14c1e36a9f2275fa3e8d2131d543f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -295,6 +295,12 @@ public abstract class PlayerList { diff --git a/patches/server/0371-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch b/patches/server/0371-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch index b2d78c3f01..a64379317f 100644 --- a/patches/server/0371-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch +++ b/patches/server/0371-Move-player-to-spawn-point-if-spawn-in-unloaded-worl.patch @@ -10,7 +10,7 @@ Co-authored-by: Wyatt Childers Co-authored-by: Jake Potrebic diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 85b0c15e8600b2b62db24c22dfab4680b08ca492..e0aed65461c75b28799a87a0ef266707ce63ca17 100644 +index 9ad0a672f3a14c1e36a9f2275fa3e8d2131d543f..82101511142c266c4374da10ab2561f4412300db 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -194,7 +194,7 @@ public abstract class PlayerList { @@ -87,10 +87,10 @@ index 85b0c15e8600b2b62db24c22dfab4680b08ca492..e0aed65461c75b28799a87a0ef266707 } // Paper end - Entity#getEntitySpawnReason diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1e9819ea185b98a73992bde8c40150d4747ed436..2374500ba0518415b7c680bc2ac05222761493ba 100644 +index bf8ea784c032469c1b88a0cdc954d6e2de5bb3ec..7746d7fb7177885d97d95f065782ee23aa1dfe56 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2337,27 +2337,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2336,27 +2336,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } // CraftBukkit end diff --git a/patches/server/0375-Fix-item-duplication-and-teleport-issues.patch b/patches/server/0375-Fix-item-duplication-and-teleport-issues.patch index 495761ea8d..761f552a93 100644 --- a/patches/server/0375-Fix-item-duplication-and-teleport-issues.patch +++ b/patches/server/0375-Fix-item-duplication-and-teleport-issues.patch @@ -16,10 +16,10 @@ So even if something NEW comes up, it would be impossible to drop the same item twice because the source was destroyed. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 85371495d4f11e339a0211145c0303976515ef8f..14be6f3a591fded3ff8690241061a7a07d2a89a6 100644 +index 7746d7fb7177885d97d95f065782ee23aa1dfe56..5698555fe780ba96f190f67aa116940efdd993e2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2467,11 +2467,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2466,11 +2466,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } else { // CraftBukkit start - Capture drops for death event if (this instanceof net.minecraft.world.entity.LivingEntity && !((net.minecraft.world.entity.LivingEntity) this).forceDrops) { @@ -34,7 +34,7 @@ index 85371495d4f11e339a0211145c0303976515ef8f..14be6f3a591fded3ff8690241061a7a0 entityitem.setDefaultPickUpDelay(); // CraftBukkit start -@@ -3271,6 +3272,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3270,6 +3271,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @Nullable public Entity teleportTo(ServerLevel worldserver, Vec3 location) { // CraftBukkit end @@ -47,7 +47,7 @@ index 85371495d4f11e339a0211145c0303976515ef8f..14be6f3a591fded3ff8690241061a7a0 if (this.level() instanceof ServerLevel && !this.isRemoved()) { this.level().getProfiler().push("changeDimension"); // CraftBukkit start -@@ -3297,6 +3304,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3296,6 +3303,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end this.level().getProfiler().popPush("reloading"); @@ -59,7 +59,7 @@ index 85371495d4f11e339a0211145c0303976515ef8f..14be6f3a591fded3ff8690241061a7a0 Entity entity = this.getType().create(worldserver); if (entity != null) { -@@ -3314,10 +3326,6 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3313,10 +3325,6 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit start - Forward the CraftEntity to the new entity this.getBukkitEntity().setHandle(entity); entity.bukkitEntity = this.getBukkitEntity(); @@ -70,7 +70,7 @@ index 85371495d4f11e339a0211145c0303976515ef8f..14be6f3a591fded3ff8690241061a7a0 // CraftBukkit end } -@@ -3436,7 +3444,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3435,7 +3443,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean canChangeDimensions() { @@ -80,7 +80,7 @@ index 85371495d4f11e339a0211145c0303976515ef8f..14be6f3a591fded3ff8690241061a7a0 public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index da68b02c6c66a205254d755e4ab5f379cbe9a666..28ea07dc7796f7fc12d5f11aed22eb35ee60c9b5 100644 +index 4948a7d78ef1e96f325368430068576ce0b990ad..d4bf6c909939c23586acaa7338141aac880217b0 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1705,9 +1705,9 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0383-Deobfuscate-stacktraces-in-log-messages-crash-report.patch b/patches/server/0383-Deobfuscate-stacktraces-in-log-messages-crash-report.patch index 582d9f7ef8..b29b08d08f 100644 --- a/patches/server/0383-Deobfuscate-stacktraces-in-log-messages-crash-report.patch +++ b/patches/server/0383-Deobfuscate-stacktraces-in-log-messages-crash-report.patch @@ -495,7 +495,7 @@ index 52eb3176437113f9a0ff85d10ce5c2415e1b5570..b54ddd0ba0b001fbcb1838a838ca4890 } } diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 93d3f29b08c79479c27d3f39e6c799c705e69902..38650109c1d2683a27da5788dc6013d8d0db26ad 100644 +index c66fc75fb88c4f0a4273d69009a4e6defb0b29e9..b99dbe3878df8f67a6920195088c00a01289a79f 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -75,13 +75,13 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -525,7 +525,7 @@ index 93d3f29b08c79479c27d3f39e6c799c705e69902..38650109c1d2683a27da5788dc6013d8 protected void channelRead0(ChannelHandlerContext channelhandlercontext, Packet packet) { diff --git a/src/main/java/net/minecraft/network/PacketEncoder.java b/src/main/java/net/minecraft/network/PacketEncoder.java -index 2907536f8f9b4b9dccb96f8b4f19d75fa3c5b864..b5b228e67284baad3639b283595427a819bb1a44 100644 +index 61f05f34ca33837c643f2915e753ec3935a38314..85b8be8ffac0fb40e9cae0528271ed41473811c8 100644 --- a/src/main/java/net/minecraft/network/PacketEncoder.java +++ b/src/main/java/net/minecraft/network/PacketEncoder.java @@ -47,7 +47,14 @@ public class PacketEncoder extends MessageToByteEncoder> { @@ -545,7 +545,7 @@ index 2907536f8f9b4b9dccb96f8b4f19d75fa3c5b864..b5b228e67284baad3639b283595427a8 throw new SkipPacketException(var13); } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index c9cca6ba3500791485bf19155156c38c24f1c761..684e9e9d78f0d410176fa8b9c9d0fbfda6a156dc 100644 +index 0e2978b6e4f03932c4ebdf1309d20454b9130132..ab84c4b098184370c8b63cbae687116a7b077cf5 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -194,6 +194,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -556,30 +556,6 @@ index c9cca6ba3500791485bf19155156c38c24f1c761..684e9e9d78f0d410176fa8b9c9d0fbfd // Paper start - initialize global and world-defaults configuration this.paperConfigurations.initializeGlobalConfiguration(this.registryAccess()); this.paperConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess()); -diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 46101e6bef0f81968cb194303e19e437a3417733..1bab7d1c76a087e5bd22d7adbee5e065e8e2241e 100644 ---- a/src/main/java/net/minecraft/server/level/ServerLevel.java -+++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -222,7 +222,9 @@ public class ServerLevel extends Level implements WorldGenLevel { - public final UUID uuid; - public boolean hasPhysicsEvent = true; // Paper - public static Throwable getAddToWorldStackTrace(Entity entity) { -- return new Throwable(entity + " Added to world at " + new java.util.Date()); -+ final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); -+ io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); -+ return thr; - } - - @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI -@@ -1492,7 +1494,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - if (entity.isRemoved()) { - // Paper start - if (DEBUG_ENTITIES) { -- new Throwable("Tried to add entity " + entity + " but it was marked as removed already").printStackTrace(); // CraftBukkit -+ io.papermc.paper.util.TraceUtil.dumpTraceForThread("Tried to add entity " + entity + " but it was marked as removed already"); // CraftBukkit - getAddToWorldStackTrace(entity).printStackTrace(); - } - // Paper end diff --git a/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java index d130f843975236018df4fa2ccc3ca6aaca7a06b8..76f31845fe50200d09e5ab6a6c08da00444414ad 100644 --- a/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java @@ -633,7 +609,7 @@ index 14bd0b94ece3f826f822b4900c7250ebdc27d937..59eb65e207ff0206b0dfad6f2dcffe78 } } 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 45ecda3b67025881a145d40a5291c34e5a1f9590..27e8ee4507460b1cc72de692b41562b9f4f13929 100644 +index 4891073602609fc2709715460e0675a7cc2a4cdd..d85ed706703e50f76df8db414827ccd41a5985d9 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -599,7 +599,7 @@ public class LevelChunk extends ChunkAccess { diff --git a/patches/server/0392-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch b/patches/server/0392-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch index db4ca8f753..8c9fc93b34 100644 --- a/patches/server/0392-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch +++ b/patches/server/0392-Protect-Bedrock-and-End-Portal-Frames-from-being-des.patch @@ -25,10 +25,10 @@ index b1fdfae75aeea78ca77987e40242bf498447bc08..cf81854facadaf3c1f860bcaaf69db46 if (!this.level.isInWorldBounds(blockposition)) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 1bb5867bb2e99be1696c89ec47cd3aa0d655fdfb..6941a14b37d4637a1414c4a6c9380a5d7a72711d 100644 +index b25c632c8b797c30e90beaf3cedbc13acc2103bb..286890f5a42cd2cade28ab0c5b9cdd48b6a33d37 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -521,6 +521,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -520,6 +520,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public boolean setBlock(BlockPos pos, BlockState state, int flags, int maxUpdateDepth) { // CraftBukkit start - tree generation if (this.captureTreeGeneration) { @@ -106,7 +106,7 @@ index b3732a6246a2b011e36c5c35fa2ac7749e75db16..e4a3c937950b26e81b89d6ddcf3d6c27 world.playSound((Player) null, pos, SoundEvents.PISTON_CONTRACT, SoundSource.BLOCKS, 0.5F, world.random.nextFloat() * 0.15F + 0.6F); diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 2c7d025b2af3a66772c3f394620483045fb80242..0475c153ac1ba73a56bae35820d1d2a31e771865 100644 +index 7e4264f87a0f81db71d49dbede32a1bad87f7ca8..2d1062d2b0412180cc08765ecf9b0a071983c06a 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -182,7 +182,7 @@ public abstract class BlockBehaviour implements FeatureElement { diff --git a/patches/server/0406-Use-distance-map-to-optimise-entity-tracker.patch b/patches/server/0406-Use-distance-map-to-optimise-entity-tracker.patch index 18b0c6bf7d..e68776eb14 100644 --- a/patches/server/0406-Use-distance-map-to-optimise-entity-tracker.patch +++ b/patches/server/0406-Use-distance-map-to-optimise-entity-tracker.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Use distance map to optimise entity tracker Use the distance map to find candidate players for tracking. diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 2db3236bc9d676c86b0af38bd4bfaf9d3332c250..07abd089e5091d292d4542bbe0fbb416a111bf8e 100644 +index 2785619ed6d04e06a25bfbb2a7fbd99f81c1f858..bdda124f6cc89b8a7ed198fdf095aee5f3f24ce3 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -146,6 +146,23 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider @@ -124,7 +124,7 @@ index 2db3236bc9d676c86b0af38bd4bfaf9d3332c250..07abd089e5091d292d4542bbe0fbb416 } // Paper start -@@ -929,17 +1009,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -925,17 +1005,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } public void move(ServerPlayer player) { @@ -143,7 +143,7 @@ index 2db3236bc9d676c86b0af38bd4bfaf9d3332c250..07abd089e5091d292d4542bbe0fbb416 SectionPos sectionposition = player.getLastSectionPos(); SectionPos sectionposition1 = SectionPos.of((EntityAccess) player); -@@ -1016,7 +1086,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1012,7 +1082,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider entity.tracker = playerchunkmap_entitytracker; // Paper - Fast access to tracker this.entityMap.put(entity.getId(), playerchunkmap_entitytracker); @@ -152,7 +152,7 @@ index 2db3236bc9d676c86b0af38bd4bfaf9d3332c250..07abd089e5091d292d4542bbe0fbb416 if (entity instanceof ServerPlayer) { ServerPlayer entityplayer = (ServerPlayer) entity; -@@ -1060,9 +1130,37 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1056,9 +1126,37 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider entity.tracker = null; // Paper - We're no longer tracked } @@ -192,7 +192,7 @@ index 2db3236bc9d676c86b0af38bd4bfaf9d3332c250..07abd089e5091d292d4542bbe0fbb416 List list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); -@@ -1212,6 +1310,42 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1208,6 +1306,42 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider this.lastSectionPos = SectionPos.of((EntityAccess) entity); } @@ -236,7 +236,7 @@ index 2db3236bc9d676c86b0af38bd4bfaf9d3332c250..07abd089e5091d292d4542bbe0fbb416 return object instanceof ChunkMap.TrackedEntity ? ((ChunkMap.TrackedEntity) object).entity.getId() == this.entity.getId() : false; } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 88632cf1baea828f6442ac37b8c13a3356445fe3..a1d990aa2e79af9e1ff078892cdb38a382f21da7 100644 +index 5698555fe780ba96f190f67aa116940efdd993e2..02d7282e5d5e1c1334fed55a86bc4c9837e9341f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -56,6 +56,7 @@ import net.minecraft.network.syncher.EntityDataSerializers; @@ -247,7 +247,7 @@ index 88632cf1baea828f6442ac37b8c13a3356445fe3..a1d990aa2e79af9e1ff078892cdb38a3 import net.minecraft.server.MinecraftServer; import net.minecraft.server.level.ServerLevel; import net.minecraft.server.level.ServerPlayer; -@@ -488,6 +489,38 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -487,6 +488,38 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public boolean updatingSectionStatus = false; // Paper end diff --git a/patches/server/0409-Ensure-Entity-position-and-AABB-are-never-invalid.patch b/patches/server/0409-Ensure-Entity-position-and-AABB-are-never-invalid.patch index 0b2777a605..6626d0fcd4 100644 --- a/patches/server/0409-Ensure-Entity-position-and-AABB-are-never-invalid.patch +++ b/patches/server/0409-Ensure-Entity-position-and-AABB-are-never-invalid.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Ensure Entity position and AABB are never invalid Co-authored-by: Spottedleaf diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2b3b6b7cda65434c903582a99e42e71762daccf8..44ff63b89056eb2f944ead71d74d17d1fd5351b2 100644 +index 02d7282e5d5e1c1334fed55a86bc4c9837e9341f..8209a273b0f4b07195fa20c5be6c80384eb582c2 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -728,8 +728,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -727,8 +727,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void setPos(double x, double y, double z) { @@ -20,7 +20,7 @@ index 2b3b6b7cda65434c903582a99e42e71762daccf8..44ff63b89056eb2f944ead71d74d17d1 } protected AABB makeBoundingBox() { -@@ -4241,7 +4241,29 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4240,7 +4240,29 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.getZ((2.0D * this.random.nextDouble() - 1.0D) * widthScale); } @@ -50,7 +50,7 @@ index 2b3b6b7cda65434c903582a99e42e71762daccf8..44ff63b89056eb2f944ead71d74d17d1 // Paper start - rewrite chunk system if (this.updatingSectionStatus) { LOGGER.error("Refusing to update position for entity " + this + " to position " + new Vec3(x, y, z) + " since it is processing a section status update", new Throwable()); -@@ -4265,6 +4287,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4264,6 +4286,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.levelCallback.onMove(); } diff --git a/patches/server/0415-incremental-chunk-and-player-saving.patch b/patches/server/0415-incremental-chunk-and-player-saving.patch index 6243fbde37..59dbfc7403 100644 --- a/patches/server/0415-incremental-chunk-and-player-saving.patch +++ b/patches/server/0415-incremental-chunk-and-player-saving.patch @@ -5,7 +5,7 @@ Subject: [PATCH] incremental chunk and player saving diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6ffb81f09e7422adeb29f0651a9d3b6e7f6860d3..2ebfa60a2b0175a9cb107648652c9150d9f93732 100644 +index 229f5c1d651d903e1c641e67661004a4ee010417..08e3f07c4547f8fa7b571ecef7436ba1fbee578a 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -901,7 +901,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= level; } -@@ -1871,6 +1872,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1870,6 +1871,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void moveTo(double x, double y, double z, float yaw, float pitch) { @@ -57,7 +57,7 @@ index e1ce61dcadf325633ed809eef92fc07bac4cbf05..e8ef81a7224ed134e3042534c96f13a0 this.setYRot(yaw); this.setXRot(pitch); diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index 0578ac12d92f9af0b0113587db9351b4a41bedd5..76486e2045739d3e8706194f4d71f5108d055780 100644 +index f4e1a540243d1f699dd2ef407707af27517d9360..b90c1e4e03f85dbfa7134bffd8da59330cea1e28 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -169,6 +169,7 @@ public abstract class BaseSpawner { diff --git a/patches/server/0454-Extend-block-drop-capture-to-capture-all-items-added.patch b/patches/server/0454-Extend-block-drop-capture-to-capture-all-items-added.patch index 399d753464..a4beee9d33 100644 --- a/patches/server/0454-Extend-block-drop-capture-to-capture-all-items-added.patch +++ b/patches/server/0454-Extend-block-drop-capture-to-capture-all-items-added.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Extend block drop capture to capture all items added to the diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 307f2d8adae141cfb7f5fd3c08e68863ce3ed75f..897c149c38fc17a7af4d922ff6eecc08d43cd366 100644 +index 27977796215779f6412e618c4b439d756a5bef98..1db813af2f6e1bce404fc24f31a18de3e0717247 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1532,6 +1532,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1512,6 +1512,12 @@ public class ServerLevel extends Level implements WorldGenLevel { // WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getKey(entity.getType())); // CraftBukkit return false; } else { @@ -23,7 +23,7 @@ index 307f2d8adae141cfb7f5fd3c08e68863ce3ed75f..897c149c38fc17a7af4d922ff6eecc08 if (spawnReason != null && !CraftEventFactory.doEntityAddEventCalling(this, entity, spawnReason)) { return false; diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index a9ede0d719e866655ab48fb5d0263c7d1bdcff60..49d29e4b3395d2ebea1ed13338f26c7cfbaa5f72 100644 +index 5b951937511126d58665c5e2baf18186a7a8d325..60c18af9253607bc51ecb9d23c23e652a9ba36e9 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -431,10 +431,12 @@ public class ServerPlayerGameMode { diff --git a/patches/server/0455-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch b/patches/server/0455-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch index 82b2992610..c114cf9398 100644 --- a/patches/server/0455-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch +++ b/patches/server/0455-Expose-the-Entity-Counter-to-allow-plugins-to-use-va.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Expose the Entity Counter to allow plugins to use valid and diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 961cd2886ca2fdafdeb958ee714e3d436bd7f330..b56ee5c771d1316e05eba29a8e9d3e9d4468b83c 100644 +index fa40fff50ae07a0a040b50c0c04d4d7a2bf46b8d..f2a1719f18913dca5a6985537c5181af6c8e2bfe 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4508,4 +4508,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4507,4 +4507,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S void accept(Entity entity, double x, double y, double z); } diff --git a/patches/server/0457-Entity-isTicking.patch b/patches/server/0457-Entity-isTicking.patch index 35eeca6dad..5b8f7576d6 100644 --- a/patches/server/0457-Entity-isTicking.patch +++ b/patches/server/0457-Entity-isTicking.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Entity#isTicking diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b56ee5c771d1316e05eba29a8e9d3e9d4468b83c..f8acf77f5157cdee4e40d03b571a830aa726ba70 100644 +index f2a1719f18913dca5a6985537c5181af6c8e2bfe..79a1f55dcdb3186b4ab3e628ac652abf362a8cab 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4513,5 +4513,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4512,5 +4512,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public static int nextEntityId() { return ENTITY_COUNTER.incrementAndGet(); } diff --git a/patches/server/0464-Retain-block-place-order-when-capturing-blockstates.patch b/patches/server/0464-Retain-block-place-order-when-capturing-blockstates.patch index 27a211f512..75f0afffe4 100644 --- a/patches/server/0464-Retain-block-place-order-when-capturing-blockstates.patch +++ b/patches/server/0464-Retain-block-place-order-when-capturing-blockstates.patch @@ -10,10 +10,10 @@ In general, look at making this logic more robust (i.e properly handling cases where a captured entry is overriden) - but for now this will do. diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index a7fca2d662e013809fef088213cf0275b596629d..0aebd1d8555b6aab24c11cd543e24eb1a6d6cb6f 100644 +index 286890f5a42cd2cade28ab0c5b9cdd48b6a33d37..4de1b09f4aa43ebefbae20014ec044bdd95bd191 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -160,7 +160,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -159,7 +159,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public boolean captureBlockStates = false; public boolean captureTreeGeneration = false; public Map capturedBlockStates = new java.util.LinkedHashMap<>(); // Paper diff --git a/patches/server/0485-Climbing-should-not-bypass-cramming-gamerule.patch b/patches/server/0485-Climbing-should-not-bypass-cramming-gamerule.patch index a987291004..ed9695b64c 100644 --- a/patches/server/0485-Climbing-should-not-bypass-cramming-gamerule.patch +++ b/patches/server/0485-Climbing-should-not-bypass-cramming-gamerule.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Climbing should not bypass cramming gamerule diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index af49c7e0531ef73646d74c9770fea302a8b8fea3..1471bfcb0a7b193866cfa7ee0e14e7b044755e88 100644 +index 79a1f55dcdb3186b4ab3e628ac652abf362a8cab..d5d006756270025e16c1ab75062ece9b8ae384b1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2064,6 +2064,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2063,6 +2063,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean isPushable() { @@ -44,7 +44,7 @@ index c9c7833755af3c7bef1d40f2ca425cbec59efa68..75cdddbfbbc4c0c521194dde27ba5f5d } else if (entity.level().isClientSide && (!(entity1 instanceof Player) || !((Player) entity1).isLocalPlayer())) { return false; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a3fd295ce44bce34c7f0a364abc27b70e546a383..428a5e8c4a4fb9e00402dd6164cebeec008e192e 100644 +index 87b010d5b0ce405e64092638108e4d64ad15339b..0568dd1a885f06f7fd85419a8ec7429c7fec8aba 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3426,7 +3426,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0488-Limit-recipe-packets.patch b/patches/server/0488-Limit-recipe-packets.patch index d0c0c85c5c..707685d4a1 100644 --- a/patches/server/0488-Limit-recipe-packets.patch +++ b/patches/server/0488-Limit-recipe-packets.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Limit recipe packets diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 6e1bfe5342e23a0dd97dfbc06a43bf77dfab23cc..4bf01aff2716a26e3db7d3778ef3f9e1e529dc74 100644 +index 56aa8de4bdfbf7a26d9838b2a557458ce40b9d01..f6413041358cf52e51efeaac88d13030258fa678 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -258,6 +258,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -19,7 +19,7 @@ index 6e1bfe5342e23a0dd97dfbc06a43bf77dfab23cc..4bf01aff2716a26e3db7d3778ef3f9e1 @@ -377,6 +378,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // CraftBukkit start for (int spam; (spam = this.chatSpamTickCount.get()) > 0 && !this.chatSpamTickCount.compareAndSet(spam, spam - 1); ) ; - if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - split to seperate variable + if (tabSpamLimiter.get() > 0) tabSpamLimiter.getAndDecrement(); // Paper - configurable tab spam limits + if (recipeSpamPackets.get() > 0) recipeSpamPackets.getAndDecrement(); // Paper - auto recipe limit /* Use thread-safe field access instead if (this.chatSpamTickCount > 0) { diff --git a/patches/server/0497-MC-4-Fix-item-position-desync.patch b/patches/server/0497-MC-4-Fix-item-position-desync.patch index a00bae5e84..0d7cd7df68 100644 --- a/patches/server/0497-MC-4-Fix-item-position-desync.patch +++ b/patches/server/0497-MC-4-Fix-item-position-desync.patch @@ -28,10 +28,10 @@ index 05ac41e136da43284fb24a6b698ebd36318278fb..3c4ac79c094dc2fff7de94150a34b7bf public Vec3 decode(long x, long y, long z) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index dc957fce9f6b5709d6f74fa66a99235d8933d8cc..17152781725a6cf0e1ce5da8374fb3a74cb84351 100644 +index d5d006756270025e16c1ab75062ece9b8ae384b1..c81f7a4637dd5c83c5527b1052fb58a6055e5b09 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4284,6 +4284,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4283,6 +4283,16 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return; } // Paper end - rewrite chunk system diff --git a/patches/server/0517-Remove-stale-POIs.patch b/patches/server/0517-Remove-stale-POIs.patch index 53210a7ad4..d6d2592c24 100644 --- a/patches/server/0517-Remove-stale-POIs.patch +++ b/patches/server/0517-Remove-stale-POIs.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove stale POIs diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 902f3a7ae5ba9c15b634bb2f214be7d85c6d5a00..7b76cba12680d7a8720c597b3a98b08ee5313f63 100644 +index 1db813af2f6e1bce404fc24f31a18de3e0717247..a45b7a9c3e12236ba5103d4281c9b73997698a0d 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2103,6 +2103,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2083,6 +2083,11 @@ public class ServerLevel extends Level implements WorldGenLevel { }); optional1.ifPresent((holder) -> { this.getServer().execute(() -> { diff --git a/patches/server/0522-Collision-option-for-requiring-a-player-participant.patch b/patches/server/0522-Collision-option-for-requiring-a-player-participant.patch index 966dededfe..37c9dd08ee 100644 --- a/patches/server/0522-Collision-option-for-requiring-a-player-participant.patch +++ b/patches/server/0522-Collision-option-for-requiring-a-player-participant.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Collision option for requiring a player participant diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 3a8572ded5c9bdf621a8c16123707da9ceb70d54..1249e086d022a68e1d27a7731c0aff92f1457e43 100644 +index c81f7a4637dd5c83c5527b1052fb58a6055e5b09..df23dd16ecca29a569f89ddf7d755ab88557ab50 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1934,6 +1934,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1933,6 +1933,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void push(Entity entity) { if (!this.isPassengerOfSameVehicle(entity)) { if (!entity.noPhysics && !this.noPhysics) { @@ -17,7 +17,7 @@ index 3a8572ded5c9bdf621a8c16123707da9ceb70d54..1249e086d022a68e1d27a7731c0aff92 double d1 = entity.getZ() - this.getZ(); double d2 = Mth.absMax(d0, d1); diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index 82ffd50017dc234a9718db551fca0e73a6deded0..71361cc7339483936b18d2e0e938669bf08d68d2 100644 +index be16ab6da56d2aa2a21ee378cfc44dbb14e108b3..9a6b6120c248a57d9dc86ca215146f6de980bd0d 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -792,6 +792,7 @@ public abstract class AbstractMinecart extends VehicleEntity { @@ -29,7 +29,7 @@ index 82ffd50017dc234a9718db551fca0e73a6deded0..71361cc7339483936b18d2e0e938669b // CraftBukkit start VehicleEntityCollisionEvent collisionEvent = new VehicleEntityCollisionEvent((Vehicle) this.getBukkitEntity(), entity.getBukkitEntity()); diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index 6b0ec9da5a368775924f5b97c74acc5bfd609fa1..8a1cd9227d6f889dd8036ec593ee48862966af75 100644 +index 0178eb918179b12d7d8eb56cd72e5bfc34cfdbaf..1ced6d60a74fac028804b3c2d938e89af4706823 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java @@ -207,6 +207,7 @@ public class Boat extends VehicleEntity implements VariantHolder { diff --git a/patches/server/0534-Add-EntityMoveEvent.patch b/patches/server/0534-Add-EntityMoveEvent.patch index 0410b84f0c..6b7f95d0d9 100644 --- a/patches/server/0534-Add-EntityMoveEvent.patch +++ b/patches/server/0534-Add-EntityMoveEvent.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add EntityMoveEvent diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 8d3b3524a939d483aa4d451a8ca0fed3a9c87d26..37a5775a96a894a5419f01886fba471f0c62aba0 100644 +index 563dc53b10389f106f310d9c9ecfe33f7e701553..b0e0c955e9b5c92d4a8e8d55149d5e8123011420 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1584,6 +1584,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { return worldserver + " " + worldserver.dimension().location(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 7b76cba12680d7a8720c597b3a98b08ee5313f63..9f39445a78bfea25a12278b4410a44caf3cf929e 100644 +index a45b7a9c3e12236ba5103d4281c9b73997698a0d..b7d227015abeaed324b6b28a7ff51f07c68e704c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -221,6 +221,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public final LevelStorageSource.LevelStorageAccess convertable; public final UUID uuid; public boolean hasPhysicsEvent = true; // Paper -+ public boolean hasEntityMoveEvent = false; // Paper - Add EntityMoveEvent - public static Throwable getAddToWorldStackTrace(Entity entity) { - final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); - io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); ++ public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent + + @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI + return this.chunkSource.getChunk(x, z, false); diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 7d72477cdeaa8238da1291c0a902d090463b95c8..1681b63e49cb4f84b1caf0e1b02db19ede08ba13 100644 +index 0568dd1a885f06f7fd85419a8ec7429c7fec8aba..37c348d5b31f806b418a29dc4f8eb0fa1c7d1a4c 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3361,6 +3361,20 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0535-added-option-to-disable-pathfinding-updates-on-block.patch b/patches/server/0535-added-option-to-disable-pathfinding-updates-on-block.patch index de2f6c6af1..f6373a5296 100644 --- a/patches/server/0535-added-option-to-disable-pathfinding-updates-on-block.patch +++ b/patches/server/0535-added-option-to-disable-pathfinding-updates-on-block.patch @@ -5,10 +5,10 @@ Subject: [PATCH] added option to disable pathfinding updates on block changes diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9f39445a78bfea25a12278b4410a44caf3cf929e..da32aad077fb36cc17f420cc445530eec173e110 100644 +index b7d227015abeaed324b6b28a7ff51f07c68e704c..d6e8950af45578375b988158d98554c7d2f4f0a9 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1677,6 +1677,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1657,6 +1657,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } this.getChunkSource().blockChanged(pos); @@ -16,7 +16,7 @@ index 9f39445a78bfea25a12278b4410a44caf3cf929e..da32aad077fb36cc17f420cc445530ee VoxelShape voxelshape = oldState.getCollisionShape(this, pos); VoxelShape voxelshape1 = newState.getCollisionShape(this, pos); -@@ -1718,6 +1719,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1698,6 +1699,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } diff --git a/patches/server/0580-Add-a-should-burn-in-sunlight-API-for-Phantoms-and-S.patch b/patches/server/0580-Add-a-should-burn-in-sunlight-API-for-Phantoms-and-S.patch index b0ef068d7f..1d2850637b 100644 --- a/patches/server/0580-Add-a-should-burn-in-sunlight-API-for-Phantoms-and-S.patch +++ b/patches/server/0580-Add-a-should-burn-in-sunlight-API-for-Phantoms-and-S.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Add a "should burn in sunlight" API for Phantoms and diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 6be9e8d693bbb084791d7b30a1891ddb803d6b02..9af5a4b46dcec727c7c862332759ffbe3ebd87b5 100644 +index 117d466e1b4f545f6fd5006c3822c5586db96032..40664cc7e3665432a2ab5e552802c3fc3edbdb22 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -98,9 +98,15 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -48,7 +48,7 @@ index 6be9e8d693bbb084791d7b30a1891ddb803d6b02..9af5a4b46dcec727c7c862332759ffbe @Override public void setItemSlot(EquipmentSlot slot, ItemStack stack) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index a40852acf5d175cc3a06bc17fb021c76f0c11a28..bb52085d706293fa86df16a1b8e76d17a90ea9e9 100644 +index ea980c2fdf01988ba25bffc7f8963d775101bee1..187037c43ebb5b245ffa4b50163d443490668744 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -145,7 +145,7 @@ public class Phantom extends FlyingMob implements Enemy { @@ -78,11 +78,10 @@ index a40852acf5d175cc3a06bc17fb021c76f0c11a28..bb52085d706293fa86df16a1b8e76d17 // Paper end } -@@ -258,6 +262,10 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -258,6 +262,9 @@ public class Phantom extends FlyingMob implements Enemy { return spawningEntity; } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } -+ + private boolean shouldBurnInDay = true; + public boolean shouldBurnInDay() { return shouldBurnInDay; } + public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } diff --git a/patches/server/0587-Fix-and-optimise-world-force-upgrading.patch b/patches/server/0587-Fix-and-optimise-world-force-upgrading.patch index 12dd09168c..d04e1c7952 100644 --- a/patches/server/0587-Fix-and-optimise-world-force-upgrading.patch +++ b/patches/server/0587-Fix-and-optimise-world-force-upgrading.patch @@ -247,7 +247,7 @@ index 0000000000000000000000000000000000000000..513833c2ea23df5b079d157bc5cb89d5 + } +} diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index bea88fee71f0233839ea240cb8fcfb70228e986e..7b996a1c24e66d87c95b9f075248eb1d72ad0476 100644 +index 1cad3585ca122a465572b16d4ecbb7231e87c7de..b0a0909fa9501dfacfbe70dc4118062d1154bd15 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -385,6 +385,15 @@ public class Main { @@ -267,7 +267,7 @@ index bea88fee71f0233839ea240cb8fcfb70228e986e..7b996a1c24e66d87c95b9f075248eb1d Main.LOGGER.info("Forcing world upgrade! {}", session.getLevelId()); // CraftBukkit WorldUpgrader worldupgrader = new WorldUpgrader(session, dataFixer, dimensionOptionsRegistry, eraseCache); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index fbfe5d18a004225396f2d33084fb5073af2d9731..7bfd8307555a9447d4c546a8945341806041cc32 100644 +index d99217292a094713287cd597c9d7c01f04b9c7c7..748a5d8add76d4533fae2647c6e2439f518ac211 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -586,11 +586,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop explosionDensityCache = new HashMap<>(); // Paper - Optimize explosions public java.util.ArrayDeque redstoneUpdateInfos; // Paper - Move from Map in BlockRedstoneTorch to here @@ -318,7 +318,7 @@ index 3588ad0b5e8510a00b1a65c73defec39ee7fb108..761d01c993b60a11c749e172c3ee3067 return this.world; } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java -index deed4d50e0e4d810647a0745ef328c20dfe51093..9fa07295bf73317a4c2bbbbaf1918393c891f09a 100644 +index 8563383d45f89ee01dd5df13af5bd0cf1b3d7b01..9e30b47ece5549c30f487e5542ae65d5faaa8c39 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFileStorage.java @@ -60,6 +60,29 @@ public class RegionFileStorage implements AutoCloseable { @@ -352,7 +352,7 @@ index deed4d50e0e4d810647a0745ef328c20dfe51093..9fa07295bf73317a4c2bbbbaf1918393 return this.regionCache.getAndMoveToFirst(ChunkPos.asLong(chunkcoordintpair.getRegionX(), chunkcoordintpair.getRegionZ())); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 565beb65968b3f7e187f3e5b59aa08e9ac34f2a0..b28212bbf7678d73282d160bfeb0d246e93a8492 100644 +index 05868e37b03ac912ac902b105f3956f9351b1209..08d43545262e2be74566c270f3dd2c600b773616 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1251,9 +1251,7 @@ public final class CraftServer implements Server { diff --git a/patches/server/0592-Add-cause-to-Weather-ThunderChangeEvents.patch b/patches/server/0592-Add-cause-to-Weather-ThunderChangeEvents.patch index 53f088b373..51ca6281d8 100644 --- a/patches/server/0592-Add-cause-to-Weather-ThunderChangeEvents.patch +++ b/patches/server/0592-Add-cause-to-Weather-ThunderChangeEvents.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add cause to Weather/ThunderChangeEvents diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index a3288d3cd160978e8bab4ca34d1fe6dbee042e28..b858ee2fc8c03c52a6b6d703b1f770b3c496b2a8 100644 +index d6e8950af45578375b988158d98554c7d2f4f0a9..52fb8c8bb41b90c8c6f30551858fd496956cd41c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -672,8 +672,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -667,8 +667,8 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setClearWeatherTime(clearDuration); this.serverLevelData.setRainTime(rainDuration); this.serverLevelData.setThunderTime(rainDuration); @@ -19,7 +19,7 @@ index a3288d3cd160978e8bab4ca34d1fe6dbee042e28..b858ee2fc8c03c52a6b6d703b1f770b3 } @Override -@@ -1109,8 +1109,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1104,8 +1104,8 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setThunderTime(j); this.serverLevelData.setRainTime(k); this.serverLevelData.setClearWeatherTime(i); @@ -30,7 +30,7 @@ index a3288d3cd160978e8bab4ca34d1fe6dbee042e28..b858ee2fc8c03c52a6b6d703b1f770b3 } this.oThunderLevel = this.thunderLevel; -@@ -1177,14 +1177,14 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1172,14 +1172,14 @@ public class ServerLevel extends Level implements WorldGenLevel { @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start @@ -95,7 +95,7 @@ index f5ac36fa54f3d3b39de103c95abb9ca3adfe8dda..59ba982dc96ce47e47399514e8f74d2b if (weather.isCancelled()) { return; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 43d3c45cd7a178a4ca30e4c0c7fb1e7e21cd89f1..c0d02f7d714f7116b34b5a735b5520cf3a5a4587 100644 +index d240d9f5b558146c2de293a258914fd543975ca2..4ade6ad05a864e8065eb37a707dfbec392abd096 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -1243,7 +1243,7 @@ public class CraftWorld extends CraftRegionAccessor implements World { diff --git a/patches/server/0595-Add-PlayerKickEvent-causes.patch b/patches/server/0595-Add-PlayerKickEvent-causes.patch index 1b840d718e..4152287106 100644 --- a/patches/server/0595-Add-PlayerKickEvent-causes.patch +++ b/patches/server/0595-Add-PlayerKickEvent-causes.patch @@ -48,7 +48,7 @@ index 96814e626a95e4e3c2f4df1a0339d37bb02f2e61..ba12919c3f9aec34a9e64993b143ae92 public boolean shouldDisconnect() { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 5e279fb7e3b902905532cb10dce4df336ee52e67..b72dc50201601203eabfc7866e5843c496b54de7 100644 +index 748a5d8add76d4533fae2647c6e2439f518ac211..bd176eb76afec5873e6f903ef66b0e6df3e6a02f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -2236,7 +2236,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper start - split and make configurable + if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper - configurable tab spam limits - server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]))); // Paper + server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause return; diff --git a/patches/server/0603-Fix-dangerous-end-portal-logic.patch b/patches/server/0603-Fix-dangerous-end-portal-logic.patch index 53af813f2f..e2eaf3938c 100644 --- a/patches/server/0603-Fix-dangerous-end-portal-logic.patch +++ b/patches/server/0603-Fix-dangerous-end-portal-logic.patch @@ -11,10 +11,10 @@ Move the tick logic into the post tick, where portaling was designed to happen in the first place. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b3f33d74bf86943dd7ce05ce44541ae3e6db2fef..72f50fe74695e32167d414c1c9ee38deb95afb79 100644 +index df23dd16ecca29a569f89ddf7d755ab88557ab50..6c3cbfa88a0d8e48fadb85dd52d2678567243ee8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -492,6 +492,36 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -491,6 +491,36 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper end // Paper start - optimise entity tracking final org.spigotmc.TrackingRange.TrackingRangeType trackingRangeType = org.spigotmc.TrackingRange.getTrackingRangeType(this); @@ -51,7 +51,7 @@ index b3f33d74bf86943dd7ce05ce44541ae3e6db2fef..72f50fe74695e32167d414c1c9ee38de public boolean isLegacyTrackingEntity = false; -@@ -2879,6 +2909,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2878,6 +2908,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.processPortalCooldown(); diff --git a/patches/server/0614-Use-getChunkIfLoadedImmediately-in-places.patch b/patches/server/0614-Use-getChunkIfLoadedImmediately-in-places.patch index 25da2a7620..c329d37f04 100644 --- a/patches/server/0614-Use-getChunkIfLoadedImmediately-in-places.patch +++ b/patches/server/0614-Use-getChunkIfLoadedImmediately-in-places.patch @@ -8,11 +8,11 @@ ticket level 33 (yes getChunkIfLoaded will actually perform a chunk load in that case). diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index b858ee2fc8c03c52a6b6d703b1f770b3c496b2a8..45d5e5bd1ed37c4a3a658b27dc8571344580b65b 100644 +index 52fb8c8bb41b90c8c6f30551858fd496956cd41c..9eb5d6623c10ad88ca0deb7bd92a0cc085aa78b7 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -229,7 +229,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - } +@@ -224,7 +224,7 @@ public class ServerLevel extends Level implements WorldGenLevel { + public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI - return this.chunkSource.getChunk(x, z, false); @@ -21,10 +21,10 @@ index b858ee2fc8c03c52a6b6d703b1f770b3c496b2a8..45d5e5bd1ed37c4a3a658b27dc857134 @Override diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 761d01c993b60a11c749e172c3ee3067c055b582..2069cad866a3fd2ed5512fa8fc6dc2ef8bc9758e 100644 +index a19d4d091c738daf80ed9b7c95d149c84180ba9e..4b0bba18ba997f9dc3f0bd6e67af3538106891dc 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -204,6 +204,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -203,6 +203,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return (CraftServer) Bukkit.getServer(); } diff --git a/patches/server/0634-Optimize-indirect-passenger-iteration.patch b/patches/server/0634-Optimize-indirect-passenger-iteration.patch index a4b212cc41..d37ac5dd2c 100644 --- a/patches/server/0634-Optimize-indirect-passenger-iteration.patch +++ b/patches/server/0634-Optimize-indirect-passenger-iteration.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Optimize indirect passenger iteration diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e6142fc4ac6fe6149f6094124223cdebd56e7b76..2b34c7bc49fff37b6e0a603b6670103fe959fe2a 100644 +index 6c3cbfa88a0d8e48fadb85dd52d2678567243ee8..c24baad4eabcb538a3b30970364632a28a80e06b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3924,20 +3924,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3923,20 +3923,34 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } private Stream getIndirectPassengersStream() { @@ -43,7 +43,7 @@ index e6142fc4ac6fe6149f6094124223cdebd56e7b76..2b34c7bc49fff37b6e0a603b6670103f return () -> { return this.getIndirectPassengersStream().iterator(); }; -@@ -3960,6 +3974,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3959,6 +3973,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper end - rewrite chunk system public boolean hasExactlyOnePlayerPassenger() { diff --git a/patches/server/0642-Add-back-EntityPortalExitEvent.patch b/patches/server/0642-Add-back-EntityPortalExitEvent.patch index 0f910098c0..02d6197f1c 100644 --- a/patches/server/0642-Add-back-EntityPortalExitEvent.patch +++ b/patches/server/0642-Add-back-EntityPortalExitEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add back EntityPortalExitEvent diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8b84de55028a9c4d65fe5ae99b808f0d84ce6799..019d3494bb4d01172b33cc9022a7db9e0f603f8d 100644 +index c24baad4eabcb538a3b30970364632a28a80e06b..a151f56038ab605116bf576a24e7baf10cc414e8 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3373,6 +3373,28 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3372,6 +3372,28 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } else { // CraftBukkit start worldserver = shapedetectorshape.world; @@ -37,7 +37,7 @@ index 8b84de55028a9c4d65fe5ae99b808f0d84ce6799..019d3494bb4d01172b33cc9022a7db9e if (worldserver == this.level) { // SPIGOT-6782: Just move the entity if a plugin changed the world to the one the entity is already in this.moveTo(shapedetectorshape.pos.x, shapedetectorshape.pos.y, shapedetectorshape.pos.z, shapedetectorshape.yRot, shapedetectorshape.xRot); -@@ -3392,8 +3414,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3391,8 +3413,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (entity != null) { entity.restoreFrom(this); diff --git a/patches/server/0643-Add-methods-to-find-targets-for-lightning-strikes.patch b/patches/server/0643-Add-methods-to-find-targets-for-lightning-strikes.patch index 86f9829d7b..66feb07413 100644 --- a/patches/server/0643-Add-methods-to-find-targets-for-lightning-strikes.patch +++ b/patches/server/0643-Add-methods-to-find-targets-for-lightning-strikes.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Add methods to find targets for lightning strikes public net.minecraft.server.level.ServerLevel findLightningRod(Lnet/minecraft/core/BlockPos;)Ljava/util/Optional; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 45d5e5bd1ed37c4a3a658b27dc8571344580b65b..c8e8d8c8c49b28cbaed3072a211a79aacd5f0c34 100644 +index 9eb5d6623c10ad88ca0deb7bd92a0cc085aa78b7..249e7cfbb877a0a625ccde306994442669e257e7 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -998,6 +998,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -993,6 +993,11 @@ public class ServerLevel extends Level implements WorldGenLevel { } protected BlockPos findLightningTargetAround(BlockPos pos) { @@ -22,7 +22,7 @@ index 45d5e5bd1ed37c4a3a658b27dc8571344580b65b..c8e8d8c8c49b28cbaed3072a211a79aa BlockPos blockposition1 = this.getHeightmapPos(Heightmap.Types.MOTION_BLOCKING, pos); Optional optional = this.findLightningRod(blockposition1); -@@ -1012,6 +1017,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1007,6 +1012,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!list.isEmpty()) { return ((LivingEntity) list.get(this.random.nextInt(list.size()))).blockPosition(); } else { @@ -31,7 +31,7 @@ index 45d5e5bd1ed37c4a3a658b27dc8571344580b65b..c8e8d8c8c49b28cbaed3072a211a79aa blockposition1 = blockposition1.above(2); } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index d6b402d0bae4d16932e059f1da59ac4523d974b8..ca0af0011159834919c8e071ceac051a0e600b84 100644 +index dbd39858661773fcfb8e22fc984525b9de133c9f..9d80c0c312990a3eb6cc9819eb926157df98cc9c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -701,6 +701,23 @@ public class CraftWorld extends CraftRegionAccessor implements World { diff --git a/patches/server/0653-Add-Raw-Byte-Entity-Serialization.patch b/patches/server/0653-Add-Raw-Byte-Entity-Serialization.patch index cfff9cb4b5..2291299aaf 100644 --- a/patches/server/0653-Add-Raw-Byte-Entity-Serialization.patch +++ b/patches/server/0653-Add-Raw-Byte-Entity-Serialization.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Add Raw Byte Entity Serialization public net.minecraft.world.entity.Entity setLevel(Lnet/minecraft/world/level/Level;)V diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 019d3494bb4d01172b33cc9022a7db9e0f603f8d..82db53692f3fc38625d63f9371f2d842159c454c 100644 +index a151f56038ab605116bf576a24e7baf10cc414e8..42eb530571c9f7854888e7f3f6a63ef10dba1b4e 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2159,6 +2159,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2158,6 +2158,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -47,7 +47,7 @@ index a6492b6a9f66d8bcda8928fadf0a5920ff7f0dab..71845027ba1b755ead76cf75d011547d // Paper end } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 580b6c134743c35d9eb1d98a2d038d1c8f10054c..4a5af85ebb573950c0c65d3a5f25b586173d16dd 100644 +index df57a3be211017e2ba7bd28571adaea59d0be969..fd1ec07ada04de98d0a4f1ca4c93ec53771f88d7 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -483,6 +483,29 @@ public final class CraftMagicNumbers implements UnsafeValues { diff --git a/patches/server/0655-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch b/patches/server/0655-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch index 54357f73a3..620d79337a 100644 --- a/patches/server/0655-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch +++ b/patches/server/0655-Do-not-run-close-logic-for-inventories-on-chunk-unlo.patch @@ -9,10 +9,10 @@ chunk through it. This should also be OK from a leak prevention/ state desync POV because the TE is getting unloaded anyways. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index c8e8d8c8c49b28cbaed3072a211a79aacd5f0c34..6b4b505ae0c6f95309243aaa149967b2d728fa87 100644 +index 249e7cfbb877a0a625ccde306994442669e257e7..2b4afc35c9e57977972fe0ddab0ae753f13d8828 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1578,9 +1578,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1558,9 +1558,13 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot Start for (net.minecraft.world.level.block.entity.BlockEntity tileentity : chunk.getBlockEntities().values()) { if (tileentity instanceof net.minecraft.world.Container) { @@ -28,7 +28,7 @@ index c8e8d8c8c49b28cbaed3072a211a79aacd5f0c34..6b4b505ae0c6f95309243aaa149967b2 } // Spigot End diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 36e01f491565e70601464d957143c21aba17dfa1..ca66a8ebb4ae2d3ee9cf88412bbb20d5f812d050 100644 +index 09ee06b89f2bda0245c2858ffc19a5893494d24a..f01965be7ae893de26dbf0d57887cd66e71418f6 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -1630,6 +1630,18 @@ public class ServerPlayer extends Player { @@ -51,7 +51,7 @@ index 36e01f491565e70601464d957143c21aba17dfa1..ca66a8ebb4ae2d3ee9cf88412bbb20d5 @Override public void doCloseContainer() { diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index e90bfeca52d74d147616773640517995d98e19bc..c21b6e9b013c31342e1a47500f5262ddfb7cd6d0 100644 +index 09e1790f3370f723d8da83097bec433c68eec87d..b90db32be29b198376e696506e1c3ea4cd67c301 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -508,6 +508,11 @@ public abstract class Player extends LivingEntity { diff --git a/patches/server/0664-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch b/patches/server/0664-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch index c5df221bd7..bdb1dc3be3 100644 --- a/patches/server/0664-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch +++ b/patches/server/0664-Make-sure-inlined-getChunkAt-has-inlined-logic-for-l.patch @@ -10,10 +10,10 @@ chunks did get inlined, but the standard CPS.getChunkAt method was not inlined. diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2069cad866a3fd2ed5512fa8fc6dc2ef8bc9758e..7718db906ed1b97f1b55a891c2ea3b59ac1307fb 100644 +index 4b0bba18ba997f9dc3f0bd6e67af3538106891dc..87edfd96ec2ae00971711b46304134b89e6572a0 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -458,6 +458,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -457,6 +457,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public final LevelChunk getChunk(int chunkX, int chunkZ) { // Paper - final to help inline diff --git a/patches/server/0669-Execute-chunk-tasks-mid-tick.patch b/patches/server/0669-Execute-chunk-tasks-mid-tick.patch index a999b59233..dc5d7301c5 100644 --- a/patches/server/0669-Execute-chunk-tasks-mid-tick.patch +++ b/patches/server/0669-Execute-chunk-tasks-mid-tick.patch @@ -19,7 +19,7 @@ index 6b3cde6d4d1e63bec01f502f2027ee9fddac08aa..46449728f69ee7d4f78470f8da23c055 private MinecraftTimings() {} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 970dafebf8143ab6de44bfffdeff2475685f99fa..0b0e415adafb5f614259291c1c501fa1b85ddb14 100644 +index bd176eb76afec5873e6f903ef66b0e6df3e6a02f..ec48aea4e352e8ee3ad8cda8ce8ec33daf49dae8 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1341,8 +1341,79 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop void guardEntityTick(Consumer tickConsumer, T entity) { try { tickConsumer.accept(entity); diff --git a/patches/server/0670-Oprimise-map-impl-for-tracked-players.patch b/patches/server/0670-Oprimise-map-impl-for-tracked-players.patch index 73a51061c9..e1755f4038 100644 --- a/patches/server/0670-Oprimise-map-impl-for-tracked-players.patch +++ b/patches/server/0670-Oprimise-map-impl-for-tracked-players.patch @@ -7,10 +7,10 @@ Reference2BooleanOpenHashMap is going to have better lookups than HashMap. diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 07abd089e5091d292d4542bbe0fbb416a111bf8e..534493aaddced9200e1618d5eabf2b176a1f35b6 100644 +index bdda124f6cc89b8a7ed198fdf095aee5f3f24ce3..f761d600bb5d995a25ffbbe5469625508de1f8bc 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1301,7 +1301,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1297,7 +1297,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider final Entity entity; private final int range; SectionPos lastSectionPos; diff --git a/patches/server/0672-Optimise-random-block-ticking.patch b/patches/server/0672-Optimise-random-block-ticking.patch index 1a30403506..23c72bf758 100644 --- a/patches/server/0672-Optimise-random-block-ticking.patch +++ b/patches/server/0672-Optimise-random-block-ticking.patch @@ -90,10 +90,10 @@ index 0000000000000000000000000000000000000000..7d93652c1abbb6aee6eb7c26cf35d4d0 + } +} diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 2c2d731aaeb7a633ce647ba49a5f2962e01b4c8f..bff754626913969c6946757cee968c02281f59b3 100644 +index 0280f81406eb248d41673d2e3ae1a317357b32cd..bc887fd2788f1c56ed3b8a10ad15cfc23f065138 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -860,6 +860,10 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -855,6 +855,10 @@ public class ServerLevel extends Level implements WorldGenLevel { entityplayer.stopSleepInBed(false, false); }); } @@ -104,7 +104,7 @@ index 2c2d731aaeb7a633ce647ba49a5f2962e01b4c8f..bff754626913969c6946757cee968c02 public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); -@@ -869,8 +873,10 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -864,8 +868,10 @@ public class ServerLevel extends Level implements WorldGenLevel { ProfilerFiller gameprofilerfiller = this.getProfiler(); gameprofilerfiller.push("thunder"); @@ -116,7 +116,7 @@ index 2c2d731aaeb7a633ce647ba49a5f2962e01b4c8f..bff754626913969c6946757cee968c02 if (this.isRainingAt(blockposition)) { DifficultyInstance difficultydamagescaler = this.getCurrentDifficultyAt(blockposition); -@@ -902,7 +908,10 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -897,7 +903,10 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!this.paperConfig().environment.disableIceAndSnow) { // Paper for (int l = 0; l < randomTickSpeed; ++l) { if (this.random.nextInt(48) == 0) { @@ -128,7 +128,7 @@ index 2c2d731aaeb7a633ce647ba49a5f2962e01b4c8f..bff754626913969c6946757cee968c02 } } } // Paper -@@ -910,36 +919,37 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -905,36 +914,37 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.popPush("tickBlocks"); timings.chunkTicksBlocks.startTiming(); // Paper if (randomTickSpeed > 0) { @@ -190,7 +190,7 @@ index 2c2d731aaeb7a633ce647ba49a5f2962e01b4c8f..bff754626913969c6946757cee968c02 timings.chunkTicksBlocks.stopTiming(); // Paper gameprofilerfiller.pop(); -@@ -947,17 +957,25 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -942,17 +952,25 @@ public class ServerLevel extends Level implements WorldGenLevel { @VisibleForTesting public void tickPrecipitation(BlockPos pos) { @@ -220,7 +220,7 @@ index 2c2d731aaeb7a633ce647ba49a5f2962e01b4c8f..bff754626913969c6946757cee968c02 if (i > 0 && biomebase.shouldSnow(this, blockposition1)) { BlockState iblockdata = this.getBlockState(blockposition1); -@@ -975,12 +993,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -970,12 +988,13 @@ public class ServerLevel extends Level implements WorldGenLevel { } } @@ -311,7 +311,7 @@ index f0f764f36fb92c64ab2dc8a0a50c3f48321c3c9a..311625277a26c9c187025a1036978229 public void getAll(IntConsumer action) { for(int i = 0; i < this.size; ++i) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 722e323d2ae3f4ac8aa3197fed79f7d926d5ccfa..f8c1dfc8e121a406955348a1ec00c264d73e73f7 100644 +index 6bbcdd34fb89ea5774e825de8f9a588552716fc2..2a3f1d14a4b24a3219d191b4f2e97ed7b061e006 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java @@ -87,7 +87,7 @@ public class Turtle extends Animal { @@ -324,10 +324,10 @@ index 722e323d2ae3f4ac8aa3197fed79f7d926d5ccfa..f8c1dfc8e121a406955348a1ec00c264 public BlockPos getHomePos() { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 9489fa61ca43d5d0f1a3c6e23bf1f9c3a1795063..fb86d06e8e420410e3cf9d918abd3369fa2f033e 100644 +index 817e9df60e6524625780683b4260d4f8b62e00b3..bf2376c484bfec238c4fe2a1298cf3f8ff824b38 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1398,10 +1398,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1397,10 +1397,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract RecipeManager getRecipeManager(); public BlockPos getBlockRandomPos(int x, int y, int z, int l) { @@ -348,7 +348,7 @@ index 9489fa61ca43d5d0f1a3c6e23bf1f9c3a1795063..fb86d06e8e420410e3cf9d918abd3369 public boolean noSave() { 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 b8fee4f8a0cfe32b9ef7f3f3cf818cbaec0d3fca..12edaf88cca54540c617239ac31b2263dfa0ecd7 100644 +index 3efd0a462306fbd02a506a3f952d609645b1f874..4a781375a4a18011259edcb4e24550748a05dfa0 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java @@ -25,6 +25,7 @@ public class LevelChunkSection { diff --git a/patches/server/0675-Detail-more-information-in-watchdog-dumps.patch b/patches/server/0675-Detail-more-information-in-watchdog-dumps.patch index 3be1d22fae..85c6a4609f 100644 --- a/patches/server/0675-Detail-more-information-in-watchdog-dumps.patch +++ b/patches/server/0675-Detail-more-information-in-watchdog-dumps.patch @@ -7,7 +7,7 @@ Subject: [PATCH] Detail more information in watchdog dumps - Dump player name, player uuid, position, and world for packet handling diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 872ad936dd86b510f24676fe565eb547b35bcb5e..20cd5c5d197d92f7127aadad063c4aabfc4863a6 100644 +index 28adc086f7bc1b6f403e65c5db51b267c90f2f37..5d73043dc9847ae195cef804fa0b0f4bf6db06f2 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -521,7 +521,13 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -76,10 +76,10 @@ index 7de24c39b460e43d27839b3821e67213508ece81..7297bca9224c12d7ace0e1967340d994 }); throw RunningOnDifferentThreadException.RUNNING_ON_DIFFERENT_THREAD; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index dcbcb1df7a8c1e5f78b8f202e4207afc1054a414..ec2a8656148b7ccdf519ce6d13494d22dadc0789 100644 +index bc887fd2788f1c56ed3b8a10ad15cfc23f065138..28e6af9e265c1d8328e8e80ec7e519e244caf297 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1244,7 +1244,26 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1239,7 +1239,26 @@ public class ServerLevel extends Level implements WorldGenLevel { } @@ -106,7 +106,7 @@ index dcbcb1df7a8c1e5f78b8f202e4207afc1054a414..ec2a8656148b7ccdf519ce6d13494d22 ++TimingHistory.entityTicks; // Paper - timings // Spigot start co.aikar.timings.Timing timer; // Paper -@@ -1284,7 +1303,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1279,7 +1298,13 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(entity, entity1); } // } finally { timer.stopTiming(); } // Paper - timings - move up @@ -122,10 +122,10 @@ index dcbcb1df7a8c1e5f78b8f202e4207afc1054a414..ec2a8656148b7ccdf519ce6d13494d22 private void tickPassenger(Entity vehicle, Entity passenger) { diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b9d70f71b2b03190e329d1f843b54ac4c73543ab..054825419c98351af15309ecfa007fd7e1ee1bea 100644 +index 42eb530571c9f7854888e7f3f6a63ef10dba1b4e..5682ec12d9a54979022978421dd8875a90ed9682 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1031,7 +1031,42 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1030,7 +1030,42 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.onGround; } @@ -168,7 +168,7 @@ index b9d70f71b2b03190e329d1f843b54ac4c73543ab..054825419c98351af15309ecfa007fd7 if (this.noPhysics) { this.setPos(this.getX() + movement.x, this.getY() + movement.y, this.getZ() + movement.z); } else { -@@ -1201,6 +1236,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1200,6 +1235,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.level().getProfiler().pop(); } } @@ -182,7 +182,7 @@ index b9d70f71b2b03190e329d1f843b54ac4c73543ab..054825419c98351af15309ecfa007fd7 } private boolean isStateClimbable(BlockState state) { -@@ -4270,7 +4312,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4269,7 +4311,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void setDeltaMovement(Vec3 velocity) { @@ -192,7 +192,7 @@ index b9d70f71b2b03190e329d1f843b54ac4c73543ab..054825419c98351af15309ecfa007fd7 } public void addDeltaMovement(Vec3 velocity) { -@@ -4373,7 +4417,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4372,7 +4416,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } // Paper end - Fix MC-4 if (this.position.x != x || this.position.y != y || this.position.z != z) { diff --git a/patches/server/0677-Fix-merchant-inventory-not-closing-on-entity-removal.patch b/patches/server/0677-Fix-merchant-inventory-not-closing-on-entity-removal.patch index edc9520194..7f1db1c715 100644 --- a/patches/server/0677-Fix-merchant-inventory-not-closing-on-entity-removal.patch +++ b/patches/server/0677-Fix-merchant-inventory-not-closing-on-entity-removal.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix merchant inventory not closing on entity removal diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index b4711272fb36b631d4426ee5b5e29fb6f11e3d1d..15224b31e926ab16b1ef8f2ebdca4dba20637789 100644 +index 28e6af9e265c1d8328e8e80ec7e519e244caf297..4f48e7ee15f381e0bcf71fc4c7d37daf2dd4f7fd 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2696,6 +2696,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2676,6 +2676,11 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot end // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message diff --git a/patches/server/0688-Update-head-rotation-in-missing-places.patch b/patches/server/0688-Update-head-rotation-in-missing-places.patch index 9478062a82..30130e3939 100644 --- a/patches/server/0688-Update-head-rotation-in-missing-places.patch +++ b/patches/server/0688-Update-head-rotation-in-missing-places.patch @@ -8,10 +8,10 @@ This is because bukkit uses a separate head rotation field for yaw. This issue only applies to players. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 873ae06dc0b5de6cc69e2e8a24a882ca90ee8663..cee005823020adaef519267630030e8d31b5b994 100644 +index 5682ec12d9a54979022978421dd8875a90ed9682..a6fc204fce8f44d772ff0f438c6d62850b0e224f 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1918,6 +1918,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1917,6 +1917,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setXRot(Mth.clamp(pitch, -90.0F, 90.0F) % 360.0F); this.yRotO = this.getYRot(); this.xRotO = this.getXRot(); @@ -19,7 +19,7 @@ index 873ae06dc0b5de6cc69e2e8a24a882ca90ee8663..cee005823020adaef519267630030e8d } public void absMoveTo(double x, double y, double z) { -@@ -1956,6 +1957,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1955,6 +1956,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setXRot(pitch); this.setOldPosAndRot(); this.reapplyPosition(); diff --git a/patches/server/0695-don-t-attempt-to-teleport-dead-entities.patch b/patches/server/0695-don-t-attempt-to-teleport-dead-entities.patch index 2a248fca0c..f0a2e3372e 100644 --- a/patches/server/0695-don-t-attempt-to-teleport-dead-entities.patch +++ b/patches/server/0695-don-t-attempt-to-teleport-dead-entities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] don't attempt to teleport dead entities diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index cee005823020adaef519267630030e8d31b5b994..3086ded2c65b2d623a50401fb0a1612d073da450 100644 +index a6fc204fce8f44d772ff0f438c6d62850b0e224f..78034cef7c7555eb4f772a618662a8ef9d0b7083 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -794,7 +794,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -793,7 +793,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit start public void postTick() { // No clean way to break out of ticking once the entity has been copied to a new world, so instead we move the portalling later in the tick cycle diff --git a/patches/server/0706-Collision-optimisations.patch b/patches/server/0706-Collision-optimisations.patch index ff81018497..c00b088fce 100644 --- a/patches/server/0706-Collision-optimisations.patch +++ b/patches/server/0706-Collision-optimisations.patch @@ -2214,10 +2214,10 @@ index 1f14b904807d4b593b608c8dc7a97bd8c320eceb..0da976438be3de7b82e8b1e3ce06d01c entityplayer1.setPos(entityplayer1.getX(), entityplayer1.getY() + 1.0D, entityplayer1.getZ()); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 71ea121661874c11147bea0f9a4a147583f312fc..b6146726e767fa0401da3d7f5bbbf95b7c7a17d9 100644 +index 78034cef7c7555eb4f772a618662a8ef9d0b7083..515c948cce0066cfd6e292afd65ceefc320ed553 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1217,9 +1217,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1216,9 +1216,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S float f = this.getBlockSpeedFactor(); this.setDeltaMovement(this.getDeltaMovement().multiply((double) f, 1.0D, (double) f)); @@ -2265,7 +2265,7 @@ index 71ea121661874c11147bea0f9a4a147583f312fc..b6146726e767fa0401da3d7f5bbbf95b if (this.remainingFireTicks <= 0) { this.setRemainingFireTicks(-this.getFireImmuneTicks()); } -@@ -1399,32 +1434,82 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1398,32 +1433,82 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } private Vec3 collide(Vec3 movement) { @@ -2364,7 +2364,7 @@ index 71ea121661874c11147bea0f9a4a147583f312fc..b6146726e767fa0401da3d7f5bbbf95b } public static Vec3 collideBoundingBox(@Nullable Entity entity, Vec3 movement, AABB entityBoundingBox, Level world, List collisions) { -@@ -2629,11 +2714,70 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2628,11 +2713,70 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S float f = this.dimensions.width * 0.8F; AABB axisalignedbb = AABB.ofSize(this.getEyePosition(), (double) f, 1.0E-6D, (double) f); @@ -2440,7 +2440,7 @@ index 71ea121661874c11147bea0f9a4a147583f312fc..b6146726e767fa0401da3d7f5bbbf95b } diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index e29d1801f15c4c5680b683783e97a7aae3da753e..1e42372f038757b48990643aa2f118be415e0463 100644 +index 5bda9612cbc7c233ad0195cb4e943de063130d00..81b54fd9f867666d688068d39344c7e19ed639c3 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -353,7 +353,7 @@ public class ArmorStand extends LivingEntity { @@ -2600,10 +2600,10 @@ index a25497eec004add7408a63b1a0f09e3fa443b324..9f892de55ab03367daed4c30cc44c9dd // Paper start diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2d2ef8455ea650baa1db74135c9321d97d10d12e..b023626467fc1f507d979653098bf30b18bd47c3 100644 +index 38ad089c87bcc3f81998142e49edae4f4fad8ba9..8c363306b5dac302ab3c26a245aa4a768b304ed4 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -300,6 +300,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -299,6 +299,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime); this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : com.destroystokyo.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray @@ -2613,11 +2613,11 @@ index 2d2ef8455ea650baa1db74135c9321d97d10d12e..b023626467fc1f507d979653098bf30b + // Paper end - optimise collisions } - // Paper start -@@ -341,6 +345,370 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Paper start - Cancel hit for vanished players +@@ -340,6 +344,370 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return true; } - // Paper end + // Paper end - Cancel hit for vanished players + // Paper start - optimise collisions + public final int minSection; + public final int maxSection; @@ -2985,7 +2985,7 @@ index 2d2ef8455ea650baa1db74135c9321d97d10d12e..b023626467fc1f507d979653098bf30b @Override public boolean isClientSide() { return this.isClientSide; -@@ -961,7 +1329,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -960,7 +1328,17 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public boolean noCollision(@Nullable Entity entity, AABB box) { if (entity instanceof net.minecraft.world.entity.decoration.ArmorStand && !entity.level().paperConfig().entities.armorStands.doCollisionEntityLookups) return false; @@ -3018,7 +3018,7 @@ index af62781cc96354c87aa63d4f03f9e25b81959081..6c4fd56956982eee743b4dea4e8b9258 public boolean propagatesSkylightDown(BlockState state, BlockGetter world, BlockPos pos) { diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 10e8532ed21895f98808c86fa2ae5a2e41d3965f..5b5a472e446e21f46e5f92c3e1fd79498a1aa4a6 100644 +index d1d00b9a078ee1f5a6c5dd51c2f0409d12c85c26..100c2629f2746fc00435f60998dba70135637ef7 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -882,6 +882,10 @@ public abstract class BlockBehaviour implements FeatureElement { @@ -3030,7 +3030,7 @@ index 10e8532ed21895f98808c86fa2ae5a2e41d3965f..5b5a472e446e21f46e5f92c3e1fd7949 + this.id2 = it.unimi.dsi.fastutil.HashCommon.murmurHash3(it.unimi.dsi.fastutil.HashCommon.murmurHash3(ID_GENERATOR.getAndIncrement() + RANDOM_OFFSET) + RANDOM_OFFSET); + // Paper end - optimise collisions } - // Paper start - impl cached craft block data, lazy load to fix issue with loading at the wrong time + // Paper start - Perf: impl cached craft block data, lazy load to fix issue with loading at the wrong time private org.bukkit.craftbukkit.block.data.CraftBlockData cachedCraftBlockData; @@ -930,6 +934,52 @@ public abstract class BlockBehaviour implements FeatureElement { return this.conditionallyFullOpaque; diff --git a/patches/server/0712-Forward-CraftEntity-in-teleport-command.patch b/patches/server/0712-Forward-CraftEntity-in-teleport-command.patch index f6e58ad284..a1ad82d694 100644 --- a/patches/server/0712-Forward-CraftEntity-in-teleport-command.patch +++ b/patches/server/0712-Forward-CraftEntity-in-teleport-command.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Forward CraftEntity in teleport command diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5be92231bf62285f29dcf32b2ef65baaf5755804..a5820d750e88918ef819be0d0896e31b628ab302 100644 +index 515c948cce0066cfd6e292afd65ceefc320ed553..11e57b335150fcf9030e23a060f2608d97e09eb1 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3531,6 +3531,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3530,6 +3530,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void restoreFrom(Entity original) { @@ -22,7 +22,7 @@ index 5be92231bf62285f29dcf32b2ef65baaf5755804..a5820d750e88918ef819be0d0896e31b CompoundTag nbttagcompound = original.saveWithoutId(new CompoundTag()); nbttagcompound.remove("Dimension"); -@@ -3621,10 +3628,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3620,10 +3627,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } // CraftBukkit end diff --git a/patches/server/0734-Freeze-Tick-Lock-API.patch b/patches/server/0734-Freeze-Tick-Lock-API.patch index 4bdca68930..53d8e60863 100644 --- a/patches/server/0734-Freeze-Tick-Lock-API.patch +++ b/patches/server/0734-Freeze-Tick-Lock-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Freeze Tick Lock API diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f3cb6eac54b245ff6cbe3a1659ac9b7a1b0856a0..276c7dd6af228f404cec7aeb58dad10f2a23a18b 100644 +index 11e57b335150fcf9030e23a060f2608d97e09eb1..811479660f7e6148b5448d3342a862aff36ec673 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -409,6 +409,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -408,6 +408,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private org.bukkit.util.Vector origin; @javax.annotation.Nullable private UUID originWorld; @@ -16,7 +16,7 @@ index f3cb6eac54b245ff6cbe3a1659ac9b7a1b0856a0..276c7dd6af228f404cec7aeb58dad10f public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -840,7 +841,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -839,7 +840,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setRemainingFireTicks(this.remainingFireTicks - 1); } @@ -25,7 +25,7 @@ index f3cb6eac54b245ff6cbe3a1659ac9b7a1b0856a0..276c7dd6af228f404cec7aeb58dad10f this.setTicksFrozen(0); this.level().levelEvent((Player) null, 1009, this.blockPosition, 1); } -@@ -2454,6 +2455,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2453,6 +2454,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (fromNetherPortal) { nbttagcompound.putBoolean("Paper.FromNetherPortal", true); } @@ -35,7 +35,7 @@ index f3cb6eac54b245ff6cbe3a1659ac9b7a1b0856a0..276c7dd6af228f404cec7aeb58dad10f // Paper end return nbttagcompound; } catch (Throwable throwable) { -@@ -2598,6 +2602,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2597,6 +2601,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (spawnReason == null) { spawnReason = org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.DEFAULT; } @@ -46,7 +46,7 @@ index f3cb6eac54b245ff6cbe3a1659ac9b7a1b0856a0..276c7dd6af228f404cec7aeb58dad10f } catch (Throwable throwable) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 95442c5e5abfd916a1b0add6381a8f57b36125e7..13b4a2eae01ee51546e6e5e3c4093e5389971d7d 100644 +index abfb7dbd03f79bad00a3b713717987e12743c6f0..3de76ca462d65e18a5d60dab367e09b48bc5d5a7 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3452,7 +3452,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/0766-Ensure-entity-passenger-world-matches-ridden-entity.patch b/patches/server/0766-Ensure-entity-passenger-world-matches-ridden-entity.patch index eaaa489b77..c3d21f2d7e 100644 --- a/patches/server/0766-Ensure-entity-passenger-world-matches-ridden-entity.patch +++ b/patches/server/0766-Ensure-entity-passenger-world-matches-ridden-entity.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Ensure entity passenger world matches ridden entity Bad plugins doing this would cause some obvious problems... diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index e61cb14e9451b242c8324d81b462e80832ef73aa..837c5be7ba4caf8ad36262b15b8f5b644fb861db 100644 +index 811479660f7e6148b5448d3342a862aff36ec673..f5cd50592244394c4186380a372a34733aa04c49 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2847,7 +2847,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2846,7 +2846,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean startRiding(Entity entity, boolean force) { diff --git a/patches/server/0782-Don-t-tick-markers.patch b/patches/server/0782-Don-t-tick-markers.patch index 6e0c3d6db3..ecbd39890d 100644 --- a/patches/server/0782-Don-t-tick-markers.patch +++ b/patches/server/0782-Don-t-tick-markers.patch @@ -23,10 +23,10 @@ index ff99336e0b8131ae161cfa5c4fc83c6905e3dbc8..5e5a018433414af76eaa1e781f61612d } }); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 15224b31e926ab16b1ef8f2ebdca4dba20637789..cb2f5d727971c809bcb3eea0db04de4fa91459fb 100644 +index 4f48e7ee15f381e0bcf71fc4c7d37daf2dd4f7fd..6b798d81eeb226ce078dc867277ba80cb22c9d7d 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2605,6 +2605,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2585,6 +2585,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } public void onTickingStart(Entity entity) { diff --git a/patches/server/0790-Prevent-entity-loading-causing-async-lookups.patch b/patches/server/0790-Prevent-entity-loading-causing-async-lookups.patch index 1d3f44f5e8..75f49771d6 100644 --- a/patches/server/0790-Prevent-entity-loading-causing-async-lookups.patch +++ b/patches/server/0790-Prevent-entity-loading-causing-async-lookups.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent entity loading causing async lookups diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 837c5be7ba4caf8ad36262b15b8f5b644fb861db..2804758ce72c943fa47c1ead685032c9501a0ea9 100644 +index f5cd50592244394c4186380a372a34733aa04c49..125699e0d9c4e239e32a86376a059b28c2982713 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -803,6 +803,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -802,6 +802,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void baseTick() { this.level().getProfiler().push("entityBaseTick"); diff --git a/patches/server/0792-Add-Alternate-Current-redstone-implementation.patch b/patches/server/0792-Add-Alternate-Current-redstone-implementation.patch index 406677760e..8bc498bcb4 100644 --- a/patches/server/0792-Add-Alternate-Current-redstone-implementation.patch +++ b/patches/server/0792-Add-Alternate-Current-redstone-implementation.patch @@ -2008,18 +2008,18 @@ index 0000000000000000000000000000000000000000..33cd90c30c22200a4e1ae64f40a0bf78 + } +} diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index cd20322f88c2952b451b226c4c5c3f41879d0305..092be422770ceb11446b99f6e2d746d1c9ce4f88 100644 +index 6b798d81eeb226ce078dc867277ba80cb22c9d7d..5c9083246fb7f49b9091ba7467d55b6dc7cd18f1 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -223,6 +223,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public final UUID uuid; public boolean hasPhysicsEvent = true; // Paper - public boolean hasEntityMoveEvent = false; // Paper - Add EntityMoveEvent + public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent + private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) - public static Throwable getAddToWorldStackTrace(Entity entity) { - final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); - io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); -@@ -2594,6 +2595,13 @@ public class ServerLevel extends Level implements WorldGenLevel { + + @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI + return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately +@@ -2574,6 +2575,13 @@ public class ServerLevel extends Level implements WorldGenLevel { return crashreportsystemdetails; } @@ -2034,10 +2034,10 @@ index cd20322f88c2952b451b226c4c5c3f41879d0305..092be422770ceb11446b99f6e2d746d1 EntityCallbacks() {} diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 0c2654986b9a5c7f210ba387851997ecec1ebb00..a03dedf6fb845e9435b5171046bb6cd5dda94b71 100644 +index 8c363306b5dac302ab3c26a245aa4a768b304ed4..8ad909802a107ff670e839915071a7d116099e1c 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1885,4 +1885,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1884,4 +1884,15 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return range <= 0 ? 64.0 * 64.0 : range * range; // 64 is taken from default in ServerLevel#levelEvent } // Paper end - respect global sound events gamerule diff --git a/patches/server/0799-Prevent-empty-items-from-being-added-to-world.patch b/patches/server/0799-Prevent-empty-items-from-being-added-to-world.patch index bb9ca4b521..1a0a28f75a 100644 --- a/patches/server/0799-Prevent-empty-items-from-being-added-to-world.patch +++ b/patches/server/0799-Prevent-empty-items-from-being-added-to-world.patch @@ -7,10 +7,10 @@ The previous solution caused a bunch of bandaid fixes inorder to resolve edge ca Just simply prevent them from being added to the world instead. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 17f753ac54e73f3644d71c3ef5cbdfb850f5766c..1089c0ad619784d25b1384db2f09eebb53fa4536 100644 +index 5c9083246fb7f49b9091ba7467d55b6dc7cd18f1..b82dc3d8558d18692769f7b9ee835a4eb4dd8253 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1587,6 +1587,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1567,6 +1567,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // WorldServer.LOGGER.warn("Tried to add entity {} but it was marked as removed already", EntityTypes.getKey(entity.getType())); // CraftBukkit return false; } else { diff --git a/patches/server/0803-Add-various-missing-EntityDropItemEvent-calls.patch b/patches/server/0803-Add-various-missing-EntityDropItemEvent-calls.patch index 1fc3b95af3..5f52f376f2 100644 --- a/patches/server/0803-Add-various-missing-EntityDropItemEvent-calls.patch +++ b/patches/server/0803-Add-various-missing-EntityDropItemEvent-calls.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add various missing EntityDropItemEvent calls diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2804758ce72c943fa47c1ead685032c9501a0ea9..071fc07228253d55edaf17950db80bb25001f7f8 100644 +index 125699e0d9c4e239e32a86376a059b28c2982713..b9a1a7edb9f9aea0fa53cc3edfbc4522949f4093 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2699,6 +2699,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2698,6 +2698,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S stack.setCount(0); // Paper - destroy this item - if this ever leaks due to game bugs, ensure it doesn't dupe entityitem.setDefaultPickUpDelay(); diff --git a/patches/server/0807-Add-EntityPortalReadyEvent.patch b/patches/server/0807-Add-EntityPortalReadyEvent.patch index c06f957a1e..f75955fb32 100644 --- a/patches/server/0807-Add-EntityPortalReadyEvent.patch +++ b/patches/server/0807-Add-EntityPortalReadyEvent.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add EntityPortalReadyEvent diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 071fc07228253d55edaf17950db80bb25001f7f8..0d427f0a70c8d85762fededfe920418d66636ebb 100644 +index b9a1a7edb9f9aea0fa53cc3edfbc4522949f4093..fc0f58560a53a783b9fabceee227bed3908bae89 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3099,6 +3099,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3098,6 +3098,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit this.level().getProfiler().push("portal"); this.portalTime = i; @@ -22,7 +22,7 @@ index 071fc07228253d55edaf17950db80bb25001f7f8..0d427f0a70c8d85762fededfe920418d this.setPortalCooldown(); // CraftBukkit start if (this instanceof ServerPlayer) { -@@ -3106,6 +3113,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3105,6 +3112,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } else { this.changeDimension(worldserver1); } diff --git a/patches/server/0810-Warn-on-plugins-accessing-faraway-chunks.patch b/patches/server/0810-Warn-on-plugins-accessing-faraway-chunks.patch index 0e9a764669..db7aae3b68 100644 --- a/patches/server/0810-Warn-on-plugins-accessing-faraway-chunks.patch +++ b/patches/server/0810-Warn-on-plugins-accessing-faraway-chunks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Warn on plugins accessing faraway chunks diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index a03dedf6fb845e9435b5171046bb6cd5dda94b71..2b0ee0cbc6d204de31027aef9621ac6c026cb22f 100644 +index 8ad909802a107ff670e839915071a7d116099e1c..6a8e9a81b700caf87046580cc019efb2dbd07188 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -813,7 +813,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -812,7 +812,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } private static boolean isInWorldBoundsHorizontal(BlockPos pos) { @@ -18,7 +18,7 @@ index a03dedf6fb845e9435b5171046bb6cd5dda94b71..2b0ee0cbc6d204de31027aef9621ac6c private static boolean isOutsideSpawnableHeight(int y) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 19f91e08664c996b540447a46cc79e89c8e55023..cd2b1a0441d478f50a4d45159e506628dafaa9fc 100644 +index bbcd28de0c05d56d7ed973c0e3ee455e976cdd18..9196e803b2cde66e288cb443639ad8750fef722c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -312,9 +312,24 @@ public class CraftWorld extends CraftRegionAccessor implements World { diff --git a/patches/server/0831-Fix-a-bunch-of-vanilla-bugs.patch b/patches/server/0831-Fix-a-bunch-of-vanilla-bugs.patch index 5ebfc6e487..e8faff7cef 100644 --- a/patches/server/0831-Fix-a-bunch-of-vanilla-bugs.patch +++ b/patches/server/0831-Fix-a-bunch-of-vanilla-bugs.patch @@ -113,10 +113,10 @@ index 6cd6d69a20e95e344fc18ab67dc300824537a59b..2e2a7c2cf3081187da817479a9da3eb1 } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index b303603178a9de5f14bede9e601f80cfb44ecc91..bf78917f1e356dc3b7d7bcedffab282978a35917 100644 +index f761d600bb5d995a25ffbbe5469625508de1f8bc..7fa3066575fd8e762dcf5de59a333e15044226e8 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -898,7 +898,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -894,7 +894,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } // Paper end - Cache chunk status on disk @@ -126,10 +126,10 @@ index b303603178a9de5f14bede9e601f80cfb44ecc91..bf78917f1e356dc3b7d7bcedffab2829 return this.anyPlayerCloseEnoughForSpawning(pos, false); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 43d14fac84b932c0a5a94dd6b01c22c1a289b8c2..f594998de4ff40b56d039bc48721f6b53f0a1ec0 100644 +index b82dc3d8558d18692769f7b9ee835a4eb4dd8253..bd37a2cb4c700566c72ada303138482f90d10742 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1032,7 +1032,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1027,7 +1027,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } else { AABB axisalignedbb = AABB.encapsulatingFullBlocks(blockposition1, new BlockPos(blockposition1.atY(this.getMaxBuildHeight()))).inflate(3.0D); List list = this.getEntitiesOfClass(LivingEntity.class, axisalignedbb, (entityliving) -> { @@ -139,7 +139,7 @@ index 43d14fac84b932c0a5a94dd6b01c22c1a289b8c2..f594998de4ff40b56d039bc48721f6b5 if (!list.isEmpty()) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index aad7e1d9e17a0daa8697c13d1ef8cf7331cdf001..142094dcdfd9ba1c4cb77107d17f4c6b28888e7e 100644 +index 1f5d86e6411fffddf70308f3fd3cb25275db1710..7a46b820c4f9354d2d07e9721bac25df3f043aa5 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -468,14 +468,14 @@ public class ServerPlayer extends Player { @@ -160,7 +160,7 @@ index aad7e1d9e17a0daa8697c13d1ef8cf7331cdf001..142094dcdfd9ba1c4cb77107d17f4c6b while (!world.noCollision(this, this.getBoundingBox(), true) && this.getY() < (double) (world.getMaxBuildHeight() - 1)) { // Paper - make sure this loads chunks, we default to NOT loading now this.setPos(this.getX(), this.getY() + 1.0D, this.getZ()); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index aad371a281486631151388ee2348ffaa2a465bc5..8b339ad425d4021b859126d763adf393cb0e86c5 100644 +index fc19c68c19d443be654a5600f633d3a77f7069c1..9503511b28888e98ed65befdb95d03685ae9e5e1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -92,7 +92,7 @@ public class ServerPlayerGameMode { @@ -173,7 +173,7 @@ index aad371a281486631151388ee2348ffaa2a465bc5..8b339ad425d4021b859126d763adf393 this.player.server.getPlayerList().broadcastAll(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_GAME_MODE, this.player), this.player); // CraftBukkit this.level.updateSleepingPlayerList(); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index b1f13c4d8de125a56b76bc85ccced039ac3c4785..b8213713b54e0bfaa0ddca41ec76f6840c0e1d20 100644 +index e1498e3c81fc3ed9e871fea3db5cfcccf45cac04..9822d70191512b263435a3761c683b6be4c7acf1 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -711,8 +711,10 @@ public abstract class PlayerList { @@ -452,7 +452,7 @@ index 333cc37e4f3ca3ea95191dcaafda6be59ef79b96..91071fa934222c9246547c788e3e6cb1 return; } diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index 0813e7510c43ed6916e83635f2be6d39ce2feb5b..137ee0271f1d7adbf3c463b96e9c4627fd5ca74b 100644 +index c7ba7ac1a3869e4db1ef6b0350b3cab7f31a94c4..d7beeac4a8e4a16221809663a5aa03389a759742 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -675,13 +675,10 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit diff --git a/patches/server/0832-Remove-unnecessary-onTrackingStart-during-navigation.patch b/patches/server/0832-Remove-unnecessary-onTrackingStart-during-navigation.patch index 155b92b230..19c93711aa 100644 --- a/patches/server/0832-Remove-unnecessary-onTrackingStart-during-navigation.patch +++ b/patches/server/0832-Remove-unnecessary-onTrackingStart-during-navigation.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove unnecessary onTrackingStart during navigation warning diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 4ffb462f051744d5f7f7b4cf0c49f5d1533d1d53..9eacc0c96d96f026dcc75479606567a47c7bb008 100644 +index bd37a2cb4c700566c72ada303138482f90d10742..ec27d7e7248d8bf9e81db8a22923ff3af49324bb 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2641,7 +2641,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2621,7 +2621,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (entity instanceof Mob) { Mob entityinsentient = (Mob) entity; @@ -17,7 +17,7 @@ index 4ffb462f051744d5f7f7b4cf0c49f5d1533d1d53..9eacc0c96d96f026dcc75479606567a4 String s = "onTrackingStart called during navigation iteration"; Util.logAndPauseIfInIde("onTrackingStart called during navigation iteration", new IllegalStateException("onTrackingStart called during navigation iteration")); -@@ -2727,7 +2727,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2707,7 +2707,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (entity instanceof Mob) { Mob entityinsentient = (Mob) entity; diff --git a/patches/server/0849-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch b/patches/server/0849-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch index 03ce1c0393..362f24728b 100644 --- a/patches/server/0849-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch +++ b/patches/server/0849-Fix-EntityCombustEvent-cancellation-cant-fully-preve.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix EntityCombustEvent cancellation cant fully prevent diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0d427f0a70c8d85762fededfe920418d66636ebb..0c1cb3d5892b81b9f8a1894e429bc237c877298d 100644 +index fc0f58560a53a783b9fabceee227bed3908bae89..aa634b67ee3a0c473f5e6f6cb6adb0306350ce1c 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3378,6 +3378,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3377,6 +3377,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S pluginManager.callEvent(entityCombustEvent); if (!entityCombustEvent.isCancelled()) { this.setSecondsOnFire(entityCombustEvent.getDuration(), false); @@ -21,7 +21,7 @@ index 0d427f0a70c8d85762fededfe920418d66636ebb..0c1cb3d5892b81b9f8a1894e429bc237 // CraftBukkit end } diff --git a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java -index 450f87ea7f4c5ef3b26a3c75bc7c8bd08a982075..cd076da69e89d843d06ab5be854e8dce122ecb1d 100644 +index 118403953629b405b9db78de1bf684b31289c499..e9ec8a8969651ea6760bf01c622c66efa7f6e7e5 100644 --- a/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BaseFireBlock.java @@ -134,6 +134,10 @@ public abstract class BaseFireBlock extends Block { diff --git a/patches/server/0856-check-global-player-list-where-appropriate.patch b/patches/server/0856-check-global-player-list-where-appropriate.patch index 16c079cd6a..1643eb9ec7 100644 --- a/patches/server/0856-check-global-player-list-where-appropriate.patch +++ b/patches/server/0856-check-global-player-list-where-appropriate.patch @@ -7,10 +7,10 @@ Makes certain entities check all players when searching for a player instead of just checking players in their world. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9eacc0c96d96f026dcc75479606567a47c7bb008..8c919616acbe571710bd8bb39eef4355b6d3d2b3 100644 +index ec27d7e7248d8bf9e81db8a22923ff3af49324bb..3c1a3a757cec89058ae9300be6902d3fe9342d25 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2764,4 +2764,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2744,4 +2744,12 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.updateDynamicGameEventListener(DynamicGameEventListener::move); } } @@ -24,7 +24,7 @@ index 9eacc0c96d96f026dcc75479606567a47c7bb008..8c919616acbe571710bd8bb39eef4355 + // Paper end - check global player list where appropriate } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a027d4b0769b7ee549dc25aac4a232fb1943e443..c726af466c1156a3b2c1ee18d1ac1b4613ee2431 100644 +index 7e0882411d7be80a432c05f2e1a8a192c36ccf63..7ca74c68ee81a46b5c71a454c754fd4e6ffae4bb 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3678,7 +3678,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -66,7 +66,7 @@ index 9f892de55ab03367daed4c30cc44c9dd8adc29ed..a3d15f30eaab29d85cb6b3d693df9980 + // Paper end - check global player list where appropriate } diff --git a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java -index ee11a52e82091911aa3a196bcc1f7ab829626cef..f35939f3ef42591cfa8ed7de7599695b9d9d0067 100644 +index e143f42e71ac774d49b75e6d85591aa1189ee210..c27b97e9f097c824de7c785b4cc9e0a503259b08 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SculkShriekerBlockEntity.java @@ -100,6 +100,13 @@ public class SculkShriekerBlockEntity extends BlockEntity implements GameEventLi diff --git a/patches/server/0863-Player-Entity-Tracking-Events.patch b/patches/server/0863-Player-Entity-Tracking-Events.patch index c5c3e3dc37..005bab7fe4 100644 --- a/patches/server/0863-Player-Entity-Tracking-Events.patch +++ b/patches/server/0863-Player-Entity-Tracking-Events.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Player Entity Tracking Events diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index bf78917f1e356dc3b7d7bcedffab282978a35917..6420a6c16a8c3f0f45649834fe40e1939d1fead7 100644 +index 7fa3066575fd8e762dcf5de59a333e15044226e8..6ccd2a5a334c846850a9d064210f2d7f1d311470 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1409,7 +1409,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1405,7 +1405,11 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // CraftBukkit end if (flag) { if (this.seenBy.add(player.connection)) { @@ -21,10 +21,10 @@ index bf78917f1e356dc3b7d7bcedffab282978a35917..6420a6c16a8c3f0f45649834fe40e193 } else if (this.seenBy.remove(player.connection)) { this.serverEntity.removePairing(player); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 98f7248920a25930ac813e22bbd816294f06d057..6e1c088a234ff4c93ea790c46f1e1f015fc24bec 100644 +index aa634b67ee3a0c473f5e6f6cb6adb0306350ce1c..df3bdb116ead1596c6f93d6e9eb45711fb9b5eb5 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4105,7 +4105,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4104,7 +4104,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void startSeenByPlayer(ServerPlayer player) {} diff --git a/patches/server/0873-Improve-PortalEvents.patch b/patches/server/0873-Improve-PortalEvents.patch index da472a0bb3..6af7e83d12 100644 --- a/patches/server/0873-Improve-PortalEvents.patch +++ b/patches/server/0873-Improve-PortalEvents.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Improve PortalEvents diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6e1c088a234ff4c93ea790c46f1e1f015fc24bec..805f438e4b7a03393424c2ba11bf1f7fc4822f52 100644 +index df3bdb116ead1596c6f93d6e9eb45711fb9b5eb5..4c8369e968df8b2a809f9c6c2db6cc185104a385 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -3763,7 +3763,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3762,7 +3762,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S Location enter = bukkitEntity.getLocation(); Location exit = CraftLocation.toBukkit(exitPosition, exitWorldServer.getWorld()); diff --git a/patches/server/0879-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch b/patches/server/0879-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch index 8dbe3cc054..a9ab51aafd 100644 --- a/patches/server/0879-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch +++ b/patches/server/0879-Expose-pre-collision-moving-velocity-to-VehicleBlock.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Expose pre-collision moving velocity to diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 30e831bc4409260047016279aa5f36d2ad2934b4..b295895b2b1f8b3fbf7d97712e14b1447350a0ff 100644 +index 4c8369e968df8b2a809f9c6c2db6cc185104a385..cd28a4ca35d6fe29c51f19be6cc43795c91c0454 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1162,7 +1162,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1161,7 +1161,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } if (!bl.getType().isAir()) { diff --git a/patches/server/0888-Update-the-flag-when-a-captured-block-state-is-outda.patch b/patches/server/0888-Update-the-flag-when-a-captured-block-state-is-outda.patch index 8ed5ba6cdf..17954c83a3 100644 --- a/patches/server/0888-Update-the-flag-when-a-captured-block-state-is-outda.patch +++ b/patches/server/0888-Update-the-flag-when-a-captured-block-state-is-outda.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Update the flag when a captured block state is outdated diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2b0ee0cbc6d204de31027aef9621ac6c026cb22f..6f828ff4c54c2ddd4cc03c0e368afda2521e24dd 100644 +index 6a8e9a81b700caf87046580cc019efb2dbd07188..2afa2d7b5978cc8474228ff45b66d0d3fac7728a 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -923,6 +923,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -922,6 +922,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { blockstate = CapturedBlockState.getTreeBlockState(this, pos, flags); this.capturedBlockStates.put(pos.immutable(), blockstate); } diff --git a/patches/server/0904-Prevent-GameEvents-being-fired-from-unloaded-chunks.patch b/patches/server/0904-Prevent-GameEvents-being-fired-from-unloaded-chunks.patch index 898506348d..249a12dda7 100644 --- a/patches/server/0904-Prevent-GameEvents-being-fired-from-unloaded-chunks.patch +++ b/patches/server/0904-Prevent-GameEvents-being-fired-from-unloaded-chunks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Prevent GameEvents being fired from unloaded chunks diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 8c919616acbe571710bd8bb39eef4355b6d3d2b3..df40ffecfa6d34aa3cdffbbec03e049a271364ab 100644 +index 3c1a3a757cec89058ae9300be6902d3fe9342d25..e8dc785913f5fd1238a73c2384d2abef0e9d2e4b 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1724,6 +1724,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1704,6 +1704,11 @@ public class ServerLevel extends Level implements WorldGenLevel { @Override public void gameEvent(GameEvent event, Vec3 emitterPos, GameEvent.Context emitter) { diff --git a/patches/server/0916-Refresh-ProjectileSource-for-projectiles.patch b/patches/server/0916-Refresh-ProjectileSource-for-projectiles.patch index c3079d4fbf..edd538ada4 100644 --- a/patches/server/0916-Refresh-ProjectileSource-for-projectiles.patch +++ b/patches/server/0916-Refresh-ProjectileSource-for-projectiles.patch @@ -14,10 +14,10 @@ clearing the owner. Co-authored-by: Warrior <50800980+Warriorrrr@users.noreply.github.com> diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b295895b2b1f8b3fbf7d97712e14b1447350a0ff..5c21f26109910c0783afd32953a035144d19ec94 100644 +index cd28a4ca35d6fe29c51f19be6cc43795c91c0454..b8205779022e56a0af10b02b52be77e035da1a6b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -386,6 +386,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -385,6 +385,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public boolean inWorld = false; public boolean generation; public int maxAirTicks = this.getDefaultMaxAirSupply(); // CraftBukkit - SPIGOT-6907: re-implement LivingEntity#setMaximumAir() diff --git a/patches/server/0918-Fix-block-place-logic.patch b/patches/server/0918-Fix-block-place-logic.patch index 051d3982db..feb8adf581 100644 --- a/patches/server/0918-Fix-block-place-logic.patch +++ b/patches/server/0918-Fix-block-place-logic.patch @@ -9,7 +9,7 @@ Fix several issues when a player interact with a block: * poi can desync when the BlockPhysicsEvent is cancelled diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index daf093518f1daf598c858cfaf48357255a1fb0cf..c06e4b0683f0f125b79a4afce7daf909530d7bbf 100644 +index 1ac739c92031e80c35e1af4417e6358346079580..8c54b92b65b3d379e14a11370b09d45351ab22e1 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java @@ -130,7 +130,7 @@ public class BlockItem extends Item { @@ -22,7 +22,7 @@ index daf093518f1daf598c858cfaf48357255a1fb0cf..c06e4b0683f0f125b79a4afce7daf909 if ((entityhuman == null || !entityhuman.getAbilities().instabuild) && itemstack != ItemStack.EMPTY) { // CraftBukkit itemstack.shrink(1); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 63cd9cd79217a9bcedb6647e6f61d9bccc28d9f0..6070711b9825612fbc485d840ed3ed80cf912493 100644 +index 71d93daa527ae34b83138394fa79289c403a33d8..94cb7625c451df53de60783535ce0d58b37e35bf 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -493,13 +493,7 @@ public final class ItemStack { @@ -41,10 +41,10 @@ index 63cd9cd79217a9bcedb6647e6f61d9bccc28d9f0..6070711b9825612fbc485d840ed3ed80 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 6f828ff4c54c2ddd4cc03c0e368afda2521e24dd..a57b7e85f068c3131c6fc41cd8e79dec2f053748 100644 +index 2afa2d7b5978cc8474228ff45b66d0d3fac7728a..92e823a123129694a9db5f54659f8d14abebf9b1 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1038,17 +1038,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1037,17 +1037,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // CraftBukkit start iblockdata1.updateIndirectNeighbourShapes(this, blockposition, k, j - 1); // Don't call an event for the old block to limit event spam CraftWorld world = ((ServerLevel) this).getWorld(); diff --git a/patches/server/0933-Don-t-load-chunks-for-supporting-block-checks.patch b/patches/server/0933-Don-t-load-chunks-for-supporting-block-checks.patch index 217bb79611..e731c10ccd 100644 --- a/patches/server/0933-Don-t-load-chunks-for-supporting-block-checks.patch +++ b/patches/server/0933-Don-t-load-chunks-for-supporting-block-checks.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Don't load chunks for supporting block checks diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5c21f26109910c0783afd32953a035144d19ec94..d08ce34e1d1ce4ac239f6b7ecf0579ab130fa976 100644 +index b8205779022e56a0af10b02b52be77e035da1a6b..3633138b67a3b92a4d7792bbc4387632015fcc3b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -1362,7 +1362,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1361,7 +1361,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } protected BlockPos getOnPos(float offset) { diff --git a/patches/server/0946-Folia-scheduler-and-owned-region-API.patch b/patches/server/0946-Folia-scheduler-and-owned-region-API.patch index 8fbfc62397..bab86433c4 100644 --- a/patches/server/0946-Folia-scheduler-and-owned-region-API.patch +++ b/patches/server/0946-Folia-scheduler-and-owned-region-API.patch @@ -1148,7 +1148,7 @@ index 0000000000000000000000000000000000000000..d306f911757a4d556c82c0070d4837db + } +} diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index addb4133295739ea19e0e770e040698411399944..5caa39b529c6c0798d91e8e8468b40988f6fb987 100644 +index afc23f859188a6cda27a683babd551c250a748ef..174f3dab7c7f02dd09d02dc8b4e69190284c3f48 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1629,6 +1629,20 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9d65f0558c7c4db75ed6337dc241c01746933315..3cef73da0ac4cbf8104fa5dff8321f605287a580 100644 +index e8dc785913f5fd1238a73c2384d2abef0e9d2e4b..718ebe1ed29d6db62cc666d0b628e6f9a2a3ce5c 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -570,6 +570,17 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -565,6 +565,17 @@ public class ServerLevel extends Level implements WorldGenLevel { return player != null && player.level() == this ? player : null; } // Paper end - optimise getPlayerByUUID @@ -52,7 +52,7 @@ index 9d65f0558c7c4db75ed6337dc241c01746933315..3cef73da0ac4cbf8104fa5dff8321f60 // 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, @Nullable RandomSequences randomsequences, org.bukkit.World.Environment env, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider) { diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 96dd68d55dbcb4f6bf3f3096802e48ca50ab766e..b8c0f11a29ebc738a935d78e7a1e19914d43b533 100644 +index 52764f0f5b42e3b7fd9624bc342e9927037880d2..6abc5061888d965161de979465bb625c173c59c6 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -124,7 +124,7 @@ public class ServerPlayerGameMode { @@ -65,7 +65,7 @@ index 96dd68d55dbcb4f6bf3f3096802e48ca50ab766e..b8c0f11a29ebc738a935d78e7a1e1991 if (this.hasDelayedDestroy) { diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index a09ad0cdbc9f3eb2ac77836076292822991b3d08..3d8efaaeea5cf7582c23cbb48beecf8eaf98a03e 100644 +index 09bca0dd8cb6289817f758a4f05a54c267aec885..099ee1186f84ce6a76ac33dbf9cae961641c6508 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -3819,6 +3819,10 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/1000-Optimise-nearby-player-retrieval.patch b/patches/server/1000-Optimise-nearby-player-retrieval.patch index 86a14dbd3e..7cbe0ada5e 100644 --- a/patches/server/1000-Optimise-nearby-player-retrieval.patch +++ b/patches/server/1000-Optimise-nearby-player-retrieval.patch @@ -8,10 +8,10 @@ we can instead use the nearby player tracking system to reduce the number of tests per search. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 048bcbd730ee87cf2f040bda1080ae1f6e4ef414..c764e236ea3678bba9dd05adc16cc4640c27d4bf 100644 +index 718ebe1ed29d6db62cc666d0b628e6f9a2a3ce5c..989ea283a4dc24fa17dd4bd1e03167fde2c97132 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -581,6 +581,115 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -576,6 +576,115 @@ public class ServerLevel extends Level implements WorldGenLevel { this.lagCompensationTick = (System.nanoTime() - net.minecraft.server.MinecraftServer.SERVER_INIT) / (java.util.concurrent.TimeUnit.MILLISECONDS.toNanos(50L)); } // Paper end - lag compensation @@ -195,7 +195,7 @@ index ed1b95ec694b0fe8b647964b18b8c33707fc0b47..65cd42ce9f553e0aa5bf248bdbf902f9 } } diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index 58422f00c7d64dbd1cf6d7211c9838875cbe7778..c157309ac78e7af084d3acb6e8b2bcd469a39d5e 100644 +index fae0dbfb6ac09a0c152c0f74a72583f44316def7..c8a80c1b2fedff22e8a877d466062375ffb2f0d7 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -10,7 +10,7 @@ public class TargetingConditions { diff --git a/patches/server/1001-Fix-missing-map-initialize-event-call.patch b/patches/server/1001-Fix-missing-map-initialize-event-call.patch index 9632e4597a..e043a0374c 100644 --- a/patches/server/1001-Fix-missing-map-initialize-event-call.patch +++ b/patches/server/1001-Fix-missing-map-initialize-event-call.patch @@ -7,10 +7,10 @@ Subject: [PATCH] Fix missing map initialize event call public net.minecraft.world.level.storage.DimensionDataStorage readSavedData(Ljava/util/function/Function;Lnet/minecraft/util/datafix/DataFixTypes;Ljava/lang/String;)Lnet/minecraft/world/level/saveddata/SavedData; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index c764e236ea3678bba9dd05adc16cc4640c27d4bf..fa16260652c0c47df2a02f728850d6e949ae774f 100644 +index 989ea283a4dc24fa17dd4bd1e03167fde2c97132..56f80db3dccc9db7bb5d5cb194fcf6af39c92aac 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -2133,13 +2133,25 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2113,13 +2113,25 @@ public class ServerLevel extends Level implements WorldGenLevel { @Nullable @Override public MapItemSavedData getMapData(String id) { diff --git a/patches/server/1007-Don-t-check-if-we-can-see-non-visible-entities.patch b/patches/server/1007-Don-t-check-if-we-can-see-non-visible-entities.patch index 8016577180..b2ef1fef5c 100644 --- a/patches/server/1007-Don-t-check-if-we-can-see-non-visible-entities.patch +++ b/patches/server/1007-Don-t-check-if-we-can-see-non-visible-entities.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Don't check if we can see non-visible entities diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index c6e764f140d3fe6342c6f224fe0d9643a3185cba..2458bc75ece2d5eadc49df0f1c94702bd20e779f 100644 +index 6c28b37056c70fa0076b290b24168bfb79ddd77d..257303162e3550e332cae01d5f6f158558b7ebf8 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1435,7 +1435,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1431,7 +1431,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // Paper end - Configurable entity tracking range by Y // CraftBukkit start - respect vanish API diff --git a/patches/server/1022-Don-t-fire-sync-events-during-worldgen.patch b/patches/server/1022-Don-t-fire-sync-events-during-worldgen.patch index 5974b5b93a..98d2be65ad 100644 --- a/patches/server/1022-Don-t-fire-sync-events-during-worldgen.patch +++ b/patches/server/1022-Don-t-fire-sync-events-during-worldgen.patch @@ -19,22 +19,22 @@ where generation happened directly to a ServerLevel and the entity still has the flag set. diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index fa16260652c0c47df2a02f728850d6e949ae774f..9b0b2510edb4984b0714244bbe513e077af7b455 100644 +index 56f80db3dccc9db7bb5d5cb194fcf6af39c92aac..f27c9f99e70d45c433a348dd315bb31b44fefa78 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1681,6 +1681,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1676,6 +1676,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // CraftBukkit start private boolean addEntity(Entity entity, CreatureSpawnEvent.SpawnReason spawnReason) { org.spigotmc.AsyncCatcher.catchOp("entity add"); // Spigot + entity.generation = false; // Paper - Don't fire sync event during generation; Reset flag if it was added during a ServerLevel generation process - // Paper start + // Paper start - extra debug info if (entity.valid) { - MinecraftServer.LOGGER.error("Attempted Double World add on " + entity, new Throwable()); + MinecraftServer.LOGGER.error("Attempted Double World add on {}", entity, new Throwable()); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index f0e40ea053ca7b6749b443b2733271f71755329b..a70633d9585f94e673c58fc69660d984ca169561 100644 +index 39b1fe633a301d8cf948e5d63c2cf8a26a4b8854..5dabf6c4ba63b82aefa22cf41ec65dcf85779fe9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -713,7 +713,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -712,7 +712,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S if (pose == this.getPose()) { return; } @@ -68,7 +68,7 @@ index dd4cf9011bf48623e95d5d0f3ff27ee962c88200..a039217f9293ad3b0cc74c49450472eb }, () -> { EntityType.LOGGER.warn("Skipping Entity with id {}", nbt.getString("id")); diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index eb0e6cff1d93b06fea3e9b28a4ea1067e416183c..6860e588ad9daaf3d9afa11132967a50eeefe860 100644 +index efbb37255885badf6908cad948614df7beda9712..e937ace0c4c1097de3f95198b1bc1830dbc74658 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1134,6 +1134,11 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/1024-Restore-vanilla-entity-drops-behavior.patch b/patches/server/1024-Restore-vanilla-entity-drops-behavior.patch index 42a6b5c0cb..af74fd9090 100644 --- a/patches/server/1024-Restore-vanilla-entity-drops-behavior.patch +++ b/patches/server/1024-Restore-vanilla-entity-drops-behavior.patch @@ -9,7 +9,7 @@ on dropping the item instead of generalizing it for all dropped items like CB does. diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index ad6fd14f7f19c20967906a8e01a4f76ee80aaf84..ce2e29de3628aba893a96688c9bbc58d1fc984bc 100644 +index ddea03dd90e7749ea2a347d2b9a985a0e4ab636c..2a897f577f4ed9cf8b3368fab971fa6381c90219 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -944,22 +944,20 @@ public class ServerPlayer extends Player { @@ -50,10 +50,10 @@ index ad6fd14f7f19c20967906a8e01a4f76ee80aaf84..ce2e29de3628aba893a96688c9bbc58d if (entityitem == null) { return null; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 18c73edca59c8bbd4ee57196c4455fb18d7869d9..0de5d58c9ed08292a2d0b478c5ce9f50a67f8a05 100644 +index 5dabf6c4ba63b82aefa22cf41ec65dcf85779fe9..ec251d54324c01212a27adffb1883d2de9db162d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2703,6 +2703,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2702,6 +2702,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S @Nullable public ItemEntity spawnAtLocation(ItemStack stack, float yOffset) { @@ -79,7 +79,7 @@ index 18c73edca59c8bbd4ee57196c4455fb18d7869d9..0de5d58c9ed08292a2d0b478c5ce9f50 if (stack.isEmpty()) { return null; } else if (this.level().isClientSide) { -@@ -2710,14 +2729,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2709,14 +2728,21 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } else { // CraftBukkit start - Capture drops for death event if (this instanceof net.minecraft.world.entity.LivingEntity && !((net.minecraft.world.entity.LivingEntity) this).forceDrops) { @@ -104,7 +104,7 @@ index 18c73edca59c8bbd4ee57196c4455fb18d7869d9..0de5d58c9ed08292a2d0b478c5ce9f50 return this.spawnAtLocation(entityitem); } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 14880c5cd67eec5f92e4c7058b41c332bc0f871c..d59a38c62c1b13e6ecb2841fba65017104ed46dc 100644 +index e937ace0c4c1097de3f95198b1bc1830dbc74658..e13bda6d3054dda9372c58566b5cdc5d0f4c1dcf 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -254,7 +254,7 @@ public abstract class LivingEntity extends Entity implements Attackable { diff --git a/patches/server/1041-Properly-handle-experience-dropping-on-block-break.patch b/patches/server/1041-Properly-handle-experience-dropping-on-block-break.patch index 21ea21c71b..cd538d60af 100644 --- a/patches/server/1041-Properly-handle-experience-dropping-on-block-break.patch +++ b/patches/server/1041-Properly-handle-experience-dropping-on-block-break.patch @@ -7,10 +7,10 @@ This causes spawnAfterBreak to spawn xp by default, removing the need to manuall For classes that use custom xp amounts, they can drop the resources with disabling diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ca48664d3e7a9efcac8a0e1fa23f71034d74e2d6..dce7be16854faa3e297815e794cae6b0bd42bd4f 100644 +index e6631ccf71dec785ab8decbf037e8bd622a7a613..04f5d1f853f1de95610404ea53a4a985fcf58066 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -1103,7 +1103,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1102,7 +1102,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { if (drop) { BlockEntity tileentity = iblockdata.hasBlockEntity() ? this.getBlockEntity(pos) : null; @@ -68,7 +68,7 @@ index 5379c4a8c89cbbe73c3ab741d609cecdc81d928c..73d6f881a7d4d8ff96040d34ac502e5b } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index 88d7973e83ee828fa71d95924a9134935e80954d..7a29d43d06de9138c8db5d3f4af29d6b5dc60efc 100644 +index 7fa2b2bc9d6e7eea8b18fd649c9220945d71a4ff..97a9fbbe6d8435e88e5fe716770e4034ab0db7a7 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -1286,6 +1286,7 @@ public abstract class BlockBehaviour implements FeatureElement { diff --git a/patches/server/1043-Reduce-allocation-of-Vec3D-by-entity-tracker.patch b/patches/server/1043-Reduce-allocation-of-Vec3D-by-entity-tracker.patch index 4c86515494..0551bc6470 100644 --- a/patches/server/1043-Reduce-allocation-of-Vec3D-by-entity-tracker.patch +++ b/patches/server/1043-Reduce-allocation-of-Vec3D-by-entity-tracker.patch @@ -18,10 +18,10 @@ index 3c4ac79c094dc2fff7de94150a34b7bf814ac0de..38b56923a642afc1cb411480ba03cc78 @VisibleForTesting static long encode(double value) { diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 2458bc75ece2d5eadc49df0f1c94702bd20e779f..673f0d1ee4e4228a52c07fc1b570822257e59300 100644 +index 257303162e3550e332cae01d5f6f158558b7ebf8..639c46a7d2b35f13d2310d9ded8a92a4703f6ebb 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1418,10 +1418,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1414,10 +1414,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public void updatePlayer(ServerPlayer player) { org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot if (player != this.entity) { diff --git a/patches/server/1044-Write-SavedData-IO-async.patch b/patches/server/1044-Write-SavedData-IO-async.patch index 8804c3761d..daaa279cd6 100644 --- a/patches/server/1044-Write-SavedData-IO-async.patch +++ b/patches/server/1044-Write-SavedData-IO-async.patch @@ -26,7 +26,7 @@ index 513833c2ea23df5b079d157bc5cb89d5c9754c0b..9017907c0ec67a37a506f09b7e4499ce this.threadPool.shutdown(); diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..2aaf1cc630f9cf4b61ad58d1adde5f93ba237fd6 100644 +index 65a20974428ae1c0be2022d997234a16dc281292..77a2458b8acb21c64676934cd8d6b05ef6351c10 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -467,6 +467,13 @@ public class ServerChunkCache extends ChunkSource { @@ -44,10 +44,10 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..2aaf1cc630f9cf4b61ad58d1adde5f93 // CraftBukkit start - modelled on below diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 3a2f0a4ae00c63bcae3ee1e068d10bebe33fab7e..5b0749987a78ce830a882b4fa1210e846c188718 100644 +index f27c9f99e70d45c433a348dd315bb31b44fefa78..0911b39561fb158dc2268b6054d5ce7a0c1dc465 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1491,7 +1491,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1486,7 +1486,7 @@ public class ServerLevel extends Level implements WorldGenLevel { try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { if (doFull) { @@ -56,7 +56,7 @@ index 3a2f0a4ae00c63bcae3ee1e068d10bebe33fab7e..5b0749987a78ce830a882b4fa1210e84 } this.timings.worldSaveChunks.startTiming(); // Paper -@@ -1527,7 +1527,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1522,7 +1522,7 @@ public class ServerLevel extends Level implements WorldGenLevel { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } @@ -65,7 +65,7 @@ index 3a2f0a4ae00c63bcae3ee1e068d10bebe33fab7e..5b0749987a78ce830a882b4fa1210e84 if (progressListener != null) { progressListener.progressStage(Component.translatable("menu.savingChunks")); } -@@ -1550,12 +1550,12 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1545,12 +1545,12 @@ public class ServerLevel extends Level implements WorldGenLevel { // CraftBukkit end }