diff --git a/gradle.properties b/gradle.properties index 3f67163f..a15c548c 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.7 version=1.21.7-R0.1-SNAPSHOT -paperCommit=6e598f852727aeb061a446e2319b8fb3a35f7609 +paperCommit=b4466ec981d104c4756d1a3b90c2ee0d6ce4e6bd org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-api/build.gradle.kts.patch b/leaf-api/build.gradle.kts.patch index 2313c5e4..2bc68408 100644 --- a/leaf-api/build.gradle.kts.patch +++ b/leaf-api/build.gradle.kts.patch @@ -131,7 +131,7 @@ abstract class Services { @@ -166,12 +_,12 @@ - tasks.withType { + tasks.withType().configureEach { val options = options as StandardJavadocDocletOptions - options.overview = "src/main/javadoc/overview.html" + options.overview = "../paper-api/src/main/javadoc/overview.html" // Leaf - project setup diff --git a/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch b/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch index 9f30b1cc..e4a1dfbe 100644 --- a/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch +++ b/leaf-server/minecraft-patches/features/0005-Remove-vanilla-profiler.patch @@ -169,7 +169,7 @@ index 18071dcc69cc28471dddb7de94e803ec1e5fc2e4..e30bb9c4046200c1a6e4e917d15b205f } } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 89b7af92f9d8e4e449d9eb1a3ddfe2ec89fd63a4..4deffef83bc7afe688127b9cf184c95bf82f86c8 100644 +index 6713b462c8fc182f18f19a997037d337f78ff096..470e9f7570d1fa6b1328052e59ecd1324ec58825 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -114,19 +114,8 @@ import net.minecraft.util.TimeUtil; @@ -320,17 +320,17 @@ index 89b7af92f9d8e4e449d9eb1a3ddfe2ec89fd63a4..4deffef83bc7afe688127b9cf184c95b this.getPlayerList().getPlayers().forEach(serverPlayer1 -> serverPlayer1.connection.suspendFlushing()); this.server.getScheduler().mainThreadHeartbeat(); // CraftBukkit // Paper start - optimise Folia entity scheduler -@@ -1674,9 +1630,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers @@ -348,7 +348,7 @@ index 89b7af92f9d8e4e449d9eb1a3ddfe2ec89fd63a4..4deffef83bc7afe688127b9cf184c95b try { serverLevel.tick(hasTimeLeft); } catch (Throwable var7) { -@@ -1730,34 +1679,24 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop itr = this.keepAlive.pendingKeepAlives.iterator(); itr.hasNext();) { io.papermc.paper.util.KeepAlive.PendingKeepAlive ka = itr.next(); -@@ -249,6 +266,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -261,6 +278,23 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack protected void keepConnectionAlive() { long millis = Util.getMillis(); // Paper start - improve keepalives @@ -116,7 +116,7 @@ index 29f19fef7fdefa345b862cd2d5776c2655085c1f..3d14ca26938d8b74a456ab4b27849a99 if (this.checkIfClosed(millis) && !this.processedDisconnect) { long currTime = System.nanoTime(); -@@ -267,6 +301,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -279,6 +313,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack // Paper end - improve keepalives } } diff --git a/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch index 6ed19e1c..5af0f2ea 100644 --- a/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0098-Purpur-Server-Minecraft-Changes.patch @@ -320,7 +320,7 @@ index b16f3f515a76ddbbd74d73464396cf094cb30599..dd6ae338fa48d52962ee0af5b1572077 io.papermc.paper.plugin.PluginInitializerManager.load(optionSet); // Paper Bootstrap.bootStrap(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 9ab4e38d6dd278b9ed7c43bf448c32983135a547..f05fa801f35f4afcc93fcace6a98cee0fa3ec531 100644 +index 4119cfb1de8bbb0c5c1287f70cffc6660dc9e8e4..6ae53701e2b8ed3a8ab89e940c817245a14ea35b 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -266,6 +266,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper - Add EntityMoveEvent serverLevel.updateLagCompensationTick(); // Paper - lag compensation net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = serverLevel.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper - Perf: Optimize Hoppers @@ -1271,7 +1271,7 @@ index 6734756d7a51e635a50a47577f9e6b6f8111db51..c4a4f08272b34f72dea4feaaeb66d153 + // Purpur end - Shift right click to use exp for mending } diff --git a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 3d14ca26938d8b74a456ab4b27849a992bbf8b74..52408680113135ff019d09b90fbe80b8187941fd 100644 +index de630a692291926c52a0947f9943e59433ab130a..ca9ba2a2535eab66622230778efdf941f540f6d2 100644 --- a/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -56,6 +56,10 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -1285,7 +1285,7 @@ index 3d14ca26938d8b74a456ab4b27849a992bbf8b74..52408680113135ff019d09b90fbe80b8 // Paper start - retain certain values public @Nullable String playerBrand; public final java.util.Set pluginMessagerChannels; -@@ -188,6 +192,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -194,6 +198,12 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack return; } @@ -1299,12 +1299,12 @@ index 3d14ca26938d8b74a456ab4b27849a992bbf8b74..52408680113135ff019d09b90fbe80b8 this.playerBrand = new net.minecraft.network.FriendlyByteBuf(io.netty.buffer.Unpooled.wrappedBuffer(data)).readUtf(256); } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4db56ddfa 100644 +index b1d2e52c04cdc7285bc732e91006f76c3552d35f..cb646939cc6465135030b715d203ba2211981b8e 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl - this.playerGameConnection = new io.papermc.paper.connection.PaperPlayerGameConnection(this); // Paper +@@ -338,6 +338,20 @@ public class ServerGamePacketListenerImpl } + // Paper end - configuration phase API + // Purpur start - AFK API + private final com.google.common.cache.LoadingCache kickPermissionCache = com.google.common.cache.CacheBuilder.newBuilder() @@ -1323,7 +1323,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 @Override public void tick() { if (this.ackBlockChangesUpTo > -1) { -@@ -384,6 +398,12 @@ public class ServerGamePacketListenerImpl +@@ -396,6 +410,12 @@ public class ServerGamePacketListenerImpl if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits @@ -1336,7 +1336,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -653,6 +673,8 @@ public class ServerGamePacketListenerImpl +@@ -665,6 +685,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1345,7 +1345,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -732,6 +754,7 @@ public class ServerGamePacketListenerImpl +@@ -744,6 +766,7 @@ public class ServerGamePacketListenerImpl PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -1353,7 +1353,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1270,6 +1293,10 @@ public class ServerGamePacketListenerImpl +@@ -1282,6 +1305,10 @@ public class ServerGamePacketListenerImpl final int maxBookPageSize = pageMax.intValue(); final double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; @@ -1364,7 +1364,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1294,7 +1321,8 @@ public class ServerGamePacketListenerImpl +@@ -1306,7 +1333,8 @@ public class ServerGamePacketListenerImpl } if (byteTotal > byteAllowed) { @@ -1374,7 +1374,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 this.disconnectAsync(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause // Paper - add proper async disconnect return; } -@@ -1313,31 +1341,45 @@ public class ServerGamePacketListenerImpl +@@ -1325,31 +1353,45 @@ public class ServerGamePacketListenerImpl Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -1424,7 +1424,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list, true) -@@ -1351,6 +1393,16 @@ public class ServerGamePacketListenerImpl +@@ -1363,6 +1405,16 @@ public class ServerGamePacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -1441,7 +1441,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); -@@ -1390,7 +1442,15 @@ public class ServerGamePacketListenerImpl +@@ -1402,7 +1454,15 @@ public class ServerGamePacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); @@ -1458,7 +1458,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel serverLevel = this.player.level(); -@@ -1572,7 +1632,7 @@ public class ServerGamePacketListenerImpl +@@ -1584,7 +1644,7 @@ public class ServerGamePacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -1467,7 +1467,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 } // Paper } -@@ -1637,6 +1697,8 @@ public class ServerGamePacketListenerImpl +@@ -1649,6 +1709,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1476,7 +1476,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1692,6 +1754,13 @@ public class ServerGamePacketListenerImpl +@@ -1704,6 +1766,13 @@ public class ServerGamePacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -1490,7 +1490,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 this.player.checkMovementStatistics(this.player.getX() - x, this.player.getY() - y, this.player.getZ() - z); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1709,6 +1778,17 @@ public class ServerGamePacketListenerImpl +@@ -1721,6 +1790,17 @@ public class ServerGamePacketListenerImpl } } @@ -1508,7 +1508,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 private boolean shouldCheckPlayerMovement(boolean isElytraMovement) { if (this.isSingleplayerOwner()) { return false; -@@ -2106,6 +2186,7 @@ public class ServerGamePacketListenerImpl +@@ -2118,6 +2198,7 @@ public class ServerGamePacketListenerImpl boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -1516,7 +1516,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2753,6 +2834,7 @@ public class ServerGamePacketListenerImpl +@@ -2765,6 +2846,7 @@ public class ServerGamePacketListenerImpl AABB boundingBox = target.getBoundingBox(); if (this.player.canInteractWithEntity(boundingBox, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(3.0))) { // Paper - configurable lenience value for interact range @@ -1524,7 +1524,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 packet.dispatch( new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit -@@ -2765,6 +2847,8 @@ public class ServerGamePacketListenerImpl +@@ -2777,6 +2859,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -1533,7 +1533,7 @@ index b23a8a69902a04cbfc389b779e0cf5de1dc89523..a22038bb3e78f7308ba2ae00a71deac4 // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a if ((target instanceof net.minecraft.world.entity.animal.Bucketable && target instanceof LivingEntity && origItem != null && origItem == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().isEmpty() || !ServerGamePacketListenerImpl.this.player.getInventory().getSelectedItem().is(origItem))) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it -@@ -3541,7 +3625,7 @@ public class ServerGamePacketListenerImpl +@@ -3553,7 +3637,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChangeGameMode(ServerboundChangeGameModePacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.level()); diff --git a/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch index dba3119d..feb13610 100644 --- a/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0099-Fix-Pufferfish-and-Purpur-patches.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix Pufferfish and Purpur patches diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index f05fa801f35f4afcc93fcace6a98cee0fa3ec531..b567eed9e07e281c56ff707ad938661f37f4ee3f 100644 +index 6ae53701e2b8ed3a8ab89e940c817245a14ea35b..19e65eaf77dd8fa5eaa23e4db9af1adee7280fff 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -277,7 +277,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop byteAllowed) { diff --git a/leaf-server/minecraft-patches/features/0100-Purpur-Configurable-server-mod-name.patch b/leaf-server/minecraft-patches/features/0100-Purpur-Configurable-server-mod-name.patch index c2f22db5..e39c8a6c 100644 --- a/leaf-server/minecraft-patches/features/0100-Purpur-Configurable-server-mod-name.patch +++ b/leaf-server/minecraft-patches/features/0100-Purpur-Configurable-server-mod-name.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/PurpurMC/Purpur diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index b567eed9e07e281c56ff707ad938661f37f4ee3f..54bb75a2a128e7747ab01cb0d40c81fb4340ffd1 100644 +index 19e65eaf77dd8fa5eaa23e4db9af1adee7280fff..12e697a626ce68127ac2157fca0e5408beb13f0b 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1839,7 +1839,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 1.18.x that updated by Mojang. By removing this check, it gives ability for hackers to use some modules of hack clients. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4674760a18926e2e83c481defccf1a06df358b7d..6f7094004e2d38d3471c3582b3a10dfc7fce3b32 100644 +index 53200e2f90d76a54254f819a2f419e298975a367..1fda5f9d285a51fd642369b4cc32826c38019c69 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2110,8 +2110,13 @@ public class ServerGamePacketListenerImpl +@@ -2122,8 +2122,13 @@ public class ServerGamePacketListenerImpl BlockPos blockPos = hitResult.getBlockPos(); if (this.player.canInteractWithBlock(blockPos, 1.0)) { Vec3 vec3 = location.subtract(Vec3.atCenterOf(blockPos)); diff --git a/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch b/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch index 406dc299..9d5f9cbd 100644 --- a/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch +++ b/leaf-server/minecraft-patches/features/0112-Leaves-Protocol-Core.patch @@ -56,10 +56,10 @@ index 62b9d9486c15a1ec6527f786df4e9fc483390bcb..5384bbc6bb3dbe5481f9d8cb10282551 int i = buffer.readableBytes(); if (i >= 0 && i <= maxSize) { diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 54bb75a2a128e7747ab01cb0d40c81fb4340ffd1..0fed0f181c4d1f31d01bdaa5dc9417ccd68b3f03 100644 +index 12e697a626ce68127ac2157fca0e5408beb13f0b..46118a63b721d445623c4d831881652d845df96d 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1737,6 +1737,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop kickPermissionCache = com.google.common.cache.CacheBuilder.newBuilder() - .maximumSize(1000) + // Paper start - configuration phase API + @Override + public io.papermc.paper.connection.PlayerCommonConnection getApiConnection() { diff --git a/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch b/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch index daa10ae5..e6b20004 100644 --- a/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch +++ b/leaf-server/minecraft-patches/features/0133-Improve-Purpur-AFK-system.patch @@ -53,10 +53,10 @@ index 77ca4f505dc0a1aa6292cfcd957b734ab107f657..5f4dcb645670dd1b07ff865d50530b73 } else { getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index fbace6411c0d34a524a8a0517e47f3437a99c4a2..1d05b4336768c972a267ffec8ecc4d69e0e3c340 100644 +index c6b871037f9dea8c6cbe9d0a2acff2cb2a960c09..b3c138e78552ba348d67c37343c6684d37f2e10f 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2359,6 +2359,7 @@ public class ServerGamePacketListenerImpl +@@ -2371,6 +2371,7 @@ public class ServerGamePacketListenerImpl @Override public void handleChatCommand(ServerboundChatCommandPacket packet) { @@ -64,7 +64,7 @@ index fbace6411c0d34a524a8a0517e47f3437a99c4a2..1d05b4336768c972a267ffec8ecc4d69 this.tryHandleChat(packet.command(), () -> { // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { -@@ -2367,7 +2368,7 @@ public class ServerGamePacketListenerImpl +@@ -2379,7 +2380,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit end this.performUnsignedChatCommand(packet.command()); this.detectRateSpam("/" + packet.command()); // Spigot @@ -73,7 +73,7 @@ index fbace6411c0d34a524a8a0517e47f3437a99c4a2..1d05b4336768c972a267ffec8ecc4d69 } private void performUnsignedChatCommand(String command) { -@@ -2400,6 +2401,7 @@ public class ServerGamePacketListenerImpl +@@ -2412,6 +2413,7 @@ public class ServerGamePacketListenerImpl public void handleSignedChatCommand(ServerboundChatCommandSignedPacket packet) { Optional optional = this.unpackAndApplyLastSeen(packet.lastSeenMessages()); if (!optional.isEmpty()) { @@ -81,7 +81,7 @@ index fbace6411c0d34a524a8a0517e47f3437a99c4a2..1d05b4336768c972a267ffec8ecc4d69 this.tryHandleChat(packet.command(), () -> { // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { -@@ -2408,7 +2410,7 @@ public class ServerGamePacketListenerImpl +@@ -2420,7 +2422,7 @@ public class ServerGamePacketListenerImpl // CraftBukkit end this.performSignedChatCommand(packet, optional.get()); this.detectRateSpam("/" + packet.command()); // Spigot @@ -90,7 +90,7 @@ index fbace6411c0d34a524a8a0517e47f3437a99c4a2..1d05b4336768c972a267ffec8ecc4d69 } } -@@ -2515,12 +2517,17 @@ public class ServerGamePacketListenerImpl +@@ -2527,12 +2529,17 @@ public class ServerGamePacketListenerImpl return dispatcher.parse(command, this.player.createCommandSourceStack()); } @@ -110,7 +110,7 @@ index fbace6411c0d34a524a8a0517e47f3437a99c4a2..1d05b4336768c972a267ffec8ecc4d69 this.player.resetLastActionTime(); // CraftBukkit start if (sync) { -@@ -2532,6 +2539,40 @@ public class ServerGamePacketListenerImpl +@@ -2544,6 +2551,40 @@ public class ServerGamePacketListenerImpl } } diff --git a/leaf-server/minecraft-patches/features/0134-Virtual-thread-for-chat-executor.patch b/leaf-server/minecraft-patches/features/0134-Virtual-thread-for-chat-executor.patch index a1c6431b..81ecafa2 100644 --- a/leaf-server/minecraft-patches/features/0134-Virtual-thread-for-chat-executor.patch +++ b/leaf-server/minecraft-patches/features/0134-Virtual-thread-for-chat-executor.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Virtual thread for chat executor diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 534082a0441dcde9115652cb67dbc8310529ecee..5251e0b274ab5c182f89e52013a542c2b8f30304 100644 +index b79ca0e1083520a7b24536cf04fec883181d17a0..07943aa3be4222ab7a63b09a6625f7a003da8725 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -2645,7 +2645,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop packet) { diff --git a/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch b/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch index 794eac97..b6585b19 100644 --- a/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch +++ b/leaf-server/minecraft-patches/features/0161-Use-caffeine-cache-for-kickPermission-instead-of-usi.patch @@ -23,11 +23,11 @@ See the License for the specific language governing permissions and limitations under the License. diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c038ceb441897157a0c240a9970e676a297e40c3..3173922dbb478e46f892304fb17b0f662fe62b40 100644 +index b3c138e78552ba348d67c37343c6684d37f2e10f..3f8b0c9f0d2172b1ffaee6c1065a91ff34b35953 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -330,17 +330,12 @@ public class ServerGamePacketListenerImpl - public final org.leavesmc.leaves.protocol.syncmatica.exchange.ExchangeTarget exchangeTarget; // Leaves - Syncmatica Protocol +@@ -342,17 +342,12 @@ public class ServerGamePacketListenerImpl + // Paper end - configuration phase API // Purpur start - AFK API - private final com.google.common.cache.LoadingCache kickPermissionCache = com.google.common.cache.CacheBuilder.newBuilder() @@ -48,7 +48,7 @@ index c038ceb441897157a0c240a9970e676a297e40c3..3173922dbb478e46f892304fb17b0f66 // Purpur end - AFK API @Override -@@ -403,7 +398,7 @@ public class ServerGamePacketListenerImpl +@@ -415,7 +410,7 @@ public class ServerGamePacketListenerImpl && Util.getMillis() - this.player.getLastActionTime() > this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits // Purpur start - AFK API this.player.setAfk(true); diff --git a/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch index 85ee7739..8126aed5 100644 --- a/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0172-Multithreaded-Tracker.patch @@ -400,10 +400,10 @@ index 08d12a1acc3a672a77daa15f82392cd603c30283..c5949a0e852ca6de84e8dd12e3d4ed85 } } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 3173922dbb478e46f892304fb17b0f662fe62b40..baa703a89583f72fab0ebbc40c85399022185c29 100644 +index 3f8b0c9f0d2172b1ffaee6c1065a91ff34b35953..608324d13514063b48ae250d3aaf11c433438ce6 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1916,7 +1916,7 @@ public class ServerGamePacketListenerImpl +@@ -1928,7 +1928,7 @@ public class ServerGamePacketListenerImpl } public void internalTeleport(PositionMoveRotation posMoveRotation, Set relatives) { diff --git a/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch b/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch index f2eb6a95..28316789 100644 --- a/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch +++ b/leaf-server/minecraft-patches/features/0214-SparklyPaper-Parallel-world-ticking.patch @@ -95,7 +95,7 @@ index 582e012222123e5001c34153f2ee1ab1d08935fd..c0bce2293d07ca58cc5bc9e036ab8dca List states = new java.util.ArrayList<>(level.capturedBlockStates.values()); level.capturedBlockStates.clear(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 07c9a7105de7111de73b6a786a860f8676015897..15bf079e1d634505c78f345dbef06c2c19eee393 100644 +index 3c45e6eac0403c9cb13409c8e0e9c1653fd531ba..15b01ff019e48ce9434b1f538d712601c3fe65c8 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java @@ -290,6 +290,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop serverPlayer1.connection.suspendFlushing()); this.server.getScheduler().mainThreadHeartbeat(); // CraftBukkit -@@ -1708,28 +1739,50 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop, ServerLevel> oldLevels = this.levels; Map, ServerLevel> newLevels = Maps.newLinkedHashMap(oldLevels); newLevels.remove(level.dimension()); diff --git a/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch b/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch index e266e9b6..78e8dc25 100644 --- a/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch +++ b/leaf-server/minecraft-patches/features/0240-Protocol-Core.patch @@ -22,10 +22,10 @@ index 56fd1ed7ccaf96e7eedea60fbdbf7f934939d563..d2f522ea6d0a209496848af073c9af1c } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 42dbd6d9e82130cfc5ae4669c460373631061451..b3356ad173027afafba931f31952c5b5ddc57891 100644 +index a73969d68b51a6996ae59073360051f447ce42a8..9eb35364757b5748f7228c1557e9350edc805440 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1802,6 +1802,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -1379,6 +1384,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1486,6 +1491,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa // Paper start - Teleport passenger API // Don't allow teleporting between worlds while keeping passengers if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { @@ -1096,7 +1096,7 @@ index 1e2e8d81e6d05b9e94fdb40dcdc4a7e0e4ceb0ac..218556fdaf4ea4993864e22530b4bad3 return false; } -@@ -1400,6 +1406,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1507,6 +1513,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API @@ -1104,8 +1104,8 @@ index 1e2e8d81e6d05b9e94fdb40dcdc4a7e0e4ceb0ac..218556fdaf4ea4993864e22530b4bad3 return false; } -@@ -2655,6 +2662,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - return this.getHandle().getAbilities().walkingSpeed * 2f; +@@ -2793,6 +2800,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + this.getHandle().getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(player.getAbilities().walkingSpeed); // SPIGOT-5833: combination of the two in 1.16+ } + // Purpur start - OfflinePlayer API @@ -1133,9 +1133,9 @@ index 1e2e8d81e6d05b9e94fdb40dcdc4a7e0e4ceb0ac..218556fdaf4ea4993864e22530b4bad3 private void validateSpeed(float value) { Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); } -@@ -3503,4 +3532,76 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - public PlayerGameConnection getConnection() { - return this.getHandle().connection.playerGameConnection; +@@ -3601,4 +3630,76 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + this(new ShortArraySet(), new ArrayList<>()); + } } + + // Purpur start - Purpur client support @@ -1233,7 +1233,7 @@ index f03f9f94c51ef2f2eb24e4f65ec69b542b1c0a07..af60e3ef00ce1e98708d9963d466e72b + // Purpur end - Summoner API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index 66f0089ee33c36b9d13fb0b87303d33f08021ed1..26f056294e19f509bfd4986b9650e13f92a8feaf 100644 +index df332b6938b81822ba0436a7999ee448913e7c22..b366e40bf63e580b065c6917e17fd5c1eca5cedb 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -258,4 +258,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { @@ -1272,7 +1272,7 @@ index 2e11df97e5c8ff5fbf22ba87946d6018ac8bbbed..83b779eb0adcaf2e6d5658cddc2607f6 + // Purpur end - Summoner API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -index 33866c5a5591150de4c1d8f4c175122db3bd5bd4..5fd656f43985e3972c9f572d5b05bf5c81da2678 100644 +index 723a8e659485850632adf173e52669e6e4f3fcc0..98880f082af386f2a1dc64bc13667030d2824d25 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java @@ -135,4 +135,15 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { diff --git a/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch b/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch index 3044dc21..62f59498 100644 --- a/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch +++ b/leaf-server/paper-patches/features/0027-KeYi-Player-Skull-API.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 1c5128b0d2984ce47e2fce200790d4b87bcf94c9..9d7591609889c62583a6406e58c38e82d4e5b627 100644 +index ab454a7c53b074c8c60bab38c0544aa3b69d5c6d..8c7f2e8a07a55b5e0ac7ddc955ca2f3376f85af5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3604,4 +3604,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -3702,4 +3702,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundPlayerCombatKillPacket(getEntityId(), io.papermc.paper.adventure.PaperAdventure.asVanilla(message))); } // Purpur end - Death screen API diff --git a/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch b/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch index cb76070e..2028cd72 100644 --- a/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch +++ b/leaf-server/paper-patches/features/0028-Slice-Smooth-Teleports.patch @@ -9,10 +9,10 @@ Original project: https://github.com/Cryptite/Slice Co-authored-by: HaHaWTH <102713261+HaHaWTH@users.noreply.github.com> diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 9d7591609889c62583a6406e58c38e82d4e5b627..f382beb475d2f4a28fbd276dfa6da70119cbe5ab 100644 +index 8c7f2e8a07a55b5e0ac7ddc955ca2f3376f85af5..6cdfbba18deb2429d7478649821d8815511f8fa2 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1329,6 +1329,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -1455,6 +1455,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa // Paper end - Teleportation API } diff --git a/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch b/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch index b422150c..ed70b690 100644 --- a/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch +++ b/leaf-server/paper-patches/features/0030-Leaves-Replay-Mod-API.patch @@ -73,10 +73,10 @@ index 476eefebace887064b728f08af40c746b6f70787..beae8a57a0ce9b8e7d81619efe4c39d9 if (entity instanceof EnderDragonPart complexPart) { if (complexPart.parentMob instanceof EnderDragon) { diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index f382beb475d2f4a28fbd276dfa6da70119cbe5ab..3e42efe805c185f387b343a925e74260e27cffa7 100644 +index 6cdfbba18deb2429d7478649821d8815511f8fa2..e855ddb7f81124ccd0d1c8cc474777cca3056ad8 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2231,7 +2231,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2357,7 +2357,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(Player player) { diff --git a/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch b/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch index 0a4a69f5..e1d81826 100644 --- a/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch +++ b/leaf-server/paper-patches/features/0032-SparklyPaper-Optimize-canSee-checks.patch @@ -16,19 +16,19 @@ This seems stupid, but it does seem that it improves the performance a bit, and We also create a "canSee" method tailored for "ChunkMap#updatePlayer()", a method without the equals check (the "updatePlayer()" already checks if the entity is the same entity) because the CraftPlayer's `equals()` check is a *bit* expensive compared to only checking the object's identity, and because the identity has already been check, we don't need to check it twice. diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3e42efe805c185f387b343a925e74260e27cffa7..3d215494bf74fd06a31367a3bf955e9d13c63ecb 100644 +index e855ddb7f81124ccd0d1c8cc474777cca3056ad8..1e08ac054947b1a0a6cce2f886be1ed83c74a642 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -216,7 +216,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa - private long lastPlayed = 0; - private boolean hasPlayedBefore = false; +@@ -217,7 +217,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); + private static final net.kyori.adventure.text.Component DEFAULT_KICK_COMPONENT = net.kyori.adventure.text.Component.translatable("multiplayer.disconnect.kicked"); private final ConversationTracker conversationTracker = new ConversationTracker(); - private final Map>> invertedVisibilityEntities = new HashMap<>(); + private final Map>> invertedVisibilityEntities = new it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap<>(); // SparklyPaper - optimize canSee checks private final Set unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player - private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); - private int hash = 0; -@@ -2236,9 +2236,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa + public org.bukkit.event.player.PlayerResourcePackStatusEvent.Status resourcePackStatus; // Paper - more resource pack API + private long firstPlayed = 0; +@@ -2362,9 +2362,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa @Override public boolean canSee(org.bukkit.entity.Entity entity) { diff --git a/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch b/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch index be243cce..72d6ce92 100644 --- a/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch +++ b/leaf-server/paper-patches/features/0042-Multithreaded-Tracker.patch @@ -72,10 +72,10 @@ index beae8a57a0ce9b8e7d81619efe4c39d908869319..6b1926080eddf61ff9c0156a6846f7f0 } return set; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3d215494bf74fd06a31367a3bf955e9d13c63ecb..79e1e65c02b348bd2787bdc82d571a6d591553e1 100644 +index 1e08ac054947b1a0a6cce2f886be1ed83c74a642..d4b7b7747dda687fe3d12b85b7eccc96a0b825f6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2824,7 +2824,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa +@@ -2962,7 +2962,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player, PluginMessa Iterator iterator = collection.iterator(); while (iterator.hasNext()) { AttributeInstance genericInstance = iterator.next();