diff --git a/.github/workflows/auto-update.yml b/.github/workflows/auto-update.yml index fffd5afb..50c8440c 100644 --- a/.github/workflows/auto-update.yml +++ b/.github/workflows/auto-update.yml @@ -60,7 +60,7 @@ jobs: if ! git diff --quiet; then echo "Running tests...." ./gradlew applyAllPatches - ./gradlew build + ./gradlew build -x test ./gradlew rebuildAllServerPatches fi diff --git a/gradle.properties b/gradle.properties index 0dc63a14..746aad63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,7 +2,7 @@ group=cn.dreeam.leaf mcVersion=1.21.4 version=1.21.4-R0.1-SNAPSHOT -galeCommit=b8d86ad9ba8d5cfaf304386e47b4fb18b1f57e8c +galeCommit=2b0a4c09f09e18fa80b1b34366ef0c035b819552 org.gradle.configuration-cache=true org.gradle.caching=true diff --git a/leaf-api/paper-patches/features/0002-Leaf-config.patch b/leaf-api/paper-patches/features/0002-Leaf-config.patch index 85c17f3f..bb249b84 100644 --- a/leaf-api/paper-patches/features/0002-Leaf-config.patch +++ b/leaf-api/paper-patches/features/0002-Leaf-config.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Leaf config diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 2dccd3f72e188a34c9cdf80816aadb0c79351279..5e1cc13695ce58aadb882c03ed4259f8ad843730 100644 +index 1b075b1797e11785e6a463457678ab1033dc5399..7ffe592b88d5f57723c9373f326e09e68da716bd 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2383,6 +2383,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2382,6 +2382,14 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi // Paper end diff --git a/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch b/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch index 015a2a4a..f36096b8 100644 --- a/leaf-api/paper-patches/features/0004-Purpur-API-Changes.patch +++ b/leaf-api/paper-patches/features/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: 4b74604c1f9f84e87f91dd390c83850f088a736b +Commit: 5583a3f19b75a9d07367e2ca80adbbafa9af6593 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "co/aikar/timings/TimedEventExecutor.java.patch" @@ -70,10 +70,10 @@ index 6b2f6ab137ae37ff0db4827886614436b7ed5dcb..66a9fc729182476c4f601cdb32bcb109 /** * The brand id for Pufferfish. diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 6c24786d349b88b414a1d96e4c0415f75d8fa545..196109f427fb1169785b82b4cfb52c53329d2bea 100644 +index c3cdfd40386b0844712e9561b35e7acc6f83142b..d67af3fdc4434817cea29673069430a33fb30a8e 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3047,4 +3047,133 @@ public final class Bukkit { +@@ -3046,4 +3046,133 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } @@ -446,10 +446,10 @@ index 5622fe3165baad8138c22cfc016ed6c3834cf702..6d31b561d915180fcd473b317721064f + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 5e1cc13695ce58aadb882c03ed4259f8ad843730..02fb928e8c44bdbfc948079ccc2eba40c4621ae6 100644 +index 7ffe592b88d5f57723c9373f326e09e68da716bd..6790ca1648a17cf30063522f68b3ac3e82e3bd8c 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2383,6 +2383,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2382,6 +2382,18 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi // Paper end @@ -468,7 +468,7 @@ index 5e1cc13695ce58aadb882c03ed4259f8ad843730..02fb928e8c44bdbfc948079ccc2eba40 // Leaf start - Leaf config - API @NotNull public org.bukkit.configuration.file.YamlConfiguration getLeafConfig() -@@ -2740,4 +2752,111 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2739,4 +2751,111 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ long getLastTickOversleepTime(); // Gale end - YAPFA - last tick time - API @@ -581,10 +581,10 @@ index 5e1cc13695ce58aadb882c03ed4259f8ad843730..02fb928e8c44bdbfc948079ccc2eba40 + // Purpur end - Debug Marker API } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index e99fa923d35b6dda0b02968bdcf6b43552517ea4..5ee6f017101a05b568b69627b1819d63dbe8094e 100644 +index 8784842d14bbbe7dbde181e86782a0955be66924..3af8eb8064aeafa3606fed23e7ca2bc74c194726 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4238,6 +4238,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4253,6 +4253,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); @@ -1010,13 +1010,13 @@ index bc84b892cae5fe7019a3ad481e9da79956efa1fe..48eb5b00c460cccde29d327cef1d63fc + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 1ee59ed42de64ae1a0a580b3f640cdcb5f51c71b..886a954b1a12e895f5d54fd35a9acb36673e3733 100644 +index f9b3ecbab5826efb50adc2e1831051232e6b3b22..c39bd414cb3b1e12867cfee150f0ccfc9ba56ce8 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3902,4 +3902,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3938,4 +3938,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM + * @return the result of this method, holding leftovers and spawned items. */ - void sendEntityEffect(org.bukkit.@NotNull EntityEffect effect, @NotNull Entity target); - // Paper end - entity effect API + @NotNull PlayerGiveResult give(@NotNull Collection<@NotNull ItemStack> items, boolean dropIfFull); + + // Purpur start + /** diff --git a/leaf-api/paper-patches/features/0006-KeYi-Player-Skull-API.patch b/leaf-api/paper-patches/features/0006-KeYi-Player-Skull-API.patch index 99ca4443..7add01a4 100644 --- a/leaf-api/paper-patches/features/0006-KeYi-Player-Skull-API.patch +++ b/leaf-api/paper-patches/features/0006-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/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 886a954b1a12e895f5d54fd35a9acb36673e3733..1df8a2ceb4df1ea14d9d936a9389d9d44fd91b55 100644 +index c39bd414cb3b1e12867cfee150f0ccfc9ba56ce8..a7abbf0b8645f394a30dc27995919a32c7a424d5 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -4021,4 +4021,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -4057,4 +4057,23 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM sendDeathScreen(message); } // Purpur end diff --git a/leaf-api/paper-patches/features/0007-Slice-Smooth-Teleports.patch b/leaf-api/paper-patches/features/0007-Slice-Smooth-Teleports.patch index ba6a9b91..c54be62e 100644 --- a/leaf-api/paper-patches/features/0007-Slice-Smooth-Teleports.patch +++ b/leaf-api/paper-patches/features/0007-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/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 02cf7995d15487a4958ba5a5a19018d24d707b80..31fcd0512b8b9ad2a36d8338c581972a450cda7c 100644 +index a7abbf0b8645f394a30dc27995919a32c7a424d5..425062e31d81cd160f4e3d896741f28ac1e91d05 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3732,6 +3732,33 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3734,6 +3734,33 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM String getClientBrandName(); // Paper end diff --git a/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch b/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch index 7f74d5a5..e23ed9c1 100644 --- a/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch +++ b/leaf-api/paper-patches/features/0009-Leaves-Replay-Mod-API.patch @@ -11,10 +11,10 @@ Original project: https://github.com/LeavesMC/Leaves This patch is Powered by ReplayMod(https://github.com/ReplayMod) diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 196109f427fb1169785b82b4cfb52c53329d2bea..3e999a4805fbf733dc1530e7dbf23aa10642cb39 100644 +index d67af3fdc4434817cea29673069430a33fb30a8e..1e32c10f3e7687cbd55985a2e03f0ab6c5f93b31 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -3048,6 +3048,7 @@ public final class Bukkit { +@@ -3047,6 +3047,7 @@ public final class Bukkit { return server.spigot(); } @@ -22,7 +22,7 @@ index 196109f427fb1169785b82b4cfb52c53329d2bea..3e999a4805fbf733dc1530e7dbf23aa1 // Purpur start - Bring back server name /** * Get the name of this server -@@ -3176,4 +3177,10 @@ public final class Bukkit { +@@ -3175,4 +3176,10 @@ public final class Bukkit { server.clearBlockHighlights(); } // Purpur end - Debug Marker API @@ -34,7 +34,7 @@ index 196109f427fb1169785b82b4cfb52c53329d2bea..3e999a4805fbf733dc1530e7dbf23aa1 + // Leaves end - Photographer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 335db5f0893df51c65c5aab7f11fd6aef59a191d..78ddb4f8e90d797920ed7664055ba81d3c7cde41 100644 +index 6790ca1648a17cf30063522f68b3ac3e82e3bd8c..223f3a4545996073872d1650c9a84feacfd2c493 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -66,6 +66,7 @@ import org.jetbrains.annotations.ApiStatus; @@ -45,7 +45,7 @@ index 335db5f0893df51c65c5aab7f11fd6aef59a191d..78ddb4f8e90d797920ed7664055ba81d /** * Represents a server implementation. -@@ -2859,4 +2860,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2858,4 +2859,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ void clearBlockHighlights(); // Purpur end - Debug Marker API diff --git a/leaf-server/gale-patches/features/0001-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/gale-patches/features/0001-Fix-Pufferfish-and-Purpur-patches.patch index f2f568a6..dc891ce8 100644 --- a/leaf-server/gale-patches/features/0001-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/gale-patches/features/0001-Fix-Pufferfish-and-Purpur-patches.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix Pufferfish and Purpur patches diff --git a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java -index fab5d5af9ec6a20810ce5e437dd617684cc5768f..1d9acb46d69e34b7e0a38b6a02334b1a3472ff2b 100644 +index 38ecc4a0ea6e9a7f4c3a01077b7fc6f04fa20d80..6c99f64eca1fa68bb4714021cefb999dcd335b21 100644 --- a/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java +++ b/src/main/java/org/galemc/gale/version/AbstractPaperVersionFetcher.java @@ -101,10 +101,10 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { @@ -20,9 +20,9 @@ index fab5d5af9ec6a20810ce5e437dd617684cc5768f..1d9acb46d69e34b7e0a38b6a02334b1a + case 0 -> text("* You are running the latest version", NamedTextColor.GREEN); // Purpur - Rebrand + case DISTANCE_UNKNOWN -> text("* Unknown version", NamedTextColor.YELLOW); // Purpur - Rebrand + default -> text("* You are " + distance + " version(s) behind", NamedTextColor.YELLOW) // Purpur - Rebrand - .append(Component.newline()) - .append(text("Download the new version at: ") - .append(text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher + .append(Component.newline()) + .append(text("Download the new version at: ") + .append(text(this.downloadPage, NamedTextColor.GOLD) // Gale - branding changes - version fetcher @@ -149,6 +149,6 @@ public abstract class AbstractPaperVersionFetcher implements VersionFetcher { return null; } diff --git a/leaf-server/gale-patches/features/0002-KeYi-Disable-arrow-despawn-counter-by-default.patch b/leaf-server/gale-patches/features/0002-KeYi-Disable-arrow-despawn-counter-by-default.patch index 3012a6fa..241e9e53 100644 --- a/leaf-server/gale-patches/features/0002-KeYi-Disable-arrow-despawn-counter-by-default.patch +++ b/leaf-server/gale-patches/features/0002-KeYi-Disable-arrow-despawn-counter-by-default.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java -index a12b0fa0df84fc44861cebbfbdc4a06a990accce..37896174667b884fcdc83b0a613686d76b66f247 100644 +index 34cccb190510c041062858fca20cc40ea5be5f9e..f550c88d125ffafebfad7663088c080bbf771665 100644 --- a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java +++ b/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java -@@ -120,7 +120,7 @@ public class GaleWorldConfiguration extends ConfigurationPart { +@@ -132,7 +132,7 @@ public class GaleWorldConfiguration extends ConfigurationPart { } diff --git a/leaf-server/gale-patches/features/0003-Reduce-active-items-finding-hopper-nearby-check.patch b/leaf-server/gale-patches/features/0003-Reduce-active-items-finding-hopper-nearby-check.patch index 905f76ba..9a183697 100644 --- a/leaf-server/gale-patches/features/0003-Reduce-active-items-finding-hopper-nearby-check.patch +++ b/leaf-server/gale-patches/features/0003-Reduce-active-items-finding-hopper-nearby-check.patch @@ -9,10 +9,10 @@ But still recommend to turn-off `checkForMinecartNearItemWhileActive` Since `Reduce-hopper-item-checks.patch` will cause lag under massive dropped items diff --git a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java b/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java -index 37896174667b884fcdc83b0a613686d76b66f247..81e853a10028d7ae4cf58a722fffdaa5a121932e 100644 +index f550c88d125ffafebfad7663088c080bbf771665..2cc0e485b5de49822c97530769591a090e2ff88f 100644 --- a/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java +++ b/src/main/java/org/galemc/gale/configuration/GaleWorldConfiguration.java -@@ -78,6 +78,7 @@ public class GaleWorldConfiguration extends ConfigurationPart { +@@ -87,6 +87,7 @@ public class GaleWorldConfiguration extends ConfigurationPart { public int duration = 100; public int nearbyItemMaxAge = 1200; public int checkForMinecartNearItemInterval = 20; diff --git a/leaf-server/minecraft-patches/features/0002-Leaf-config.patch b/leaf-server/minecraft-patches/features/0002-Leaf-config.patch index 5f1dfea1..4487f23f 100644 --- a/leaf-server/minecraft-patches/features/0002-Leaf-config.patch +++ b/leaf-server/minecraft-patches/features/0002-Leaf-config.patch @@ -23,10 +23,10 @@ index 9aa664537cc37e44db46d5a2a64ae3116938c681..748816e3f325468f523bdb8dfb949928 DedicatedServerSettings dedicatedServerSettings = new DedicatedServerSettings(optionSet); // CraftBukkit - CLI argument support dedicatedServerSettings.forceSave(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 0da1eeab6a2f8336283a62ebcb3aa0d1b1933c85..bef8b563ea638a613c140000e69f53d12e17fb2b 100644 +index f33fb9b30863dd8ff7207db905fcfb7547b09383..4ba85d704ffebae38f7a76a97a182e3674730c6f 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1175,6 +1175,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping public static final long SERVER_INIT = System.nanoTime(); // Paper - Lag compensation @@ -47,7 +47,7 @@ index f2e24d52240a84ff7ca69ad2c8ec0d1c197467c0..30dc45b2201bf7435d7f38866dfa4b5f } } diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index b6127fff62c49809cfa54e39a35c89f45f46c66c..fde7de56f46502a1cc268318684e67ac2fbd5157 100644 +index 7a18b11782b2524280fddf20e6b1cabdddf07c49..72cdd8f72fb3f552d9729f21de438405abe3acdb 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java @@ -179,6 +179,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon @@ -103,7 +103,7 @@ index b6127fff62c49809cfa54e39a35c89f45f46c66c..fde7de56f46502a1cc268318684e67ac } private void broadcastChangedChunks() { // Gale - Purpur - remove vanilla profiler -@@ -559,6 +598,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -560,6 +599,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon int naturalSpawnChunkCount = this.distanceManager.getNaturalSpawnChunkCount(); // Paper start - Optional per player mob spawns if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled @@ -111,7 +111,7 @@ index b6127fff62c49809cfa54e39a35c89f45f46c66c..fde7de56f46502a1cc268318684e67ac // re-set mob counts for (ServerPlayer player : this.level.players) { // Paper start - per player mob spawning backoff -@@ -573,12 +613,16 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -574,12 +614,16 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - per player mob spawning backoff } @@ -131,7 +131,7 @@ index b6127fff62c49809cfa54e39a35c89f45f46c66c..fde7de56f46502a1cc268318684e67ac // Gale start - MultiPaper - skip unnecessary mob spawning computations } else { spawnState = null; -@@ -596,7 +640,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -597,7 +641,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } // Paper end - PlayerNaturallySpawnCreaturesEvent boolean flag = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && this.level.getLevelData().getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit @@ -140,7 +140,7 @@ index b6127fff62c49809cfa54e39a35c89f45f46c66c..fde7de56f46502a1cc268318684e67ac } else { filteredSpawningCategories = List.of(); } -@@ -604,8 +648,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -605,8 +649,8 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon for (LevelChunk levelChunk : chunks) { ChunkPos pos = levelChunk.getPos(); levelChunk.incrementInhabitedTime(timeInhabited); diff --git a/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch b/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch index d4d545f3..590e1e80 100644 --- a/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/leaf-server/minecraft-patches/features/0004-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -32,10 +32,10 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index a04302728819f28ab724d474a3d06a916f3d1d99..47463babd445763c861ac5c4713b5bd3be5cbeec 100644 +index 54916fe57ceeab24936ce50709402ecf1fcd9a10..cd2fa33f6e655419f2a1155aed8566742385d922 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java -@@ -171,6 +171,22 @@ public final class ActivationRange { +@@ -173,6 +173,22 @@ public final class ActivationRange { } ActivationRange.activateEntity(entity); @@ -58,7 +58,7 @@ index a04302728819f28ab724d474a3d06a916f3d1d99..47463babd445763c861ac5c4713b5bd3 } } } -@@ -182,11 +198,11 @@ public final class ActivationRange { +@@ -184,11 +200,11 @@ public final class ActivationRange { */ private static void activateEntity(final Entity entity) { if (MinecraftServer.currentTick > entity.activatedTick) { @@ -73,7 +73,7 @@ index a04302728819f28ab724d474a3d06a916f3d1d99..47463babd445763c861ac5c4713b5bd3 } } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index ba0b5961535f0dbffda5216a6e4657ea85f30eb7..e52d976f0c1c5eacdc8608b204c3a178b9b17446 100644 +index 7c9496e8564c2464e79661153fd295bb027b7bdb..95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -781,6 +781,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -85,7 +85,7 @@ index ba0b5961535f0dbffda5216a6e4657ea85f30eb7..e52d976f0c1c5eacdc8608b204c3a178 if (!tickRateManager.isEntityFrozen(entity)) { entity.checkDespawn(); diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 8470698181040b5d164a353aeb1dfa907765b80e..36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892 100644 +index a839042a883831ab5bf7bca7fa707b10a97689f8..22af2c4996601847f2bbe9d6fef2fc4bd82725fc 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -335,6 +335,8 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess @@ -110,7 +110,7 @@ index 13cfe61fe500e6798b9129c7c559a7af65378a22..303bd2d3ea5c313477c8ab48359a01f2 @Nullable private Component description; diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index f3eec8b75fcda47e6632a2a7db9a238b515bc8a0..cc452ca41c336891473fae98b8681768c52f822d 100644 +index acf2e306ad26e5f0413ee320b9b514b56fefc21b..86d78bcb6ddf23d298430406cc75e4b482538773 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -217,10 +217,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -239,7 +239,7 @@ index a04d71967976731b4858d44ac138b7ac390ef7e7..77691e10f7c511eca4384f2974e538d7 TadpoleAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 25c0c27979f49f08d0cc150de9afe6112f115666..35d492106506c28412fea5c59c7b67c809ce231c 100644 +index c4c0ebb9b43018d795e02b2ab15d38bc475e4330..dde7f05b8664d9a60edc716a370917d6cab03c18 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java @@ -182,8 +182,10 @@ public class Goat extends Animal { diff --git a/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch b/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch index bdf6ed90..4346d119 100644 --- a/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch +++ b/leaf-server/minecraft-patches/features/0006-Purpur-Server-Minecraft-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur Server Minecraft Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 4b74604c1f9f84e87f91dd390c83850f088a736b +Commit: 5583a3f19b75a9d07367e2ca80adbbafa9af6593 Patches listed below are removed in this patch, They exists in Gale or Leaf: * "net/minecraft/CrashReport.java.patch" @@ -42,10 +42,10 @@ Patches listed below are removed in this patch, They exists in Gale or Leaf: - Rebrand diff --git a/io/papermc/paper/entity/activation/ActivationRange.java b/io/papermc/paper/entity/activation/ActivationRange.java -index 47463babd445763c861ac5c4713b5bd3be5cbeec..f2e8ca24f4a9beb071415db858d80bc7e5e59321 100644 +index cd2fa33f6e655419f2a1155aed8566742385d922..7ab41616b0c3e3766c13f86920965165ac800ba3 100644 --- a/io/papermc/paper/entity/activation/ActivationRange.java +++ b/io/papermc/paper/entity/activation/ActivationRange.java -@@ -153,6 +153,8 @@ public final class ActivationRange { +@@ -155,6 +155,8 @@ public final class ActivationRange { continue; } @@ -54,7 +54,7 @@ index 47463babd445763c861ac5c4713b5bd3be5cbeec..f2e8ca24f4a9beb071415db858d80bc7 final int worldHeight = world.getHeight(); ActivationRange.maxBB = player.getBoundingBox().inflate(maxRange, worldHeight, maxRange); ActivationType.MISC.boundingBox = player.getBoundingBox().inflate(miscActivationRange, worldHeight, miscActivationRange); -@@ -310,6 +312,7 @@ public final class ActivationRange { +@@ -312,6 +314,7 @@ public final class ActivationRange { * @return */ public static boolean checkIfActive(final Entity entity) { @@ -309,10 +309,10 @@ index 748816e3f325468f523bdb8dfb94992883ed1989..427788e8747ae8d3a49c0dc094e04b6d Bootstrap.bootStrap(); Bootstrap.validate(); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 0837c765d9e8833347c9c0c1254da8249daf42c3..73d052596310098abe69b247f45cdb118297f1ee 100644 +index a76b67a846b12a7b3d0c41b6ac4833d4f0372531..5fb7a76faf72f7d91122e5bf01c51853164a73c0 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -267,6 +267,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop processQueue = new java.util.concurrent.ConcurrentLinkedQueue(); public int autosavePeriod; // Paper - don't store the vanilla dispatcher -@@ -286,7 +287,9 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop pluginsBlockingSleep = new java.util.HashSet<>(); // Paper - API to allow/disallow tick sleeping @@ -330,7 +330,7 @@ index 0837c765d9e8833347c9c0c1254da8249daf42c3..73d052596310098abe69b247f45cdb11 public gg.pufferfish.pufferfish.util.AsyncExecutor mobSpawnExecutor = new gg.pufferfish.pufferfish.util.AsyncExecutor("MobSpawning"); // Pufferfish - optimize mob spawning public static S spin(Function threadFunction) { -@@ -989,6 +992,15 @@ 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 @@ -724,7 +724,7 @@ index f262a7c5ae4e7d56f16f5c0f4f145a2e428abbe4..614c7d9f673c926562acc8fa3b378862 private JComponent buildOnboardingPanel() { String onboardingLink = "https://docs.papermc.io/paper/next-steps"; diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index e52d976f0c1c5eacdc8608b204c3a178b9b17446..a13aa7b896a998975d2ee14eafb86a85db988e69 100644 +index 95d69c4b40e4ebe12d8033dbcc7ba195a0ccfb5a..bb38adebfcf2e3c52971a79d8363a45f067727a9 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -205,6 +205,8 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -896,7 +896,7 @@ index e52d976f0c1c5eacdc8608b204c3a178b9b17446..a13aa7b896a998975d2ee14eafb86a85 this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. -@@ -2656,7 +2727,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2657,7 +2728,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // Spigot start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message // Paper start - Fix merchant inventory not closing on entity removal @@ -906,7 +906,7 @@ index e52d976f0c1c5eacdc8608b204c3a178b9b17446..a13aa7b896a998975d2ee14eafb86a85 } // Paper end - Fix merchant inventory not closing on entity removal diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index e56e930df980613a13f92d771f1036eba82b1d19..1173deb1aeb5abc225e7b5914cc3c325afdfab16 100644 +index fdbf7aa2cc531825217c4b90fc27516dfadbd310..31fdda8a62d80f8e48914c8bed0d9cf1bb8bbffb 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -392,6 +392,10 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -1279,7 +1279,7 @@ index ea34bb4913e7357f5b76a64443f7e744abdf7b5e..de115ee71fa240440b54c553e0d3ddaf try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704272aaa73 100644 +index 6a36f6e498fbba976c5f1f48c3648e2e19d46ebc..29b81470ce8cbc8c8c5644b8c07738bf9d90460c 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -326,6 +326,20 @@ public class ServerGamePacketListenerImpl @@ -1333,7 +1333,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause return; } -@@ -1174,6 +1197,10 @@ public class ServerGamePacketListenerImpl +@@ -1181,6 +1204,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; @@ -1344,7 +1344,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 for (final String page : pageList) { final int byteLength = page.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; byteTotal += byteLength; -@@ -1198,7 +1225,8 @@ public class ServerGamePacketListenerImpl +@@ -1205,7 +1232,8 @@ public class ServerGamePacketListenerImpl } if (byteTotal > byteAllowed) { @@ -1354,7 +1354,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 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; } -@@ -1217,31 +1245,45 @@ public class ServerGamePacketListenerImpl +@@ -1224,31 +1252,45 @@ public class ServerGamePacketListenerImpl Optional optional = packet.title(); optional.ifPresent(list::add); list.addAll(packet.pages()); @@ -1404,7 +1404,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 itemStack.set( DataComponents.WRITTEN_BOOK_CONTENT, new WrittenBookContent(this.filterableFromOutgoing(title), this.player.getName().getString(), 0, list, true) -@@ -1255,6 +1297,16 @@ public class ServerGamePacketListenerImpl +@@ -1262,6 +1304,16 @@ public class ServerGamePacketListenerImpl return this.player.isTextFilteringEnabled() ? Filterable.passThrough(filteredText.filteredOrEmpty()) : Filterable.from(filteredText); } @@ -1421,7 +1421,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 @Override public void handleEntityTagQuery(ServerboundEntityTagQueryPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -@@ -1290,7 +1342,15 @@ public class ServerGamePacketListenerImpl +@@ -1297,7 +1349,15 @@ public class ServerGamePacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); @@ -1438,7 +1438,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 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.serverLevel(); -@@ -1465,7 +1525,7 @@ public class ServerGamePacketListenerImpl +@@ -1472,7 +1532,7 @@ public class ServerGamePacketListenerImpl movedWrongly = true; if (event.getLogWarning()) // Paper end @@ -1447,7 +1447,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 } // Paper } -@@ -1531,6 +1591,8 @@ public class ServerGamePacketListenerImpl +@@ -1538,6 +1598,8 @@ public class ServerGamePacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1456,7 +1456,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1587,6 +1649,13 @@ public class ServerGamePacketListenerImpl +@@ -1594,6 +1656,13 @@ public class ServerGamePacketListenerImpl this.player.tryResetCurrentImpulseContext(); } @@ -1470,7 +1470,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 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(); -@@ -1635,6 +1704,17 @@ public class ServerGamePacketListenerImpl +@@ -1642,6 +1711,17 @@ public class ServerGamePacketListenerImpl } } @@ -1488,7 +1488,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 // Paper start - optimise out extra getCubes private boolean hasNewCollision(final ServerLevel level, final Entity entity, final AABB oldBox, final AABB newBox) { final List collisionsBB = new java.util.ArrayList<>(); -@@ -1999,6 +2079,7 @@ public class ServerGamePacketListenerImpl +@@ -2006,6 +2086,7 @@ public class ServerGamePacketListenerImpl boolean cancelled; if (hitResult == null || hitResult.getType() != HitResult.Type.BLOCK) { @@ -1496,7 +1496,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemInHand, hand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2739,6 +2820,7 @@ public class ServerGamePacketListenerImpl +@@ -2746,6 +2827,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 @@ -1504,7 +1504,7 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 packet.dispatch( new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand hand, ServerGamePacketListenerImpl.EntityInteraction entityInteraction, PlayerInteractEntityEvent event) { // CraftBukkit -@@ -2751,6 +2833,8 @@ public class ServerGamePacketListenerImpl +@@ -2758,6 +2840,8 @@ public class ServerGamePacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -1514,10 +1514,10 @@ index f5a36446bc1fd0f5fbbfccb5d331b916d466ea55..1a9664a3b00dcb8171145c3bb3f3f704 if ((target instanceof Bucketable && target instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { target.resendPossiblyDesyncedEntityData(ServerGamePacketListenerImpl.this.player); // Paper - The entire mob gets deleted, so resend it diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index c3c85970a5d4bf85fa138a90a33a69f0336334a8..634933a6c98a0043cfe3ff4122dfc53e3c20a192 100644 +index e802cecf30a2bfa4390ca70c45a9840032c8c046..7401200f6a11bf552d128d833f25d825f93f57c9 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -318,7 +318,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -320,7 +320,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, ServerLoginPacketListenerImpl.LOGGER.warn("Failed to verify username but will let them in anyway!"); ServerLoginPacketListenerImpl.this.startClientVerification(ServerLoginPacketListenerImpl.this.createOfflineProfile(string1)); // Spigot } else { @@ -1527,7 +1527,7 @@ index c3c85970a5d4bf85fa138a90a33a69f0336334a8..634933a6c98a0043cfe3ff4122dfc53e } } catch (AuthenticationUnavailableException var4) { diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 61d7d50d2a2e566d2f955b22c95908c6e4ef5274..b4f2b794ca0c6e04da0355e02c19493c892ebccf 100644 +index ef533e2038fa110f3ce0936290023d54c0a98471..6ae663ce0b88f1c91425a67f2c765eecf49cdef7 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -407,6 +407,7 @@ public abstract class PlayerList { @@ -1555,7 +1555,7 @@ index 61d7d50d2a2e566d2f955b22c95908c6e4ef5274..b4f2b794ca0c6e04da0355e02c19493c event.disallow(org.bukkit.event.player.PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } } -@@ -982,6 +984,20 @@ public abstract class PlayerList { +@@ -988,6 +990,20 @@ public abstract class PlayerList { } } @@ -1576,7 +1576,7 @@ index 61d7d50d2a2e566d2f955b22c95908c6e4ef5274..b4f2b794ca0c6e04da0355e02c19493c public void broadcastAll(Packet packet, ResourceKey dimension) { for (ServerPlayer serverPlayer : this.players) { if (serverPlayer.level().dimension() == dimension) { -@@ -1065,6 +1081,7 @@ public abstract class PlayerList { +@@ -1071,6 +1087,7 @@ public abstract class PlayerList { } else { b = (byte)(24 + permLevel); } @@ -1584,7 +1584,7 @@ index 61d7d50d2a2e566d2f955b22c95908c6e4ef5274..b4f2b794ca0c6e04da0355e02c19493c player.connection.send(new ClientboundEntityEventPacket(player, b)); } -@@ -1073,6 +1090,27 @@ public abstract class PlayerList { +@@ -1079,6 +1096,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper - Add sendOpLevel API @@ -1877,7 +1877,7 @@ index 1fc9e1ad541c46124183a401b2a7d99aea69cecf..881271f0bc77a8a8a7d31daad9a8188b } diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab7152014edf 100644 +index 22af2c4996601847f2bbe9d6fef2fc4bd82725fc..1ee098b10548de763f7df0c494876fced442cf92 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java @@ -134,7 +134,7 @@ import net.minecraft.world.scores.Team; @@ -1968,7 +1968,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 this.onBelowWorld(); } } -@@ -1841,7 +1873,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1842,7 +1874,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean fireImmune() { @@ -1977,7 +1977,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 } public boolean causeFallDamage(float fallDistance, float multiplier, DamageSource source) { -@@ -1910,7 +1942,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1911,7 +1943,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return this.isInWater() || flag; } @@ -1986,7 +1986,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 if (this.getVehicle() instanceof AbstractBoat abstractBoat && !abstractBoat.isUnderWater()) { this.wasTouchingWater = false; } else if (this.updateFluidHeightAndDoFluidPushing(FluidTags.WATER, 0.014)) { -@@ -2546,6 +2578,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2547,6 +2579,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess compound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -2000,7 +2000,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 return compound; } catch (Throwable var9) { CrashReport crashReport = CrashReport.forThrowable(var9, "Saving entity NBT"); -@@ -2695,6 +2734,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2696,6 +2735,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess freezeLocked = compound.getBoolean("Paper.FreezeLock"); } // Paper end @@ -2014,7 +2014,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 } catch (Throwable var17) { CrashReport crashReport = CrashReport.forThrowable(var17, "Loading entity NBT"); CrashReportCategory crashReportCategory = crashReport.addCategory("Entity being loaded"); -@@ -2941,6 +2987,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2942,6 +2988,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (this.isAlive() && this instanceof Leashable leashable) { if (leashable.getLeashHolder() == player) { if (!this.level().isClientSide()) { @@ -2022,7 +2022,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = org.bukkit.craftbukkit.event.CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.hasInfiniteMaterials()); -@@ -3147,6 +3194,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3148,6 +3195,13 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess this.passengers = ImmutableList.copyOf(list); } @@ -2036,7 +2036,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3188,6 +3242,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3189,6 +3243,14 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // CraftBukkit end @@ -2051,7 +2051,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 if (this.passengers.size() == 1 && this.passengers.get(0) == passenger) { this.passengers = ImmutableList.of(); } else { -@@ -3266,15 +3328,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3267,15 +3329,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2071,7 +2071,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 } } } -@@ -3476,7 +3541,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3477,7 +3542,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public int getMaxAirSupply() { @@ -2080,7 +2080,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 } public int getAirSupply() { -@@ -3964,7 +4029,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -3965,7 +4030,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end public boolean canUsePortal(boolean allowPassengers) { @@ -2089,7 +2089,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 } public boolean canTeleport(Level fromLevel, Level toLevel) { -@@ -4501,6 +4566,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4502,6 +4567,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return Mth.lerp(partialTick, this.yRotO, this.yRot); } @@ -2102,7 +2102,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 // Paper start - optimise collisions public boolean updateFluidHeightAndDoFluidPushing(final TagKey fluid, final double flowScale) { if (this.touchingUnloadedChunk()) { -@@ -4909,7 +4980,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -4910,7 +4981,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public float maxUpStep() { @@ -2111,7 +2111,7 @@ index 36f5c28fa2fb3ba2cb5a4b2614c6b8d934659892..3f97182bc9ef86476c25deb3106dab71 } public void onExplosionHit(@Nullable Entity entity) { -@@ -5107,4 +5178,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5108,4 +5179,44 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return ((ServerLevel) this.level).isPositionEntityTicking(this.blockPosition()); } // Paper end - Expose entity id counter @@ -2298,7 +2298,7 @@ index efee812785240c1ab1fd47514cfb236a3548f9cf..b982d4b7bdf39fcaf5f22cc889467d7b protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d5a26f3f3 100644 +index 8f144c36b9fe1f5380459ae869f5a61f629b0d39..8c56af2500f05b74e94c56faf75d186f0d383390 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -248,9 +248,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -2446,7 +2446,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d EntityPotionEffectEvent event = CraftEventFactory.callEntityPotionEffectChangeEvent(this, effect, null, cause, EntityPotionEffectEvent.Action.CLEARED); if (event.isCancelled()) { continue; -@@ -1378,6 +1412,24 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1375,6 +1409,24 @@ public abstract class LivingEntity extends Entity implements Attackable { this.stopSleeping(); } @@ -2471,7 +2471,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d this.noActionTime = 0; if (amount < 0.0F) { amount = 0.0F; -@@ -1542,11 +1594,11 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1539,11 +1591,11 @@ public abstract class LivingEntity extends Entity implements Attackable { protected Player resolvePlayerResponsibleForDamage(DamageSource damageSource) { Entity entity = damageSource.getEntity(); if (entity instanceof Player player) { @@ -2485,7 +2485,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d if (wolf.getOwner() instanceof Player player1) { this.lastHurtByPlayer = player1; } else { -@@ -1600,6 +1652,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1597,6 +1649,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -2504,7 +2504,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d final org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; final EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemStack == null); -@@ -1765,7 +1829,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1762,7 +1826,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (this.level() instanceof ServerLevel serverLevel) { boolean var6 = false; if (this.dead && entitySource instanceof WitherBoss) { // Paper @@ -2513,7 +2513,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d BlockPos blockPos = this.blockPosition(); BlockState blockState = Blocks.WITHER_ROSE.defaultBlockState(); if (this.level().getBlockState(blockPos).isAir() && blockState.canSurvive(this.level(), blockPos)) { -@@ -1796,6 +1860,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1793,6 +1857,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this.lastHurtByPlayerTime > 0; this.dropEquipment(level); // CraftBukkit - from below if (this.shouldDropLoot() && level.getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -2521,7 +2521,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d this.dropFromLootTable(level, damageSource, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1804,6 +1869,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1801,6 +1866,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(level, damageSource, flag); this.clearEquipmentSlots = prev; // Paper @@ -2637,7 +2637,7 @@ index 10d1d56fdf8ba1c86899077db7e98b96dd7ebdb6..8728aba69ac24b52e6221ea2ddd8fc6d return slot != EquipmentSlot.HEAD && slot != EquipmentSlot.MAINHAND && slot != EquipmentSlot.OFFHAND ? SlotAccess.forEquipmentSlot(entity, slot, stack -> stack.isEmpty() || entity.getEquipmentSlotForItem(stack) == slot) diff --git a/net/minecraft/world/entity/Mob.java b/net/minecraft/world/entity/Mob.java -index 1b74114d0833eb9ca2c854122727d4bf76a11071..7b8804844ab5636323bc8d136c775f1e9591e89c 100644 +index b66e4061d5248961f385691d0db95fb8a22f888f..7b8804844ab5636323bc8d136c775f1e9591e89c 100644 --- a/net/minecraft/world/entity/Mob.java +++ b/net/minecraft/world/entity/Mob.java @@ -143,13 +143,14 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab @@ -2665,14 +2665,14 @@ index 1b74114d0833eb9ca2c854122727d4bf76a11071..7b8804844ab5636323bc8d136c775f1e this.target = target; return true; // CraftBukkit end -@@ -333,7 +335,28 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -333,8 +335,29 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab this.resetAmbientSoundTime(); this.playAmbientSound(); } + + incrementTicksSinceLastInteraction(); // Purpur - Entity lifespan -+ } -+ + } + + // Purpur start - Entity lifespan + private void incrementTicksSinceLastInteraction() { + ++this.ticksSinceLastInteraction; @@ -2689,11 +2689,12 @@ index 1b74114d0833eb9ca2c854122727d4bf76a11071..7b8804844ab5636323bc8d136c775f1e + if (this.ticksSinceLastInteraction > this.level().purpurConfig.entityLifeSpan) { + this.discard(org.bukkit.event.entity.EntityRemoveEvent.Cause.DISCARD); + } - } ++ } + // Purpur end - Entity lifespan - ++ @Override protected void playHurtSound(DamageSource source) { + this.resetAmbientSoundTime(); @@ -482,6 +505,7 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab compound.putBoolean("NoAI", this.isNoAi()); } @@ -2749,7 +2750,7 @@ index 1b74114d0833eb9ca2c854122727d4bf76a11071..7b8804844ab5636323bc8d136c775f1e return flag; } -@@ -1606,24 +1636,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1606,26 +1636,8 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab // Gale end - JettPack - optimize sun burn tick - cache eye blockpos public boolean isSunBurnTick() { @@ -2766,7 +2767,9 @@ index 1b74114d0833eb9ca2c854122727d4bf76a11071..7b8804844ab5636323bc8d136c775f1e - if (lightLevelDependentMagicValue <= 0.5F) return false; - if (this.random.nextFloat() * 30.0F >= (lightLevelDependentMagicValue - 0.4F) * 2.0F) return false; - // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos +- - boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; +- - return !flag && this.level().canSeeSky(this.cached_eye_blockpos); // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos - } - @@ -2776,7 +2779,7 @@ index 1b74114d0833eb9ca2c854122727d4bf76a11071..7b8804844ab5636323bc8d136c775f1e } @Override -@@ -1679,4 +1693,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab +@@ -1681,4 +1693,58 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Leashab public float[] getArmorDropChances() { return this.armorDropChances; } @@ -3257,10 +3260,10 @@ index 066faa704338c573472381e1ebd063e0d52aaaa4..1f96fd5085bacb4c584576c7cb9f51e7 // Paper end - optimise POI access if (path != null && path.canReach()) { diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 05c664732adfca7d18bfcbebae9bb455f001aa93..6f96551ba91da214054b89a255254ca597977cc0 100644 +index d9318a5a9eb3de89f48efa23b944c6d9e2ba37d1..135e19e921c9592cec83f6f940f2abe47757fbb8 100644 --- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -@@ -29,6 +29,13 @@ public class SecondaryPoiSensor extends Sensor { +@@ -30,6 +30,13 @@ public class SecondaryPoiSensor extends Sensor { return; } // Gale end - Lithium - skip secondary POI sensor if absent @@ -3274,7 +3277,7 @@ index 05c664732adfca7d18bfcbebae9bb455f001aa93..6f96551ba91da214054b89a255254ca5 ResourceKey resourceKey = level.dimension(); BlockPos blockPos = entity.blockPosition(); List list = Lists.newArrayList(); -@@ -45,7 +52,7 @@ public class SecondaryPoiSensor extends Sensor { +@@ -46,7 +53,7 @@ public class SecondaryPoiSensor extends Sensor { } } @@ -6724,7 +6727,7 @@ index 77691e10f7c511eca4384f2974e538d78d55c2ca..0ca35514a920dddf230d749bc1a5fe15 this.getBrain().tick(level, this); TadpoleAi.updateActivity(this); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 35d492106506c28412fea5c59c7b67c809ce231c..7107cc2462e7d33bca413a1b051822cc1bd61bfa 100644 +index dde7f05b8664d9a60edc716a370917d6cab03c18..35d1b99b873d9f8c9aa2a1178a449a8625b18406 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java @@ -109,6 +109,44 @@ public class Goat extends Animal { @@ -6780,7 +6783,7 @@ index 35d492106506c28412fea5c59c7b67c809ce231c..7107cc2462e7d33bca413a1b051822cc if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish this.getBrain().tick(level, this); GoatAi.updateActivity(this); -@@ -388,6 +427,7 @@ public class Goat extends Animal { +@@ -387,6 +426,7 @@ public class Goat extends Animal { // Paper start - Goat ram API public void ram(net.minecraft.world.entity.LivingEntity entity) { @@ -8140,7 +8143,7 @@ index 5b905a4d49c44b04d5795c2bf297f3c69d183d7c..b6429a2bbb6fc1e08610ab20e50f8f04 } } diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java -index 45c152856c46d11f3bd790a01fac89a7c3b68af1..88f55f9ea0a98a07ba8277b4b43f6957e6f16283 100644 +index 8e450c9d0111c0ce44feb386cf8b2715e407bf25..bbd3253dc6ab09f166447b163b19730244ff7443 100644 --- a/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java @@ -52,6 +52,12 @@ public class ItemEntity extends Entity implements TraceableEntity { @@ -8156,7 +8159,7 @@ index 45c152856c46d11f3bd790a01fac89a7c3b68af1..88f55f9ea0a98a07ba8277b4b43f6957 public ItemEntity(EntityType entityType, Level level) { super(entityType, level); -@@ -363,7 +369,16 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -365,7 +371,16 @@ public class ItemEntity extends Entity implements TraceableEntity { @Override public final boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { @@ -8174,7 +8177,7 @@ index 45c152856c46d11f3bd790a01fac89a7c3b68af1..88f55f9ea0a98a07ba8277b4b43f6957 return false; } else if (!level.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING) && damageSource.getEntity() instanceof Mob) { return false; -@@ -565,6 +580,12 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -567,6 +582,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public void setItem(ItemStack stack) { this.getEntityData().set(DATA_ITEM, stack); this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate @@ -8880,7 +8883,7 @@ index 4585b7c867685f8419c4d2b5b90af5946d337f90..358021a6eb936ac43e29c7c2c92c71e9 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.3F).add(Attributes.ATTACK_DAMAGE, 8.0).add(Attributes.MAX_HEALTH, 80.0); } diff --git a/net/minecraft/world/entity/monster/EnderMan.java b/net/minecraft/world/entity/monster/EnderMan.java -index c7a77b16ba032eb24b070fd6a5f0f824b3cbcc1a..56ec8cbde61c337672972d6ade3dafbb9aed8473 100644 +index 00c0d2432b4a0e46f85f1f422772e6c43ef5222c..c7897532163d4fdf5a82982f7d24a47dd61e3dfa 100644 --- a/net/minecraft/world/entity/monster/EnderMan.java +++ b/net/minecraft/world/entity/monster/EnderMan.java @@ -87,12 +87,45 @@ public class EnderMan extends Monster implements NeutralMob { @@ -8966,7 +8969,7 @@ index c7a77b16ba032eb24b070fd6a5f0f824b3cbcc1a..56ec8cbde61c337672972d6ade3dafbb float lightLevelDependentMagicValue = this.getLightLevelDependentMagicValue(); if (lightLevelDependentMagicValue > 0.5F && level.canSeeSky(this.blockPosition()) -@@ -392,6 +426,8 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -393,6 +427,8 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurtServer(ServerLevel level, DamageSource damageSource, float amount) { if (this.isInvulnerableTo(level, damageSource)) { return false; @@ -8975,7 +8978,7 @@ index c7a77b16ba032eb24b070fd6a5f0f824b3cbcc1a..56ec8cbde61c337672972d6ade3dafbb } else { boolean flag = damageSource.getDirectEntity() instanceof ThrownPotion; if (!damageSource.is(DamageTypeTags.IS_PROJECTILE) && !flag) { -@@ -404,6 +440,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -405,6 +441,7 @@ public class EnderMan extends Monster implements NeutralMob { } else { boolean flag1 = flag && this.hurtWithCleanWater(level, damageSource, (ThrownPotion)damageSource.getDirectEntity(), amount); @@ -8983,7 +8986,7 @@ index c7a77b16ba032eb24b070fd6a5f0f824b3cbcc1a..56ec8cbde61c337672972d6ade3dafbb if (this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.INDIRECT)) { // Paper - EndermanEscapeEvent for (int i = 0; i < 64; i++) { if (this.teleport()) { -@@ -447,7 +484,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -448,7 +485,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean requiresCustomPersistence() { @@ -8992,7 +8995,7 @@ index c7a77b16ba032eb24b070fd6a5f0f824b3cbcc1a..56ec8cbde61c337672972d6ade3dafbb } static class EndermanFreezeWhenLookedAt extends Goal { -@@ -491,8 +528,9 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -492,8 +529,9 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { @@ -9003,7 +9006,7 @@ index c7a77b16ba032eb24b070fd6a5f0f824b3cbcc1a..56ec8cbde61c337672972d6ade3dafbb && this.enderman.getRandom().nextInt(reducedTickDelay(2000)) == 0; } -@@ -640,8 +678,9 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -641,8 +679,9 @@ public class EnderMan extends Monster implements NeutralMob { @Override public boolean canUse() { @@ -12586,7 +12589,7 @@ index ef2afb17a22a703470e13d12c989a685e72f0ab8..80a01b8c6dfb0f3bcc6872cdf38b48f7 blockPos = blockPos1; break; diff --git a/net/minecraft/world/entity/player/Player.java b/net/minecraft/world/entity/player/Player.java -index cf1e036b068531716ab99ecdcda45c17cdfe1c22..35afbef30b9f3b7767db3fe3d552b93fa542343f 100644 +index baab70c95fdcb230ecaef1174a8d5e298826462b..37cccba70cf4815b19fcf9f1526cdc25c2e81407 100644 --- a/net/minecraft/world/entity/player/Player.java +++ b/net/minecraft/world/entity/player/Player.java @@ -201,11 +201,22 @@ public abstract class Player extends LivingEntity { @@ -12791,10 +12794,10 @@ index 4880db97135d54fa72f64c108b2bd4ded096438b..bc102b049047d6e2a1d29e10f92cdf5a protected double getDefaultGravity() { return 0.06; diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index 4e9ca9cc3600dc8bbd4f386cf4e4c426d1664904..bd93ee97982038789114f17ee369208fc6413796 100644 +index 168f50523b00ab8d43cbcc5ea5675a840762be11..a33641dd6e0839fd1b557d8583fe8bb929fcc1cb 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -493,7 +493,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { +@@ -503,7 +503,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @Override public boolean mayInteract(ServerLevel level, BlockPos pos) { Entity owner = this.getOwner(); @@ -14491,7 +14494,7 @@ index 425fcc7872c6ebd2156be8bea1d516ce7aeeb280..8de482367f3d9d91048b7c85cbaefcda } diff --git a/net/minecraft/world/level/EntityGetter.java b/net/minecraft/world/level/EntityGetter.java -index e81195df621159da67136f020fa7a6d39d1ee5ed..f41e41d01aa42f3578ffb3bc888416e74d17cd1d 100644 +index 892a7c1eb1b321ca6d5ca709142e7feae1220815..7719bc8ff1fbbc67cdf15e1fec28dc9233cea207 100644 --- a/net/minecraft/world/level/EntityGetter.java +++ b/net/minecraft/world/level/EntityGetter.java @@ -185,7 +185,7 @@ public interface EntityGetter extends ca.spottedleaf.moonrise.patches.chunk_syst @@ -14504,7 +14507,7 @@ index e81195df621159da67136f020fa7a6d39d1ee5ed..f41e41d01aa42f3578ffb3bc888416e7 if (distance < 0.0 || d < distance * distance) { return true; diff --git a/net/minecraft/world/level/Level.java b/net/minecraft/world/level/Level.java -index d732a021351d80210e6411565c7a5e9d1b277f0f..78654e7ae26c0b2b2512f4e29a331e2ead2d6916 100644 +index b831f189bcee62a41a16017c2bb958aeee728984..98cb62d4b79c0918abe139f198c5be118b9133c4 100644 --- a/net/minecraft/world/level/Level.java +++ b/net/minecraft/world/level/Level.java @@ -174,6 +174,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable, ca.spottedl diff --git a/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch b/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch index 65aec917..5bb79d6d 100644 --- a/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch +++ b/leaf-server/minecraft-patches/features/0007-Fix-Pufferfish-and-Purpur-patches.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix Pufferfish and Purpur patches diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 73d052596310098abe69b247f45cdb118297f1ee..b12d0833e1499f97a02b7fedc398fcfd9c391e08 100644 +index 5fb7a76faf72f7d91122e5bf01c51853164a73c0..011b1a8c13d41c6f1d54d9247b7e61a548f43382 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -278,7 +278,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function threadFunction) { ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system -@@ -1256,9 +1256,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop byteAllowed) { @@ -91,10 +91,10 @@ index 1a9664a3b00dcb8171145c3bb3f3f704272aaa73..ec6276f3335fd963c8554dbc43adf5bd 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; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 3f97182bc9ef86476c25deb3106dab7152014edf..539cd1fe6ff15a4ebcbd65f41d8711d1f4ce5b97 100644 +index 1ee098b10548de763f7df0c494876fced442cf92..df0b6d21a7d629ba759e322d3e886fbc0cc53173 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -536,23 +536,35 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -536,23 +536,37 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } // Purpur end - Add canSaveToDisk to Entity @@ -127,7 +127,9 @@ index 3f97182bc9ef86476c25deb3106dab7152014edf..539cd1fe6ff15a4ebcbd65f41d8711d1 + if (lightLevelDependentMagicValue <= 0.5F) return false; + if (this.random.nextFloat() * 30.0F >= (lightLevelDependentMagicValue - 0.4F) * 2.0F) return false; + // Gale end - JettPack - optimize sun burn tick - optimizations and cache eye blockpos ++ + boolean flag = this.isInWaterRainOrBubble() || this.isInPowderSnow || this.wasInPowderSnow; ++ + return !flag && this.level().canSeeSky(this.cached_eye_blockpos); // Gale - JettPack - optimize sun burn tick - optimizations and cache eye blockpos } @@ -140,7 +142,7 @@ index 3f97182bc9ef86476c25deb3106dab7152014edf..539cd1fe6ff15a4ebcbd65f41d8711d1 public Entity(EntityType entityType, Level level) { this.type = entityType; diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index 8728aba69ac24b52e6221ea2ddd8fc6d5a26f3f3..9f36d063168c262fec7e69a96bad375b4eaff797 100644 +index 8c56af2500f05b74e94c56faf75d186f0d383390..4fb6102c8ef930de80356c66397ca2167b1d0174 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java @@ -1024,13 +1024,13 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -178,10 +180,10 @@ index 7b8804844ab5636323bc8d136c775f1e9591e89c..14d9dceacc82cc6c085dab8f52e59a31 // Purpur - implemented in Entity - API for any mob to burn daylight return super.isSunBurnTick(); diff --git a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -index 6f96551ba91da214054b89a255254ca597977cc0..3d5ac6976efd66b29657749f83d03ba77ebea2eb 100644 +index 135e19e921c9592cec83f6f940f2abe47757fbb8..9fa0c2f09ddfa17a778d4ea8d1ec9314f11a6efd 100644 --- a/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java +++ b/net/minecraft/world/entity/ai/sensing/SecondaryPoiSensor.java -@@ -22,20 +22,16 @@ public class SecondaryPoiSensor extends Sensor { +@@ -22,21 +22,17 @@ public class SecondaryPoiSensor extends Sensor { @Override protected void doTick(ServerLevel level, Villager entity) { @@ -190,6 +192,7 @@ index 6f96551ba91da214054b89a255254ca597977cc0..3d5ac6976efd66b29657749f83d03ba7 + // Purpur: Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off + // Gale: Lithium - skip secondary POI sensor if absent var secondaryPoi = entity.getVillagerData().getProfession().secondaryPoi(); +- - if (secondaryPoi.isEmpty()) { - entity.getBrain().eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); - return; @@ -198,6 +201,7 @@ index 6f96551ba91da214054b89a255254ca597977cc0..3d5ac6976efd66b29657749f83d03ba7 - // Purpur start - Option for Villager Clerics to farm Nether Wart - make sure clerics don't wander to soul sand when the option is off Brain brain = entity.getBrain(); - if (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC) { ++ + if (secondaryPoi.isEmpty() || (!level.purpurConfig.villagerClericsFarmWarts && entity.getVillagerData().getProfession() == net.minecraft.world.entity.npc.VillagerProfession.CLERIC)) { brain.eraseMemory(MemoryModuleType.SECONDARY_JOB_SITE); return; @@ -264,7 +268,7 @@ index 0ca35514a920dddf230d749bc1a5fe15f1c7940a..ec9db1c12426db80dbf02d704e6c7ec8 TadpoleAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/animal/goat/Goat.java b/net/minecraft/world/entity/animal/goat/Goat.java -index 7107cc2462e7d33bca413a1b051822cc1bd61bfa..a1cdb620368fe7f6eb95734af903d66257156b26 100644 +index 35d1b99b873d9f8c9aa2a1178a449a8625b18406..9b3ff19b3ce1a4780cab01bae6561d45e60fdddc 100644 --- a/net/minecraft/world/entity/animal/goat/Goat.java +++ b/net/minecraft/world/entity/animal/goat/Goat.java @@ -223,8 +223,7 @@ public class Goat extends Animal { @@ -306,11 +310,11 @@ index 242b2545b6082f567d0bb7900ef06ded3c0fdcdd..fe6eb99ea3d2deda317efe90ecb0987b PiglinAi.updateActivity(this); super.customServerAiStep(level); diff --git a/net/minecraft/world/entity/projectile/Projectile.java b/net/minecraft/world/entity/projectile/Projectile.java -index bd93ee97982038789114f17ee369208fc6413796..aa201bd227dffb7442ec62b86b2435f025be732d 100644 +index a33641dd6e0839fd1b557d8583fe8bb929fcc1cb..d5ef2ec5e15b6d250aafb0b8282b350c03f8ef2c 100644 --- a/net/minecraft/world/entity/projectile/Projectile.java +++ b/net/minecraft/world/entity/projectile/Projectile.java -@@ -74,7 +74,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { - int maxChunkLoadsPerProjectile = maxProjectileChunkLoadsConfig.perProjectile.max; +@@ -81,7 +81,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { + if (maxChunkLoadsPerProjectile >= 0 && this.chunksLoadedByProjectile >= maxChunkLoadsPerProjectile) { if (maxProjectileChunkLoadsConfig.perProjectile.removeFromWorldAfterReachLimit) { - this.discard(); diff --git a/leaf-server/minecraft-patches/features/0008-Purpur-Configurable-server-mod-name.patch b/leaf-server/minecraft-patches/features/0008-Purpur-Configurable-server-mod-name.patch index d77e53ed..3b16a96c 100644 --- a/leaf-server/minecraft-patches/features/0008-Purpur-Configurable-server-mod-name.patch +++ b/leaf-server/minecraft-patches/features/0008-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 66418672e548a022980a403de912e05984137f37..919dc4dddea64f97161b5e0d417dc06875f8318c 100644 +index 011b1a8c13d41c6f1d54d9247b7e61a548f43382..047a09cf4a2c32e714aacedeccb0928ef2c7dfa9 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1855,7 +1855,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 ec6276f3335fd963c8554dbc43adf5bdfe3d2412..c58a231183655e2910748a5ecdf3b2ce0d7b00a1 100644 +index e3fa94538ec5756e39ca55ba2216971d499215cc..9706e382ad2b597a04ff637881c3b5d32f26d281 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1998,8 +1998,13 @@ public class ServerGamePacketListenerImpl +@@ -2005,8 +2005,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/0014-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch b/leaf-server/minecraft-patches/features/0014-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch index 274bae56..c0ecd37a 100644 --- a/leaf-server/minecraft-patches/features/0014-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch +++ b/leaf-server/minecraft-patches/features/0014-KeYi-Add-an-option-for-spigot-item-merging-mechanism.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/KeYiMC/KeYi diff --git a/net/minecraft/world/entity/item/ItemEntity.java b/net/minecraft/world/entity/item/ItemEntity.java -index 88f55f9ea0a98a07ba8277b4b43f6957e6f16283..0e21c644d62597cf3425c8717ab1e70c766e22f2 100644 +index bbd3253dc6ab09f166447b163b19730244ff7443..6436afc0e59a8efdc9551fdde4d03d245548f3ef 100644 --- a/net/minecraft/world/entity/item/ItemEntity.java +++ b/net/minecraft/world/entity/item/ItemEntity.java -@@ -313,7 +313,7 @@ public class ItemEntity extends Entity implements TraceableEntity { +@@ -315,7 +315,7 @@ public class ItemEntity extends Entity implements TraceableEntity { ItemStack item = this.getItem(); ItemStack item1 = itemEntity.getItem(); if (Objects.equals(this.target, itemEntity.target) && areMergable(item, item1)) { diff --git a/leaf-server/minecraft-patches/features/0020-Leaves-Protocol-Core.patch b/leaf-server/minecraft-patches/features/0020-Leaves-Protocol-Core.patch index 1c19db9d..5d64f9da 100644 --- a/leaf-server/minecraft-patches/features/0020-Leaves-Protocol-Core.patch +++ b/leaf-server/minecraft-patches/features/0020-Leaves-Protocol-Core.patch @@ -9,7 +9,7 @@ and change store way to sql maybe? Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves -Commit: 41476d86922416c45f703df2871890831fc42bb5 +Commit: 0O0oO00o0oO diff --git a/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java b/net/minecraft/network/protocol/common/custom/CustomPacketPayload.java index fb263fa1f30a7dfcb7ec2656abfb38e5fe88eac9..96ec0a0133ec244a5eb79dfcb34e7f9de22ea0f4 100644 @@ -54,10 +54,10 @@ index ea8cfa76093c70a44d065c1f80adaa9127fe4e07..7435e2c3f0defe98cbaa488219974887 assert isValidPath(path); diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index e31c753a800070cffafa76bde044dee146480e80..42845c03fc94a589bfad6a2ae1e5e7f8d577ef16 100644 +index 047a09cf4a2c32e714aacedeccb0928ef2c7dfa9..dddbb18992348fb7e8a6552423d134809cd7fdbc 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1753,6 +1753,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop= resultLimit) { return players; diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 42845c03fc94a589bfad6a2ae1e5e7f8d577ef16..8499ee1505c0390f98d1555d47a671541727dbf8 100644 +index dddbb18992348fb7e8a6552423d134809cd7fdbc..0e6e71030e3fd1335fff796b861524a48cb0a507 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1656,7 +1656,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop !playerList.isOp(player.getGameProfile())) .map(player -> player.getGameProfile().getName()), diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index a13aa7b896a998975d2ee14eafb86a85db988e69..bf364e3fad2823400ec671bc632ba50751a3f473 100644 +index bb38adebfcf2e3c52971a79d8363a45f067727a9..69a807ccda1ec5334316863604aa3192065d16a1 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -216,6 +216,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @@ -184,7 +184,7 @@ index a13aa7b896a998975d2ee14eafb86a85db988e69..bf364e3fad2823400ec671bc632ba507 } // Paper start -@@ -2669,6 +2671,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2670,6 +2672,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe // ServerLevel.this.getChunkSource().addEntity(entity); // Paper - ignore and warn about illegal addEntity calls instead of crashing server; moved down below valid=true if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.add(serverPlayer); @@ -196,7 +196,7 @@ index a13aa7b896a998975d2ee14eafb86a85db988e69..bf364e3fad2823400ec671bc632ba507 ServerLevel.this.updateSleepingPlayerList(); } -@@ -2739,6 +2746,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2740,6 +2747,11 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe ServerLevel.this.getChunkSource().removeEntity(entity); if (entity instanceof ServerPlayer serverPlayer) { ServerLevel.this.players.remove(serverPlayer); @@ -209,7 +209,7 @@ index a13aa7b896a998975d2ee14eafb86a85db988e69..bf364e3fad2823400ec671bc632ba507 } diff --git a/net/minecraft/server/level/ServerPlayer.java b/net/minecraft/server/level/ServerPlayer.java -index 00c7afd995d179efe1c96fb6daf342b6b357fa65..2da6609ab8398c5c537e9065b3a82693f43200e2 100644 +index 622257dbbe572de33e15abef9055016268730261..dfb4524d80f642eff1b146dd2fbfa07f21d844c6 100644 --- a/net/minecraft/server/level/ServerPlayer.java +++ b/net/minecraft/server/level/ServerPlayer.java @@ -195,7 +195,7 @@ public class ServerPlayer extends Player implements ca.spottedleaf.moonrise.patc @@ -222,7 +222,7 @@ index 00c7afd995d179efe1c96fb6daf342b6b357fa65..2da6609ab8398c5c537e9065b3a82693 private final ServerStatsCounter stats; private float lastRecordedHealthAndAbsorption = Float.MIN_VALUE; diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 823a7c330ec7f0287b4f7a83e2c719a45cbedf6e..220d415ecd20030c930d42c018659d6d61ee1a9e 100644 +index 03bf654aaf1b4f7df9608ee1ad99230f7aa507f9..8893be00aa731d26a41b5e6b3996425eced33cc4 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -132,6 +132,7 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0025-Leaves-Disable-moved-wrongly-threshold.patch b/leaf-server/minecraft-patches/features/0025-Leaves-Disable-moved-wrongly-threshold.patch index f55c5e1f..7d7ebb5f 100644 --- a/leaf-server/minecraft-patches/features/0025-Leaves-Disable-moved-wrongly-threshold.patch +++ b/leaf-server/minecraft-patches/features/0025-Leaves-Disable-moved-wrongly-threshold.patch @@ -7,7 +7,7 @@ Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index ffb8d4c5b894e130d7e330459e9797356db2a262..52d0eec6588f395642df2cf6894a9461d05bf6a3 100644 +index 95768fcb1f0b480910a1ba4a3dc321b27e5b3782..5078887fc6056a0f3ef5acd5e052116107737e62 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -575,7 +575,7 @@ public class ServerGamePacketListenerImpl @@ -28,7 +28,7 @@ index ffb8d4c5b894e130d7e330459e9797356db2a262..52d0eec6588f395642df2cf6894a9461 flag2 = true; // Paper - diff on change, this should be moved wrongly LOGGER.warn("{} (vehicle of {}) moved wrongly! {}", rootVehicle.getName().getString(), this.player.getName().getString(), Math.sqrt(d7)); } -@@ -1450,7 +1450,7 @@ public class ServerGamePacketListenerImpl +@@ -1457,7 +1457,7 @@ public class ServerGamePacketListenerImpl 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 ffb8d4c5b894e130d7e330459e9797356db2a262..52d0eec6588f395642df2cf6894a9461 LOGGER.warn("{} moved too quickly! {},{},{}", this.player.getName().getString(), d3, d4, d5); } this.teleport(this.player.getX(), this.player.getY(), this.player.getZ(), this.player.getYRot(), this.player.getXRot()); -@@ -1516,7 +1516,8 @@ public class ServerGamePacketListenerImpl +@@ -1523,7 +1523,8 @@ public class ServerGamePacketListenerImpl d5 = d2 - this.player.getZ(); d7 = d3 * d3 + d4 * d4 + d5 * d5; boolean movedWrongly = false; // Paper - Add fail move event; rename diff --git a/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch b/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch index fa88cbcc..4b06e65c 100644 --- a/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch +++ b/leaf-server/minecraft-patches/features/0026-Petal-Async-Pathfinding.patch @@ -725,7 +725,7 @@ index d6d3c8f5e5dd4a8cab0d3fcc131c3a59f06130c6..add5b8b98e4d09617cbd4e7dd2710dc5 return false; } else if (pathentity.nodes.size() != this.nodes.size()) { diff --git a/net/minecraft/world/level/pathfinder/PathFinder.java b/net/minecraft/world/level/pathfinder/PathFinder.java -index d48057d387b6937a0194e5300eb1cb46dec2896b..9912ba3bc165dfbdd55fbf02dcec28dc2902b30a 100644 +index c2baadcdceb1df6a881d6f73aa4eb4dd264bcdfe..61912c67611ded5a8f34e0c55d3d3017f144f970 100644 --- a/net/minecraft/world/level/pathfinder/PathFinder.java +++ b/net/minecraft/world/level/pathfinder/PathFinder.java @@ -22,10 +22,18 @@ public class PathFinder { @@ -828,10 +828,10 @@ index d48057d387b6937a0194e5300eb1cb46dec2896b..9912ba3bc165dfbdd55fbf02dcec28dc for (int i2 = 0; i2 < neighbors; i2++) { Node node2 = this.neighbors[i2]; -@@ -124,6 +169,7 @@ public class PathFinder { +@@ -123,6 +168,7 @@ public class PathFinder { + best = path; } } - + //noinspection ConstantConditions // Kaiiju - petal - ignore this warning, we know that the above loop always runs at least once since positions is not empty return best; // Paper end - Perf: remove streams and optimize collection diff --git a/leaf-server/minecraft-patches/features/0027-Petal-reduce-work-done-by-game-event-system.patch b/leaf-server/minecraft-patches/features/0027-Petal-reduce-work-done-by-game-event-system.patch index 381b1056..21055c6b 100644 --- a/leaf-server/minecraft-patches/features/0027-Petal-reduce-work-done-by-game-event-system.patch +++ b/leaf-server/minecraft-patches/features/0027-Petal-reduce-work-done-by-game-event-system.patch @@ -38,7 +38,7 @@ index 1638eccef431fb68775af624110f1968f0c6dabd..62038854696bd946f58e0e8d26da0241 if (entity.getLastHurtByMob() instanceof ServerPlayer serverPlayer) { DamageSource damageSource = entity.getLastDamageSource() == null diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index a5f76c81dfb148fc184d137395d5961229cb799b..265e890557dd6557b327b6252dd3177fdd112777 100644 +index 95972e7d5e0357ff5884f1cb2f7596c5029f999d..290163335cf3967e2745442fd7d4d4fa16fb7bc0 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java @@ -79,7 +79,19 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @@ -71,7 +71,7 @@ index a5f76c81dfb148fc184d137395d5961229cb799b..265e890557dd6557b327b6252dd3177f for (Heightmap.Types types : Heightmap.Types.values()) { if (ChunkStatus.FULL.heightmapsAfter().contains(types)) { -@@ -268,10 +280,27 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -266,10 +278,27 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @Override public GameEventListenerRegistry getListenerRegistry(int sectionY) { @@ -103,7 +103,7 @@ index a5f76c81dfb148fc184d137395d5961229cb799b..265e890557dd6557b327b6252dd3177f } // Paper start - Perf: Reduce instructions and provide final method -@@ -611,7 +640,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -609,7 +638,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p } private void removeGameEventListenerRegistry(int sectionY) { diff --git a/leaf-server/minecraft-patches/features/0033-Linear-region-file-format.patch b/leaf-server/minecraft-patches/features/0033-Linear-region-file-format.patch index 8873ee56..b272de1c 100644 --- a/leaf-server/minecraft-patches/features/0033-Linear-region-file-format.patch +++ b/leaf-server/minecraft-patches/features/0033-Linear-region-file-format.patch @@ -28,10 +28,10 @@ index a814512fcfb85312474ae2c2c21443843bf57831..f80c75c561313625b694b433692aa429 public MoonriseRegionFileIO.RegionDataController.WriteData moonrise$startWrite( final int chunkX, final int chunkZ, final CompoundTag compound diff --git a/ca/spottedleaf/moonrise/patches/chunk_system/io/MoonriseRegionFileIO.java b/ca/spottedleaf/moonrise/patches/chunk_system/io/MoonriseRegionFileIO.java -index 1acea58838f057ab87efd103cbecb6f5aeaef393..48a6d8b534943393c26180fbf341b77bd2d5bc48 100644 +index 98fbc5c8044bd945d64569f13412a6e7e49a4e7f..395b69c70080933eb936b4eb537d5da842e8caac 100644 --- a/ca/spottedleaf/moonrise/patches/chunk_system/io/MoonriseRegionFileIO.java +++ b/ca/spottedleaf/moonrise/patches/chunk_system/io/MoonriseRegionFileIO.java -@@ -1462,7 +1462,7 @@ public final class MoonriseRegionFileIO { +@@ -1470,7 +1470,7 @@ public final class MoonriseRegionFileIO { public static interface IORunnable { @@ -52,10 +52,10 @@ index 51c126735ace8fdde89ad97b5cab62f244212db0..4046f0aaa153e00277bf14f009fbe14a + public void moonrise$write(final org.stupidcraft.linearpaper.region.IRegionFile regionFile) throws IOException; // LinearPaper } diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 8499ee1505c0390f98d1555d47a671541727dbf8..cb7df3a09bfaa1791450628095e9788f1d5da6fc 100644 +index 0e6e71030e3fd1335fff796b861524a48cb0a507..30747b30596208bc02dfb4a6c31f8afb5c1aba8e 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -941,10 +941,10 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function threadFunction) { ca.spottedleaf.dataconverter.minecraft.datatypes.MCTypeRegistry.init(); // Paper - rewrite data converter system -@@ -1680,6 +1681,18 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { for (final net.minecraft.world.entity.Entity entity : level.getEntities().getAll()) { if (entity.isRemoved()) { -@@ -1691,6 +1704,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { -@@ -2274,6 +2276,32 @@ public class ServerGamePacketListenerImpl +@@ -2281,6 +2283,32 @@ public class ServerGamePacketListenerImpl LOGGER.info("{} issued server command: {}", this.player.getScoreboardName(), prefixedCommand); } @@ -98,7 +98,7 @@ index 52d0eec6588f395642df2cf6894a9461d05bf6a3..2857e71ddb37f2a98c72df8cb439e2ea PlayerCommandPreprocessEvent event = new PlayerCommandPreprocessEvent(this.getCraftPlayer(), prefixedCommand, new LazyPlayerSet(this.server)); this.cserver.getPluginManager().callEvent(event); -@@ -2311,11 +2339,37 @@ public class ServerGamePacketListenerImpl +@@ -2318,11 +2346,37 @@ public class ServerGamePacketListenerImpl private void performSignedChatCommand(ServerboundChatCommandSignedPacket packet, LastSeenMessages lastSeenMessages) { // CraftBukkit start @@ -138,7 +138,7 @@ index 52d0eec6588f395642df2cf6894a9461d05bf6a3..2857e71ddb37f2a98c72df8cb439e2ea this.cserver.getPluginManager().callEvent(event); command = event.getMessage().substring(1); diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 65f943dbbe6e30f0a299fdbd73b94ca60d4f406c..7d7343d4e2c206daf77a61050f2f4c229dd042cd 100644 +index 831d1a60a5ed57d4f09b5ece6ffb50e061398cc0..0bb8c326a468e79a7f5a4f3395a3c2fe84352f47 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -667,6 +667,7 @@ public abstract class PlayerList { diff --git a/leaf-server/minecraft-patches/features/0045-Virtual-thread-for-chat-executor.patch b/leaf-server/minecraft-patches/features/0045-Virtual-thread-for-chat-executor.patch index 23dd4d7c..1c0e8141 100644 --- a/leaf-server/minecraft-patches/features/0045-Virtual-thread-for-chat-executor.patch +++ b/leaf-server/minecraft-patches/features/0045-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 d9d0a7dc0ccfa321c41dbdc51d0c3a7383a0f9fd..2b28fdd68db5b5cf67023410730871843f49248b 100644 +index 23af98932a9c1e6dc209a6ce40d52b5bd9ccfcc5..cc2bf337da1c240b82dc722970d6bbaf57331328 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -2680,7 +2680,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop shouldFilterMessageTo, @Nullable ServerPlayer sender, ChatType.Bound boundChatType, @Nullable Function unsignedFunction) { // Paper end boolean flag = this.verifyChatTrusted(message); @@ -150,7 +150,7 @@ index 7d7343d4e2c206daf77a61050f2f4c229dd042cd..6855076ef73bbfd23e75ba4ae8eaa0ea OutgoingChatMessage outgoingChatMessage = OutgoingChatMessage.create(message); boolean flag1 = false; -@@ -1534,6 +1534,7 @@ public abstract class PlayerList { +@@ -1540,6 +1540,7 @@ public abstract class PlayerList { } public boolean verifyChatTrusted(PlayerChatMessage message) { // Paper - private -> public diff --git a/leaf-server/minecraft-patches/features/0048-Cache-player-profileResult.patch b/leaf-server/minecraft-patches/features/0048-Cache-player-profileResult.patch index 2ec908c6..b0cc2bd2 100644 --- a/leaf-server/minecraft-patches/features/0048-Cache-player-profileResult.patch +++ b/leaf-server/minecraft-patches/features/0048-Cache-player-profileResult.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cache player profileResult diff --git a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 9081780cff9d97b0f4a93afade62f5ef0d448209..f2b9ba7eaa02d8da54bb5f4561cdf457400b2e6b 100644 +index 069477e524a28b20a0289221858bdc802704a890..595cfb31dd2c026ef9946429608c2c7497bf9de0 100644 --- a/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -71,6 +71,11 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -20,7 +20,7 @@ index 9081780cff9d97b0f4a93afade62f5ef0d448209..f2b9ba7eaa02d8da54bb5f4561cdf457 public ServerLoginPacketListenerImpl(MinecraftServer server, Connection connection, boolean transferred) { this.server = server; -@@ -302,9 +307,23 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, +@@ -304,9 +309,23 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, String string1 = Objects.requireNonNull(ServerLoginPacketListenerImpl.this.requestedUsername, "Player name not initialized"); try { diff --git a/leaf-server/minecraft-patches/features/0049-Matter-Secure-Seed.patch b/leaf-server/minecraft-patches/features/0049-Matter-Secure-Seed.patch index 5e53bd42..a955e3ec 100644 --- a/leaf-server/minecraft-patches/features/0049-Matter-Secure-Seed.patch +++ b/leaf-server/minecraft-patches/features/0049-Matter-Secure-Seed.patch @@ -36,10 +36,10 @@ index 5748658abf0b90812005ae9d426df92daf5532f0..4a0eed7d7645ed539857592d233214e9 this.get("generator-settings", property -> GsonHelper.parse(!property.isEmpty() ? property : "{}"), new JsonObject()), this.get("level-type", property -> property.toLowerCase(Locale.ROOT), WorldPresets.NORMAL.location().toString()) diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index f618d3cf32be10b9ca3833231e653975bcf56e4c..92e70e132a86930d9cd0db32f10e106427621c7d 100644 +index 90a8494840faa0e7f605c904c657a953be64b17d..4070a6eb52f6097e38c2d85c231d39ea3785cf46 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -697,6 +697,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -698,6 +698,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon } public ChunkGenerator getGenerator() { @@ -48,7 +48,7 @@ index f618d3cf32be10b9ca3833231e653975bcf56e4c..92e70e132a86930d9cd0db32f10e1064 } diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index bf364e3fad2823400ec671bc632ba50751a3f473..22b929d30938a26837b21511425c62fc1665a669 100644 +index 69a807ccda1ec5334316863604aa3192065d16a1..40b6b5e4a1f73ee447ff0ee192d5d8ba5045f286 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java @@ -633,6 +633,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe diff --git a/leaf-server/minecraft-patches/features/0054-Configurable-connection-message.patch b/leaf-server/minecraft-patches/features/0054-Configurable-connection-message.patch index 79f1d07a..a4f9c2c1 100644 --- a/leaf-server/minecraft-patches/features/0054-Configurable-connection-message.patch +++ b/leaf-server/minecraft-patches/features/0054-Configurable-connection-message.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Configurable connection message diff --git a/net/minecraft/server/players/PlayerList.java b/net/minecraft/server/players/PlayerList.java -index 6855076ef73bbfd23e75ba4ae8eaa0ea598c9d4e..3847df8a77d5ceece2541f4d459d0f61e3276c86 100644 +index fe9784751f4291ce100998bf15554d19745025ca..c69fcc9725738136341cc2e9d63b5e2ef11e1fe5 100644 --- a/net/minecraft/server/players/PlayerList.java +++ b/net/minecraft/server/players/PlayerList.java @@ -433,7 +433,7 @@ public abstract class PlayerList { @@ -35,7 +35,7 @@ index 6855076ef73bbfd23e75ba4ae8eaa0ea598c9d4e..3847df8a77d5ceece2541f4d459d0f61 this.cserver.getPluginManager().callEvent(playerQuitEvent); player.getBukkitEntity().disconnect(playerQuitEvent.getQuitMessage()); -@@ -1661,4 +1661,34 @@ public abstract class PlayerList { +@@ -1667,4 +1667,34 @@ public abstract class PlayerList { public boolean isAllowCommandsForAllPlayers() { return this.allowCommandsForAllPlayers; } diff --git a/leaf-server/minecraft-patches/features/0061-Remove-stream-in-BehaviorUtils.patch b/leaf-server/minecraft-patches/features/0061-Remove-stream-in-BehaviorUtils.patch index 53f486f0..a03455de 100644 --- a/leaf-server/minecraft-patches/features/0061-Remove-stream-in-BehaviorUtils.patch +++ b/leaf-server/minecraft-patches/features/0061-Remove-stream-in-BehaviorUtils.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Remove stream in BehaviorUtils diff --git a/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java b/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java -index 800bc29502ed46bd77cb04c0a79143898f109a48..a65d43087e46c77bc4fcb0617f256145bcbc203b 100644 +index e7f74b4f54069ffdf74f029639cbf0756f2db095..b5257eefa04e930b45ffd9d46f28e53026ad728f 100644 --- a/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java +++ b/net/minecraft/world/entity/ai/behavior/BehaviorUtils.java -@@ -109,10 +109,33 @@ public class BehaviorUtils { +@@ -110,10 +110,33 @@ public class BehaviorUtils { public static SectionPos findSectionClosestToVillage(ServerLevel serverLevel, SectionPos sectionPos, int radius) { int i = serverLevel.sectionsToVillage(sectionPos); diff --git a/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch b/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch index bcf7e1be..f318c13b 100644 --- a/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch +++ b/leaf-server/minecraft-patches/features/0066-Remove-stream-in-updateFluidOnEyes.patch @@ -46,10 +46,10 @@ index 6c7edbbf3935c40ccb78bee680ea75431718b9bd..a1b4dc70d555cce5e06c0298736d8b89 public String toString() { return "Reference{" + this.key + "=" + this.value + "}"; diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 034e10e912ab9b4b5435ad88c0cd4183c8b5c1a1..1a0b7148c48a767b3a33f6377ba7d26239cda0c2 100644 +index 02e13e84da7424598b329cf34b7203658f1ff0af..b79e27f03f67ecc01547163c053cdb96c16ce1bb 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -1984,7 +1984,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -1987,7 +1987,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess FluidState fluidState = this.level().getFluidState(blockPos); double d = blockPos.getY() + fluidState.getHeight(this.level(), blockPos); if (d > eyeY) { diff --git a/leaf-server/minecraft-patches/features/0078-Configurable-player-knockback-zombie.patch b/leaf-server/minecraft-patches/features/0078-Configurable-player-knockback-zombie.patch index 346594a7..974f34a1 100644 --- a/leaf-server/minecraft-patches/features/0078-Configurable-player-knockback-zombie.patch +++ b/leaf-server/minecraft-patches/features/0078-Configurable-player-knockback-zombie.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable player knockback zombie diff --git a/net/minecraft/world/entity/LivingEntity.java b/net/minecraft/world/entity/LivingEntity.java -index d8a93bd85580c4bdc52d6f368b78ad210c265ae5..6aa4153a5368645ad3f1a0b879428f9a60d8fbc6 100644 +index 54b7ae45de54dc335a88a8c48e5212e7e663bc54..a7f87ba5a447be8bd1a4029da999aca34a583b5e 100644 --- a/net/minecraft/world/entity/LivingEntity.java +++ b/net/minecraft/world/entity/LivingEntity.java -@@ -2001,6 +2001,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1998,6 +1998,8 @@ public abstract class LivingEntity extends Entity implements Attackable { } public void knockback(double strength, double x, double z, @Nullable Entity attacker, io.papermc.paper.event.entity.EntityKnockbackEvent.Cause eventCause) { // Paper - knockback events @@ -17,7 +17,7 @@ index d8a93bd85580c4bdc52d6f368b78ad210c265ae5..6aa4153a5368645ad3f1a0b879428f9a strength *= 1.0 - this.getAttributeValue(Attributes.KNOCKBACK_RESISTANCE); if (true || !(strength <= 0.0)) { // CraftBukkit - Call event even when force is 0 // this.hasImpulse = true; // CraftBukkit - Move down -@@ -2031,6 +2033,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2028,6 +2030,20 @@ public abstract class LivingEntity extends Entity implements Attackable { } } diff --git a/leaf-server/minecraft-patches/features/0083-Don-t-spawn-if-lastSpawnState-is-null.patch b/leaf-server/minecraft-patches/features/0083-Don-t-spawn-if-lastSpawnState-is-null.patch index c796def8..c54660c4 100644 --- a/leaf-server/minecraft-patches/features/0083-Don-t-spawn-if-lastSpawnState-is-null.patch +++ b/leaf-server/minecraft-patches/features/0083-Don-t-spawn-if-lastSpawnState-is-null.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Don't spawn if lastSpawnState is null diff --git a/net/minecraft/server/level/ServerChunkCache.java b/net/minecraft/server/level/ServerChunkCache.java -index eacebc190a1f598314a8b812629fecd86d87ff7c..7d80766eab50ef5d63ea06098f177fd95307c1b9 100644 +index bb76dbf98979fdc725676c98dafe64ea941cb290..dd956431bb882daa70267685f2283d0c358336be 100644 --- a/net/minecraft/server/level/ServerChunkCache.java +++ b/net/minecraft/server/level/ServerChunkCache.java -@@ -648,7 +648,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon +@@ -649,7 +649,7 @@ public class ServerChunkCache extends ChunkSource implements ca.spottedleaf.moon for (LevelChunk levelChunk : chunks) { ChunkPos pos = levelChunk.getPos(); levelChunk.incrementInhabitedTime(timeInhabited); diff --git a/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch b/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch index 66f54817..0db7bf41 100644 --- a/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch +++ b/leaf-server/minecraft-patches/features/0084-Multithreaded-Tracker.patch @@ -205,10 +205,10 @@ index 1b9e34574fb5b8955fa37795baebf588fdaeca2a..2cca2c7b826dc64c0642751fda006f65 attributesToSync.clear(); diff --git a/net/minecraft/server/level/ServerLevel.java b/net/minecraft/server/level/ServerLevel.java -index 677e5f31089879235677b82ff554e5b89e335a6d..9ac8f658cbdc0640112c6aa672d45761285e81a9 100644 +index f9e335c86684969b744a7d7c1d96458e830bbd35..9f3fe9ffdbd2973754898233cca60b7335d671c9 100644 --- a/net/minecraft/server/level/ServerLevel.java +++ b/net/minecraft/server/level/ServerLevel.java -@@ -2494,7 +2494,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe +@@ -2495,7 +2495,7 @@ public class ServerLevel extends Level implements ServerEntityGetter, WorldGenLe @Override public LevelEntityGetter getEntities() { @@ -218,10 +218,10 @@ index 677e5f31089879235677b82ff554e5b89e335a6d..9ac8f658cbdc0640112c6aa672d45761 } diff --git a/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index e47a9ee15c9fb7fa79c0fa92f1193adf4efb667d..72d520c91e070ce6d309f68c0558d82baffd6eb0 100644 +index b03ec4f449bf7c7bd56bf763fe5c2841ca1408ef..d9dfa7c0c79166156c6e166d721e804264d3c59c 100644 --- a/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1810,7 +1810,7 @@ public class ServerGamePacketListenerImpl +@@ -1817,7 +1817,7 @@ public class ServerGamePacketListenerImpl } public void internalTeleport(PositionMoveRotation posMoveRotation, Set relatives) { diff --git a/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch b/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch index 9112744b..5cbac372 100644 --- a/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch +++ b/leaf-server/minecraft-patches/features/0091-Optimize-Entity-distanceToSqr.patch @@ -8,10 +8,10 @@ avoids multiple casting in Entity#distanceTo, using Math#sqrt directly instead o these methods more able to be inlined by the JIT compiler. diff --git a/net/minecraft/world/entity/Entity.java b/net/minecraft/world/entity/Entity.java -index 1a0b7148c48a767b3a33f6377ba7d26239cda0c2..236c5d98b27966f9cea0bfbe8e0dcd07987c71aa 100644 +index b79e27f03f67ecc01547163c053cdb96c16ce1bb..0daece03b8b14dfa9198952064545b50a0de7d1c 100644 --- a/net/minecraft/world/entity/Entity.java +++ b/net/minecraft/world/entity/Entity.java -@@ -2194,31 +2194,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -2197,31 +2197,6 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return new Vec3(this.xOld, this.yOld, this.zOld); } @@ -43,7 +43,7 @@ index 1a0b7148c48a767b3a33f6377ba7d26239cda0c2..236c5d98b27966f9cea0bfbe8e0dcd07 public void playerTouch(Player player) { } -@@ -5230,4 +5205,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess +@@ -5233,4 +5208,34 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess return false; } // Purpur end - Ridables diff --git a/leaf-server/minecraft-patches/features/0093-Cache-tile-entity-position.patch b/leaf-server/minecraft-patches/features/0093-Cache-tile-entity-position.patch index 94337545..7a2cb3c8 100644 --- a/leaf-server/minecraft-patches/features/0093-Cache-tile-entity-position.patch +++ b/leaf-server/minecraft-patches/features/0093-Cache-tile-entity-position.patch @@ -6,10 +6,10 @@ Subject: [PATCH] Cache tile entity position Dreeam TODO: Check if there is a way to cache isRemoved without problem diff --git a/net/minecraft/world/level/chunk/LevelChunk.java b/net/minecraft/world/level/chunk/LevelChunk.java -index 265e890557dd6557b327b6252dd3177fdd112777..465cd4f6214c949040a35bc9e1e969c33469f2a6 100644 +index 290163335cf3967e2745442fd7d4d4fa16fb7bc0..238e015d4ff5fabb99e569118f253366d545d269 100644 --- a/net/minecraft/world/level/chunk/LevelChunk.java +++ b/net/minecraft/world/level/chunk/LevelChunk.java -@@ -938,10 +938,12 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -936,10 +936,12 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p private final T blockEntity; private final BlockEntityTicker ticker; private boolean loggedInvalidBlockState; @@ -22,7 +22,7 @@ index 265e890557dd6557b327b6252dd3177fdd112777..465cd4f6214c949040a35bc9e1e969c3 } @Override -@@ -982,7 +984,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -980,7 +982,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @Override public BlockPos getPos() { @@ -31,7 +31,7 @@ index 265e890557dd6557b327b6252dd3177fdd112777..465cd4f6214c949040a35bc9e1e969c3 } @Override -@@ -1009,13 +1011,16 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1007,13 +1009,16 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p static class RebindableTickingBlockEntityWrapper implements TickingBlockEntity { private TickingBlockEntity ticker; @@ -48,7 +48,7 @@ index 265e890557dd6557b327b6252dd3177fdd112777..465cd4f6214c949040a35bc9e1e969c3 } @Override -@@ -1030,7 +1035,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p +@@ -1028,7 +1033,7 @@ public class LevelChunk extends ChunkAccess implements ca.spottedleaf.moonrise.p @Override public BlockPos getPos() { diff --git a/leaf-server/minecraft-patches/features/0094-TT20-Lag-compensation.patch b/leaf-server/minecraft-patches/features/0094-TT20-Lag-compensation.patch index 331cace4..ae714502 100644 --- a/leaf-server/minecraft-patches/features/0094-TT20-Lag-compensation.patch +++ b/leaf-server/minecraft-patches/features/0094-TT20-Lag-compensation.patch @@ -7,10 +7,10 @@ Original license: AGPL-3.0 Original project: https://github.com/snackbag/TT20 diff --git a/net/minecraft/server/MinecraftServer.java b/net/minecraft/server/MinecraftServer.java -index 2b28fdd68db5b5cf67023410730871843f49248b..d6266bd00da49a9121916fa03a7b920cebec2ace 100644 +index cc2bf337da1c240b82dc722970d6bbaf57331328..3597f7dd2d71fe136604518985e3d14461a6aad4 100644 --- a/net/minecraft/server/MinecraftServer.java +++ b/net/minecraft/server/MinecraftServer.java -@@ -1556,6 +1556,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop getStructures(int x, int z) { return this.getStructures(x, z, struct -> true); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 1df9bed6d3dc1e28898af8d5ad6a854dd5ccab1b..251922d1ee5ef93ef0383f4360e9a7ea17dfb195 100644 +index d0becb56a9911ef4cc55ae8d7c47832f442ad52f..bdce5f9a589fedf8c7a59da9cde56056413dd723 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -176,6 +176,13 @@ public class Main { @@ -1140,10 +1140,10 @@ index 351f42842b780d053cd2e5bad9ae299449141b10..054d2c2b93c43faeeaf56f482eb7b943 + // Purpur end - Llama API } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 98fc89cc7a715d35b62e13f8ecbe56c05605ca64..9fbbdc9664353fd2be8eae112e5cfe8880d51d08 100644 +index baffa036078bfc38505f9008a54a5abff65704db..d84d716629d93e264bc40c565e9fedd1ce38722c 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -585,10 +585,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -591,10 +591,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -1160,7 +1160,7 @@ index 98fc89cc7a715d35b62e13f8ecbe56c05605ca64..9fbbdc9664353fd2be8eae112e5cfe88 if (this.getHandle().connection == null) return; // Paper - Updates are possible before the player has fully joined for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { -@@ -1426,6 +1431,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1433,6 +1438,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper start - Teleport passenger API // Don't allow teleporting between worlds while keeping passengers if (ignorePassengers && entity.isVehicle() && location.getWorld() != this.getWorld()) { @@ -1168,7 +1168,7 @@ index 98fc89cc7a715d35b62e13f8ecbe56c05605ca64..9fbbdc9664353fd2be8eae112e5cfe88 return false; } -@@ -1447,6 +1453,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1454,6 +1460,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API @@ -1176,7 +1176,7 @@ index 98fc89cc7a715d35b62e13f8ecbe56c05605ca64..9fbbdc9664353fd2be8eae112e5cfe88 return false; } -@@ -2745,6 +2752,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2752,6 +2759,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } @@ -1205,10 +1205,11 @@ index 98fc89cc7a715d35b62e13f8ecbe56c05605ca64..9fbbdc9664353fd2be8eae112e5cfe88 private void validateSpeed(float value) { Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); } -@@ -3541,4 +3570,74 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - this.getHandle().connection.send(new net.minecraft.network.protocol.game.ClientboundEntityEventPacket(((CraftEntity) target).getHandle(), effect.getData())); +@@ -3581,4 +3610,75 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + handle.containerMenu.broadcastChanges(); + return new PaperPlayerGiveResult(leftovers.build(), drops.build()); } - // Paper end - entity effect API ++ + // Purpur start - Purpur client support + @Override + public boolean usesPurpurClient() { diff --git a/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch b/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch index 53c9cf99..5dcf3a53 100644 --- a/leaf-server/paper-patches/features/0007-KeYi-Player-Skull-API.patch +++ b/leaf-server/paper-patches/features/0007-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 9fbbdc9664353fd2be8eae112e5cfe8880d51d08..b60982fa6e11c1f72e2c7021059ebbd04e064364 100644 +index d84d716629d93e264bc40c565e9fedd1ce38722c..b78782a90bd9dcc43e9b98781f95a619b00d88cb 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3640,4 +3640,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3681,4 +3681,31 @@ public class CraftPlayer extends CraftHumanEntity implements Player { 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/0008-Slice-Smooth-Teleports.patch b/leaf-server/paper-patches/features/0008-Slice-Smooth-Teleports.patch index 55089631..2fe42f08 100644 --- a/leaf-server/paper-patches/features/0008-Slice-Smooth-Teleports.patch +++ b/leaf-server/paper-patches/features/0008-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 b60982fa6e11c1f72e2c7021059ebbd04e064364..7729f49719ce1d42fcbc33452d2b4f8f027283da 100644 +index b78782a90bd9dcc43e9b98781f95a619b00d88cb..5480b93b922f282fb2193a5b7ed16651764de5f5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1376,6 +1376,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1383,6 +1383,25 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper end - Teleportation API } diff --git a/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch b/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch index 78d88c5b..cd588ba4 100644 --- a/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch +++ b/leaf-server/paper-patches/features/0010-Leaves-Replay-Mod-API.patch @@ -27,7 +27,7 @@ index 4c003acccdd2dd17918b15316001e52e7670123e..780f3a48152fef6a06dc67bf7fbd1965 HandlerList handlers = event.getHandlers(); RegisteredListener[] listeners = handlers.getRegisteredListeners(); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index dd054c184095644a122be0f610ade1d47d9be74a..da73276a7f7e91911919ffca8ec231f37c18ab53 100644 +index 399cf37a3e823524aea48c288d270820696ba666..78904ae17d5f1b12da4825c251d8331376de78d6 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -321,6 +321,8 @@ public final class CraftServer implements Server { @@ -48,7 +48,7 @@ index dd054c184095644a122be0f610ade1d47d9be74a..da73276a7f7e91911919ffca8ec231f3 @Override public CraftPlayer apply(ServerPlayer player) { return player.getBukkitEntity(); -@@ -3459,4 +3461,11 @@ public final class CraftServer implements Server { +@@ -3458,4 +3460,11 @@ public final class CraftServer implements Server { return getServer().lagging; } // Purpur end - Lagging threshold @@ -74,10 +74,10 @@ index dca2761fe4765c6e95b5db0d0cb5c818eb8697b4..3235ec3415407d1f4fa420d398364fd6 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 7729f49719ce1d42fcbc33452d2b4f8f027283da..9f29ca8f0c32687705906ed912721c3dbca5299c 100644 +index 5480b93b922f282fb2193a5b7ed16651764de5f5..6b72004ac0d40bba230e4d721a868fdd37117e22 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2276,7 +2276,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2283,7 +2283,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(Player player) { diff --git a/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch b/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch index 7c01349e..2e5e8fa8 100644 --- a/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch +++ b/leaf-server/paper-patches/features/0013-SparklyPaper-Optimize-canSee-checks.patch @@ -16,10 +16,10 @@ 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 9f29ca8f0c32687705906ed912721c3dbca5299c..69a4e5c8ed5dddf9001f65b006922aa84ca0d6cb 100644 +index 6b72004ac0d40bba230e4d721a868fdd37117e22..9353905312c53b9e54f54d774b80a22f414a9a56 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -207,7 +207,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -213,7 +213,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { private boolean hasPlayedBefore = false; private final ConversationTracker conversationTracker = new ConversationTracker(); private final Set channels = new HashSet(); @@ -28,7 +28,7 @@ index 9f29ca8f0c32687705906ed912721c3dbca5299c..69a4e5c8ed5dddf9001f65b006922aa8 private final Set unlistedEntities = new HashSet<>(); // Paper - Add Listing API for Player private static final WeakHashMap> pluginWeakReferences = new WeakHashMap<>(); private int hash = 0; -@@ -2281,9 +2281,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2288,9 +2288,16 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public boolean canSee(org.bukkit.entity.Entity entity) { diff --git a/scripts/upstreamCommit.sh b/scripts/upstreamCommit.sh old mode 100644 new mode 100755 index d6b89fce..64743388 --- a/scripts/upstreamCommit.sh +++ b/scripts/upstreamCommit.sh @@ -11,7 +11,7 @@ # flag: --leaves HASH - the commit hash to use for comparing commits between leaves (LeavesMC/Leaves/compare/HASH...HEAD) function getCommits() { - curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/"$1"/compare/"$2"..."$3" | jq -r '.commits[] | "'"$1"'@\(.sha[:7]) \(.commit.message | split("\r\n")[0] | split("\n")[0])"' + curl -H "Accept: application/vnd.github.v3+json" https://api.github.com/repos/"$1"/compare/"$2"..."$3" | jq -r '.commits[] | "'"$1"'@\(.sha[:8]) \(.commit.message | split("\r\n")[0] | split("\n")[0])" | sub("\\[ci( |-)skip]"; "[ci/skip]")' } ( @@ -23,8 +23,9 @@ paperHash="" purpurHash="" leavesHash="" -TEMP=$(getopt --long paper:,gale:,purpur:,leaves: -o "" -- "$@") -eval set -- "$TEMP" +# Useless params standardize +# TEMP=$(getopt --long paper:,gale:,purpur:,leaves: -o "" -- "$@") +# eval set -- "$TEMP" while true; do case "$1" in --paper)