diff --git a/gradle.properties b/gradle.properties index 1ef31e56..829cb19a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group = cn.dreeam.leaf mcVersion = 1.21.1 version = 1.21.1-R0.1-SNAPSHOT -galeCommit = f2ee091748ade732ccc2c147a80ee064f03cffbe +galeCommit = e373e979d3bb951ad01f6e83d3cc09715528b6d6 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0001-Rebrand.patch b/patches/api/0001-Rebrand.patch index c7cc75ba..21146175 100644 --- a/patches/api/0001-Rebrand.patch +++ b/patches/api/0001-Rebrand.patch @@ -5,15 +5,19 @@ Subject: [PATCH] Rebrand diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java -index bdc8d830f54e4567ec0b03041221fdcd016ce76c..957f15a91f6aa1235c12b82079e32bb42449c78d 100644 +index bdc8d830f54e4567ec0b03041221fdcd016ce76c..25ad7e9a9aa11049ad6ce2d2c829d3e75f8886c2 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfo.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java -@@ -25,6 +25,13 @@ public interface ServerBuildInfo { +@@ -25,6 +25,17 @@ public interface ServerBuildInfo { Key BRAND_GALE_ID = Key.key("galemc", "gale"); // Gale end - branding changes + // Leaf start + /** ++ * The brand id for Pufferfish. ++ */ ++ Key BRAND_PUFFERFISH_ID = Key.key("pufferfish-gg", "pufferfish"); ++ /** + * The brand id for Leaf. + */ + Key BRAND_LEAF_ID = Key.key("winds-studio", "leaf"); diff --git a/patches/api/0004-Purpur-API-Changes.patch b/patches/api/0004-Purpur-API-Changes.patch index 9047db6a..2b415913 100644 --- a/patches/api/0004-Purpur-API-Changes.patch +++ b/patches/api/0004-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: abf2f2109bd550623a8b3e9d398995aa0185e70c +Commit: f5303959cdb3274a2672962faaa3889592ed5b31 Patches below are removed in this patch: Pufferfish-API-Changes.patch @@ -17,7 +17,7 @@ Remove-Timings.patch Add-log-suppression-for-LibraryLoader.patch diff --git a/src/main/java/io/papermc/paper/ServerBuildInfo.java b/src/main/java/io/papermc/paper/ServerBuildInfo.java -index 957f15a91f6aa1235c12b82079e32bb42449c78d..9fa8d7fac5bf415b40c3a9a38108fa5476ed7619 100644 +index 25ad7e9a9aa11049ad6ce2d2c829d3e75f8886c2..0cafbbcb8fe294bcd84b93da8fba96368971dffd 100644 --- a/src/main/java/io/papermc/paper/ServerBuildInfo.java +++ b/src/main/java/io/papermc/paper/ServerBuildInfo.java @@ -25,6 +25,13 @@ public interface ServerBuildInfo { @@ -33,7 +33,7 @@ index 957f15a91f6aa1235c12b82079e32bb42449c78d..9fa8d7fac5bf415b40c3a9a38108fa54 + // Leaf start /** - * The brand id for Leaf. + * The brand id for Pufferfish. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java index cd191a6039717c70d2b8be0ae475d040cad54f96..c7e2dd4465334ab845e931ed14fbfde43b6d4ea4 100644 --- a/src/main/java/org/bukkit/Bukkit.java @@ -905,7 +905,7 @@ index bcc6ba95bd21c7972865838c636a03f50b6c1f1a..c3fcd8dd7dbb1e1a18e17c014c1e6411 + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index a1e54e9d14393a6c0ea57cca854071c5396d9717..e492d3707e948cd3936f0f9c5eea4668fb1fe249 100644 +index fcdc5fce88720cc926a3953d80b5045113d1516c..5afdebfdf74d4c428a58045db2190dded7f68307 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java @@ -1458,4 +1458,20 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource diff --git a/patches/generated-api/0001-Purpur-generated-api-Changes.patch b/patches/generated-api/0001-Purpur-generated-api-Changes.patch index ed128914..ac707ed9 100644 --- a/patches/generated-api/0001-Purpur-generated-api-Changes.patch +++ b/patches/generated-api/0001-Purpur-generated-api-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur generated-api Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: abf2f2109bd550623a8b3e9d398995aa0185e70c +Commit: f5303959cdb3274a2672962faaa3889592ed5b31 diff --git a/com/destroystokyo/paper/entity/ai/VanillaGoal.java b/com/destroystokyo/paper/entity/ai/VanillaGoal.java index 02411466bdcf4ff731f01ccebb2c99942e0db878..2718c0e5061838b01881bb231c53f4da348adce3 100644 diff --git a/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch b/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch index 64c2606e..ea8ab4fd 100644 --- a/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/patches/server/0008-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -69,7 +69,7 @@ index cb61462d4691a055a4b25f7b953609d8a154fdfe..b2d8a858d8767bd6ca52e0b8db847579 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 6e6095e8bfab28d8c1ac8bf65bb9a0c8ee19088e..96e7e9ef8bf9ab6902638ac4ba270a1f98a36cdf 100644 +index 5f5265631641171345fc6564eb93b68dd8131b28..552b9f0ec8ab1aaea4cf0a212be628b49416c806 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -237,10 +237,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -85,7 +85,7 @@ index 6e6095e8bfab28d8c1ac8bf65bb9a0c8ee19088e..96e7e9ef8bf9ab6902638ac4ba270a1f this.targetSelector.tick(); } } -@@ -916,10 +916,14 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -923,10 +923,14 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab int i = this.tickCount + this.getId(); if (i % 2 != 0 && this.tickCount > 1) { diff --git a/patches/server/0011-Purpur-Server-Changes.patch b/patches/server/0011-Purpur-Server-Changes.patch index 4f929200..5d721674 100644 --- a/patches/server/0011-Purpur-Server-Changes.patch +++ b/patches/server/0011-Purpur-Server-Changes.patch @@ -3,17 +3,16 @@ From: Github Actions Date: Fri, 21 Jun 2024 03:34:00 +0000 Subject: [PATCH] Purpur Server Changes -TODO - Dreeam: Check Fix-pufferfish-issues.patch - Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 930003b1d1826c083f3cee4db79621e6a7d726f1 +Commit: f5303959cdb3274a2672962faaa3889592ed5b31 Patches below are removed in this patch: +Pufferfish-Server-Changes.patch +Fix-pufferfish-issues.patch Brand changes in Rebrand.patch Metrics changes in Purpur-config-files.patch -Fix-pufferfish-issues.patch Fix-decompile-errors.patch Configurable-server-mod-name.patch Alternative-Keepalive-Handling.patch @@ -29,6 +28,7 @@ MC-238526-Fix-spawner-not-spawning-water-animals-cor.patch Option-to-disable-kick-for-out-of-order-chat.patch Remove-Timings.patch Remove-Mojang-Profiler.patch +Make-pufferfish-config-relocatable.patch MC-121706-Fix-mobs-not-looking-up-and-down-when-stra.patch diff --git a/build.gradle.kts b/build.gradle.kts @@ -1155,7 +1155,7 @@ index 881f507ff6fcac86f8ef04cbd3ff10c41c840d52..0ed4f5a291ef5009a0535273ac52a9fb } // Paper end - Fix merchant inventory not closing on entity removal diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7f11cb418 100644 +index eff9dfeb7a95107b87748152ca4e59348243a66b..e6d22346d37261751563b039ae2ad8629ff83d8e 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -303,6 +303,10 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -1230,7 +1230,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { -@@ -1400,6 +1430,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1399,6 +1429,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple worldserver1.removePlayerImmediately(this, Entity.RemovalReason.CHANGED_DIMENSION); this.unsetRemoved(); // CraftBukkit end @@ -1238,7 +1238,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 this.setServerLevel(worldserver); this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); -@@ -1503,7 +1534,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1502,7 +1533,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return entitymonster.isPreventingPlayerRest(this); }); @@ -1247,7 +1247,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 return Either.left(net.minecraft.world.entity.player.Player.BedSleepingProblem.NOT_SAFE); } } -@@ -1543,7 +1574,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1542,7 +1573,19 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple }); if (!this.serverLevel().canSleepThroughNights()) { @@ -1268,7 +1268,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 } ((ServerLevel) this.level()).updateSleepingPlayerList(); -@@ -1665,6 +1708,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -1664,6 +1707,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @Override public void openTextEdit(SignBlockEntity sign, boolean front) { @@ -1276,7 +1276,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 this.connection.send(new ClientboundBlockUpdatePacket(this.level(), sign.getBlockPos())); this.connection.send(new ClientboundOpenSignEditorPacket(sign.getBlockPos(), front)); } -@@ -2001,6 +2045,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2000,6 +2044,26 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -1303,7 +1303,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 @Override public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); -@@ -2341,8 +2405,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2340,8 +2404,68 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -1372,7 +1372,7 @@ index 0d92a3918e35217bba6aea00dce05ce386415f65..690c3347ff228f7d8e5134221f9a96d7 public ServerStatsCounter getStats() { return this.stats; } -@@ -2946,4 +3070,50 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2945,4 +3069,50 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -1498,7 +1498,7 @@ index a720a05c47b2137a07515461960603cc5c939d16..b66fdb789fcb460d63fd81540112d655 try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6eb053ad6 100644 +index 73fb88a1c52aef0bc151b7857d1225884e81e9ae..46242ef7c5607780f84046fe039efc11732b011f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -337,6 +337,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1535,7 +1535,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect((Component) Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -654,6 +674,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -663,6 +683,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1544,7 +1544,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -704,6 +726,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -738,6 +760,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { @@ -1552,9 +1552,9 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 this.disconnect((Component) Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1140,10 +1163,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1174,6 +1197,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax; - double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier)); + double multiplier = Math.clamp(io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier, 0.3D, 1D); long byteAllowed = maxBookPageSize; + // Purpur start + int slot = packet.slot(); @@ -1562,21 +1562,18 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 + // Purpur end for (String testString : pageList) { int byteLength = testString.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; - if (byteLength > 256 * 4) { - ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send a book with with a page too large!"); -+ org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent event = new org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent(player.getBukkitEntity(), itemstack.asBukkitCopy()); if (event.shouldKickPlayer()) // Purpur - this.disconnect(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause - return; - } -@@ -1167,6 +1195,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + byteTotal += byteLength; +@@ -1195,7 +1222,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + } if (byteTotal > byteAllowed) { - ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); +- ServerGamePacketListenerImpl.LOGGER.warn("{} tried to send a book too large. Book size: {} - Allowed: {} - Pages: {}", this.player.getScoreboardName(), byteTotal, byteAllowed, pageList.size()); ++ ServerGamePacketListenerImpl.LOGGER.warn("{} tried to send too large of a book. Book size: {} - Allowed: {} - Pages: {}", this.player.getScoreboardName(), byteTotal, byteAllowed, pageList.size()); + org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent event = new org.purpurmc.purpur.event.player.PlayerBookTooLargeEvent(player.getBukkitEntity(), itemstack.asBukkitCopy()); if (event.shouldKickPlayer()) // Purpur this.disconnect(Component.literal("Book too large!"), org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION); // Paper - kick event cause return; } -@@ -1191,10 +1220,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1220,10 +1248,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Objects.requireNonNull(list); stream.forEach(list::add); @@ -1593,7 +1590,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 }; this.filterTextPacket((List) list).thenAcceptAsync(consumer, this.server); -@@ -1202,13 +1235,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1231,13 +1263,18 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void updateBookContents(List pages, int slotId) { @@ -1613,7 +1610,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 itemstack.set(DataComponents.WRITABLE_BOOK_CONTENT, new WritableBookContent(list1)); this.player.getInventory().setItem(slotId, CraftEventFactory.handleEditBookEvent(this.player, slotId, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) -@@ -1216,6 +1254,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1245,6 +1282,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } private void signBook(FilteredText title, List pages, int slotId) { @@ -1625,7 +1622,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 ItemStack itemstack = this.player.getInventory().getItem(slotId); if (itemstack.is(Items.WRITABLE_BOOK)) { -@@ -1223,10 +1266,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1252,10 +1294,10 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.remove(DataComponents.WRITABLE_BOOK_CONTENT); List> list1 = (List>) (List) pages.stream().map((filteredtext1) -> { // CraftBukkit - decompile error @@ -1638,7 +1635,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 CraftEventFactory.handleEditBookEvent(this.player, slotId, itemstack, itemstack1); // CraftBukkit this.player.getInventory().setItem(slotId, itemstack); // CraftBukkit - event factory updates the hand book } -@@ -1236,6 +1279,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1265,6 +1307,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(message.filteredOrEmpty()) : Filterable.from(message); } @@ -1655,7 +1652,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -@@ -1285,7 +1338,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1314,7 +1366,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); @@ -1672,7 +1669,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 this.disconnect((Component) Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause } else { ServerLevel worldserver = this.player.serverLevel(); -@@ -1464,7 +1525,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1494,7 +1554,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -1681,7 +1678,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 } // Paper } -@@ -1522,6 +1583,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1562,6 +1622,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1690,7 +1687,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1566,6 +1629,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1606,6 +1668,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -1704,7 +1701,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1593,6 +1663,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1633,6 +1702,14 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } @@ -1716,10 +1713,10 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 + } + // Purpur end + - private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box, double newX, double newY, double newZ) { - AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ()); - Iterable iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D)); -@@ -1945,6 +2023,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + // Paper start - optimise out extra getCubes + private boolean hasNewCollision(final ServerLevel world, final Entity entity, final AABB oldBox, final AABB newBox) { + final List collisionsBB = new java.util.ArrayList<>(); +@@ -2012,6 +2089,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { @@ -1727,7 +1724,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2714,6 +2793,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2781,6 +2859,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); if (this.player.canInteractWithEntity(axisalignedbb, io.papermc.paper.configuration.GlobalConfiguration.get().misc.clientInteractionLeniencyDistance.or(1.0D))) { // Paper - configurable lenience value for interact range @@ -1735,7 +1732,7 @@ index 08199435320f31421cd2b70b221fd519fdac0b59..785a2dcfad72126bff078bfd63649da6 packet.dispatch(new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); -@@ -2727,6 +2807,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2794,6 +2873,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -1758,7 +1755,7 @@ index 1d11d0388b9763a0e0e5f3398425dafa2bb01488..72cf1372a7e685b3ff4cc852c3d38f7d } } catch (AuthenticationUnavailableException authenticationunavailableexception) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 0f7a7d17a94c052111763bee00ba1b34442493d9..43a727475a787cd1ddc6345f366f1b2f477fcfde 100644 +index f86d2644024f4b190e9bded08aa9b71d6d0c8235..0bba03116d4746515117574177abfc7b43326a43 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -494,6 +494,7 @@ public abstract class PlayerList { @@ -1786,7 +1783,7 @@ index 0f7a7d17a94c052111763bee00ba1b34442493d9..43a727475a787cd1ddc6345f366f1b2f event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } } -@@ -1079,6 +1081,20 @@ public abstract class PlayerList { +@@ -1082,6 +1084,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -1807,7 +1804,7 @@ index 0f7a7d17a94c052111763bee00ba1b34442493d9..43a727475a787cd1ddc6345f366f1b2f public void broadcastAll(Packet packet, ResourceKey dimension) { Iterator iterator = this.players.iterator(); -@@ -1182,6 +1198,7 @@ public abstract class PlayerList { +@@ -1185,6 +1201,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + permissionLevel); } @@ -1815,7 +1812,7 @@ index 0f7a7d17a94c052111763bee00ba1b34442493d9..43a727475a787cd1ddc6345f366f1b2f player.connection.send(new ClientboundEntityEventPacket(player, b0)); } -@@ -1190,6 +1207,27 @@ public abstract class PlayerList { +@@ -1193,6 +1210,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -2870,7 +2867,7 @@ index 8191eda135b71d0515c918e88b35aaeec21c59de..cb2d6bb3ab2d07dc0756591be0be76a3 return slot != EquipmentSlot.HEAD && slot != EquipmentSlot.MAINHAND && slot != EquipmentSlot.OFFHAND ? SlotAccess.forEquipmentSlot(entity, slot, (itemstack) -> { return itemstack.isEmpty() || entity.getEquipmentSlotForItem(itemstack) == slot; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 6d88b2888d2028cb88e34dce3d7963dd818b58d7..9f50cd428bec118bf6317d90c66c0eabd5c83316 100644 +index 487c15ed7154a8fe117c982c2b9064ac9dc138f1..85d3da44ac575d26b9e6c522011e6b6288cce651 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -145,6 +145,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -2959,7 +2956,7 @@ index 6d88b2888d2028cb88e34dce3d7963dd818b58d7..9f50cd428bec118bf6317d90c66c0eab Vec3i baseblockposition = this.getPickupReach(); List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); Iterator iterator = list.iterator(); -@@ -1383,7 +1412,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1390,7 +1419,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab attributemodifiable.addPermanentModifier(new AttributeModifier(Mob.RANDOM_SPAWN_BONUS_ID, randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.ADD_MULTIPLIED_BASE)); } @@ -2968,7 +2965,7 @@ index 6d88b2888d2028cb88e34dce3d7963dd818b58d7..9f50cd428bec118bf6317d90c66c0eab return entityData; } -@@ -1484,7 +1513,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1491,7 +1520,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -2977,7 +2974,7 @@ index 6d88b2888d2028cb88e34dce3d7963dd818b58d7..9f50cd428bec118bf6317d90c66c0eab } public boolean isWithinRestriction() { -@@ -1723,6 +1752,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1730,6 +1759,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.playAttackSound(); } @@ -2985,7 +2982,7 @@ index 6d88b2888d2028cb88e34dce3d7963dd818b58d7..9f50cd428bec118bf6317d90c66c0eab return flag; } -@@ -1734,28 +1764,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1741,28 +1771,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab // Gale end - JettPack - optimize sun burn tick - cache eye blockpos public boolean isSunBurnTick() { @@ -3016,7 +3013,7 @@ index 6d88b2888d2028cb88e34dce3d7963dd818b58d7..9f50cd428bec118bf6317d90c66c0eab } @Override -@@ -1798,4 +1808,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1805,4 +1815,56 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -8206,7 +8203,7 @@ index e86fdf5d6853b7bddfe19d6e5d41d3dec0c25f23..f45567aa7695da68f92809a6c208eb51 } diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index c1bb44fd92ee4f3b900f29e3f9069841ca19fa5d..f096a9023fe0b54160e957dd5c6baa489ed0c410 100644 +index b8dacff80c114a00b698b6fc29e4d6da2eaedb5e..9ef292d75160089b278ee38d41f65aeb221ea600 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -66,6 +66,12 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -12984,7 +12981,7 @@ index bd3f78e6453cfe18aa3da38176b04d734d83bb4b..c7ad716f607afe382436d088a2b2e622 this.tickTimer = 0; diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index 32910f677b0522ac8ec513fa0d00b714b52cfae4..c491291b522aebf34c7d990d2b485d1a0d19cdcd 100644 +index dd4218e108f87f3305b76fbc8d88f488b447c609..ecfa807e78c16a24099d40becd0c7916f239aed1 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -76,6 +76,7 @@ public abstract class AbstractContainerMenu { @@ -13881,7 +13878,7 @@ index 06497b5141e611cc7a1b6030a7b9c54b5c4eda06..28df1b3230762e52b5458ac93a85c9a5 return InteractionResult.PASS; } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 804297a04988b3e21092a42df6584b7fc3cff1bb..b341ce21de28b2ee829dcba64b7dd6952fc1c17d 100644 +index 70df666abd3264f24e2f3c6480c6310e4500fdf0..2777b9379a547b29b9a300c1c549f33c1b2a7d07 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -497,6 +497,7 @@ public final class ItemStack implements DataComponentHolder { @@ -14614,7 +14611,7 @@ index 8240c32d676a88aa23dcd052ee0136767e54fb0d..372c4ab9d390d5afd98947f21c79aae0 if (i != -1) { world.scheduleTick(blockposition, (Block) this, i); diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 94246e6e05a83758059e933a036558eb47d2e84b..d9afbfb23536e180e2af5658de0bd1d4673f4251 100644 +index b807f4a5239f32e6b6080a58e055357b7341cf00..34d96e8bfebdee3bcc61071c6ec22b53baecec3f 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -88,6 +88,10 @@ public class Block extends BlockBehaviour implements ItemLike { @@ -14628,7 +14625,7 @@ index 94246e6e05a83758059e933a036558eb47d2e84b..d9afbfb23536e180e2af5658de0bd1d4 // Paper start public final boolean isDestroyable() { return io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.allowPermanentBlockBreakExploits || -@@ -312,7 +316,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -311,7 +315,7 @@ public class Block extends BlockBehaviour implements ItemLike { public static void dropResources(BlockState state, LevelAccessor world, BlockPos pos, @Nullable BlockEntity blockEntity) { if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity).forEach((itemstack) -> { @@ -14637,7 +14634,7 @@ index 94246e6e05a83758059e933a036558eb47d2e84b..d9afbfb23536e180e2af5658de0bd1d4 }); state.spawnAfterBreak((ServerLevel) world, pos, ItemStack.EMPTY, true); } -@@ -331,7 +335,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -330,7 +334,7 @@ public class Block extends BlockBehaviour implements ItemLike { event.setExpToDrop(block.getExpDrop(state, serverLevel, pos, net.minecraft.world.item.ItemStack.EMPTY, true)); // Paper - Properly handle xp dropping event.callEvent(); for (org.bukkit.inventory.ItemStack drop : event.getDrops()) { @@ -14646,7 +14643,7 @@ index 94246e6e05a83758059e933a036558eb47d2e84b..d9afbfb23536e180e2af5658de0bd1d4 } state.spawnAfterBreak(serverLevel, pos, ItemStack.EMPTY, false); // Paper - Properly handle xp dropping block.popExperience(serverLevel, pos, event.getExpToDrop()); // Paper - Properly handle xp dropping -@@ -348,13 +352,32 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -347,13 +351,32 @@ public class Block extends BlockBehaviour implements ItemLike { // Paper end - Properly handle xp dropping if (world instanceof ServerLevel) { Block.getDrops(state, (ServerLevel) world, pos, blockEntity, entity, tool).forEach((itemstack1) -> { @@ -14680,7 +14677,7 @@ index 94246e6e05a83758059e933a036558eb47d2e84b..d9afbfb23536e180e2af5658de0bd1d4 public static void popResource(Level world, BlockPos pos, ItemStack stack) { double d0 = (double) EntityType.ITEM.getHeight() / 2.0D; double d1 = (double) pos.getX() + 0.5D + Mth.nextDouble(world.random, -0.25D, 0.25D); -@@ -438,7 +461,17 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -437,7 +460,17 @@ public class Block extends BlockBehaviour implements ItemLike { } // Paper - fix drops not preventing stats/food exhaustion } @@ -14699,7 +14696,7 @@ index 94246e6e05a83758059e933a036558eb47d2e84b..d9afbfb23536e180e2af5658de0bd1d4 public boolean isPossibleToRespawnInThis(BlockState state) { return !state.isSolid() && !state.liquid(); -@@ -457,7 +490,7 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -456,7 +489,7 @@ public class Block extends BlockBehaviour implements ItemLike { } public void fallOn(Level world, BlockState state, BlockPos pos, Entity entity, float fallDistance) { @@ -15134,7 +15131,7 @@ index 3f5bb5c9ceb5b31fcc9ef0a7a6157e1e1cb2a09f..9bd56c48119fe630f272427a2ec99ffe TheEndGatewayBlockEntity.triggerCooldown(world, pos, state, tileentityendgateway); } diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index 01333f69b622141b2eb53441c6cbd69e4a059d55..9c11a615fbfd4fcaff5df2a15d1b8578897ab2b4 100644 +index a35a426cc7778a51523f26057b5d61b8a3e23d5d..28d8c8a879badc97cd1168e1847e2fafdc40e4bd 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -65,6 +65,13 @@ public class EndPortalBlock extends BaseEntityBlock implements Portal { @@ -15405,7 +15402,7 @@ index 02d59789c09f58045fea302ea6f2ee3856114de3..8072713da7ed8b7a44b63c241050c3a9 } diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index ddab7de1d376e9e486e2f920174397ea8804aa29..74d9a8a61365f1244471dbff8eb91dad3afaab51 100644 +index 0fdbcab175b51a8b77646e0e4a267d987b133a35..d579132d1afd5c2edb9356c5601584bca2357f8f 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -77,7 +77,7 @@ public class NetherPortalBlock extends Block implements Portal { @@ -15640,7 +15637,7 @@ index 93e8e5107ac047c1f2579b4fe6b0a202edb695f6..f82d275aac7bf3949d3dcc412c7e39e1 } diff --git a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java -index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..66c17bdfecdfbcfb2d853e561432dd51a8f7ed46 100644 +index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..80ee7a6f010cc838625674007a3ea908f2f9dadd 100644 --- a/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpawnerBlock.java @@ -42,6 +42,57 @@ public class SpawnerBlock extends BaseEntityBlock { @@ -15705,7 +15702,7 @@ index 4f190a40b8474aa06a92c8afcc06d0044120ff7b..66c17bdfecdfbcfb2d853e561432dd51 @Override public int getExpDrop(BlockState iblockdata, ServerLevel worldserver, BlockPos blockposition, ItemStack itemstack, boolean flag) { -+ if (isSilkTouch(worldserver, itemstack)) return 0; // Purpur ++ if (worldserver.purpurConfig.silkTouchEnabled && isSilkTouch(worldserver, itemstack)) return 0; // Purpur if (flag) { int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15); @@ -16303,7 +16300,7 @@ index d47bc2f54c4722a0b8c419b99ee57eb3cb25d750..fdeabdcc781b605d6f3ee18528fd380f + // Purpur } diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java -index a28be7a332659be655f419d969e0c64e659b6c21..8cd812a25b1cc05ea14675658bf9c1503ebebd51 100644 +index 3070cd2b588f5a69fd8c0d3551e16251680d8c27..c9a1c071780351b584ad8e071ddc26f9a27e5964 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java @@ -201,16 +201,31 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C @@ -17376,7 +17373,7 @@ index 30d62ee4d5cd2ddacb8783b5bbbf475d592b3e02..5c1cda88080850314dac196dbe71ff12 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index d2bb0831394c03b620b2cbd8306cb82b621f34f7..9add2ba364e80815ec9c530b984e1619b6607bb8 100644 +index beb6ad312028adb14053e3f019a4fcf6c9149373..a8568e16301f7fce4baea6942a02b9be94fe7ddc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -513,7 +513,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -17388,7 +17385,7 @@ index d2bb0831394c03b620b2cbd8306cb82b621f34f7..9add2ba364e80815ec9c530b984e1619 } // Paper end -@@ -1189,4 +1189,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { +@@ -1163,4 +1163,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { return this.getHandle().canUseSlot(org.bukkit.craftbukkit.CraftEquipmentSlot.getNMS(slot)); } // Paper end - Expose canUseSlot @@ -17427,7 +17424,7 @@ index 351f42842b780d053cd2e5bad9ae299449141b10..4860574e7fad7a9527dda599703c573c + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 992437a6e838f653f32d33b5b3f702c484640a97..e3100e65fea02374d4393bab48d63ddeaecef0ab 100644 +index a0d5082590ee03060f0dbb4770d196efc316c328..37fc08d04ff3514d27ad25c8d774a6e96b30c3b1 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -576,10 +576,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -17645,10 +17642,10 @@ index 86574da257731de7646a712ed73384955fe35aa3..e223234dd64b0e41441c3b9f649f0b64 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 8dd85b9ca3b3e3429de4d0ec0654982589c6e93e..198a86fc9b8c4dba8c8de27bccc4de65690b84de 100644 +index 77ef27f9254235180a8596c6c8c4af750dc759d1..3c533df90cf8b1a69b190ffee06c9254e4e4d764 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -601,6 +601,15 @@ public class CraftEventFactory { +@@ -603,6 +603,15 @@ public class CraftEventFactory { // Paper end craftServer.getPluginManager().callEvent(event); @@ -17664,7 +17661,7 @@ index 8dd85b9ca3b3e3429de4d0ec0654982589c6e93e..198a86fc9b8c4dba8c8de27bccc4de65 return event; } -@@ -1131,7 +1140,7 @@ public class CraftEventFactory { +@@ -1133,7 +1142,7 @@ public class CraftEventFactory { return CraftEventFactory.callEntityDamageEvent(source.getDirectBlock(), source.getDirectBlockState(), entity, DamageCause.LAVA, bukkitDamageSource, modifiers, modifierFunctions, cancelled); } else if (source.getDirectBlock() != null) { DamageCause cause; @@ -17673,7 +17670,7 @@ index 8dd85b9ca3b3e3429de4d0ec0654982589c6e93e..198a86fc9b8c4dba8c8de27bccc4de65 cause = DamageCause.CONTACT; } else if (source.is(DamageTypes.HOT_FLOOR)) { cause = DamageCause.HOT_FLOOR; -@@ -1191,6 +1200,7 @@ public class CraftEventFactory { +@@ -1193,6 +1202,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, bukkitDamageSource, modifiers, modifierFunctions, critical); @@ -17820,13 +17817,14 @@ index e2d8d69c5ae8feb6840462ba8332344972658d83..d1505efcf861224f0b3c983707269015 + // Purpur end - Anvil API } diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java b/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java -index d7c8f26b21276d9ff1d5c7c9738cc1126ce7d4b9..f0471f92044612e3a2fd12a575b8b1f844790d3a 100644 +index db8d8e2a07296d62c3097f02b03319e2e1ba9394..f32712907afd8ab2d0efe9ae4e162666a16fe2c7 100644 --- a/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java +++ b/src/main/java/org/bukkit/craftbukkit/legacy/MaterialRerouting.java -@@ -690,4 +690,32 @@ public class MaterialRerouting { - return ItemStack.of(material, amount); +@@ -708,4 +708,33 @@ public class MaterialRerouting { + meta.setCanPlaceOn(materials); } // Paper end ++ + // Purpur start + // Method added post 1.13, no-op (https://github.com/PurpurMC/Purpur/pull/570) + public static void addFuel(Server server, Material material, int burnTime) { diff --git a/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch b/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch index 3c141262..3c30a6dc 100644 --- a/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch +++ b/patches/server/0012-Fix-Pufferfish-and-Purpur-patches.patch @@ -4,6 +4,26 @@ Date: Mon, 29 Apr 2024 14:18:58 -0400 Subject: [PATCH] Fix Pufferfish and Purpur patches +diff --git a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +index 9d003c2ae45a057c0274a34fe5012cf17d1a2681..cbc731c157f016e8a622be05f4c392ae9ee99fb5 100644 +--- a/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java ++++ b/src/main/java/io/papermc/paper/ServerBuildInfoImpl.java +@@ -32,6 +32,7 @@ public record ServerBuildInfoImpl( + + private static final String BRAND_PAPER_NAME = "Paper"; + private static final String BRAND_GALE_NAME = "Gale"; // Gale - branding changes ++ private static final String BRAND_PUFFERFISH_NAME = "Pufferfish"; // Leaf + private static final String BRAND_PURPUR_NAME = "Purpur"; // Purpur + private static final String BRAND_LEAF_NAME = "Leaf"; // Leaf + +@@ -67,6 +68,7 @@ public record ServerBuildInfoImpl( + return brandId.equals(this.brandId) + || brandId.equals(BRAND_PAPER_ID) + || brandId.equals(BRAND_GALE_ID) ++ || brandId.equals(BRAND_PUFFERFISH_ID) + || brandId.equals(BRAND_PURPUR_ID); // Gale - branding changes // Leaf + } + diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java index 9d082b3c06281b0cafe455959d6ef20b8891110e..5071828f4ec318ca457d7c29d5ffaa3de2f43e48 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java @@ -136,7 +156,7 @@ index 06e5d3e2dfc762c640b5261b4962503e48c2a76f..164c126a61f550c09a7e114bf8947bde } // Pufferfish end - entity TTL diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 65d475803716ea30453ec2397403581def8939fb..41a2254c5665b1a1ef770fe9f08271136cec2983 100644 +index cb2d6bb3ab2d07dc0756591be0be76a3f6f8a5d6..27e7086b4e2c71b29aa4a1c825604395a5f35439 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -1044,17 +1044,19 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -164,7 +184,7 @@ index 65d475803716ea30453ec2397403581def8939fb..41a2254c5665b1a1ef770fe9f0827113 // Purpur start if (entity instanceof LivingEntity entityliving) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 9f50cd428bec118bf6317d90c66c0eabd5c83316..f43774ddcc6071ee2f61c57ac1a4596936194218 100644 +index 85d3da44ac575d26b9e6c522011e6b6288cce651..e57d4f58401a93034a39e9ed27672ac265a6e4b9 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -705,7 +705,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -176,7 +196,7 @@ index 9f50cd428bec118bf6317d90c66c0eabd5c83316..f43774ddcc6071ee2f61c57ac1a45969 Vec3i baseblockposition = this.getPickupReach(); List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); Iterator iterator = list.iterator(); -@@ -1758,11 +1758,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1765,11 +1765,6 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab protected void playAttackSound() {} @@ -283,7 +303,7 @@ index 613ef7dc40f1f2819bb38fecd3793f1c42a8f791..482a0998a3d98ba145f33efdba598971 "farmer", PoiTypes.FARMER, 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 85983dd81dbc9f2d187a224298b56613dab18f8a..c12ae7bd63b5f82b688ce0679dff3af9ca9be99a 100644 +index 617043b24fbf073038ffc5252da75c4cfaf85d38..e40f6d244011f6444fbed3fa0f49994ff56f54ce 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -77,7 +77,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { diff --git a/patches/server/0015-Remove-Timings.patch b/patches/server/0015-Remove-Timings.patch index 5682067b..600170ee 100644 --- a/patches/server/0015-Remove-Timings.patch +++ b/patches/server/0015-Remove-Timings.patch @@ -1325,7 +1325,7 @@ index fae2574cee5779c4a3ea7aec393f087676327b0e..0d4a36e59072de962363bb72babae30f } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 43a727475a787cd1ddc6345f366f1b2f477fcfde..adb9956f3350f1e58cbe5d26602412c0043e0d62 100644 +index 0bba03116d4746515117574177abfc7b43326a43..03aa00fda048a634777dfc28a8b45599ae4c4b3b 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1,6 +1,5 @@ @@ -1335,7 +1335,7 @@ index 43a727475a787cd1ddc6345f366f1b2f477fcfde..adb9956f3350f1e58cbe5d26602412c0 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1290,7 +1289,6 @@ public abstract class PlayerList { +@@ -1293,7 +1292,6 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1343,7 +1343,7 @@ index 43a727475a787cd1ddc6345f366f1b2f477fcfde..adb9956f3350f1e58cbe5d26602412c0 int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1301,7 +1299,6 @@ public abstract class PlayerList { +@@ -1304,7 +1302,6 @@ public abstract class PlayerList { } // Paper end - Incremental chunk and player saving } @@ -1559,10 +1559,10 @@ index 1da91797ddbaf2cee7124b3dbd0970acb1a23073..e33b39d369386d677cc15247846790b4 // Paper start - Add mobcaps commands diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index d9afbfb23536e180e2af5658de0bd1d4673f4251..64f96850cad67c64c9c71b2c5d1cc68d2db4fafc 100644 +index 34d96e8bfebdee3bcc61071c6ec22b53baecec3f..4eab34f932ae564aa038cecf4426b9f74a513ee7 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java -@@ -107,13 +107,6 @@ public class Block extends BlockBehaviour implements ItemLike { +@@ -106,13 +106,6 @@ public class Block extends BlockBehaviour implements ItemLike { this != Blocks.STRUCTURE_BLOCK && this != Blocks.JIGSAW; } diff --git a/patches/server/0019-Remove-UseItemOnPacket-Too-Far-Check.patch b/patches/server/0019-Remove-UseItemOnPacket-Too-Far-Check.patch index fc69b59c..585a3245 100644 --- a/patches/server/0019-Remove-UseItemOnPacket-Too-Far-Check.patch +++ b/patches/server/0019-Remove-UseItemOnPacket-Too-Far-Check.patch @@ -7,10 +7,10 @@ This Check is added in 1.17.x -> 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/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 785a2dcfad72126bff078bfd63649da6eb053ad6..0af9de55adff7ccda286b3cbf7ac400b71661f72 100644 +index 46242ef7c5607780f84046fe039efc11732b011f..f0d84ac5d43d0866c85d1e7375977ba10ce30440 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1948,7 +1948,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2014,7 +2014,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Vec3 vec3d1 = vec3d.subtract(Vec3.atCenterOf(blockposition)); double d0 = 1.0000001D; diff --git a/patches/server/0028-Slice-Smooth-Teleports.patch b/patches/server/0028-Slice-Smooth-Teleports.patch index 9b3aa7e2..60635128 100644 --- a/patches/server/0028-Slice-Smooth-Teleports.patch +++ b/patches/server/0028-Slice-Smooth-Teleports.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/Cryptite/Slice diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 1d0044693dafce42921af0a44175b164d7321114..d954c8e0cefe7337059bda5d5c1429a445a633d0 100644 +index e6d22346d37261751563b039ae2ad8629ff83d8e..d05f687cc2a765058c8eabfcb50d1cc84a13073d 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -307,6 +307,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple @@ -19,10 +19,10 @@ index 1d0044693dafce42921af0a44175b164d7321114..d954c8e0cefe7337059bda5d5c1429a4 // Paper start - rewrite chunk system private ca.spottedleaf.moonrise.patches.chunk_system.player.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index adb9956f3350f1e58cbe5d26602412c0043e0d62..b309541c4a29015ad51e05bb341462bcf247f1eb 100644 +index 03aa00fda048a634777dfc28a8b45599ae4c4b3b..6bf9d97992b17aa985e16d9367b64bbe1b0b6dfe 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -900,10 +900,10 @@ public abstract class PlayerList { +@@ -903,10 +903,10 @@ public abstract class PlayerList { ServerLevel worldserver1 = entityplayer1.serverLevel(); LevelData worlddata = worldserver1.getLevelData(); @@ -36,7 +36,7 @@ index adb9956f3350f1e58cbe5d26602412c0043e0d62..b309541c4a29015ad51e05bb341462bc entityplayer1.connection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); entityplayer1.connection.send(new ClientboundSetExperiencePacket(entityplayer1.experienceProgress, entityplayer1.totalExperience, entityplayer1.experienceLevel)); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 1f70d832b0287f446722745a65062813e84be566..a5f00869d4636867ce54ddbe18ccabfecaad4d9a 100644 +index d57cb8e3fec8db07dea328abeada47829eda111c..04aa0c7d2946a38427951217f2b865b005011ef5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -1361,6 +1361,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0034-Leaves-Xaero-Map-Protocol.patch b/patches/server/0034-Leaves-Xaero-Map-Protocol.patch index 2e8dba4e..910ee834 100644 --- a/patches/server/0034-Leaves-Xaero-Map-Protocol.patch +++ b/patches/server/0034-Leaves-Xaero-Map-Protocol.patch @@ -9,10 +9,10 @@ Original project: https://github.com/LeavesMC/Leaves This patch is Powered by Xaero Map diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 3f127b7ca317c14ffeb1d8c3440848ad06efd5c8..10364d2f34c601a00d8405b5a3f749565eb857a8 100644 +index 8e8346394ba5c48c551050725decbb7f6a91098a..42fa51a01c33d525d6858d53811b204280d362e6 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1329,6 +1329,7 @@ public abstract class PlayerList { +@@ -1332,6 +1332,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldborder)); player.connection.send(new ClientboundSetTimePacket(world.getGameTime(), world.getDayTime(), world.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(world.getSharedSpawnPos(), world.getSharedSpawnAngle())); diff --git a/patches/server/0038-Leaves-Disable-moved-wrongly-threshold.patch b/patches/server/0038-Leaves-Disable-moved-wrongly-threshold.patch index 687d7286..fa65f804 100644 --- a/patches/server/0038-Leaves-Disable-moved-wrongly-threshold.patch +++ b/patches/server/0038-Leaves-Disable-moved-wrongly-threshold.patch @@ -7,7 +7,7 @@ Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 87c96fa812aab05caa75c3c9d5eb3243e2ef9f55..798f6bfc0603ad0b76feb1bad53ea4154168f570 100644 +index eddaffbc6f0a3598fbcee707cb36bad5470b2cb0..d96511e9db78c73356a9f52f22c9d03c2a77e0ca 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -593,7 +593,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -19,16 +19,16 @@ index 87c96fa812aab05caa75c3c9d5eb3243e2ef9f55..798f6bfc0603ad0b76feb1bad53ea415 // CraftBukkit end ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved too quickly! {},{},{}", new Object[]{entity.getName().getString(), this.player.getName().getString(), d6, d7, d8}); this.send(new ClientboundMoveVehiclePacket(entity)); -@@ -628,7 +628,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -629,7 +629,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl d10 = d6 * d6 + d7 * d7 + d8 * d8; boolean flag2 = false; - if (d10 > org.spigotmc.SpigotConfig.movedWronglyThreshold) { // Spigot + if (!org.dreeam.leaf.config.modules.gameplay.DisableMovedWronglyThreshold.enabled && d10 > org.spigotmc.SpigotConfig.movedWronglyThreshold) { // Spigot // Leaves - disable can - flag2 = true; + flag2 = true; // Paper - diff on change, this should be moved wrongly ServerGamePacketListenerImpl.LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", new Object[]{entity.getName().getString(), this.player.getName().getString(), Math.sqrt(d10)}); } -@@ -1451,7 +1451,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1479,7 +1479,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl io.papermc.paper.event.player.PlayerFailMoveEvent event = fireFailMove(io.papermc.paper.event.player.PlayerFailMoveEvent.FailReason.MOVED_TOO_QUICKLY, toX, toY, toZ, toYaw, toPitch, true); if (!event.isAllowed()) { @@ -37,7 +37,7 @@ index 87c96fa812aab05caa75c3c9d5eb3243e2ef9f55..798f6bfc0603ad0b76feb1bad53ea415 ServerGamePacketListenerImpl.LOGGER.warn("{} moved too quickly! {},{},{}", new Object[]{this.player.getName().getString(), d6, d7, d8}); this.teleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot()); return; -@@ -1520,7 +1520,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1549,7 +1549,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl d10 = d6 * d6 + d7 * d7 + d8 * d8; boolean movedWrongly = false; // Paper - Add fail move event; rename diff --git a/patches/server/0062-Remove-useless-creating-stats-json-bases-on-player-n.patch b/patches/server/0062-Remove-useless-creating-stats-json-bases-on-player-n.patch index c072d168..8db51205 100644 --- a/patches/server/0062-Remove-useless-creating-stats-json-bases-on-player-n.patch +++ b/patches/server/0062-Remove-useless-creating-stats-json-bases-on-player-n.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove useless creating stats json bases on player name logic diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 10364d2f34c601a00d8405b5a3f749565eb857a8..cebff1c2ff7f957a588d1eee9db44fad99a0ac68 100644 +index 42fa51a01c33d525d6858d53811b204280d362e6..b94dfd585714ee103400221e3e6fb4d8261fa6f4 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1533,6 +1533,8 @@ public abstract class PlayerList { +@@ -1536,6 +1536,8 @@ public abstract class PlayerList { File file = this.server.getWorldPath(LevelResource.PLAYER_STATS_DIR).toFile(); File file1 = new File(file, String.valueOf(uuid) + ".json"); @@ -17,7 +17,7 @@ index 10364d2f34c601a00d8405b5a3f749565eb857a8..cebff1c2ff7f957a588d1eee9db44fad if (!file1.exists()) { File file2 = new File(file, displayName + ".json"); // CraftBukkit Path path = file2.toPath(); -@@ -1541,6 +1543,8 @@ public abstract class PlayerList { +@@ -1544,6 +1546,8 @@ public abstract class PlayerList { file2.renameTo(file1); } } diff --git a/patches/server/0065-Improve-Purpur-AFK-system.patch b/patches/server/0065-Improve-Purpur-AFK-system.patch index ee0457e6..5ac96da2 100644 --- a/patches/server/0065-Improve-Purpur-AFK-system.patch +++ b/patches/server/0065-Improve-Purpur-AFK-system.patch @@ -19,10 +19,10 @@ index b6713361cd104786f52bd880418b8653e4126fda..94bb40c9932b0b7dd9fb8af680b63d13 org.purpurmc.purpur.command.DemoCommand.register(this.dispatcher); // Purpur org.purpurmc.purpur.command.PingCommand.register(this.dispatcher); // Purpur diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index d954c8e0cefe7337059bda5d5c1429a445a633d0..2f4096cb2bf93f880d01283df8d10bf996e72bb9 100644 +index d05f687cc2a765058c8eabfcb50d1cc84a13073d..8cc6423928b191049a85c023af740a92950d2c00 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2411,6 +2411,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2410,6 +2410,8 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple // Purpur Start private boolean isAfk = false; @@ -31,7 +31,7 @@ index d954c8e0cefe7337059bda5d5c1429a445a633d0..2f4096cb2bf93f880d01283df8d10bf9 @Override public void setAfk(boolean afk) { -@@ -2448,6 +2450,20 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2447,6 +2449,20 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple String prefix = (split.length > 0 ? split[0] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListPrefix, ""); String suffix = (split.length > 1 ? split[1] : "").replace(org.purpurmc.purpur.PurpurConfig.afkTabListSuffix, ""); if (afk) { @@ -53,10 +53,10 @@ index d954c8e0cefe7337059bda5d5c1429a445a633d0..2f4096cb2bf93f880d01283df8d10bf9 } else { getBukkitEntity().setPlayerListName(prefix + scoreboardName + suffix, true); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 798f6bfc0603ad0b76feb1bad53ea4154168f570..212074a4e26fd124705bbd4ac7bb4e25f3cbf2f9 100644 +index d96511e9db78c73356a9f52f22c9d03c2a77e0ca..2b4994e3bf86392f4e4794d61c4653ef2cf714f1 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2206,8 +2206,28 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2272,8 +2272,28 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } @@ -86,7 +86,7 @@ index 798f6bfc0603ad0b76feb1bad53ea4154168f570..212074a4e26fd124705bbd4ac7bb4e25 // CraftBukkit start - SPIGOT-7346: Prevent disconnected players from executing commands if (this.player.hasDisconnected()) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index cebff1c2ff7f957a588d1eee9db44fad99a0ac68..c5c0494fde702e12c320bffe21530c2155766459 100644 +index b94dfd585714ee103400221e3e6fb4d8261fa6f4..8ce41d394a2e60ec2c9411f4a3172a63edd15b12 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -615,6 +615,7 @@ public abstract class PlayerList { diff --git a/patches/server/0067-Mirai-Configurable-chat-message-signatures.patch b/patches/server/0067-Mirai-Configurable-chat-message-signatures.patch index c9d813fb..02893622 100644 --- a/patches/server/0067-Mirai-Configurable-chat-message-signatures.patch +++ b/patches/server/0067-Mirai-Configurable-chat-message-signatures.patch @@ -117,10 +117,10 @@ index ae0d0310d50f1ada082e045a58a24a43f8079da8..eea19f895588c51bce86f20b3ec505fd if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index c5c0494fde702e12c320bffe21530c2155766459..14d0a5468cb4502ed2def4e92fb70e70e929dbfe 100644 +index 8ce41d394a2e60ec2c9411f4a3172a63edd15b12..3482c172685990f696797a954ef765fe2d0f6261 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1487,7 +1487,7 @@ public abstract class PlayerList { +@@ -1490,7 +1490,7 @@ public abstract class PlayerList { // Paper end boolean flag = this.verifyChatTrusted(message); @@ -129,7 +129,7 @@ index c5c0494fde702e12c320bffe21530c2155766459..14d0a5468cb4502ed2def4e92fb70e70 OutgoingChatMessage outgoingchatmessage = OutgoingChatMessage.create(message); boolean flag1 = false; -@@ -1516,6 +1516,7 @@ public abstract class PlayerList { +@@ -1519,6 +1519,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public diff --git a/patches/server/0078-Configurable-connection-message.patch b/patches/server/0078-Configurable-connection-message.patch index deccdb6d..1bce433f 100644 --- a/patches/server/0078-Configurable-connection-message.patch +++ b/patches/server/0078-Configurable-connection-message.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable connection message diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 14d0a5468cb4502ed2def4e92fb70e70e929dbfe..bd1b6f2aee3d79d9c6e21af6518bbf1800861a49 100644 +index 3482c172685990f696797a954ef765fe2d0f6261..9d2faacd5c9c6e5439c6b8b2e2f7cb2bab4ad8f8 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -354,7 +354,7 @@ public abstract class PlayerList { @@ -35,7 +35,7 @@ index 14d0a5468cb4502ed2def4e92fb70e70e929dbfe..bd1b6f2aee3d79d9c6e21af6518bbf18 this.cserver.getPluginManager().callEvent(playerQuitEvent); entityplayer.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); -@@ -1660,4 +1660,29 @@ public abstract class PlayerList { +@@ -1663,4 +1663,29 @@ public abstract class PlayerList { public boolean isAllowCommandsForAllPlayers() { return this.allowCommandsForAllPlayers; } diff --git a/patches/server/0086-Fix-MC-119417.patch b/patches/server/0086-Fix-MC-119417.patch index 7a1bdb54..8f72b0da 100644 --- a/patches/server/0086-Fix-MC-119417.patch +++ b/patches/server/0086-Fix-MC-119417.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Fix-MC-119417 Related MC issue: https://bugs.mojang.com/browse/MC-119417 diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0782cdddcb7e79260dd8c3b75760aaab95a378de..9941f0659b98ddb385172f7fb7d00ff3f723dff3 100644 +index 8cc6423928b191049a85c023af740a92950d2c00..0bab919a9a47ce831818d97722874c2f67126c87 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2257,6 +2257,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple +@@ -2256,6 +2256,7 @@ public class ServerPlayer extends net.minecraft.world.entity.player.Player imple this.connection.send(new ClientboundGameEventPacket(ClientboundGameEventPacket.CHANGE_GAME_MODE, (float) gameMode.getId())); if (gameMode == GameType.SPECTATOR) { this.removeEntitiesOnShoulder(); diff --git a/patches/server/0093-Hide-specified-item-components-to-clients.patch b/patches/server/0093-Hide-specified-item-components-to-clients.patch index 7c0f07c1..e34954f9 100644 --- a/patches/server/0093-Hide-specified-item-components-to-clients.patch +++ b/patches/server/0093-Hide-specified-item-components-to-clients.patch @@ -65,10 +65,10 @@ index 573c380e123473e35c0b72c44b32c8d6ba8e61c6..feacc41ecf7f4028e0a1cce5d2012ced } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 091580c23138fc260f3aa898aa0f4a247c705293..0b9ee7be6172d6fbe3e2757ed8f88ad7f649919f 100644 +index d7f92865bf81e2358246b11e4e3efe4bda02f6d5..0752b0e29f149438aa16a252ae1b2afc87218503 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2847,7 +2847,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2913,7 +2913,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl entity.refreshEntityData(ServerGamePacketListenerImpl.this.player); // SPIGOT-7136 - Allays if (entity instanceof Allay) { @@ -100,7 +100,7 @@ index 3503423ee0d4ed13f7ebdb8272c8266a827ff4c1..341fad1609308fad6adf5b5f9ad289d5 case HAND: this.setLastHandItem(enumitemslot, itemstack1); diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index c491291b522aebf34c7d990d2b485d1a0d19cdcd..267f638bb704002a30b1f5cb4e33b6a89cf0773c 100644 +index ecfa807e78c16a24099d40becd0c7916f239aed1..f1b4adeeb4dad5178a5e52870f420beaa8e13034 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -295,7 +295,7 @@ public abstract class AbstractContainerMenu { diff --git a/patches/server/0096-Paper-PR-Throttle-failed-spawn-attempts.patch b/patches/server/0096-Paper-PR-Throttle-failed-spawn-attempts.patch index fff7c0a8..a3dcc8d6 100644 --- a/patches/server/0096-Paper-PR-Throttle-failed-spawn-attempts.patch +++ b/patches/server/0096-Paper-PR-Throttle-failed-spawn-attempts.patch @@ -31,10 +31,10 @@ vain. Throttling spawn attempts in suspected spawnproof chunks improves performance without noticeably advantaging or disadvantaging the mob farm. diff --git a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -index 7509b17414f836e8b53fc62b02b386ba4e8c5ca9..f9a2bbd0aa64bd3a77f1dc80cbdc5ef52da89b5b 100644 +index 95e96fe8aa93efbbb2e0a7dd98377fdc4fe0e6dd..b6728bb0c1974eb236a7e8429b936492ff490bdd 100644 --- a/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/WorldConfiguration.java -@@ -186,6 +186,15 @@ public class WorldConfiguration extends ConfigurationPart { +@@ -188,6 +188,15 @@ public class WorldConfiguration extends ConfigurationPart { @MergeMap public Reference2IntMap ticksPerSpawn = Util.make(new Reference2IntOpenHashMap<>(NaturalSpawner.SPAWNING_CATEGORIES.length), map -> Arrays.stream(NaturalSpawner.SPAWNING_CATEGORIES).forEach(mobCategory -> map.put(mobCategory, -1))); @@ -48,8 +48,8 @@ index 7509b17414f836e8b53fc62b02b386ba4e8c5ca9..f9a2bbd0aa64bd3a77f1dc80cbdc5ef5 + } + @ConfigSerializable - public record DespawnRange(@Required int soft, @Required int hard) { - } + public record DespawnRangePair(@Required DespawnRange hard, @Required DespawnRange soft) { + public static DespawnRangePair createDefault() { diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java index 7e1a007ed2f2c625f01fea210c9935cb02d119e0..8e9ada03e5134d2f776bbbf872087121f649c19d 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java