diff --git a/build.gradle.kts b/build.gradle.kts index 5f9ef559a..8cbd14ed0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -2,7 +2,7 @@ plugins { java `maven-publish` id("com.github.johnrengelman.shadow") version "8.1.1" apply false - id("io.papermc.paperweight.patcher") version "1.5.9-SNAPSHOT" + id("io.papermc.paperweight.patcher") version "1.5.10-SNAPSHOT" } val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/" @@ -15,7 +15,7 @@ repositories { } dependencies { - remapper("net.fabricmc:tiny-remapper:0.8.10:fat") + remapper("net.fabricmc:tiny-remapper:0.8.11:fat") decompiler("org.vineflower:vineflower:1.9.3") paperclip("io.papermc:paperclip:3.0.4-SNAPSHOT") } diff --git a/gradle.properties b/gradle.properties index b74f59e15..626ee6267 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,7 +1,7 @@ group = org.dreeam.leaf version = 1.20.2-R0.1-SNAPSHOT -galeCommit = 81e819d54fcf2975decd3b105c02b46c1c17377a +galeCommit = f54e07e42395f4a87725ffad4967bf46d62b0d24 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0002-Pufferfish-Sentry.patch b/patches/api/0002-Pufferfish-Sentry.patch index 2d0e5a954..5ed5ba349 100644 --- a/patches/api/0002-Pufferfish-Sentry.patch +++ b/patches/api/0002-Pufferfish-Sentry.patch @@ -7,14 +7,14 @@ Original license: GPL v3 Original project: https://github.com/pufferfish-gg/Pufferfish diff --git a/build.gradle.kts b/build.gradle.kts -index d5d99ee9dca23783f5b70b96790143e689a49ae4..d0cfdfc846d0d644349ee59c3a9b0ad8d32e4352 100644 +index d5d99ee9dca23783f5b70b96790143e689a49ae4..d6966b751c4ec3cae6f778f56ebb7ab52373959f 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -46,6 +46,7 @@ dependencies { apiAndDocs("net.kyori:adventure-text-logger-slf4j") api("org.apache.logging.log4j:log4j-api:$log4jVersion") api("org.slf4j:slf4j-api:$slf4jVersion") -+ api("io.sentry:sentry:7.0.0-beta.1") // Pufferfish ++ api("io.sentry:sentry:7.0.0-rc.1") // Pufferfish implementation("org.ow2.asm:asm:9.4") implementation("org.ow2.asm:asm-commons:9.4") diff --git a/patches/api/0003-Purpur-API-Changes.patch b/patches/api/0003-Purpur-API-Changes.patch index 46fd0de8e..843e3f6f0 100644 --- a/patches/api/0003-Purpur-API-Changes.patch +++ b/patches/api/0003-Purpur-API-Changes.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Purpur API Changes Original license: MIT Original project: https://github.com/PurpurMC/Purpur -Commit: 6bb7f82f3b685113c92ce6480e2ba698d05ab57c +Commit: ea2835bfe1e1625a02f7c7d26c06fe34a6674be1 Patches below are removed in this patch: Pufferfish-API-Changes.patch @@ -578,10 +578,10 @@ index a5938b0a960121bd77a13e4c8fc8a053bea481c5..c55819f56b4a3850496feef6900c1ec8 + // Purpur end } diff --git a/src/main/java/org/bukkit/World.java b/src/main/java/org/bukkit/World.java -index 91eb95b04094394e8dc1e3a3343efc63690c87e4..d8ef44761148f928a671ceba74a5d1cb87af81d9 100644 +index 17d404d6d1a5b46b58d612fca38f17e71adee92e..b012cc979e38ef1ef1ec61e71a887b91eb3de223 100644 --- a/src/main/java/org/bukkit/World.java +++ b/src/main/java/org/bukkit/World.java -@@ -4072,6 +4072,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient +@@ -4160,6 +4160,86 @@ public interface World extends RegionAccessor, WorldInfo, PluginMessageRecipient @Nullable public DragonBattle getEnderDragonBattle(); @@ -1027,10 +1027,10 @@ 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 a8bd76124340cbee9e68b5924c8cee44b16a3fe4..e63dc87f0c4d110b71dfd589f4a299772171c304 100644 +index da30f805556086c557bfd125c43f6ae791a8bdbd..d19e67b4a828727da0b8dcb8973c1deb09c28ade 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3290,4 +3290,122 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3322,4 +3322,123 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end @@ -1059,6 +1059,7 @@ index a8bd76124340cbee9e68b5924c8cee44b16a3fe4..e63dc87f0c4d110b71dfd589f4a29977 + + /** + * Reset the idle timer back to 0 ++ * @deprecated Use {@link #resetIdleDuration()} instead + */ + void resetIdleTimer(); + @@ -1297,10 +1298,10 @@ index c60be4fd24c7fdf65251dd6169e5e1ac3b588d95..569deccd2f1cf21da9b5906433ac493c + // Purpur end } diff --git a/src/main/java/org/bukkit/inventory/ItemFactory.java b/src/main/java/org/bukkit/inventory/ItemFactory.java -index ab73893656932f54009340df59293df2a732be51..2ac5b6b3fe9d8c3c68504cff485a516f38da9956 100644 +index 1c4e0c7356047163a38f5ac4dd544129d0b36271..15bab5a00ebfde750b827569e407a5663d94411f 100644 --- a/src/main/java/org/bukkit/inventory/ItemFactory.java +++ b/src/main/java/org/bukkit/inventory/ItemFactory.java -@@ -298,4 +298,15 @@ public interface ItemFactory { +@@ -299,4 +299,15 @@ public interface ItemFactory { @Deprecated net.md_5.bungee.api.chat.hover.content.Content hoverContentOf(@NotNull org.bukkit.entity.Entity entity, @NotNull net.md_5.bungee.api.chat.BaseComponent[] customName); // Paper end - bungee hover events diff --git a/patches/api/0005-Bump-Dependencies.patch b/patches/api/0005-Bump-Dependencies.patch index 913b0b716..928b17926 100644 --- a/patches/api/0005-Bump-Dependencies.patch +++ b/patches/api/0005-Bump-Dependencies.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bump Dependencies diff --git a/build.gradle.kts b/build.gradle.kts -index d0cfdfc846d0d644349ee59c3a9b0ad8d32e4352..463f4e0851f0bc3d227caaf12acc0dc8573d0010 100644 +index d6966b751c4ec3cae6f778f56ebb7ab52373959f..3d00401d4eac8461155916af09eb63242bd88e9a 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -11,8 +11,8 @@ java { @@ -15,7 +15,7 @@ index d0cfdfc846d0d644349ee59c3a9b0ad8d32e4352..463f4e0851f0bc3d227caaf12acc0dc8 -val slf4jVersion = "1.8.0-beta4" -val log4jVersion = "2.17.1" +val slf4jVersion = "2.0.9" // Leaf - Bump Dependencies -+val log4jVersion = "2.21.0" // Leaf - Bump Dependencies ++val log4jVersion = "2.21.1" // Leaf - Bump Dependencies val apiAndDocs: Configuration by configurations.creating { attributes { attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION)) @@ -39,7 +39,7 @@ index d0cfdfc846d0d644349ee59c3a9b0ad8d32e4352..463f4e0851f0bc3d227caaf12acc0dc8 apiAndDocs("net.kyori:adventure-text-minimessage") @@ -48,30 +48,32 @@ dependencies { api("org.slf4j:slf4j-api:$slf4jVersion") - api("io.sentry:sentry:7.0.0-beta.1") // Pufferfish + api("io.sentry:sentry:7.0.0-rc.1") // Pufferfish - implementation("org.ow2.asm:asm:9.4") - implementation("org.ow2.asm:asm-commons:9.4") @@ -63,18 +63,19 @@ index d0cfdfc846d0d644349ee59c3a9b0ad8d32e4352..463f4e0851f0bc3d227caaf12acc0dc8 // Paper start - add checker - val checkerQual = "org.checkerframework:checker-qual:3.21.0" -+ val checkerQual = "org.checkerframework:checker-qual:3.39.0" // Leaf - Bump Dependencies ++ val checkerQual = "org.checkerframework:checker-qual:3.40.0" // Leaf - Bump Dependencies compileOnlyApi(checkerQual) testCompileOnly(checkerQual) // Paper end - testImplementation("org.apache.commons:commons-lang3:3.12.0") +- testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") + testImplementation("org.apache.commons:commons-lang3:3.13.0") - testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") ++ testImplementation("org.junit.jupiter:junit-jupiter:5.10.1") testImplementation("org.hamcrest:hamcrest:2.2") - testImplementation("org.mockito:mockito-core:5.5.0") - testImplementation("org.ow2.asm:asm-tree:9.5") -+ testImplementation("org.mockito:mockito-core:5.6.0") ++ testImplementation("org.mockito:mockito-core:5.7.0") + testImplementation("org.ow2.asm:asm-tree:9.6") + // Leaf end } diff --git a/patches/api/0006-KTP-Optimize-Spigot-event-bus.patch b/patches/api/0006-KTP-Optimize-Spigot-event-bus.patch index 675b906ad..d41b5b55a 100644 --- a/patches/api/0006-KTP-Optimize-Spigot-event-bus.patch +++ b/patches/api/0006-KTP-Optimize-Spigot-event-bus.patch @@ -87,10 +87,10 @@ index 3b3d9642a8d63798dc28f2f8df77f0466451cbff..8d3605f25e97a375971705c737bc7bac } } diff --git a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -index 13da387d3b59bc67c0d73e3fbd3a4034b1281527..238384d4ecd3e39ca31bf232384dd4369e40ae20 100644 +index f9b57b872780aa6b9b959494874b57c7a8ff0c53..a2114da1d3df87f9018ee10c024c3a4bb57c6b6e 100644 --- a/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java +++ b/src/main/java/org/bukkit/plugin/java/PluginClassLoader.java -@@ -304,4 +304,12 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm +@@ -318,4 +318,12 @@ public final class PluginClassLoader extends URLClassLoader implements io.paperm } // Paper end diff --git a/patches/api/0007-KeYi-Player-Skull-API.patch b/patches/api/0007-KeYi-Player-Skull-API.patch index 011bc24b9..d74f58b60 100644 --- a/patches/api/0007-KeYi-Player-Skull-API.patch +++ b/patches/api/0007-KeYi-Player-Skull-API.patch @@ -7,7 +7,7 @@ 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 2156418958fb25eb9de08e39e42b90a5337bf92e..726e9436a68a438482947ed2569acfe6f72ed2d4 100644 +index d19e67b4a828727da0b8dcb8973c1deb09c28ade..a1e823e36d4448f724cea187de146d8f7199acf3 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java @@ -8,8 +8,11 @@ import java.util.Collection; @@ -23,7 +23,7 @@ index 2156418958fb25eb9de08e39e42b90a5337bf92e..726e9436a68a438482947ed2569acfe6 import org.bukkit.DyeColor; import org.bukkit.Effect; import org.bukkit.GameMode; -@@ -3408,4 +3411,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3441,4 +3444,22 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM sendDeathScreen(message); } // Purpur end diff --git a/patches/api/0008-Slice-Smooth-Teleports.patch b/patches/api/0008-Slice-Smooth-Teleports.patch index c8ca89070..11e761805 100644 --- a/patches/api/0008-Slice-Smooth-Teleports.patch +++ b/patches/api/0008-Slice-Smooth-Teleports.patch @@ -7,10 +7,10 @@ Original license: MIT Original project: https://github.com/Cryptite/Slice diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index 726e9436a68a438482947ed2569acfe6f72ed2d4..6ee7d6b8109fb858629b1d593d66743a421fc2be 100644 +index a1e823e36d4448f724cea187de146d8f7199acf3..6c34bacb8f60b0e066191b5a33c4c2664d4678a9 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3175,6 +3175,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3184,6 +3184,19 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM String getClientBrandName(); // Paper end diff --git a/patches/server/0005-Pufferfish-Optimize-mob-spawning.patch b/patches/server/0005-Pufferfish-Optimize-mob-spawning.patch index d95b6c36d..f85c44751 100644 --- a/patches/server/0005-Pufferfish-Optimize-mob-spawning.patch +++ b/patches/server/0005-Pufferfish-Optimize-mob-spawning.patch @@ -20,7 +20,7 @@ and, in my opinion, worth the low risk of minor mob-spawning-related inconsistencies. diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 889886a949df9eb49a26c6fec9a32ddfbf938847..a8535f791188b2d8ba8d663372e688a1bfebe3c0 100644 +index a93db76e432d485690d996d821bf8ec68c599b48..c5f86ffb98bf9790e58e22473762a58546564100 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -295,6 +295,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop atomicreference = new AtomicReference(); Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index f74efb12626a3f027d716bcd3bdb69d9225b3fac..6ae953902a9ed246246660c8da7654c7e897eef2 100644 +index d41a5cd97255663c54b45cb8f68b5ff5f74d9c14..dc6e4bcdbaef000869fcd35d125f71e45f3f2258 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -350,6 +350,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -45,10 +45,10 @@ index f74efb12626a3f027d716bcd3bdb69d9225b3fac..6ae953902a9ed246246660c8da7654c7 } } diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index f95ee3367a8d1ef400c52660d162c63367648d96..03b3abccf4313d489a7223bd044816a85369f3a0 100644 +index 7fab09e8edf26bd841ab6e51ddf45ac316aa113b..f2070cc0c1a665520b7270b3d72d425535288f08 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -206,7 +206,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -244,7 +244,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // Paper end // Paper start - optimise chunk tick iteration public final it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet needsChangeBroadcasting = new it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet<>(); @@ -58,7 +58,7 @@ index f95ee3367a8d1ef400c52660d162c63367648d96..03b3abccf4313d489a7223bd044816a8 public ChunkMap(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor executor, BlockableEventLoop mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory, int viewDistance, boolean dsync) { diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 18e521e77e58a9f786937192249c884aa317988c..adc23cbcff21701ef751e39322a1e03a85953077 100644 +index 292a6450a2031756b3037c77dfc501e9396d7440..c466991236490bd05bde99e01862fb0e02ff41f1 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -74,6 +74,9 @@ public class ServerChunkCache extends ChunkSource { diff --git a/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch b/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch index 459b9067e..6a67f9fba 100644 --- a/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/patches/server/0006-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -30,22 +30,22 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index fbfef5678423f1224bfcfe62073e0603bb0bd58d..ccbc0c3d4f151194fb937aed75837ca1afa1306b 100644 +index fcf17d4faffe60bd2b2ba288c919debec735d432..7a63134b143e9ef67554bcfd6bcdaaf1ce2917d9 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -864,6 +864,7 @@ public class ServerLevel extends Level implements WorldGenLevel { org.spigotmc.ActivationRange.activateEntities(this); // Spigot - timings.entityTick.startTiming(); // Spigot + this.timings.entityTick.startTiming(); // Spigot this.entityTickList.forEach((entity) -> { + entity.activatedPriorityReset = false; // Pufferfish - DAB if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 0f993e020a733a518641f8a2125d8e970d2974d0..1b47b15cc4e9b277cc68beec8795b45f34d9f18d 100644 +index a11ab3630fdc5848440e0df0f450337b02ca965a..ab359bca07ec86f14be8b2fb7cc0972d79bc0411 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -435,6 +435,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -436,6 +436,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } // Paper end @@ -70,7 +70,7 @@ index 73871f456a85bda1e51f54986d0e61fb629822e8..ebf05a484175548c0e411adfd35fd1f6 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 23900bc67d20aaf773d593fef6eb7308a96bbe51..bb32b2d71b65254ccfa6a73e7debc63f801e7dc5 100644 +index b35d9c04f0a9d73d6483526e396035d72fa33825..770fb085a259cf4af6e0c81c43f9968529659210 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -226,10 +226,10 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -86,7 +86,7 @@ index 23900bc67d20aaf773d593fef6eb7308a96bbe51..bb32b2d71b65254ccfa6a73e7debc63f this.targetSelector.tick(); } } -@@ -906,10 +906,14 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -904,10 +904,14 @@ public abstract class Mob extends LivingEntity implements Targeting { int i = this.level().getServer().getTickCount() + this.getId(); if (i % 2 != 0 && this.tickCount > 1) { @@ -153,7 +153,7 @@ index 26731a659fe3c40fc20135d473bacf105cc15300..c521ff04be40bfa892021f67acc1b324 AllayAi.updateActivity(this); super.customServerAiStep(); diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 1125b7d7fdb700d692061f163ca742a1aaa560fc..8624331c81be6fe857c90c8f61fa39d5446975cd 100644 +index 120fc4e35eb6eedb401b2741a5617bb90d0ee533..26f0430a92aaa5dd5210b255ffb82291c5a7b278 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -280,8 +280,10 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index ccbc0c3d4f151194fb937aed75837ca1afa1306b..f925951ec36a020d26c2012589d8d458df297a3c 100644 +index 7a63134b143e9ef67554bcfd6bcdaaf1ce2917d9..875c70c6358fa8b26c9db2ae6ccbfb68e70e18ab 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -213,6 +213,8 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -1311,7 +1311,7 @@ index ccbc0c3d4f151194fb937aed75837ca1afa1306b..f925951ec36a020d26c2012589d8d458 } // Paper end diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index bbfe261c5b158825a4464c9a8d07c43ca98e3a27..28d58b0b09cc4a694d0a00b378cdc8148bab48d2 100644 +index 5e822c2292dfa1882edc0250e592f5371480ae15..c7caf3166990d2165b4ca8206706a71f10141db1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -275,6 +275,10 @@ public class ServerPlayer extends Player { @@ -1528,7 +1528,7 @@ index bbfe261c5b158825a4464c9a8d07c43ca98e3a27..28d58b0b09cc4a694d0a00b378cdc814 public ServerStatsCounter getStats() { return this.stats; } -@@ -2656,4 +2780,50 @@ public class ServerPlayer extends Player { +@@ -2659,4 +2783,50 @@ public class ServerPlayer extends Player { return (CraftPlayer) super.getBukkitEntity(); } // CraftBukkit end @@ -1580,7 +1580,7 @@ index bbfe261c5b158825a4464c9a8d07c43ca98e3a27..28d58b0b09cc4a694d0a00b378cdc814 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 921af5bba8f1f67bcdfe2b7fb7489f7f5ef80e7b..609652d92a3084dedb17f60db52aa38b3c4c9813 100644 +index 58e3ac1e155fcd352efcc90401e4e13ae4c6a2ca..8ebc4d373b600cac4235d6b3e4176fc15393d90f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -398,6 +398,7 @@ public class ServerPlayerGameMode { @@ -1637,7 +1637,7 @@ index 921af5bba8f1f67bcdfe2b7fb7489f7f5ef80e7b..609652d92a3084dedb17f60db52aa38b + // Purpur end } diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index 963cbdff10dd3c2ed8a0737853fa584cfafae29b..1eef67ca260434e8627dba35792a7c5d97df891f 100644 +index 9019bbc86f3e94b8f4033f2e5fb43dd7efac15f9..c2f73ac74d59f05cc4db657304de26132b78e506 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -63,6 +63,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -1659,11 +1659,11 @@ index 963cbdff10dd3c2ed8a0737853fa584cfafae29b..1eef67ca260434e8627dba35792a7c5d + } catch (Exception ignore) { + } + // Purpur end - } else if (identifier.equals(CUSTOM_UNREGISTER)) { + } else if (identifier.equals(ServerCommonPacketListenerImpl.CUSTOM_UNREGISTER)) { try { String channels = payload.toString(com.google.common.base.Charsets.UTF_8); diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8bd4b6aab 100644 +index a69360a042457ce32a0ac22c1d678d0af5dca203..b1b1a91d691851e755b259d339c66d8adb7b3af8 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -334,6 +334,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -1717,11 +1717,14 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 return; } -@@ -1141,10 +1164,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1141,10 +1164,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax; double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier)); long byteAllowed = maxBookPageSize; -+ ItemStack itemstack = this.player.getInventory().getItem(packet.getSlot()); // Purpur ++ // Purpur start ++ int slot = packet.getSlot(); ++ ItemStack itemstack = Inventory.isHotbarSlot(slot) || slot == Inventory.SLOT_OFFHAND ? this.player.getInventory().getItem(slot) : ItemStack.EMPTY; ++ // Purpur end for (String testString : pageList) { int byteLength = testString.getBytes(java.nio.charset.StandardCharsets.UTF_8).length; if (byteLength > 256 * 4) { @@ -1730,7 +1733,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1168,6 +1193,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1168,6 +1196,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (byteTotal > byteAllowed) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); @@ -1738,7 +1741,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1221,13 +1247,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1221,13 +1250,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.setTag(nbttagcompound.copy()); } @@ -1758,7 +1761,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 this.updateBookPages(pages, (s) -> { return Component.Serializer.toJson(Component.literal(s)); -@@ -1239,10 +1268,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1239,10 +1271,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private void updateBookPages(List list, UnaryOperator unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit ListTag nbttaglist = new ListTag(); @@ -1774,7 +1777,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 Objects.requireNonNull(nbttaglist); stream.forEach(nbttaglist::add); -@@ -1252,11 +1284,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1252,11 +1287,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl for (int j = list.size(); i < j; ++i) { FilteredText filteredtext = (FilteredText) list.get(i); @@ -1788,8 +1791,8 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 } } -@@ -1269,6 +1301,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) +@@ -1269,6 +1304,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(this.player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) } + // Purpur start @@ -1805,7 +1808,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 @Override public void handleEntityTagQuery(ServerboundEntityTagQuery packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -@@ -1298,8 +1340,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1298,8 +1343,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); @@ -1823,7 +1826,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 } else { ServerLevel worldserver = this.player.serverLevel(); -@@ -1482,7 +1532,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1482,7 +1535,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (!event.isAllowed()) { flag2 = true; // Paper - diff on change, this should be moved wrongly if (event.getLogWarning()) @@ -1832,7 +1835,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 } // Paper end } -@@ -1544,6 +1594,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1544,6 +1597,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -1841,7 +1844,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 // Skip the first time we do this if (from.getX() != Double.MAX_VALUE) { Location oldTo = to.clone(); -@@ -1582,6 +1634,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1582,6 +1637,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.resetFallDistance(); } @@ -1855,7 +1858,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1633,6 +1692,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1633,6 +1695,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return false; } // Paper end - optimise out extra getCubes @@ -1869,7 +1872,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box, double newX, double newY, double newZ) { AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ()); Iterable iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D)); -@@ -1978,6 +2044,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1978,6 +2047,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { @@ -1877,7 +1880,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2303,7 +2370,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2303,7 +2373,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl do { instant1 = (Instant) this.lastChatTimeStamp.get(); if (timestamp.isBefore(instant1)) { @@ -1886,7 +1889,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 } } while (!this.lastChatTimeStamp.compareAndSet(instant1, timestamp)); -@@ -2723,6 +2790,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2723,6 +2793,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.getMaxInteractionDistanceSquared(this.player.level())) { // Gale - make max interaction distance configurable @@ -1894,16 +1897,16 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 packet.dispatch(new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); -@@ -2736,6 +2804,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2736,6 +2807,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - cserver.getPluginManager().callEvent(event); + ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); + player.processClick(enumhand); // Purpur + // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it. -@@ -3315,6 +3385,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3321,6 +3394,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } } @@ -1917,7 +1920,7 @@ index c7681c6d6f5c75be8d8dc5a58d7c463dbb9a1b8f..4e67556e1eb0a429a87fd07ae1c593e8 boolean flag1 = packet.getSlotNum() >= 1 && packet.getSlotNum() <= 45; boolean flag2 = itemstack.isEmpty() || itemstack.getDamageValue() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty(); diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index 4dc8365202fe851933545635bd14c7633534ee34..744f44e33578b56bbfd48fe27509e887716b3310 100644 +index 7960b538029991e5a59189ae77b90b5d424c83ed..5d83c10c48658f949be68290faed57b14c332a37 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -154,6 +154,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -1939,10 +1942,10 @@ index 4dc8365202fe851933545635bd14c7633534ee34..744f44e33578b56bbfd48fe27509e887 } } catch (AuthenticationUnavailableException authenticationunavailableexception) { diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 21b01e5c3fd1b419c81df9628a635ae207e46a7c..b1a327b0208a30bc44e97dfd5c5e38014aafc197 100644 +index 29d33dcbf3787bd28176021d2eb7c9290ccce802..9d6e8747850d1e805200e8f89a0a79474e3a20f3 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -483,6 +483,7 @@ public abstract class PlayerList { +@@ -504,6 +504,7 @@ public abstract class PlayerList { scoreboard.addPlayerToTeam(player.getScoreboardName(), collideRuleTeam); } // Paper end @@ -1950,7 +1953,7 @@ index 21b01e5c3fd1b419c81df9628a635ae207e46a7c..b1a327b0208a30bc44e97dfd5c5e3801 // CraftBukkit - Moved from above, added world if (GaleGlobalConfiguration.get().logToConsole.playerLoginLocations) { // Gale - JettPack - make logging login location configurable PlayerList.LOGGER.info("{}[{}] logged in with entity id {} at ([{}]{}, {}, {})", player.getName().getString(), s1, player.getId(), worldserver1.serverLevelData.getLevelName(), player.getX(), player.getY(), player.getZ()); -@@ -602,6 +603,7 @@ public abstract class PlayerList { +@@ -623,6 +624,7 @@ public abstract class PlayerList { } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { // Paper end @@ -1958,7 +1961,7 @@ index 21b01e5c3fd1b419c81df9628a635ae207e46a7c..b1a327b0208a30bc44e97dfd5c5e3801 ServerLevel worldserver = entityplayer.serverLevel(); entityplayer.awardStat(Stats.LEAVE_GAME); -@@ -757,7 +759,7 @@ public abstract class PlayerList { +@@ -778,7 +780,7 @@ public abstract class PlayerList { event.disallow(PlayerLoginEvent.Result.KICK_BANNED, io.papermc.paper.adventure.PaperAdventure.asAdventure(ichatmutablecomponent)); // Paper - Adventure } else { // return this.players.size() >= this.maxPlayers && !this.canBypassPlayerLimit(gameprofile) ? IChatBaseComponent.translatable("multiplayer.disconnect.server_full") : null; @@ -1967,7 +1970,7 @@ index 21b01e5c3fd1b419c81df9628a635ae207e46a7c..b1a327b0208a30bc44e97dfd5c5e3801 event.disallow(PlayerLoginEvent.Result.KICK_FULL, net.kyori.adventure.text.serializer.legacy.LegacyComponentSerializer.legacySection().deserialize(org.spigotmc.SpigotConfig.serverFullMessage)); // Spigot // Paper - Adventure } } -@@ -1103,6 +1105,20 @@ public abstract class PlayerList { +@@ -1124,6 +1126,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -1988,7 +1991,7 @@ index 21b01e5c3fd1b419c81df9628a635ae207e46a7c..b1a327b0208a30bc44e97dfd5c5e3801 public void broadcastAll(Packet packet, ResourceKey dimension) { Iterator iterator = this.players.iterator(); -@@ -1206,6 +1222,7 @@ public abstract class PlayerList { +@@ -1227,6 +1243,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + permissionLevel); } @@ -1996,7 +1999,7 @@ index 21b01e5c3fd1b419c81df9628a635ae207e46a7c..b1a327b0208a30bc44e97dfd5c5e3801 player.connection.send(new ClientboundEntityEventPacket(player, b0)); } -@@ -1214,6 +1231,27 @@ public abstract class PlayerList { +@@ -1235,6 +1252,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper @@ -2373,10 +2376,10 @@ index 1f9e0c139988c4c44a26552881647d36965aa4fa..b8d612d22aca74a08b53393c0723a2ae @Override diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389eef5dbd7c6 100644 +index e8e7f56860720f560f5abf48ea91dc0ff5b34380..fbd449a30469e449744f085cf7a9e497d1198764 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -155,7 +155,7 @@ import org.bukkit.plugin.PluginManager; +@@ -156,7 +156,7 @@ import org.bukkit.plugin.PluginManager; // CraftBukkit end public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -2385,7 +2388,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee // CraftBukkit start private static final int CURRENT_LEVEL = 2; public boolean preserveMotion = true; // Paper - keep initial motion on first setPositionRotation -@@ -334,7 +334,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -335,7 +335,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public double xOld; public double yOld; public double zOld; @@ -2394,7 +2397,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee public boolean noPhysics; protected final RandomSource random; public int tickCount; -@@ -376,7 +376,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -377,7 +377,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -2403,7 +2406,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -493,6 +493,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -494,6 +494,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return false; } @@ -2429,7 +2432,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee public final boolean hardCollides() { return this.hardCollides; } -@@ -543,7 +562,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -576,7 +595,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -2438,7 +2441,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee this.remainingFireTicks = -this.getFireImmuneTicks(); this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); -@@ -865,10 +884,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -898,10 +917,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -2451,7 +2454,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee this.onBelowWorld(); } -@@ -1845,7 +1865,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -1878,7 +1898,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return this.isInWater() || flag; } @@ -2460,7 +2463,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee Entity entity = this.getVehicle(); if (entity instanceof Boat) { -@@ -2966,6 +2986,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2978,6 +2998,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.passengers = ImmutableList.copyOf(list); } @@ -2474,7 +2477,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3006,6 +3033,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3018,6 +3045,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return false; } // Spigot end @@ -2489,7 +2492,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -3085,12 +3120,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3097,12 +3132,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return Vec3.directionFromRotation(this.getRotationVector()); } @@ -2506,7 +2509,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee } this.isInsidePortal = true; -@@ -3139,7 +3177,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3151,7 +3189,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } this.processPortalCooldown(); @@ -2515,7 +2518,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee } } -@@ -3329,7 +3367,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3341,7 +3379,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public int getMaxAirSupply() { @@ -2524,7 +2527,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee } public int getAirSupply() { -@@ -3793,7 +3831,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -3805,7 +3843,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { } public boolean canChangeDimensions() { @@ -2533,7 +2536,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee } public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { -@@ -4091,6 +4129,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4103,6 +4141,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return SlotAccess.NULL; } @@ -2554,7 +2557,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee @Override public void sendSystemMessage(Component message) {} -@@ -4360,6 +4412,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4372,6 +4424,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.yRotO = this.getYRot(); } @@ -2567,7 +2570,7 @@ index c59ce8a083eb0ca616f9d17932457b899dc946a5..fad58fc3e46ee5ba333d07204c7389ee public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { if (false && this.touchingUnloadedChunk()) { // Gale - Airplane - reduce entity fluid lookups if no fluids - cost of a lookup here is the same cost as below, so skip return false; -@@ -4935,4 +4993,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4947,4 +5005,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end @@ -2686,7 +2689,7 @@ index 2561e74ffdf595a9b6ae13dcd738662c772db442..5930e45bae5aa86b3cedb811c4c9bb92 } diff --git a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java -index eca634792d2a7cc649675e3394e84dbaf1453905..724bf857bf1b89cb0947b8a82e0ce09a0bec0335 100644 +index 6dac7cd4c9abfbde299f5d279acc2739195fc312..2bcbfe5516e30a150aa133cf8c1561b784443778 100644 --- a/src/main/java/net/minecraft/world/entity/ExperienceOrb.java +++ b/src/main/java/net/minecraft/world/entity/ExperienceOrb.java @@ -313,7 +313,7 @@ public class ExperienceOrb extends Entity { @@ -2770,7 +2773,7 @@ index 1bb8b6e91c44cd13411d96d749fa64835c75a267..b18cbe85330e26de6f6cbfcc3d51a741 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2bf3a626d 100644 +index a6e9cccff99496cdbf08e8bf093fcdf7a98e721c..23197384963b7f67e096eff18bf1809d36611923 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -218,9 +218,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -2951,7 +2954,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 LivingEntity entityliving2 = entitywolf.getOwner(); if (entityliving2 instanceof net.minecraft.world.entity.player.Player) { -@@ -1614,6 +1649,18 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1611,6 +1646,18 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -2970,7 +2973,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 org.bukkit.inventory.EquipmentSlot handSlot = (hand != null) ? org.bukkit.craftbukkit.CraftEquipmentSlot.getHand(hand) : null; EntityResurrectEvent event = new EntityResurrectEvent((org.bukkit.entity.LivingEntity) this.getBukkitEntity(), handSlot); event.setCancelled(itemstack == null); -@@ -1781,7 +1828,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1778,7 +1825,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = false; if (this.dead && adversary instanceof WitherBoss) { // Paper @@ -2979,7 +2982,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 BlockPos blockposition = this.blockPosition(); BlockState iblockdata = Blocks.WITHER_ROSE.defaultBlockState(); -@@ -1827,6 +1874,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1824,6 +1871,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.dropEquipment(); // CraftBukkit - from below if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -2987,7 +2990,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 this.dropFromLootTable(source, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1835,6 +1883,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1832,6 +1880,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(source, i, flag); this.clearEquipmentSlots = prev; // Paper @@ -2995,7 +2998,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 } // CraftBukkit start - Call death event // Paper start - call advancement triggers with correct entity equipment org.bukkit.event.entity.EntityDeathEvent deathEvent = CraftEventFactory.callEntityDeathEvent(this, this.drops, () -> { -@@ -2106,7 +2155,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2103,7 +2152,7 @@ public abstract class LivingEntity extends Entity implements Attackable { MobEffectInstance mobeffect = this.getEffect(MobEffects.JUMP); float f2 = mobeffect == null ? 0.0F : (float) (mobeffect.getAmplifier() + 1); @@ -3004,7 +3007,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 } } -@@ -2329,6 +2378,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2326,6 +2375,20 @@ public abstract class LivingEntity extends Entity implements Attackable { } } @@ -3025,7 +3028,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 if (f > 0 || !human) { if (human) { // PAIL: Be sure to drag all this code from the EntityHuman subclass each update. -@@ -2549,7 +2612,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2546,7 +2609,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @Override protected void onBelowWorld() { @@ -3034,7 +3037,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 } protected void updateSwingTime() { -@@ -2743,7 +2806,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2740,7 +2803,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected long lastJumpTime = 0L; // Paper @@ -3043,7 +3046,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 Vec3 vec3d = this.getDeltaMovement(); // Paper start long time = System.nanoTime(); -@@ -2895,6 +2958,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2892,6 +2955,7 @@ public abstract class LivingEntity extends Entity implements Attackable { if (f3 > 0.0F) { this.playSound(this.getFallDamageSound((int) f3), 1.0F, 1.0F); @@ -3051,7 +3054,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 this.hurt(this.damageSources().flyIntoWall(), f3); } } -@@ -3500,8 +3564,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3497,8 +3561,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); // Paper start @@ -3064,7 +3067,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 Location from = new Location(this.level().getWorld(), this.xo, this.yo, this.zo, this.yRotO, this.xRotO); Location to = new Location (this.level().getWorld(), this.getX(), this.getY(), this.getZ(), this.getYRot(), this.getXRot()); io.papermc.paper.event.entity.EntityMoveEvent event = new io.papermc.paper.event.entity.EntityMoveEvent(this.getBukkitLivingEntity(), from, to.clone()); -@@ -3511,12 +3577,48 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3508,12 +3574,48 @@ public abstract class LivingEntity extends Entity implements Attackable { this.absMoveTo(event.getTo().getX(), event.getTo().getY(), event.getTo().getZ(), event.getTo().getYaw(), event.getTo().getPitch()); } } @@ -3113,7 +3116,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 } public boolean isSensitiveToWater() { -@@ -3537,7 +3639,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3534,7 +3636,16 @@ public abstract class LivingEntity extends Entity implements Attackable { int j = i / 10; if (j % 2 == 0) { @@ -3132,7 +3135,7 @@ index f435e0e465a25724d7aa7a98d94da85dd4bc8f0d..0783ff43321b872bdd619713557969e2 }); } diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f137921ad 100644 +index e53ba9c21bd5ddc487ec2feb4208fd83d61af6e3..095b038c1c3b66485f319042488122846fb63e06 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -65,6 +65,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; @@ -3228,7 +3231,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f Vec3i baseblockposition = this.getPickupReach(); List list = this.level().getEntitiesOfClass(ItemEntity.class, this.getBoundingBox().inflate((double) baseblockposition.getX(), (double) baseblockposition.getY(), (double) baseblockposition.getZ())); Iterator iterator = list.iterator(); -@@ -1152,6 +1181,12 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1150,6 +1179,12 @@ public abstract class Mob extends LivingEntity implements Targeting { } @@ -3241,7 +3244,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f @Nullable public static Item getEquipmentForSlot(EquipmentSlot equipmentSlot, int equipmentLevel) { switch (equipmentSlot) { -@@ -1246,7 +1281,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1244,7 +1279,7 @@ public abstract class Mob extends LivingEntity implements Targeting { RandomSource randomsource = world.getRandom(); this.getAttribute(Attributes.FOLLOW_RANGE).addPermanentModifier(new AttributeModifier("Random spawn bonus", randomsource.triangle(0.0D, 0.11485000000000001D), AttributeModifier.Operation.MULTIPLY_BASE)); @@ -3250,7 +3253,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f this.setLeftHanded(true); } else { this.setLeftHanded(false); -@@ -1294,6 +1329,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1292,6 +1327,7 @@ public abstract class Mob extends LivingEntity implements Targeting { if (!this.isAlive()) { return InteractionResult.PASS; } else if (this.getLeashHolder() == player) { @@ -3258,7 +3261,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f // CraftBukkit start - fire PlayerUnleashEntityEvent // Paper start - drop leash variable org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.getAbilities().instabuild); -@@ -1367,7 +1403,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1365,7 +1401,7 @@ public abstract class Mob extends LivingEntity implements Targeting { protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -3267,7 +3270,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f } public boolean isWithinRestriction() { -@@ -1678,6 +1714,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1676,6 +1712,7 @@ public abstract class Mob extends LivingEntity implements Targeting { this.setLastHurtMob(target); } @@ -3275,7 +3278,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f return flag; } -@@ -1699,28 +1736,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1697,28 +1734,7 @@ public abstract class Mob extends LivingEntity implements Targeting { // Gale end - JettPack - optimize sun burn tick - cache eye blockpos public boolean isSunBurnTick() { @@ -3305,7 +3308,7 @@ index db0fb4cd2041b456269479bd97751bd78d9593e9..d6009cf7ea6857e98f86b6bd71e34d0f } @Override -@@ -1767,4 +1783,56 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1765,4 +1781,56 @@ public abstract class Mob extends LivingEntity implements Targeting { return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -4740,7 +4743,7 @@ index 3cdd9f379c7e2d46ea47c9ef55b121c93ec0bb4a..6d00b3cd4a9cb0fc8a9e9c27f37429a2 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index 8448c5d778998390cf2b683f36e4e18ca7ffdc34..4c9c07d470357c35bd5ba3c21437a2c44c52811e 100644 +index c528cb7c18650863eaf8e2c6c0d9276c02712cc9..1807c7bac6f5012da8130dd41edeb9dd4df32a47 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -82,19 +82,104 @@ public class Dolphin extends WaterAnimal { @@ -4902,7 +4905,7 @@ index 8448c5d778998390cf2b683f36e4e18ca7ffdc34..4c9c07d470357c35bd5ba3c21437a2c4 } diff --git a/src/main/java/net/minecraft/world/entity/animal/Fox.java b/src/main/java/net/minecraft/world/entity/animal/Fox.java -index 31d4683f5e158f076ce9a416b7003478af293688..39c982f83a8b5b0787fc8dd48a0c11e5ad452bb0 100644 +index 9e2af80c6a87f5849710266149cbca8cabfad4f8..075554f28dab5809d0f2d346bad40efc16b38371 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -36,6 +36,7 @@ import net.minecraft.util.RandomSource; @@ -6969,7 +6972,7 @@ index c521ff04be40bfa892021f67acc1b324551fcd5e..eb60d2d99155aae4a761051175fbbddf private boolean allayConsidersItemEqual(ItemStack stack, ItemStack stack2) { diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 8624331c81be6fe857c90c8f61fa39d5446975cd..83ecc3c22f9c3aa5a9a88b53fe1196d1abad1350 100644 +index 26f0430a92aaa5dd5210b255ffb82291c5a7b278..b2035375e1eace2881ca33ba872dad37b813f68a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -98,6 +98,43 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder list = world.getEntitiesOfClass(Villager.class, axisalignedbb); -@@ -1096,6 +1198,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -1087,6 +1189,12 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @Override public void startSleeping(BlockPos pos) { @@ -12690,7 +12693,7 @@ index 95197b601d93c30a7645d67c89c7608fc00a8de6..b571731bbce25f17568370bb523cb9b0 public static final VillagerProfession FISHERMAN = register("fisherman", PoiTypes.FISHERMAN, SoundEvents.VILLAGER_WORK_FISHERMAN); public static final VillagerProfession FLETCHER = register("fletcher", PoiTypes.FLETCHER, SoundEvents.VILLAGER_WORK_FLETCHER); diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 3c2941d799c9acb3dd9e2b67b7092f4bba5ede17..d8a4b1aaa180fc0c837bc0d8efab781a578898a5 100644 +index 833563e237462ccfc1b730b8f5fb35340d0db854..237247cb91248eb2d05e967e95cb8ad0a8a63080 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -70,6 +70,43 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill @@ -12791,7 +12794,7 @@ index 8385eb1d60f377da94e3178ab506feefb43563fd..a5443f92786427c42092aec8350e7ab3 if (NaturalSpawner.isSpawnPositionOk(SpawnPlacements.Type.ON_GROUND, world, blockposition2, EntityType.WANDERING_TRADER)) { blockposition1 = blockposition2; diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index e1590e00f8150a5017d3816683f33cfba6642066..7de7fd5203b7fca1eacd727ae7f051e582831fa1 100644 +index 9aaf1301281d8d45e4e7eb2cb859c339013b17ca..860113fba04e0fd3880e8e49c8a02477490aedb5 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -191,11 +191,21 @@ public abstract class Player extends LivingEntity { @@ -12975,22 +12978,22 @@ index a66de8353eae89790e4fb81eda2ef2e539d59b13..8576ebd969fba43b9dc92b4e7268b7e8 return this.knockback; } diff --git a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java -index 251e6bc87eb02ec4372062ef22b21249ac5164ff..6b60597a0e837054b0d1891c1e6e5e7cd3af9539 100644 +index 6b67eec90cd0dc1b20762514eac97f75fdbdf182..2dec28091d1816e9d4c749a5155e83031751cf50 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/LargeFireball.java @@ -16,20 +16,20 @@ public class LargeFireball extends Fireball { public LargeFireball(EntityType type, Level world) { super(type, world); -- isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit -+ isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur +- this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit ++ this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur } public LargeFireball(Level world, LivingEntity owner, double velocityX, double velocityY, double velocityZ, int explosionPower) { super(EntityType.FIREBALL, owner, velocityX, velocityY, velocityZ, world); this.explosionPower = explosionPower; -- isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit -+ isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur +- this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit ++ this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // CraftBukkit // Purpur } @Override @@ -13045,15 +13048,15 @@ index cc0a3d9794d05b6bc6ab05f4f2ab8d83134b181d..e1f918d0bd2a70db1aba8bda8717149f HitResult hitResult = world.clip(new ClipContext(pos, vec3, ClipContext.Block.COLLIDER, ClipContext.Fluid.NONE, entity)); if (hitResult.getType() != HitResult.Type.MISS) { diff --git a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java -index 04c2ea1ff44af72ae48e2d6b7b912b1c14285038..7839d856b3f924f0c87b298d9a1e3b15ab0693d6 100644 +index 9d43c8520953d6fe0d0948f9dbe14e0650ee01c2..deee9fffe6981d7e728621cc799a812d78000592 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java +++ b/src/main/java/net/minecraft/world/entity/projectile/SmallFireball.java @@ -24,7 +24,7 @@ public class SmallFireball extends Fireball { super(EntityType.SMALL_FIREBALL, owner, velocityX, velocityY, velocityZ, world); // CraftBukkit start if (this.getOwner() != null && this.getOwner() instanceof Mob) { -- isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); -+ isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur +- this.isIncendiary = this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); ++ this.isIncendiary = this.level().purpurConfig.fireballsBypassMobGriefing || this.level().getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING); // Purpur } // CraftBukkit end } @@ -13104,7 +13107,7 @@ index 718e120c9768cf716b32d3d652f53f1dda925168..440d3d72d8b2dac14f83a83caa5ae9db protected void onHit(HitResult hitResult) { super.onHit(hitResult); diff --git a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java -index e02d5dcbf69bd68b2f567c1a16a44ab59955f871..fb0f29b714344f0ac3e7f6bd809ac57a21061156 100644 +index f5db60cbecbe69941873e064315931089fe0e48a..2728eaaf0a9b761d932bd22639ef4e1ccc428482 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java +++ b/src/main/java/net/minecraft/world/entity/projectile/ThrownEnderpearl.java @@ -67,10 +67,11 @@ public class ThrownEnderpearl extends ThrowableItemProjectile { @@ -13362,7 +13365,7 @@ index 5c07da62c82bc70138f6cb5007629d6974be69ac..c314febb75a85ef12051bde392c5b57e } else { return Boat.Status.IN_AIR; diff --git a/src/main/java/net/minecraft/world/food/FoodData.java b/src/main/java/net/minecraft/world/food/FoodData.java -index 2038df72f8d7d33d4105de8129628daf21de6f0f..e54af9ff2a786e919b8261aa27509be942e70261 100644 +index c3448707fd8a632b457cc97b35d08a9c6933d5ee..e8079d126e6c0cf0b15c01afb6498922ee05964c 100644 --- a/src/main/java/net/minecraft/world/food/FoodData.java +++ b/src/main/java/net/minecraft/world/food/FoodData.java @@ -33,8 +33,10 @@ public class FoodData { @@ -13432,7 +13435,7 @@ index b16d9e2eaa589f19c563ee70b1a56d67dbcdecb0..71beab673f04cd051c46ea37f8c84731 public static final FoodProperties BAKED_POTATO = (new FoodProperties.Builder()).nutrition(5).saturationMod(0.6F).build(); public static final FoodProperties BEEF = (new FoodProperties.Builder()).nutrition(3).saturationMod(0.3F).meat().build(); diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index ffd349c1b80df0f1e8c02bda23700184825170fd..29f301bde378bd320d5c44f2c1b6bf9dc185e286 100644 +index f664da5a8413bb13cc95d2cf1604f11a5d285dae..8f73e9e9da595805a2cbb7995b89aac05417d45a 100644 --- a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java @@ -76,6 +76,7 @@ public abstract class AbstractContainerMenu { @@ -13463,7 +13466,7 @@ index 1af7e1548f0648890a1ef2fc0ff4e4c3a56c947c..decea1697c075e7549ccc7501c8e5935 } else if (this.isFuel(itemstack1)) { if (!this.moveItemStackTo(itemstack1, 1, 2, false)) { diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index e0c3a4ba27e21c3692e601acd0af60873bcbb84c..531b911c1bcdd3735529ee18f2bb0ccdf4ad6089 100644 +index f00638e9d7baf8b803dd610f2bf6250da34efab3..27d76e0c4809d333c548379bf78ec2db083b027e 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -23,6 +23,13 @@ import org.slf4j.Logger; @@ -13624,7 +13627,7 @@ index e0c3a4ba27e21c3692e601acd0af60873bcbb84c..531b911c1bcdd3735529ee18f2bb0ccd } @@ -315,11 +393,17 @@ public class AnvilMenu extends ItemCombinerMenu { org.bukkit.craftbukkit.event.CraftEventFactory.callPrepareAnvilEvent(this.getBukkitView(), itemstack1); // CraftBukkit - sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client + this.sendAllDataToRemote(); // CraftBukkit - SPIGOT-6686: Always send completed inventory to stay in sync with client this.broadcastChanges(); + // Purpur start + if ((canDoUnsafeEnchants || org.purpurmc.purpur.PurpurConfig.allowUnsafeEnchants) && itemstack1 != ItemStack.EMPTY) { @@ -13743,7 +13746,7 @@ index c5c509fbb915c60dfa95aac8510684d0b9f8b0ff..d604b7ec46f08993647979ed220a8484 }); } diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -index a21eadcdfbdc4be803c5793bc97996db3e706071..3b721092a7a73472756064e0eb91d3220fdc4bc8 100644 +index 076c2b2938c9b88b7e71dbc2aa9d8c7e90d4fe75..b1eacb9691b320a10de3420fae3632bb9d5b7ae3 100644 --- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java @@ -95,9 +95,11 @@ public class GrindstoneMenu extends AbstractContainerMenu { @@ -13818,7 +13821,7 @@ index a21eadcdfbdc4be803c5793bc97996db3e706071..3b721092a7a73472756064e0eb91d322 return itemstack; diff --git a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java -index b399903e8f11ec6c12fe7e724b7d9c8292acd573..a4afa946cd47238eb0fed297a27b24013d5ba77c 100644 +index 9af1da3858d6cf79b8bfaf99dde1370ccc50d023..45eec732ff0e4e78b4d3f2112b6a79d7ae668d2f 100644 --- a/src/main/java/net/minecraft/world/inventory/InventoryMenu.java +++ b/src/main/java/net/minecraft/world/inventory/InventoryMenu.java @@ -4,6 +4,7 @@ import com.mojang.datafixers.util.Pair; @@ -14834,7 +14837,7 @@ index a12bf8dec7a5e2bfcdb399e6631ee4d447f564ae..d3c20e4ae510028d25a05915e4662b03 Set set = Sets.newHashSet(); boolean flag = true; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ece15febadb5ec9c384027a1027614d42a9e1a9f..5e233fc3c9cf7d2dfc9de02d7543dce52570c355 100644 +index 4ddf4ad2cdf44841e1ca67a9ba1cce926f92bc6d..c694b9a10815031631905f8d72c09d3ff5305c0e 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -175,6 +175,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -15407,7 +15410,7 @@ index 8512b977b44a0a4d3a2521e27a60d65f7ac967be..dd270f67388c8663e0418875c88cb1e2 if (random.nextFloat() < f1) { this.getNext(state).ifPresent((iblockdata2) -> { diff --git a/src/main/java/net/minecraft/world/level/block/ChestBlock.java b/src/main/java/net/minecraft/world/level/block/ChestBlock.java -index 5e22d175b1048a58802cdf64ac70a8b56329e915..d81946b400f208c39941128ce823ff7709741c10 100644 +index af6e245b02d5fb78764d2db0ac200056277b212a..4ee31c5a6053237b15ddb8e3208cdb9a35a0d08d 100644 --- a/src/main/java/net/minecraft/world/level/block/ChestBlock.java +++ b/src/main/java/net/minecraft/world/level/block/ChestBlock.java @@ -355,6 +355,7 @@ public class ChestBlock extends AbstractChestBlock implements @@ -16568,7 +16571,7 @@ index f13943db6f2fb923c52dcf9e8bf7000041d0a362..99ef8d7e3ee0ee9777d12ad825e728c3 BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT); } diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index 41c9f074203915c31c1ae7a160ce509c13383f84..d6316aec8860ed3e579c1adb0b4578517ce0b885 100644 +index cf09525efd2d53bf884cd6ec3b0b9229715895eb..1098cf5a7675ec742caf687cc8828e09cfd3125e 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java @@ -43,7 +43,7 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -17191,7 +17194,7 @@ index e3dbf3066337a482460238f8a94d854cf88adfa2..5c70aa2ce1a9e89c8c271201b6755ea1 + // Purpur } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java -index 03fc90a470c0f63d44161843cac88bea09166858..88640ac32d70ced6e8b1984663e1c492dd673cb5 100644 +index bb794638a990488afc8d9d245dd203269c2b38b2..2c42b1a76d002c1c1758b33a1ee8474be4524293 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftOfflinePlayer.java @@ -567,4 +567,213 @@ public class CraftOfflinePlayer implements OfflinePlayer, ConfigurationSerializa @@ -17409,7 +17412,7 @@ index 03fc90a470c0f63d44161843cac88bea09166858..88640ac32d70ced6e8b1984663e1c492 + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525bc57a3306 100644 +index 2c64f9c8286d147a0a89781b69766e02b5e6e92d..82da14eda8f3b89932a1fdc26173a26dba4ae096 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -403,6 +403,20 @@ public final class CraftServer implements Server { @@ -17434,7 +17437,7 @@ index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525b CraftRegistry.setMinecraftRegistry(console.registryAccess()); @@ -1044,6 +1058,7 @@ public final class CraftServer implements Server { - org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot + org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); this.console.galeConfigurations.reloadConfigs(this.console); // Gale - Gale configuration + org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur @@ -17457,7 +17460,7 @@ index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525b this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -1538,6 +1555,55 @@ public final class CraftServer implements Server { +@@ -1539,6 +1556,55 @@ public final class CraftServer implements Server { return true; } @@ -17513,7 +17516,7 @@ index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525b @Override public List getRecipesFor(ItemStack result) { Preconditions.checkArgument(result != null, "ItemStack cannot be null"); -@@ -2877,6 +2943,7 @@ public final class CraftServer implements Server { +@@ -2878,6 +2944,7 @@ public final class CraftServer implements Server { @Override public double[] getTPS() { return new double[] { @@ -17521,7 +17524,7 @@ index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525b net.minecraft.server.MinecraftServer.getServer().tps1.getAverage(), net.minecraft.server.MinecraftServer.getServer().tps5.getAverage(), net.minecraft.server.MinecraftServer.getServer().tps15.getAverage() -@@ -2969,6 +3036,18 @@ public final class CraftServer implements Server { +@@ -2970,6 +3037,18 @@ public final class CraftServer implements Server { } // Gale end - Gale configuration - API @@ -17540,7 +17543,7 @@ index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525b @Override public void restart() { org.spigotmc.RestartCommand.restart(); -@@ -3205,4 +3284,15 @@ public final class CraftServer implements Server { +@@ -3206,4 +3285,15 @@ public final class CraftServer implements Server { } // Gale end - YAPFA - last tick time - API @@ -17557,10 +17560,10 @@ index e195fd0a489985eebf432f350d7e84afece1529d..a50d36ab25d379239088f89b451f525b + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index 66715d62ba9cfab36d204536245e4fca979d11d3..a8d49858a29155c3bbcff487d8c6bbf8dd3ca66e 100644 +index 50e48d915572d2e77c5e69655760d81b9de7bba3..b42eae58ff3c085634671b72122b361869b52e88 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -@@ -2298,6 +2298,48 @@ public class CraftWorld extends CraftRegionAccessor implements World { +@@ -2321,6 +2321,48 @@ public class CraftWorld extends CraftRegionAccessor implements World { return (this.getHandle().getDragonFight() == null) ? null : new CraftDragonBattle(this.getHandle().getDragonFight()); } @@ -17610,7 +17613,7 @@ index 66715d62ba9cfab36d204536245e4fca979d11d3..a8d49858a29155c3bbcff487d8c6bbf8 public PersistentDataContainer getPersistentDataContainer() { return this.persistentDataContainer; diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 4be1f93d518329c1c5cff9ed2c77999cb6e44e8d..9213110d0084ff06657e08437ae079f1c5a9cb66 100644 +index ebdb90afa0ba716d27e195d763bf5f14db359d53..fc897f011f93ff7dd703bd54d0b164accc30d0d3 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -194,6 +194,14 @@ public class Main { @@ -17638,7 +17641,7 @@ index 4be1f93d518329c1c5cff9ed2c77999cb6e44e8d..9213110d0084ff06657e08437ae079f1 Calendar deadline = Calendar.getInstance(); diff --git a/src/main/java/org/bukkit/craftbukkit/block/CraftBeehive.java b/src/main/java/org/bukkit/craftbukkit/block/CraftBeehive.java -index 2b906fccdb0a5ecddaf487ee931d05b511f84351..7011f0c22b4ede8423ed702d5adb9674aa8a315c 100644 +index 2e51fab98d95c93d2095f7be6dbb5d5474158bfb..32285c8e0f42897793759fba85a1e8658750c843 100644 --- a/src/main/java/org/bukkit/craftbukkit/block/CraftBeehive.java +++ b/src/main/java/org/bukkit/craftbukkit/block/CraftBeehive.java @@ -16,8 +16,15 @@ import org.bukkit.entity.Bee; @@ -17701,11 +17704,12 @@ index 2b906fccdb0a5ecddaf487ee931d05b511f84351..7011f0c22b4ede8423ed702d5adb9674 public void addEntity(Bee entity) { Preconditions.checkArgument(entity != null, "Entity must not be null"); -+ int length = getSnapshot().getStored().size(); // Purpur - getSnapshot().addOccupant(((CraftBee) entity).getHandle(), false); +- this.getSnapshot().addOccupant(((CraftBee) entity).getHandle(), false); ++ int length = this.getSnapshot().getStored().size(); // Purpur ++ getSnapshot().addOccupant(((CraftBee) entity).getHandle(), false); + + // Purpur start - check if new bee was added, and if yes, add to stored bees -+ List s = getSnapshot().getStored(); ++ List s = this.getSnapshot().getStored(); + if(length < s.size()) { + storage.add(new org.purpurmc.purpur.entity.PurpurStoredBee(s.get(s.size() - 1), this)); + } @@ -17749,7 +17753,7 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..aa8212432825db65cf485cd93f734ccd @Override diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java -index 3d0ce0803e1da8a2681a3cb41096ac942ece54a1..bcd075a771c7f43c6d1549aeec2ccb20ee168b57 100644 +index 06a857ae432fc81737b53a6d2b8742c1e80e5f8a..615d19d62e04441304c4b552fde66db221143ad6 100644 --- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java @@ -59,6 +59,7 @@ public class CraftEnchantment extends Enchantment { @@ -17780,7 +17784,7 @@ index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..985e9ec21c60a1f47973bd5fc53b96a6 // Paper start @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index f7ebddd35ff5a60a81034fd7de035ebba83e9517..eb409ecf5bf06692038e9fe84af986092a7d7837 100644 +index 90b04377088fcaf128cb35843702d2f5ead4b7f6..38ff078ae636218d157d4c885fca19be5666b52a 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -223,6 +223,11 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -17835,7 +17839,7 @@ index f7ebddd35ff5a60a81034fd7de035ebba83e9517..eb409ecf5bf06692038e9fe84af98609 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 017e97c1618b8ee4640b36a0ec1b07026047bfc3..cf124ad445fd5e8adb1114aca5113e274d950a4a 100644 +index aefb9879b2edadfb4b21d80135d713b9d34c9941..2a534391e49c0653fd98fe5c22e474ae7e82feef 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -266,6 +266,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -17847,7 +17851,7 @@ index 017e97c1618b8ee4640b36a0ec1b07026047bfc3..cf124ad445fd5e8adb1114aca5113e27 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java -index 75d10b5322eb0a62bce2855c04a5151eb857d7de..208018981a2a5666c455eb34614b03f617354165 100644 +index 63cae1a2e95d8da17c45c4404a8dd0ca6a413c39..966587c2788b5c93be83259ddc962a89cde7cbaa 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftIronGolem.java @@ -27,4 +27,17 @@ public class CraftIronGolem extends CraftGolem implements IronGolem { @@ -17869,7 +17873,7 @@ index 75d10b5322eb0a62bce2855c04a5151eb857d7de..208018981a2a5666c455eb34614b03f6 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 9c0f83ff8113696309265fb9e8f6006296de86a6..6eb0e250101d10064fe150f03d98086afeba67ca 100644 +index f444e843535ec68ede0f05e7e7ef182ce872342b..6f967e1bce4d359efcdf2a82d4ab6f6b030c0731 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -151,4 +151,46 @@ public class CraftItem extends CraftEntity implements Item { @@ -17880,47 +17884,47 @@ index 9c0f83ff8113696309265fb9e8f6006296de86a6..6eb0e250101d10064fe150f03d98086a + // Purpur start + @Override + public void setImmuneToCactus(boolean immuneToCactus) { -+ item.immuneToCactus = immuneToCactus; ++ this.getHandle().immuneToCactus = immuneToCactus; + } + + @Override + public boolean isImmuneToCactus() { -+ return item.immuneToCactus; ++ return this.getHandle().immuneToCactus; + } + + @Override + public void setImmuneToExplosion(boolean immuneToExplosion) { -+ item.immuneToExplosion = immuneToExplosion; ++ this.getHandle().immuneToExplosion = immuneToExplosion; + } + + @Override + public boolean isImmuneToExplosion() { -+ return item.immuneToExplosion; ++ return this.getHandle().immuneToExplosion; + } + + @Override + public void setImmuneToFire(boolean immuneToFire) { -+ item.immuneToFire = immuneToFire; ++ this.getHandle().immuneToFire = immuneToFire; + } + + @Override + public boolean isImmuneToFire() { -+ return item.immuneToFire; ++ return this.getHandle().immuneToFire; + } + + @Override + public void setImmuneToLightning(boolean immuneToLightning) { -+ item.immuneToLightning = immuneToLightning; ++ this.getHandle().immuneToLightning = immuneToLightning; + } + + @Override + public boolean isImmuneToLightning() { -+ return item.immuneToLightning; ++ return this.getHandle().immuneToLightning; + } + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index daadfec2d86f7957072a639e1e36d4082448f35f..e2631dbd86d93203737da9aafd97e546877fcfea 100644 +index 030fd330b13197d752a2d4c48628b9efd2c2c776..bd6eb8db9cfbce18c4526e58577523bb6fa7c4a5 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -453,7 +453,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -17936,7 +17940,7 @@ index daadfec2d86f7957072a639e1e36d4082448f35f..e2631dbd86d93203737da9aafd97e546 @Override public boolean addPotionEffect(PotionEffect effect, boolean force) { org.spigotmc.AsyncCatcher.catchOp("effect add"); // Paper -- this.getHandle().addEffect(new MobEffectInstance(CraftPotionEffectType.bukkitToMinecraft(effect.getType()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon()), EntityPotionEffectEvent.Cause.PLUGIN); // Paper - Don't ignore icon +- this.getHandle().addEffect(CraftPotionUtil.fromBukkit(effect), EntityPotionEffectEvent.Cause.PLUGIN); // Paper - Don't ignore icon + this.getHandle().addEffect(new MobEffectInstance(CraftPotionEffectType.bukkitToMinecraft(effect.getType()), effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon(), effect.getKey()), EntityPotionEffectEvent.Cause.PLUGIN); // Purpur - add key // Paper - Don't ignore icon return true; } @@ -17945,8 +17949,8 @@ index daadfec2d86f7957072a639e1e36d4082448f35f..e2631dbd86d93203737da9aafd97e546 @Override public PotionEffect getPotionEffect(PotionEffectType type) { MobEffectInstance handle = this.getHandle().getEffect(CraftPotionEffectType.bukkitToMinecraft(type)); -- return (handle == null) ? null : new PotionEffect(CraftPotionEffectType.minecraftToBukkit(handle.getEffect()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isVisible()); -+ return (handle == null) ? null : new PotionEffect(CraftPotionEffectType.minecraftToBukkit(handle.getEffect()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isVisible(), handle.getKey()); // Purpur - add key +- return (handle == null) ? null : CraftPotionUtil.toBukkit(handle); // Paper ++ return (handle == null) ? null : new PotionEffect(CraftPotionEffectType.minecraftToBukkit(handle.getEffect()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isVisible()); } @Override @@ -17954,8 +17958,8 @@ index daadfec2d86f7957072a639e1e36d4082448f35f..e2631dbd86d93203737da9aafd97e546 public Collection getActivePotionEffects() { List effects = new ArrayList(); for (MobEffectInstance handle : this.getHandle().activeEffects.values()) { -- effects.add(new PotionEffect(CraftPotionEffectType.minecraftToBukkit(handle.getEffect()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isVisible())); -+ effects.add(new PotionEffect(CraftPotionEffectType.minecraftToBukkit(handle.getEffect()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isVisible(), handle.getKey())); // Purpur - add key +- effects.add(CraftPotionUtil.toBukkit(handle)); // Paper ++ effects.add(new PotionEffect(CraftPotionEffectType.minecraftToBukkit(handle.getEffect()), handle.getDuration(), handle.getAmplifier(), handle.isAmbient(), handle.isVisible())); } return effects; } @@ -18014,7 +18018,7 @@ index 0ad16ee7b33582d214dab41eeee378d52c8e38ed..16bd1294c219f15ada653ef810bc2d74 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 604ed1f6742a6b028b9db2809f7bd4b9a3b38f4d..b6515c469ae3ff06daf631f0d5e5f792b41f8e48 100644 +index 00bae5df87bcc1c75d4e2f430241579d3be82c11..692387ba5f313191ba324df666ea7086241153ee 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -519,10 +519,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -18027,14 +18031,14 @@ index 604ed1f6742a6b028b9db2809f7bd4b9a3b38f4d..b6515c469ae3ff06daf631f0d5e5f792 + public void setPlayerListName(String name, boolean useMM) { + // Purpur end if (name == null) { - name = getName(); + name = this.getName(); } -- this.getHandle().listName = name.equals(getName()) ? null : CraftChatMessage.fromStringOrNull(name); -+ this.getHandle().listName = name.equals(getName()) ? null : useMM ? io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(name)) : CraftChatMessage.fromStringOrNull(name); // Purpur - for (ServerPlayer player : (List) server.getHandle().players) { +- this.getHandle().listName = name.equals(this.getName()) ? null : CraftChatMessage.fromStringOrNull(name); ++ this.getHandle().listName = name.equals(this.getName()) ? null : useMM ? io.papermc.paper.adventure.PaperAdventure.asVanilla(net.kyori.adventure.text.minimessage.MiniMessage.miniMessage().deserialize(name)) : CraftChatMessage.fromStringOrNull(name); // Purpur + for (ServerPlayer player : (List) this.server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); -@@ -1352,6 +1357,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1342,6 +1347,10 @@ public class CraftPlayer extends CraftHumanEntity implements Player { } if (entity.isVehicle() && !ignorePassengers) { // Paper - Teleport API @@ -18045,7 +18049,7 @@ index 604ed1f6742a6b028b9db2809f7bd4b9a3b38f4d..b6515c469ae3ff06daf631f0d5e5f792 return false; } -@@ -2512,6 +2521,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2502,6 +2511,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.getHandle().getAbilities().walkingSpeed * 2f; } @@ -18074,7 +18078,7 @@ index 604ed1f6742a6b028b9db2809f7bd4b9a3b38f4d..b6515c469ae3ff06daf631f0d5e5f792 private void validateSpeed(float value) { Preconditions.checkArgument(value <= 1f && value >= -1f, "Speed value (%s) need to be between -1f and 1f", value); } -@@ -3283,4 +3314,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3287,4 +3318,70 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.spigot; } // Spigot end @@ -18146,7 +18150,7 @@ index 604ed1f6742a6b028b9db2809f7bd4b9a3b38f4d..b6515c469ae3ff06daf631f0d5e5f792 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java -index e4a14cdfeb91a3d32e622d27d612605b1bca08e2..898d934aafd6066df45f02fe3406fa83f79b745c 100644 +index 4ce2373ff71c3c1b8951646e057587a3ab09e145..4f7f6cf6ca24406570d2d29dc63dc89401119961 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftSnowman.java @@ -28,4 +28,17 @@ public class CraftSnowman extends CraftGolem implements Snowman, com.destroystok @@ -18168,7 +18172,7 @@ index e4a14cdfeb91a3d32e622d27d612605b1bca08e2..898d934aafd6066df45f02fe3406fa83 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java -index a67b5d20b956e0bf801c9eeb9330567c21927010..15c7dd5ae4ea040b91b665e5ce05c0d35ab1604e 100644 +index 6c15d40979fd3e3d246a447c432b321fbf29ada3..6ace76a829c88e2e747dbbcce0a6582c615fc56d 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftVillager.java @@ -252,4 +252,11 @@ public class CraftVillager extends CraftAbstractVillager implements Villager { @@ -18184,7 +18188,7 @@ index a67b5d20b956e0bf801c9eeb9330567c21927010..15c7dd5ae4ea040b91b665e5ce05c0d3 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java -index 5a97c92f9b044d8ab7bd3346ceb464455a09046e..e30d8b80734f04b1fa89e8a3cef666116fd7366c 100644 +index 7a8ce6956db56061af93ba9761f5d1057a90bc49..6d286b23806666f7b00ac88c5922144649f8a041 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWither.java @@ -99,4 +99,17 @@ public class CraftWither extends CraftMonster implements Wither, com.destroystok @@ -18206,7 +18210,7 @@ index 5a97c92f9b044d8ab7bd3346ceb464455a09046e..e30d8b80734f04b1fa89e8a3cef66611 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java -index e16459c9cfcac790edd6d912750d32c68387cbbc..890938ad866e2c588f3f819230ba121b0b436401 100644 +index 38b6d2c377800134de592a780b737b45c8096a11..449acd9dc983be1cd51208bc8f8d843d2ddaa923 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftWolf.java @@ -57,4 +57,16 @@ public class CraftWolf extends CraftTameableAnimal implements Wolf { @@ -18227,7 +18231,7 @@ index e16459c9cfcac790edd6d912750d32c68387cbbc..890938ad866e2c588f3f819230ba121b + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -index 193ad79f57255b1ea4cf7930071b4f4988dc2b04..05039f5d90c9c039a776d56befe2dfe201d95475 100644 +index 249e3f703ef1b40b5401f167d4c30faafb69bb5b..70cb5d2aec1ad1cb071860e7a02f42f1ff0c1716 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -592,6 +592,15 @@ public class CraftEventFactory { @@ -18246,7 +18250,7 @@ index 193ad79f57255b1ea4cf7930071b4f4988dc2b04..05039f5d90c9c039a776d56befe2dfe2 return event; } -@@ -1033,6 +1042,7 @@ public class CraftEventFactory { +@@ -1059,6 +1068,7 @@ public class CraftEventFactory { damageCause = DamageCause.ENTITY_EXPLOSION; } event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), entity.getBukkitEntity(), damageCause, modifiers, modifierFunctions, source.isCritical()); // Paper - add critical damage API @@ -18254,7 +18258,7 @@ index 193ad79f57255b1ea4cf7930071b4f4988dc2b04..05039f5d90c9c039a776d56befe2dfe2 } event.setCancelled(cancelled); -@@ -1147,6 +1157,7 @@ public class CraftEventFactory { +@@ -1173,6 +1183,7 @@ public class CraftEventFactory { } else { entity.lastDamageCancelled = true; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled } @@ -18262,7 +18266,7 @@ index 193ad79f57255b1ea4cf7930071b4f4988dc2b04..05039f5d90c9c039a776d56befe2dfe2 return event; } -@@ -1210,6 +1221,7 @@ public class CraftEventFactory { +@@ -1236,6 +1247,7 @@ public class CraftEventFactory { EntityDamageEvent event; if (damager != null) { event = new EntityDamageByEntityEvent(damager.getBukkitEntity(), damagee.getBukkitEntity(), cause, modifiers, modifierFunctions, critical); // Paper - add critical damage API @@ -18271,7 +18275,7 @@ index 193ad79f57255b1ea4cf7930071b4f4988dc2b04..05039f5d90c9c039a776d56befe2dfe2 event = new EntityDamageEvent(damagee.getBukkitEntity(), cause, modifiers, modifierFunctions); } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java -index 633e6f4922ccaf59979a22885162f42c65bf628a..15001e7c8eae3a89f9d8669be532d56b70d538ef 100644 +index b4bd318d61834d70d666577073f18e4c49ded113..a35f60b01b371673023bd23f47a8ddafd38787f2 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftContainer.java @@ -181,8 +181,19 @@ public class CraftContainer extends AbstractContainerMenu { @@ -18309,7 +18313,7 @@ index 471ae4458e7ea7c29d7551b32cec98180fbccd4e..23db63c78e9fcf86cd498b3ed36ca502 for (int i = 0; i < this.getSize(); i++) { if (i >= items.length) { diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java -index 88d3ca586ff6905f18a8ab9f0e229f440ed44088..27dd4eb4781a3c75772860c11db886e1038cecd2 100644 +index 9ee14589d63bbfc0880f2eee5e924fe946ee0035..0a5841fa26698e60bdeadbb58b9343fe1ff08a28 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftInventoryAnvil.java @@ -9,7 +9,7 @@ import org.bukkit.inventory.AnvilInventory; @@ -18323,7 +18327,7 @@ index 88d3ca586ff6905f18a8ab9f0e229f440ed44088..27dd4eb4781a3c75772860c11db886e1 super(inventory, resultInventory); @@ -57,4 +57,26 @@ public class CraftInventoryAnvil extends CraftResultInventory implements AnvilIn Preconditions.checkArgument(levels >= 0, "Maximum repair cost must be positive (or 0)"); - container.maximumRepairCost = levels; + this.container.maximumRepairCost = levels; } + + // Purpur start @@ -18371,7 +18375,7 @@ index 57f4cf40359fe9bb427eb0134660d00839a63c86..7e66cab93d13c296433493da86c93aeb + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java -index 677fdb8c312f79daade76f169292a2a989e11eec..e67c86bae2ab419dd4e6d989d12cef81d135cc2e 100644 +index bac3a5c378054481e1a5abaec1f83afde5d64ac1..f1050bf2b9efc54a894426b08989d44566acd875 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftMetaPotion.java @@ -45,6 +45,7 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta { @@ -18383,14 +18387,14 @@ index 677fdb8c312f79daade76f169292a2a989e11eec..e67c86bae2ab419dd4e6d989d12cef81 // Having an initial "state" in ItemMeta seems bit dirty but the UNCRAFTABLE potion type // is treated as the empty form of the meta because it represents an empty potion with no effect @@ -97,7 +98,13 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta { - boolean ambient = effect.getBoolean(AMBIENT.NBT); - boolean particles = effect.contains(SHOW_PARTICLES.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_PARTICLES.NBT) : true; - boolean icon = effect.contains(SHOW_ICON.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(SHOW_ICON.NBT) : particles; + boolean ambient = effect.getBoolean(CraftMetaPotion.AMBIENT.NBT); + boolean particles = effect.contains(CraftMetaPotion.SHOW_PARTICLES.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(CraftMetaPotion.SHOW_PARTICLES.NBT) : true; + boolean icon = effect.contains(CraftMetaPotion.SHOW_ICON.NBT, CraftMagicNumbers.NBT.TAG_BYTE) ? effect.getBoolean(CraftMetaPotion.SHOW_ICON.NBT) : particles; - this.customEffects.add(new PotionEffect(type, duration, amp, ambient, particles, icon)); + // Purpur start + NamespacedKey key = null; -+ if (tag.contains(KEY.NBT)) { -+ key = NamespacedKey.fromString(effect.getString(KEY.NBT)); ++ if (tag.contains(CraftMetaPotion.KEY.NBT)) { ++ key = NamespacedKey.fromString(effect.getString(CraftMetaPotion.KEY.NBT)); + } + this.customEffects.add(new PotionEffect(type, duration, amp, ambient, particles, icon, key)); + // Purpur end @@ -18398,12 +18402,12 @@ index 677fdb8c312f79daade76f169292a2a989e11eec..e67c86bae2ab419dd4e6d989d12cef81 } } @@ -150,6 +157,11 @@ class CraftMetaPotion extends CraftMetaItem implements PotionMeta { - effectData.putBoolean(AMBIENT.NBT, effect.isAmbient()); - effectData.putBoolean(SHOW_PARTICLES.NBT, effect.hasParticles()); - effectData.putBoolean(SHOW_ICON.NBT, effect.hasIcon()); + effectData.putBoolean(CraftMetaPotion.AMBIENT.NBT, effect.isAmbient()); + effectData.putBoolean(CraftMetaPotion.SHOW_PARTICLES.NBT, effect.hasParticles()); + effectData.putBoolean(CraftMetaPotion.SHOW_ICON.NBT, effect.hasIcon()); + // Purpur start + if (effect.hasKey()) { -+ effectData.putString(KEY.NBT, effect.getKey().toString()); ++ effectData.putString(CraftMetaPotion.KEY.NBT, effect.getKey().toString()); + } + // Purpur end effectList.add(effectData); @@ -18431,7 +18435,7 @@ index 13d25d118eb4d3ef35a4cdfb9bbde9ed83f6c04b..553ecc9b5631ffc0848a798bb3295f16 throw new IllegalArgumentException("Unknown recipe stack instance " + bukkit); } diff --git a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java -index 2d2bf5c37709b8e747fbfa2db5ce86f258e86224..f6413ab181208d729afb532dca5e96e4c938e83c 100644 +index 15e9dd8844f893de5e8372b847c9e8295d6f69ca..b4b105c0190502328d5aeb680dd8e67c2875618f 100644 --- a/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java +++ b/src/main/java/org/bukkit/craftbukkit/map/CraftMapRenderer.java @@ -46,4 +46,10 @@ public class CraftMapRenderer extends MapRenderer { @@ -18446,15 +18450,15 @@ index 2d2bf5c37709b8e747fbfa2db5ce86f258e86224..f6413ab181208d729afb532dca5e96e4 + // Purpur - end } diff --git a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java -index e29679a92da5ec05e122bb972a5ee469059a7a0a..70a3463eb6c93b662c5858016f934aa9ab267397 100644 +index 844fb8c662a409670f631228f687d85c5436d3dd..2bfa5908f1848702ceb42da7576a609d0928eddd 100644 --- a/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java +++ b/src/main/java/org/bukkit/craftbukkit/potion/CraftPotionUtil.java @@ -73,7 +73,7 @@ public class CraftPotionUtil { public static MobEffectInstance fromBukkit(PotionEffect effect) { MobEffect type = CraftPotionEffectType.bukkitToMinecraft(effect.getType()); -- return new MobEffectInstance(type, effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles()); -+ return new MobEffectInstance(type, effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.getKey()); // Purpur - add key +- return new MobEffectInstance(type, effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon()); // Paper ++ return new MobEffectInstance(type, effect.getDuration(), effect.getAmplifier(), effect.isAmbient(), effect.hasParticles(), effect.hasIcon(), effect.getKey()); // Paper // Purpur - add key } public static PotionEffect toBukkit(MobEffectInstance effect) { @@ -18462,13 +18466,13 @@ index e29679a92da5ec05e122bb972a5ee469059a7a0a..70a3463eb6c93b662c5858016f934aa9 int duration = effect.getDuration(); boolean ambient = effect.isAmbient(); boolean particles = effect.isVisible(); -- return new PotionEffect(type, duration, amp, ambient, particles); -+ return new PotionEffect(type, duration, amp, ambient, particles, effect.getKey()); // Purpur - add key +- return new PotionEffect(type, duration, amp, ambient, particles, effect.showIcon()); // Paper ++ return new PotionEffect(type, duration, amp, ambient, particles, effect.showIcon(), effect.getKey()); // Paper // Purpur - add key } public static boolean equals(MobEffect mobEffect, PotionEffectType type) { diff --git a/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java b/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java -index 74ffea16027ba8eaa26716c3b6b78a8e83c9ed79..30567935db66eaa23614ad143cd8a45c596cae26 100644 +index ea732f8fe7b5dd56aab5d3a061a1cad19c49ae0b..8d2b0dc792120eda396947f5935052346f770567 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java +++ b/src/main/java/org/bukkit/craftbukkit/util/permissions/CommandPermissions.java @@ -23,7 +23,15 @@ public final class CommandPermissions { @@ -24624,7 +24628,7 @@ index 0000000000000000000000000000000000000000..b7586f494528f30eb0da82420d3bcf5b + } +} diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 9893084bacba0087ea5241d6ea4eb5ef5fabe462..4490f1240304ac8c4600ca1182bfa363c2aae69c 100644 +index 4295d8257616628727e7dc4aaf6d20b7eb18dc76..62514cc02d0b210283e7999a6f34976355d1b2d9 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; diff --git a/patches/server/0011-Remove-Timings.patch b/patches/server/0011-Remove-Timings.patch index 659357e22..63060dfc3 100644 --- a/patches/server/0011-Remove-Timings.patch +++ b/patches/server/0011-Remove-Timings.patch @@ -962,7 +962,7 @@ index 9a49f5271ec1d9de17632bfffe8309cb1ba0d8b1..1bf374d482acba25614ae303d1fa72ed } catch (Exception exception) { if (exception instanceof ReportedException) { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ee53c964c86e281120958aa0d2a7e1b7ca9d070f..b54a764c2a24f8e09792ade7a9a4ebb17d9d4e7b 100644 +index badb81539ce8c19a4fd15bcbdde074688c16db92..6dd82dca0c02a92e220d99ea4f2e6e3eaf0752ec 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -179,8 +179,6 @@ import org.bukkit.craftbukkit.Main; @@ -1146,7 +1146,7 @@ index 0d1d4d2b1ed46a9f4ee383112ea20ac68295f026..662ad3887cc4a6fe3084ba63895e3f0c i = this.context.runTopCommand(customfunction1, source); } finally { diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 7b703cd286b3819eb67b6ee95605d95ef9c44af4..2d9bf21bc0e947d221ab237da24d730560591a10 100644 +index 3df4ec7b699055c87c8b3a04fc6340ef87d82f43..3cc0f68c54c89a57abd4af4a5718c1037a25c4cd 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -57,7 +57,6 @@ import org.apache.logging.log4j.Level; @@ -1166,7 +1166,7 @@ index 7b703cd286b3819eb67b6ee95605d95ef9c44af4..2d9bf21bc0e947d221ab237da24d7305 ConsoleInput servercommand; while ((servercommand = this.serverCommandQueue.poll()) != null) { @@ -549,8 +547,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - server.dispatchServerCommand(console, servercommand); + this.server.dispatchServerCommand(this.console, servercommand); // CraftBukkit end } - @@ -1174,10 +1174,10 @@ index 7b703cd286b3819eb67b6ee95605d95ef9c44af4..2d9bf21bc0e947d221ab237da24d7305 } @Override -@@ -819,23 +815,8 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -821,23 +817,9 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + if (event.isCancelled()) { return; } - - // Paper start - command.set(event.getCommand()); - if (event.getCommand().toLowerCase().startsWith("timings") && event.getCommand().toLowerCase().matches("timings (report|paste|get|merged|seperate)")) { @@ -1192,14 +1192,15 @@ index 7b703cd286b3819eb67b6ee95605d95ef9c44af4..2d9bf21bc0e947d221ab237da24d7305 - co.aikar.timings.Timings.generateReport(new co.aikar.timings.TimingsReportListener(sender, waitable)); - } else { - // Paper end - ConsoleInput serverCommand = new ConsoleInput(event.getCommand(), wrapper); - server.dispatchServerCommand(event.getSender(), serverCommand); ++ + ConsoleInput serverCommand = new ConsoleInput(event.getCommand(), wrapper); + this.server.dispatchServerCommand(event.getSender(), serverCommand); - } // Paper }); // Paper start if (waitableArray[0] != null) { diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 03b3abccf4313d489a7223bd044816a85369f3a0..3fe61c302e4bb355edf2e8d6f608bcc31cc0197b 100644 +index f2070cc0c1a665520b7270b3d72d425535288f08..6c3c4ec6cef581da45f6cdbb68cb74ea099a93a0 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -1,6 +1,5 @@ @@ -1209,7 +1210,7 @@ index 03b3abccf4313d489a7223bd044816a85369f3a0..3fe61c302e4bb355edf2e8d6f608bcc3 import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableList.Builder; import com.google.common.collect.Iterables; -@@ -466,13 +465,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -546,13 +545,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider } protected void tick(BooleanSupplier shouldKeepTicking) { @@ -1223,7 +1224,33 @@ index 03b3abccf4313d489a7223bd044816a85369f3a0..3fe61c302e4bb355edf2e8d6f608bcc3 } } -@@ -1084,7 +1079,6 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1150,25 +1145,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + + // Paper start - optimised tracker + private final void processTrackQueue() { +- this.level.timings.tracker1.startTiming(); +- try { + for (TrackedEntity tracker : this.entityMap.values()) { + // update tracker entry + tracker.updatePlayers(tracker.entity.getPlayersInTrackRange()); + } +- } finally { +- this.level.timings.tracker1.stopTiming(); +- } +- + +- this.level.timings.tracker2.startTiming(); +- try { + for (TrackedEntity tracker : this.entityMap.values()) { + tracker.serverEntity.sendChanges(); + } +- } finally { +- this.level.timings.tracker2.stopTiming(); +- } + } + // Paper end - optimised tracker + +@@ -1182,7 +1166,6 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider List list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -1231,7 +1258,7 @@ index 03b3abccf4313d489a7223bd044816a85369f3a0..3fe61c302e4bb355edf2e8d6f608bcc3 ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1109,17 +1103,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1207,17 +1190,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -1250,7 +1277,7 @@ index 03b3abccf4313d489a7223bd044816a85369f3a0..3fe61c302e4bb355edf2e8d6f608bcc3 } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index adc23cbcff21701ef751e39322a1e03a85953077..25bbb4afdb616d827db4a511ebc503445bec27fa 100644 +index c466991236490bd05bde99e01862fb0e02ff41f1..cb5a808ff5902ddae52c400c0f60f02c5463d867 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -293,10 +293,8 @@ public class ServerChunkCache extends ChunkSource { @@ -1354,7 +1381,7 @@ index adc23cbcff21701ef751e39322a1e03a85953077..25bbb4afdb616d827db4a511ebc50344 this.chunkMap.tick(); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390551a4ff8 100644 +index 875c70c6358fa8b26c9db2ae6ccbfb68e70e18ab..fb7b3004fa97cd5b3d89db3f4ddcfcc6a8e8ddb9 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -1,7 +1,6 @@ @@ -1369,13 +1396,13 @@ index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390 this.updateSkyBrightness(); this.tickTime(); -- timings.scheduledBlocks.startTiming(); // Paper +- this.timings.scheduledBlocks.startTiming(); // Paper if (!this.isDebug()) { j = this.getGameTime(); this.blockTicks.tick(j, 65536, this::tickBlock); this.fluidTicks.tick(j, 65536, this::tickFluid); } -- timings.scheduledBlocks.stopTiming(); // Paper +- this.timings.scheduledBlocks.stopTiming(); // Paper - this.timings.raids.startTiming(); // Paper - timings this.raids.tick(); @@ -1383,9 +1410,9 @@ index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390 - this.timings.chunkProviderTick.startTiming(); // Paper - timings this.getChunkSource().tick(shouldKeepTicking, true); - this.timings.chunkProviderTick.stopTiming(); // Paper - timings -- timings.doSounds.startTiming(); // Spigot +- this.timings.doSounds.startTiming(); // Spigot this.runBlockEvents(); -- timings.doSounds.stopTiming(); // Spigot +- this.timings.doSounds.stopTiming(); // Spigot this.handlingTick = false; boolean flag = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players @@ -1393,13 +1420,13 @@ index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390 } if (flag || this.emptyTime++ < 300) { -- timings.tickEntities.startTiming(); // Spigot +- this.timings.tickEntities.startTiming(); // Spigot if (this.dragonFight != null) { this.dragonFight.tick(); } org.spigotmc.ActivationRange.activateEntities(this); // Spigot -- timings.entityTick.startTiming(); // Spigot +- this.timings.entityTick.startTiming(); // Spigot this.entityTickList.forEach((entity) -> { entity.activatedPriorityReset = false; // Pufferfish - DAB if (!entity.isRemoved()) { @@ -1407,8 +1434,8 @@ index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390 } } }); -- timings.entityTick.stopTiming(); // Spigot -- timings.tickEntities.stopTiming(); // Spigot +- this.timings.entityTick.stopTiming(); // Spigot +- this.timings.tickEntities.stopTiming(); // Spigot this.tickBlockEntities(); } @@ -1514,7 +1541,7 @@ index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390 @@ -1536,7 +1500,6 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!savingDisabled) { - org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); // CraftBukkit + org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit - try (co.aikar.timings.Timing ignored = timings.worldSave.startTiming()) { // Paper if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); @@ -1532,10 +1559,10 @@ index f925951ec36a020d26c2012589d8d458df297a3c..7d607175686ceae222e45fd217dcd390 } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 4e67556e1eb0a429a87fd07ae1c593e8bd4b6aab..adac48b53ba0e38f2df0150c02cb6f8dee637c07 100644 +index b1b1a91d691851e755b259d339c66d8adb7b3af8..33e7cff1208b1e21ca5ea68ae4a01513a3dc222f 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2480,7 +2480,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2483,7 +2483,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl public void handleCommand(String s) { // Paper - private -> public org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher @@ -1543,7 +1570,7 @@ index 4e67556e1eb0a429a87fd07ae1c593e8bd4b6aab..adac48b53ba0e38f2df0150c02cb6f8d if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); -@@ -2490,7 +2489,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2493,7 +2492,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.cserver.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -1551,7 +1578,7 @@ index 4e67556e1eb0a429a87fd07ae1c593e8bd4b6aab..adac48b53ba0e38f2df0150c02cb6f8d return; } -@@ -2502,8 +2500,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2505,8 +2503,6 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl player.sendMessage(org.bukkit.ChatColor.RED + "An internal error occurred while attempting to perform this command"); java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); return; @@ -1561,7 +1588,7 @@ index 4e67556e1eb0a429a87fd07ae1c593e8bd4b6aab..adac48b53ba0e38f2df0150c02cb6f8d } // CraftBukkit end diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index b1a327b0208a30bc44e97dfd5c5e38014aafc197..20c061849cbb424fee66a47d9339cfd8a1920660 100644 +index 9d6e8747850d1e805200e8f89a0a79474e3a20f3..1dd4bea0d5cf4aec51220253af8981c5aba29634 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1,6 +1,5 @@ @@ -1571,7 +1598,7 @@ index b1a327b0208a30bc44e97dfd5c5e38014aafc197..20c061849cbb424fee66a47d9339cfd8 import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.google.common.collect.Sets; -@@ -1313,7 +1312,6 @@ public abstract class PlayerList { +@@ -1334,7 +1333,6 @@ public abstract class PlayerList { public void saveAll(int interval) { io.papermc.paper.util.MCUtil.ensureMain("Save Players" , () -> { // Paper - Ensure main @@ -1579,7 +1606,7 @@ index b1a327b0208a30bc44e97dfd5c5e38014aafc197..20c061849cbb424fee66a47d9339cfd8 int numSaved = 0; long now = MinecraftServer.currentTick; for (int i = 0; i < this.players.size(); ++i) { -@@ -1324,7 +1322,6 @@ public abstract class PlayerList { +@@ -1345,7 +1343,6 @@ public abstract class PlayerList { } // Paper end } @@ -1727,7 +1754,7 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..4de18d00cc464313b777874430da3f55 } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 5e233fc3c9cf7d2dfc9de02d7543dce52570c355..ed2bfe717406741583b9c261c6ba18cd4a47f67b 100644 +index c694b9a10815031631905f8d72c09d3ff5305c0e..192026f9edab53248dbd6db4fdb7d3955dff247e 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -176,7 +176,6 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -1742,23 +1769,23 @@ index 5e233fc3c9cf7d2dfc9de02d7543dce52570c355..ed2bfe717406741583b9c261c6ba18cd public void onBorderSetDamageSafeZOne(WorldBorder border, double safeZoneRadius) {} }); // CraftBukkit end -- timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings +- this.timings = new co.aikar.timings.WorldTimingsHandler(this); // Paper - code below can generate new world and access timings this.keepSpawnInMemory = this.paperConfig().spawn.keepSpawnLoaded; // Paper - this.entityLimiter = new org.spigotmc.TickLimiter(spigotConfig.entityMaxTickTime); - this.tileLimiter = new org.spigotmc.TickLimiter(spigotConfig.tileMaxTickTime); + this.entityLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.entityMaxTickTime); + this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); @@ -1316,15 +1314,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } protected void tickBlockEntities() { -- timings.tileEntityPending.startTiming(); // Spigot +- this.timings.tileEntityPending.startTiming(); // Spigot this.tickingBlockEntities = true; if (!this.pendingBlockEntityTickers.isEmpty()) { this.blockEntityTickers.addAll(this.pendingBlockEntityTickers); this.pendingBlockEntityTickers.clear(); } -- timings.tileEntityPending.stopTiming(); // Spigot +- this.timings.tileEntityPending.stopTiming(); // Spigot -- timings.tileEntityTick.startTiming(); // Spigot +- this.timings.tileEntityTick.startTiming(); // Spigot // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); int tilesThisCycle = 0; @@ -1766,10 +1793,10 @@ index 5e233fc3c9cf7d2dfc9de02d7543dce52570c355..ed2bfe717406741583b9c261c6ba18cd } this.blockEntityTickers.removeAll(toRemove); -- timings.tileEntityTick.stopTiming(); // Spigot +- this.timings.tileEntityTick.stopTiming(); // Spigot this.tickingBlockEntities = false; - co.aikar.timings.TimingHistory.tileEntityTicks += this.blockEntityTickers.size(); // Paper - spigotConfig.currentPrimedTnt = 0; // Spigot + this.spigotConfig.currentPrimedTnt = 0; // Spigot } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -1831,7 +1858,7 @@ index 3431f1a00ae2918b91a6b7a449e613e6e12ff6d4..cad0931ebd4b0ee8fab4fbbf111bb3cf private static final CraftPersistentDataTypeRegistry DATA_TYPE_REGISTRY = new CraftPersistentDataTypeRegistry(); public CraftPersistentDataContainer persistentDataContainer; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 1c9659fc14d13934ce618dff0ec589dd65564966..7acf26bceff059de686274bb802160b99fc179be 100644 +index cd375184c63453829be96449c4df88372f905d9e..6e67591750ae8395f7f7b8a1299d657316bec6d6 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -793,7 +793,6 @@ public class LevelChunk extends ChunkAccess { @@ -1874,7 +1901,7 @@ index 1c9659fc14d13934ce618dff0ec589dd65564966..7acf26bceff059de686274bb802160b9 @Override diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index a50d36ab25d379239088f89b451f525bc57a3306..76621b258b2d63099959e77d113f279aa71d7d4f 100644 +index 82da14eda8f3b89932a1fdc26173a26dba4ae096..042ee3ec33bc42ded4a1490bd5acfb992f3627ca 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -475,7 +475,6 @@ public final class CraftServer implements Server { @@ -1886,7 +1913,7 @@ index a50d36ab25d379239088f89b451f525bc57a3306..76621b258b2d63099959e77d113f279a console.autosavePeriod = this.configuration.getInt("ticks-per.autosave"); this.warningState = WarningState.value(this.configuration.getString("settings.deprecated-verbose")); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 9213110d0084ff06657e08437ae079f1c5a9cb66..bb42788a84cd161d22f29e271da7373df50cac21 100644 +index fc897f011f93ff7dd703bd54d0b164accc30d0d3..ff89ba8a42d4ee8a539ba3541fae52c8a6c5ebad 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -371,8 +371,6 @@ public class Main { @@ -1899,7 +1926,7 @@ index 9213110d0084ff06657e08437ae079f1c5a9cb66..bb42788a84cd161d22f29e271da7373d tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext$11"); tryPreloadClass("io.netty.channel.AbstractChannelHandlerContext$12"); diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java -index 65566adec52a51df05c5ce9c1e673f3c4885ac5e..0756ab78eaae2943e1f6594c0095421affeccfcd 100644 +index b07be33bf62a0d4f0a0f44ac6bfbb023086a6b0d..801166b152e14ca266c574b17fad8d695c743f35 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftScheduler.java @@ -1,6 +1,5 @@ @@ -1955,7 +1982,7 @@ index 65566adec52a51df05c5ce9c1e673f3c4885ac5e..0756ab78eaae2943e1f6594c0095421a private boolean isReady(final int currentTick) { diff --git a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java -index 3f45bab0e9f7b3697e6d9d1092a1e6e579f7066f..dc785cb249e0d6c556e404bc77fb8c5ee9cd3eb5 100644 +index ea26d9464644b5217879b8c21b4da28e57708dcb..cee5c35ac2ba48d092f4227119c915e641a498c6 100644 --- a/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java +++ b/src/main/java/org/bukkit/craftbukkit/scheduler/CraftTask.java @@ -2,15 +2,10 @@ package org.bukkit.craftbukkit.scheduler; @@ -2018,10 +2045,10 @@ index 3f45bab0e9f7b3697e6d9d1092a1e6e579f7066f..dc785cb249e0d6c556e404bc77fb8c5e long getCreatedAt() { diff --git a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -index 7a2f46579352870cfbb32c343d7c68919758ffe3..16676b8be6ad1614ee261edd6bf4c0f91ff9801c 100644 +index 891f850ea99dac1433f3e395e26be14c8abf2bfb..e9fd08ea4c03429d186d2ceecc51c3fc8371f85d 100644 --- a/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java +++ b/src/main/java/org/bukkit/craftbukkit/scoreboard/CraftScoreboardManager.java -@@ -113,18 +113,12 @@ public final class CraftScoreboardManager implements ScoreboardManager { +@@ -113,18 +113,10 @@ public final class CraftScoreboardManager implements ScoreboardManager { // CraftBukkit method public void getScoreboardScores(ObjectiveCriteria criteria, String name, Consumer consumer) { @@ -2029,7 +2056,7 @@ index 7a2f46579352870cfbb32c343d7c68919758ffe3..16676b8be6ad1614ee261edd6bf4c0f9 // plugins leaking scoreboards will make this very expensive, let server owners debug it easily - co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.startTimingIfSync(); - try { - // Paper end - add timings for scoreboard search +- // Paper end - add timings for scoreboard search for (CraftScoreboard scoreboard : this.scoreboards) { Scoreboard board = scoreboard.board; board.forAllObjectives(criteria, name, (score) -> consumer.accept(score)); @@ -2037,11 +2064,11 @@ index 7a2f46579352870cfbb32c343d7c68919758ffe3..16676b8be6ad1614ee261edd6bf4c0f9 - } finally { // Paper start - add timings for scoreboard search - co.aikar.timings.MinecraftTimings.scoreboardScoreSearch.stopTimingIfSync(); - } - // Paper end - add timings for scoreboard search +- // Paper end - add timings for scoreboard search } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index d28ccf22bba9bebae7fbdeaee94620de24365785..8f3d52c4a9cb38875334d0aeeb1ddfe76a93ba97 100644 +index ce5817b8660ca3c3fb93314bfd326a6bc20b4832..823e858cc73d7dba6fc8ddc12eea47c5c9dd7dc4 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -211,12 +211,6 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -2057,7 +2084,7 @@ index d28ccf22bba9bebae7fbdeaee94620de24365785..8f3d52c4a9cb38875334d0aeeb1ddfe7 public static byte toLegacyData(BlockState data) { return CraftLegacy.toLegacyData(data); -@@ -468,10 +462,6 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -478,10 +472,6 @@ public final class CraftMagicNumbers implements UnsafeValues { } // Paper start @@ -2275,7 +2302,7 @@ index 139d946346594d2a59a8b2930c4eae794c880dbc..00000000000000000000000000000000 - -} diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 4490f1240304ac8c4600ca1182bfa363c2aae69c..1c5a23890b5f0daa96951b0f7d5c4e2d704f2869 100644 +index 62514cc02d0b210283e7999a6f34976355d1b2d9..95ec734e17d98aff08cba1b40de79ac50bf5ba78 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -35,7 +35,6 @@ import net.minecraft.world.entity.projectile.FireworkRocketEntity; diff --git a/patches/server/0012-Bump-Dependencies.patch b/patches/server/0012-Bump-Dependencies.patch index 8a4040ad0..0b9b880e2 100644 --- a/patches/server/0012-Bump-Dependencies.patch +++ b/patches/server/0012-Bump-Dependencies.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bump Dependencies diff --git a/build.gradle.kts b/build.gradle.kts -index ab5aee09874e2258d05b22ca1be3c273cb1afb34..e3980e3e0eae7e6e6f2b4162a2ef5c318444b605 100644 +index ab5aee09874e2258d05b22ca1be3c273cb1afb34..8e3fdb7720dde4e3983285099139c901e1aadb90 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -22,7 +22,7 @@ dependencies { @@ -13,7 +13,7 @@ index ab5aee09874e2258d05b22ca1be3c273cb1afb34..e3980e3e0eae7e6e6f2b4162a2ef5c31 // Gale end - project setup // Paper start - implementation("org.jline:jline-terminal-jansi:3.21.0") -+ implementation("org.jline:jline-terminal-jansi:3.23.0") // Leaf - Bump Dependencies ++ implementation("org.jline:jline-terminal-jansi:3.24.1") // Leaf - Bump Dependencies implementation("net.minecrell:terminalconsoleappender:1.3.0") implementation("net.kyori:adventure-text-serializer-ansi:4.14.0") // Keep in sync with adventureVersion from Paper-API build file implementation("net.kyori:ansi:1.0.3") // Manually bump beyond above transitive dep @@ -24,27 +24,28 @@ index ab5aee09874e2258d05b22ca1be3c273cb1afb34..e3980e3e0eae7e6e6f2b4162a2ef5c31 - implementation("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - implementation - log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - Needed to generate meta for our Log4j plugins + // Leaf start - Bump Dependencies -+ implementation("org.apache.logging.log4j:log4j-core:2.21.0") // Paper - implementation -+ log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.21.0") // Paper - Needed to generate meta for our Log4j plugins ++ implementation("org.apache.logging.log4j:log4j-core:2.21.1") // Paper - implementation ++ log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.21.1") // Paper - Needed to generate meta for our Log4j plugins runtimeOnly(log4jPlugins.output) alsoShade(log4jPlugins.output) - implementation("io.netty:netty-codec-haproxy:4.1.97.Final") // Paper - Add support for proxy protocol -+ implementation("io.netty:netty-codec-haproxy:4.1.100.Final") // Paper - Add support for proxy protocol ++ implementation("io.netty:netty-codec-haproxy:4.1.101.Final") // Paper - Add support for proxy protocol // Paper end - implementation("org.apache.logging.log4j:log4j-iostreams:2.19.0") // Paper - remove exclusion - implementation("org.ow2.asm:asm:9.5") - implementation("org.ow2.asm:asm-commons:9.5") // Paper - ASM event executor generation -+ implementation("org.apache.logging.log4j:log4j-iostreams:2.21.0") // Paper - remove exclusion ++ implementation("org.apache.logging.log4j:log4j-iostreams:2.21.1") // Paper - remove exclusion + implementation("org.ow2.asm:asm:9.6") + implementation("org.ow2.asm:asm-commons:9.6") // Paper - ASM event executor generation implementation("org.spongepowered:configurate-yaml:4.2.0-SNAPSHOT") // Paper - config files implementation("commons-lang:commons-lang:2.6") - implementation("net.fabricmc:mapping-io:0.3.0") // Paper - needed to read mappings for stacktrace deobfuscation - runtimeOnly("org.xerial:sqlite-jdbc:3.42.0.1") -+ implementation("net.fabricmc:mapping-io:0.5.0-beta.1") // Paper - needed to read mappings for stacktrace deobfuscation -+ runtimeOnly("org.xerial:sqlite-jdbc:3.43.2.1") - runtimeOnly("com.mysql:mysql-connector-j:8.1.0") +- runtimeOnly("com.mysql:mysql-connector-j:8.1.0") - runtimeOnly("com.lmax:disruptor:3.4.4") // Paper ++ implementation("net.fabricmc:mapping-io:0.5.0-beta.3") // Paper - needed to read mappings for stacktrace deobfuscation ++ runtimeOnly("org.xerial:sqlite-jdbc:3.43.2.2") ++ runtimeOnly("com.mysql:mysql-connector-j:8.2.0") + runtimeOnly("com.lmax:disruptor:3.4.4") // Paper // Leaf - Bump Dependencies - Waiting Log4j 3.x that supported disruptor 4.0.0 + // Leaf end // Paper start - Use Velocity cipher @@ -65,22 +66,25 @@ index ab5aee09874e2258d05b22ca1be3c273cb1afb34..e3980e3e0eae7e6e6f2b4162a2ef5c31 // Pufferfish start implementation("org.yaml:snakeyaml:2.2") -@@ -68,10 +72,12 @@ dependencies { +@@ -68,10 +72,14 @@ dependencies { implementation("org.mozilla:rhino-engine:1.7.14") // Purpur implementation("dev.omega24:upnp4j:1.0") // Purpur - testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test +- testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") + // Leaf start - Bump Dependencies -+ testImplementation("io.github.classgraph:classgraph:4.8.163") // Paper - mob goal test - testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") ++ testImplementation("io.github.classgraph:classgraph:4.8.164") // Paper - mob goal test ++ testImplementation("org.junit.jupiter:junit-jupiter:5.10.1") testImplementation("org.hamcrest:hamcrest:2.2") - testImplementation("org.mockito:mockito-core:5.5.0") -+ testImplementation("org.mockito:mockito-core:5.6.0") ++ testImplementation("org.mockito:mockito-core:5.7.0") ++ ++ implementation("io.netty:netty-all:4.1.101.Final") + // Leaf end } val craftbukkitPackageVersion = "1_20_R2" // Paper -@@ -263,3 +269,7 @@ sourceSets { +@@ -263,3 +271,7 @@ sourceSets { } } // Gale end - package license into jar diff --git a/patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch b/patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch index 825932b07..7502245fc 100644 --- a/patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch +++ b/patches/server/0014-Remove-Spigot-Check-for-Broken-BungeeCord-Configurat.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Remove Spigot Check for Broken BungeeCord Configurations diff --git a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java -index b76f4b62d58087325d01983effe0a508d551d4ab..eb84043a3b39d899b83c8168e17fa19bc98a8a63 100644 +index 8e7488277bc30f83fa39f7435ca9f1724452e92e..db3cee1f3d5d3ca090f5f4b1fd6ab01bf19f85d9 100644 --- a/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerHandshakePacketListenerImpl.java @@ -145,7 +145,7 @@ public class ServerHandshakePacketListenerImpl implements ServerHandshakePacketL { - connection.spoofedProfile = ServerHandshakePacketListenerImpl.gson.fromJson(split[3], com.mojang.authlib.properties.Property[].class); + this.connection.spoofedProfile = ServerHandshakePacketListenerImpl.gson.fromJson(split[3], com.mojang.authlib.properties.Property[].class); } - } else if ( ( split.length == 3 || split.length == 4 ) && ( ServerHandshakePacketListenerImpl.HOST_PATTERN.matcher( split[1] ).matches() ) ) { + } else if ( ( split.length == 3 || split.length == 4 ) && ( ServerHandshakePacketListenerImpl.HOST_PATTERN.matcher( split[1] ).matches() ) && !(org.dreeam.leaf.LeafConfig.removeSpigotCheckBungeeConfig)) { // Leaf - Remove Spigot check for broken BungeeCord configurations diff --git a/patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch b/patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch index 6f99d5dc5..b7c5e166b 100644 --- a/patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch +++ b/patches/server/0015-Remove-UseItemOnPacket-Too-Far-Check.patch @@ -7,10 +7,10 @@ This Check is added in 1.17.x -> 1.18.x update by Mojang. By removing this check, it enable hackers to use some modules of hack clients. diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index adac48b53ba0e38f2df0150c02cb6f8dee637c07..7c56e6bd76e8f8e5f9e925dc704be95e8a5532a1 100644 +index 33e7cff1208b1e21ca5ea68ae4a01513a3dc222f..09ae63d9894ef7658ac32f1615d6a4836b9721c9 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1977,7 +1977,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1980,7 +1980,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl Vec3 vec3d2 = vec3d.subtract(vec3d1); double d0 = 1.0000001D; diff --git a/patches/server/0017-KeYi-Player-Skull-API.patch b/patches/server/0017-KeYi-Player-Skull-API.patch index d40243ab3..d53bec253 100644 --- a/patches/server/0017-KeYi-Player-Skull-API.patch +++ b/patches/server/0017-KeYi-Player-Skull-API.patch @@ -7,7 +7,7 @@ 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 b6515c469ae3ff06daf631f0d5e5f792b41f8e48..1c06a414abe91085216c07b12cd4310b586fecb3 100644 +index 692387ba5f313191ba324df666ea7086241153ee..91a6079d0b808e3b72aa60fadb73a0a0b2b4ad61 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -29,6 +29,11 @@ import java.util.Optional; @@ -30,7 +30,7 @@ index b6515c469ae3ff06daf631f0d5e5f792b41f8e48..1c06a414abe91085216c07b12cd4310b import org.bukkit.map.MapCursor; import org.bukkit.map.MapView; import org.bukkit.metadata.MetadataValue; -@@ -3380,4 +3386,28 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3384,4 +3390,28 @@ 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 diff --git a/patches/server/0023-Slice-Smooth-Teleports.patch b/patches/server/0023-Slice-Smooth-Teleports.patch index 5c4abf725..f00c424e8 100644 --- a/patches/server/0023-Slice-Smooth-Teleports.patch +++ b/patches/server/0023-Slice-Smooth-Teleports.patch @@ -7,7 +7,7 @@ Original license: MIT Original project: https://github.com/Cryptite/Slice diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 28d58b0b09cc4a694d0a00b378cdc8148bab48d2..1e3cd5c91affc9b14d1b4f042907f0c5d29f775d 100644 +index c7caf3166990d2165b4ca8206706a71f10141db1..f02d94b3195b33927a9cdac0207365cc0ac11bbd 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -279,6 +279,7 @@ public class ServerPlayer extends Player { @@ -19,10 +19,10 @@ index 28d58b0b09cc4a694d0a00b378cdc8148bab48d2..1e3cd5c91affc9b14d1b4f042907f0c5 // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 20c061849cbb424fee66a47d9339cfd8a1920660..d20eed35c85cf5118206dbf9ca2c706b51d4460e 100644 +index 1dd4bea0d5cf4aec51220253af8981c5aba29634..fa9264af129acc046822ac0a7769e45e42142baf 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -951,10 +951,10 @@ public abstract class PlayerList { +@@ -972,10 +972,10 @@ public abstract class PlayerList { ServerLevel worldserver2 = entityplayer1.serverLevel(); LevelData worlddata = worldserver2.getLevelData(); @@ -36,10 +36,10 @@ index 20c061849cbb424fee66a47d9339cfd8a1920660..d20eed35c85cf5118206dbf9ca2c706b entityplayer1.connection.send(new ClientboundChangeDifficultyPacket(worlddata.getDifficulty(), worlddata.isDifficultyLocked())); entityplayer1.connection.send(new ClientboundSetExperiencePacket(entityplayer1.experienceProgress, entityplayer1.totalExperience, entityplayer1.experienceLevel)); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 1c06a414abe91085216c07b12cd4310b586fecb3..57d3b887b606800d0d1e12b46ae793c50f09bee3 100644 +index 91a6079d0b808e3b72aa60fadb73a0a0b2b4ad61..9452e30892505b9749023c7867ac6e3e071e9194 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -1267,6 +1267,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -1257,6 +1257,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { // Paper end } diff --git a/patches/server/0025-Leaves-Server-Utils.patch b/patches/server/0025-Leaves-Server-Utils.patch index f346c612c..5169609c1 100644 --- a/patches/server/0025-Leaves-Server-Utils.patch +++ b/patches/server/0025-Leaves-Server-Utils.patch @@ -7,10 +7,10 @@ Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index fad58fc3e46ee5ba333d07204c7389eef5dbd7c6..fb2d63fbe1b6c1144f878c417d1407c1fe5d4141 100644 +index fbd449a30469e449744f085cf7a9e497d1198764..6c884cbe6bff9c681240557078e0f87044a7f8b9 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -418,6 +418,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -419,6 +419,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean collidingWithWorldBorder; // Paper public boolean fixedPose = false; // Paper @@ -18,7 +18,7 @@ index fad58fc3e46ee5ba333d07204c7389eef5dbd7c6..fb2d63fbe1b6c1144f878c417d1407c1 public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -2474,6 +2475,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2507,6 +2508,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { nbt.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -26,7 +26,7 @@ index fad58fc3e46ee5ba333d07204c7389eef5dbd7c6..fb2d63fbe1b6c1144f878c417d1407c1 return nbt; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2642,6 +2644,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2654,6 +2656,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -38,7 +38,7 @@ index fad58fc3e46ee5ba333d07204c7389eef5dbd7c6..fb2d63fbe1b6c1144f878c417d1407c1 } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -5034,4 +5041,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -5046,4 +5053,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return false; } // Purpur end diff --git a/patches/server/0026-Leaves-Protocol-Core.patch b/patches/server/0026-Leaves-Protocol-Core.patch index bd4a96eff..1e27a3c4e 100644 --- a/patches/server/0026-Leaves-Protocol-Core.patch +++ b/patches/server/0026-Leaves-Protocol-Core.patch @@ -7,7 +7,7 @@ Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves diff --git a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java -index 975da2529d18391ed4ecc7359a2d7319129bd872..ae5590b015a2b018188bd7a45b44ec4d4af048a5 100644 +index af86f752c33a2990405fea058b7c41c437ba9d46..bada9fae1e7178162429e1f5a1608b9c4a680a6c 100644 --- a/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java +++ b/src/main/java/net/minecraft/network/protocol/common/ServerboundCustomPayloadPacket.java @@ -20,7 +20,12 @@ public record ServerboundCustomPayloadPacket(CustomPacketPayload payload) implem @@ -25,7 +25,7 @@ index 975da2529d18391ed4ecc7359a2d7319129bd872..ae5590b015a2b018188bd7a45b44ec4d } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b54a764c2a24f8e09792ade7a9a4ebb17d9d4e7b..e060a6990173ede14ddb3b88df8d703244412755 100644 +index 6dd82dca0c02a92e220d99ea4f2e6e3eaf0752ec..0a077053884d4303ff0ae360cebcd8d455d8d00f 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -1560,6 +1560,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop map = MINECRAFT_REGISTER.get(protocol); + for (ProtocolHandler.MinecraftRegister register : map.keySet()) { + if (register.ignoreId() || register.channelId().equals(channel[1]) || -+ ArrayUtils.contains(register.channelIds(), channel[1])) { ++ ArrayUtils.contains(register.channelIds(), channel[1])) { + try { + map.get(register).invoke(null, player); + } catch (InvocationTargetException | IllegalAccessException e) { @@ -363,42 +367,76 @@ index 0000000000000000000000000000000000000000..399a757ed4d064823eb1797d12546c97 + } + } + -+ private static List> getClasses(String packageName) { -+ List> classes = new ArrayList<>(); -+ String packageDirName = packageName.replace('.', '/'); ++ public static Set> getClasses(String pack) { ++ Set> classes = new LinkedHashSet>(); ++ String packageDirName = pack.replace('.', '/'); + Enumeration dirs; + try { + dirs = Thread.currentThread().getContextClassLoader().getResources(packageDirName); + while (dirs.hasMoreElements()) { + URL url = dirs.nextElement(); -+ findClassInPackageByFile(packageName, URLDecoder.decode(url.getFile(), StandardCharsets.UTF_8), classes); ++ String protocol = url.getProtocol(); ++ if ("file".equals(protocol)) { ++ String filePath = URLDecoder.decode(url.getFile(), StandardCharsets.UTF_8); ++ findClassesInPackageByFile(pack, filePath, classes); ++ } else if ("jar".equals(protocol)) { ++ JarFile jar; ++ try { ++ jar = ((JarURLConnection) url.openConnection()).getJarFile(); ++ Enumeration entries = jar.entries(); ++ findClassesInPackageByJar(pack, entries, packageDirName, classes); ++ } catch (IOException e) { ++ e.printStackTrace(); ++ } ++ } + } + } catch (IOException e) { -+ throw new RuntimeException(e); ++ e.printStackTrace(); + } + return classes; + } + -+ private static void findClassInPackageByFile(String packageName, String filePath, List> classes) { -+ File dir = new File(filePath); ++ private static void findClassesInPackageByFile(String packageName, String packagePath, Set> classes) { ++ File dir = new File(packagePath); + if (!dir.exists() || !dir.isDirectory()) { + return; + } -+ -+ File[] dirFiles = dir.listFiles(file -> file.getName().endsWith("class") || file.isDirectory()); -+ if (dirFiles != null) { -+ for (File file : dirFiles) { ++ File[] dirfiles = dir.listFiles((file) -> file.isDirectory() || file.getName().endsWith(".class")); ++ if (dirfiles != null) { ++ for (File file : dirfiles) { + if (file.isDirectory()) { -+ if (!file.getName().equals("core")) { -+ findClassInPackageByFile(packageName + "." + file.getName(), file.getPath(), classes); ++ findClassesInPackageByFile(packageName + "." + file.getName(), file.getAbsolutePath(), classes); ++ } else { ++ String className = file.getName().substring(0, file.getName().length() - 6); ++ try { ++ classes.add(Class.forName(packageName + '.' + className)); ++ } catch (ClassNotFoundException e) { ++ e.printStackTrace(); + } -+ continue; + } -+ String className = file.getName().substring(0, file.getName().length() - 6); -+ try { -+ classes.add(Thread.currentThread().getContextClassLoader().loadClass(packageName + "." + className)); -+ } catch (ClassNotFoundException e) { -+ throw new RuntimeException(e); ++ } ++ } ++ } ++ ++ private static void findClassesInPackageByJar(String packageName, Enumeration entries, String packageDirName, Set> classes) { ++ while (entries.hasMoreElements()) { ++ JarEntry entry = entries.nextElement(); ++ String name = entry.getName(); ++ if (name.charAt(0) == '/') { ++ name = name.substring(1); ++ } ++ if (name.startsWith(packageDirName)) { ++ int idx = name.lastIndexOf('/'); ++ if (idx != -1) { ++ packageName = name.substring(0, idx).replace('/', '.'); ++ } ++ if (name.endsWith(".class") && !entry.isDirectory()) { ++ String className = name.substring(packageName.length() + 1, name.length() - 6); ++ try { ++ classes.add(Class.forName(packageName + '.' + className)); ++ } catch (ClassNotFoundException e) { ++ e.printStackTrace(); ++ } + } + } + } diff --git a/patches/server/0028-Leaves-Appleskin-Protocol.patch b/patches/server/0028-Leaves-Appleskin-Protocol.patch index abcdba3c7..3cabbe099 100644 --- a/patches/server/0028-Leaves-Appleskin-Protocol.patch +++ b/patches/server/0028-Leaves-Appleskin-Protocol.patch @@ -23,10 +23,10 @@ index 9445177d2cb64ae1cd0bd88d0c0b2ad89ef924f6..56dc6cb0b5659619ec5df42088fbecf7 public static String sentryDsn = ""; diff --git a/src/main/java/top/leavesmc/leaves/protocol/AppleSkinProtocol.java b/src/main/java/top/leavesmc/leaves/protocol/AppleSkinProtocol.java new file mode 100644 -index 0000000000000000000000000000000000000000..da1b2a0485ee99921ea61e5409ddbb4483b80951 +index 0000000000000000000000000000000000000000..a16cf0afc41e903dda7033bcca6f8cdc9b533390 --- /dev/null +++ b/src/main/java/top/leavesmc/leaves/protocol/AppleSkinProtocol.java -@@ -0,0 +1,106 @@ +@@ -0,0 +1,105 @@ +package top.leavesmc.leaves.protocol; + +import net.minecraft.resources.ResourceLocation; @@ -68,7 +68,6 @@ index 0000000000000000000000000000000000000000..da1b2a0485ee99921ea61e5409ddbb44 + @ProtocolHandler.PlayerJoin + public static void onPlayerLoggedIn(@NotNull ServerPlayer player) { + if (org.dreeam.leaf.LeafConfig.appleskinProtocol) { -+ players.add(player); + resetPlayerData(player); + } + } diff --git a/patches/server/0029-Leaves-Xaero-Map-Protocol.patch b/patches/server/0029-Leaves-Xaero-Map-Protocol.patch index 7ea49250d..015b8b61e 100644 --- a/patches/server/0029-Leaves-Xaero-Map-Protocol.patch +++ b/patches/server/0029-Leaves-Xaero-Map-Protocol.patch @@ -7,10 +7,10 @@ Original license: GPLv3 Original project: https://github.com/LeavesMC/Leaves diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 963d5b4d2bc44c32d23da0f45480e0b0bd293ec2..8042254407f7aabfa41483ef6b5661ca7cb11a75 100644 +index 032a682d6be24bbb3bdef1447ccdfe7da109f0e8..a5b21b5bc20b43c77cb6d276f89aceaef1ebc33a 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1351,6 +1351,7 @@ public abstract class PlayerList { +@@ -1372,6 +1372,7 @@ public abstract class PlayerList { player.connection.send(new ClientboundInitializeBorderPacket(worldborder)); player.connection.send(new ClientboundSetTimePacket(world.getGameTime(), world.getDayTime(), world.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT))); player.connection.send(new ClientboundSetDefaultSpawnPositionPacket(world.getSharedSpawnPos(), world.getSharedSpawnAngle())); diff --git a/patches/server/0035-Fix-tracker-NPE.patch b/patches/server/0035-Fix-tracker-NPE.patch index 261329173..aaf847e0a 100644 --- a/patches/server/0035-Fix-tracker-NPE.patch +++ b/patches/server/0035-Fix-tracker-NPE.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix tracker NPE diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 3fe61c302e4bb355edf2e8d6f608bcc31cc0197b..870ad0318cd6799b66ac2b0c73b498b95ac49821 100644 +index 6c3c4ec6cef581da45f6cdbb68cb74ea099a93a0..80badf34e9af7ef656f33e1bfe76208362778c3b 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -204,7 +204,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -242,7 +242,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider public final io.papermc.paper.util.player.NearbyPlayers nearbyPlayers; // Paper end // Paper start - optimise chunk tick iteration @@ -17,7 +17,7 @@ index 3fe61c302e4bb355edf2e8d6f608bcc31cc0197b..870ad0318cd6799b66ac2b0c73b498b9 public final com.destroystokyo.paper.util.misc.PlayerAreaMap playerMobSpawnMap = new gg.pufferfish.pufferfish.util.AsyncPlayerAreaMap(this.pooledLinkedPlayerHashSets); // Pufferfish // Paper end - optimise chunk tick iteration -@@ -1212,7 +1212,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1299,7 +1299,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider final Entity entity; private final int range; SectionPos lastSectionPos; @@ -27,7 +27,7 @@ index 3fe61c302e4bb355edf2e8d6f608bcc31cc0197b..870ad0318cd6799b66ac2b0c73b498b9 public TrackedEntity(Entity entity, int i, int j, boolean flag) { this.serverEntity = new ServerEntity(ChunkMap.this.level, entity, j, flag, this::broadcast, this.seenBy); // CraftBukkit diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 448f3a5197901c9d861bfca92ab3105056726624..363901a4084ca275a6fef752290bc11a0053ab38 100644 +index ba0fe0786479fcfd81202a02fe8feb382986116e..e413ebfb34a10b1ca8a323a9511ed48721919cea 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -10,6 +10,7 @@ import java.util.Arrays; diff --git a/patches/server/0037-Reduce-canSee-work.patch b/patches/server/0037-Reduce-canSee-work.patch index 011bcf711..241b2a20f 100644 --- a/patches/server/0037-Reduce-canSee-work.patch +++ b/patches/server/0037-Reduce-canSee-work.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Reduce canSee work Credit by: Martijn Muijsers , MachineBreaker diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index ed2bfe717406741583b9c261c6ba18cd4a47f67b..1916e5f1d6bc4c2b14a138a46477adea939caf81 100644 +index 192026f9edab53248dbd6db4fdb7d3955dff247e..bbfa6415fad20f3380c169c325d138e34b5e001b 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -383,11 +383,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -35,7 +35,7 @@ index ed2bfe717406741583b9c261c6ba18cd4a47f67b..1916e5f1d6bc4c2b14a138a46477adea return false; } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 57d3b887b606800d0d1e12b46ae793c50f09bee3..af472e1532000a764eb7464a1661fbcce561a8e5 100644 +index 9452e30892505b9749023c7867ac6e3e071e9194..2065c1f4f485d088a3fa0814ae50ddad53037d05 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -580,12 +580,14 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -53,7 +53,7 @@ index 57d3b887b606800d0d1e12b46ae793c50f09bee3..af472e1532000a764eb7464a1661fbcc if ((this.getUniqueId() == null) || (other.getUniqueId() == null)) { return false; } -@@ -2102,6 +2104,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2092,6 +2094,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { return this.canSee((org.bukkit.entity.Entity) player); } diff --git a/patches/server/0041-Fix-casting-in-Purpur-world-config.patch b/patches/server/0040-Fix-casting-in-Purpur-world-config.patch similarity index 100% rename from patches/server/0041-Fix-casting-in-Purpur-world-config.patch rename to patches/server/0040-Fix-casting-in-Purpur-world-config.patch diff --git a/patches/server/0040-Update-method-use.patch b/patches/server/0040-Update-method-use.patch deleted file mode 100644 index 35c0044bf..000000000 --- a/patches/server/0040-Update-method-use.patch +++ /dev/null @@ -1,61 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> -Date: Tue, 24 Oct 2023 19:50:01 -0400 -Subject: [PATCH] Update method use - - -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 6eb0e250101d10064fe150f03d98086afeba67ca..adff3b47b283998ae5137b1336b818a332bfd09d 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -@@ -155,42 +155,42 @@ public class CraftItem extends CraftEntity implements Item { - // Purpur start - @Override - public void setImmuneToCactus(boolean immuneToCactus) { -- item.immuneToCactus = immuneToCactus; -+ this.getHandle().immuneToCactus = immuneToCactus; - } - - @Override - public boolean isImmuneToCactus() { -- return item.immuneToCactus; -+ return this.getHandle().immuneToCactus; - } - - @Override - public void setImmuneToExplosion(boolean immuneToExplosion) { -- item.immuneToExplosion = immuneToExplosion; -+ this.getHandle().immuneToExplosion = immuneToExplosion; - } - - @Override - public boolean isImmuneToExplosion() { -- return item.immuneToExplosion; -+ return this.getHandle().immuneToExplosion; - } - - @Override - public void setImmuneToFire(boolean immuneToFire) { -- item.immuneToFire = immuneToFire; -+ this.getHandle().immuneToFire = immuneToFire; - } - - @Override - public boolean isImmuneToFire() { -- return item.immuneToFire; -+ return this.getHandle().immuneToFire; - } - - @Override - public void setImmuneToLightning(boolean immuneToLightning) { -- item.immuneToLightning = immuneToLightning; -+ this.getHandle().immuneToLightning = immuneToLightning; - } - - @Override - public boolean isImmuneToLightning() { -- return item.immuneToLightning; -+ return this.getHandle().immuneToLightning; - } - // Purpur end - }