diff --git a/patches/server/0003-Rebrand.patch b/patches/server/0001-Rebrand.patch similarity index 95% rename from patches/server/0003-Rebrand.patch rename to patches/server/0001-Rebrand.patch index 03a1c18f7..e199655a3 100644 --- a/patches/server/0003-Rebrand.patch +++ b/patches/server/0001-Rebrand.patch @@ -5,27 +5,25 @@ Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index f6cd7b910ce41a254e71bf0fcfe93c38abbb1445..139e2b17b899da6f0147bb8b4412e2e54e817be4 100644 +index 26618ddf85952694ae2c78f41a19e4b9a324f059..a20880e771091f6ab9cb7f8e03b7cf97fc8db9df 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -13,12 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { +@@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { val alsoShade: Configuration by configurations.creating dependencies { -- implementation(project(":pufferfish-api")) // Pufferfish // Paper -- // Pufferfish start -- implementation("io.papermc.paper:paper-mojangapi:1.19.2-R0.1-SNAPSHOT") { +- implementation(project(":paper-api")) +- implementation(project(":paper-mojangapi")) + // Purpur start + implementation(project(":purpur-api")) + implementation("io.papermc.paper:paper-mojangapi:${project.version}") { - exclude("io.papermc.paper", "paper-api") - } -- // Pufferfish end ++ exclude("io.papermc.paper", "paper-api") ++ } + // Purpur end // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -56,6 +56,10 @@ dependencies { +@@ -52,6 +56,10 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.7.3") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.7.3") @@ -33,19 +31,19 @@ index f6cd7b910ce41a254e71bf0fcfe93c38abbb1445..139e2b17b899da6f0147bb8b4412e2e5 + implementation("org.mozilla:rhino-engine:1.7.14") // Purpur + implementation("dev.omega24:upnp4j:1.0") // Purpur + - // Pufferfish start - implementation("org.yaml:snakeyaml:1.32") - implementation ("com.github.carleslc.Simple-YAML:Simple-Yaml:1.8.4") { -@@ -91,7 +95,7 @@ tasks.jar { + testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test + testImplementation("junit:junit:4.13.2") + testImplementation("org.hamcrest:hamcrest-library:1.3") +@@ -72,7 +80,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", -- "Implementation-Version" to "git-Pufferfish-$implementationVersion", // Pufferfish -+ "Implementation-Version" to "git-Purpur-$implementationVersion", // Pufferfish // Purpur +- "Implementation-Version" to "git-Paper-$implementationVersion", ++ "Implementation-Version" to "git-Purpur-$implementationVersion", // Purpur "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, -@@ -168,7 +172,7 @@ fun TaskContainer.registerRunTask( +@@ -149,7 +157,7 @@ fun TaskContainer.registerRunTask( name: String, block: JavaExec.() -> Unit ): TaskProvider = register(name) { @@ -162,7 +160,7 @@ index c5d5648f4ca603ef2b1df723b58f9caf4dd3c722..3cb56595822799926a8141e60a42f5d1 .completer(new ConsoleCommandCompleter(this.server)) .option(LineReader.Option.COMPLETE_IN_WORD, true); diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java -index abe37c7c3c6f5ab73afd738ec78f06d7e4d2ed96..b5b6657e52e4f7a630229bd3ba433438af293e22 100644 +index 1d714d3eff11ed14f218656008190017494d4830..ed3527612315e6e0649182ce4e1ae2834b0918a9 100644 --- a/src/main/java/net/minecraft/CrashReport.java +++ b/src/main/java/net/minecraft/CrashReport.java @@ -123,6 +123,10 @@ public class CrashReport { @@ -177,10 +175,10 @@ index abe37c7c3c6f5ab73afd738ec78f06d7e4d2ed96..b5b6657e52e4f7a630229bd3ba433438 stringbuilder.append(CrashReport.getErrorComment()); stringbuilder.append("\n\n"); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 67cba5cf510e4a602121e10c015a491650127752..ec6ac4baedf3fa7edd80695112b228a642baf4e2 100644 +index 8f0769d248c7f3cce753130147223403c7923304..34ece9ef681db6ebd0081e676e5eb9a0747442c4 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -922,7 +922,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "Purpur"; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 74c46cea456f4a736325892bb7b4d0f1b35b62cd..4a5804e14b82229fc4b4bf44725d79f55d0d4c80 100644 +index 7e38dd8b7015f8f648c551ab0a83c4822bfa37a0..4bd1410ab694a85d828da59615cfbc4fa0b4d237 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -265,7 +265,7 @@ import javax.annotation.Nullable; // Paper +@@ -267,7 +267,7 @@ import javax.annotation.Nullable; // Paper import javax.annotation.Nonnull; // Paper public final class CraftServer implements Server { -- private final String serverName = "Pufferfish"; // Paper // Pufferfish -+ private final String serverName = "Purpur"; // Paper // Pufferfish // Purpur +- private final String serverName = "Paper"; // Paper ++ private final String serverName = "Purpur"; // Paper // Purpur private final String serverVersion; private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); @@ -239,7 +237,7 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63ee @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index b25f5931f836fd4d8695120f0bcb7c52deff8583..9e3baf31775326e67a5a3bd5d9e836833b4810ba 100644 +index fe2124694eb080cab685a1ce1f6a66e2fcdf6a17..feb5f25886889710d51ab2a88192727c948322ca 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -912,7 +912,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -265,33 +263,33 @@ index d7ce4971d9271dbeff4adb9d852e4e7bdf60bf03..5a47a8785bc2e251d041f80a79295c43 // (async tasks must live with race-conditions if they attempt to cancel between these few lines of code) } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index 2b4581f92543c11f31bcc1417e90d7f90b2aea20..ffca5970a6259b024c9aa935e22cf72ed8cd8e9f 100644 +index 96f6e0554baf5915dd1f5b93f3bcfe7a13393c29..17c09c532838aeeb014b6884b6907151f6c82d13 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -@@ -470,7 +470,7 @@ public final class CraftMagicNumbers implements UnsafeValues { +@@ -452,7 +452,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @Override public com.destroystokyo.paper.util.VersionFetcher getVersionFetcher() { -- return new gg.pufferfish.pufferfish.PufferfishVersionFetcher(); // Pufferfish -+ return new com.destroystokyo.paper.PaperVersionFetcher(); // Pufferfish // Purpur +- return new com.destroystokyo.paper.PaperVersionFetcher(); ++ return new com.destroystokyo.paper.PaperVersionFetcher(); // Purpur - TODO: Pufferfish } @Override diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java -index 80553face9c70c2a3d897681e7761df85b22d464..99597258e8e88cd9e2c901c4ac3ff7faeeabee2b 100644 +index 774556a62eb240da42e84db4502e2ed43495be17..fb87620c742ff7912f5e8ccd2a7930dd605576d9 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java +++ b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java @@ -11,7 +11,7 @@ public final class Versioning { public static String getBukkitVersion() { String result = "Unknown-Version"; -- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/gg.pufferfish.pufferfish/pufferfish-api/pom.properties"); // Pufferfish -+ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Pufferfish // Purpur +- InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/io.papermc.paper/paper-api/pom.properties"); ++ InputStream stream = Bukkit.class.getClassLoader().getResourceAsStream("META-INF/maven/org.purpurmc.purpur/purpur-api/pom.properties"); // Purpur Properties properties = new Properties(); if (stream != null) { diff --git a/src/main/java/org/spigotmc/WatchdogThread.java b/src/main/java/org/spigotmc/WatchdogThread.java -index 98fba0288be9ed2cb18ffba5cf81148157dd4fcf..0801dea155048ac5383295f4fef9bd597b678535 100644 +index 50c72e5db369a180f425eaaa0411cb8871bc3463..dbd502761ff6e6efb252bb41376a7ff028c73895 100644 --- a/src/main/java/org/spigotmc/WatchdogThread.java +++ b/src/main/java/org/spigotmc/WatchdogThread.java @@ -96,7 +96,7 @@ public final class WatchdogThread extends io.papermc.paper.util.TickThread // Pa diff --git a/patches/server/0004-Purpur-config-files.patch b/patches/server/0002-Purpur-config-files.patch similarity index 91% rename from patches/server/0004-Purpur-config-files.patch rename to patches/server/0002-Purpur-config-files.patch index 5387bef11..801fe3a7e 100644 --- a/patches/server/0004-Purpur-config-files.patch +++ b/patches/server/0002-Purpur-config-files.patch @@ -5,42 +5,33 @@ Subject: [PATCH] Purpur config files diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 692c962193cf9fcc6801fc93f3220bdc673d527b..8cde30544e14f8fc2dac32966ae3c21f8cf3a551 100644 +index 4b002e8b75d117b726b0de274a76d3596fce015b..07665c89af795d76fab5fb70b4ecc7e8be68cab2 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -593,7 +593,7 @@ public class Metrics { boolean logFailedRequests = config.getBoolean("logFailedRequests", false); // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { -- Metrics metrics = new Metrics("Pufferfish", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish -+ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur +- Metrics metrics = new Metrics("Paper", serverUUID, logFailedRequests, Bukkit.getLogger()); ++ Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Purpur metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); -@@ -602,16 +602,8 @@ public class Metrics { +@@ -602,7 +602,8 @@ public class Metrics { })); metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); - metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : "offline")); -- final String paperVersion; -- final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); -- if (implVersion != null) { -- final String buildOrHash = implVersion.substring(implVersion.lastIndexOf('-') + 1); -- paperVersion = "git-Pufferfish-%s-%s".formatted(Bukkit.getServer().getMinecraftVersion(), buildOrHash); // Pufferfish -- } else { -- paperVersion = "unknown"; -- } -- metrics.addCustomChart(new Metrics.SimplePie("pufferfish_version", () -> paperVersion)); // Pufferfish + metrics.addCustomChart(new Metrics.SimplePie("online_mode", () -> Bukkit.getOnlineMode() ? "online" : (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ? "bungee" : "offline"))); // Purpur + metrics.addCustomChart(new Metrics.SimplePie("purpur_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur - - metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { - Map> map = new HashMap<>(); + final String paperVersion; + final String implVersion = org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion(); + if (implVersion != null) { diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java -index 0de2eae2d448ac9e269a4edf48406d5ea8af8059..f03fd95412883a3a5bbe2b91c603874bf147e6cb 100644 +index 56ae02aab93b9a698e9d2f07a0448aa4767169d9..756651db912068c837197a972e95bc66ab9d4a70 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java -@@ -336,6 +336,30 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy +@@ -332,6 +332,30 @@ public class CommandSourceStack implements SharedSuggestionProvider, com.destroy } } @@ -72,7 +63,7 @@ index 0de2eae2d448ac9e269a4edf48406d5ea8af8059..f03fd95412883a3a5bbe2b91c603874b boolean flag1 = this.source.acceptsSuccess() && !this.silent; boolean flag2 = broadcastToOps && this.source.shouldInformAdmins() && !this.silent; diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 10501842887c1ffdb6bb667480682b7174fd89c6..f8e39a8d6bb1b910ac71931a51d8a36d49d30d10 100644 +index 18348d01003c8b3299ae3d5292fd9e50f9153cce..546c233c0049c88610baa405f932bbd1d8ddf2fb 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -218,6 +218,15 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -92,19 +83,19 @@ index 10501842887c1ffdb6bb667480682b7174fd89c6..f8e39a8d6bb1b910ac71931a51d8a36d io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider // Paper end diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2f1b2160684bf60715cff541834b714ce62a0241..f8615d9714ac6a9c83d881d6d89b1182a0f0d835 100644 +index ce422c31385d9518e798c7a3456fad747b09ea61..5101c5d3b2dc4b9ae72d2c9bc8bbe83ad6836515 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -176,6 +176,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -175,6 +175,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + } // Paper end - public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray + public final org.purpurmc.purpur.PurpurWorldConfig purpurConfig; // Purpur public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -287,6 +288,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor +@@ -212,6 +213,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator) { // Paper this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper + this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur @@ -112,10 +103,10 @@ index 2f1b2160684bf60715cff541834b714ce62a0241..f8615d9714ac6a9c83d881d6d89b1182 this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 3234f6c53d931c13d47a58f8bb16e22b52389b4a..3cdb675a5ae2ca3e4694d379ffe4fdb4f7831e63 100644 +index 4bd1410ab694a85d828da59615cfbc4fa0b4d237..1225adadac3b4dd0e371b77efd8f30e99b71c4b9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -@@ -1037,6 +1037,7 @@ public final class CraftServer implements Server { +@@ -1039,6 +1039,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); @@ -123,7 +114,7 @@ index 3234f6c53d931c13d47a58f8bb16e22b52389b4a..3cdb675a5ae2ca3e4694d379ffe4fdb4 for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -1052,6 +1053,7 @@ public final class CraftServer implements Server { +@@ -1054,6 +1055,7 @@ public final class CraftServer implements Server { } } world.spigotConfig.init(); // Spigot @@ -131,7 +122,7 @@ index 3234f6c53d931c13d47a58f8bb16e22b52389b4a..3cdb675a5ae2ca3e4694d379ffe4fdb4 } Plugin[] pluginClone = pluginManager.getPlugins().clone(); // Paper -@@ -1067,6 +1069,7 @@ public final class CraftServer implements Server { +@@ -1069,6 +1071,7 @@ public final class CraftServer implements Server { this.reloadData(); org.spigotmc.SpigotConfig.registerCommands(); // Spigot io.papermc.paper.command.PaperCommands.registerCommands(this.console); // Paper @@ -139,7 +130,7 @@ index 3234f6c53d931c13d47a58f8bb16e22b52389b4a..3cdb675a5ae2ca3e4694d379ffe4fdb4 this.overrideAllCommandBlockCommands = this.commandsConfiguration.getStringList("command-block-overrides").contains("*"); this.ignoreVanillaPermissions = this.commandsConfiguration.getBoolean("ignore-vanilla-permissions"); -@@ -2917,6 +2920,18 @@ public final class CraftServer implements Server { +@@ -2914,6 +2917,18 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -159,7 +150,7 @@ index 3234f6c53d931c13d47a58f8bb16e22b52389b4a..3cdb675a5ae2ca3e4694d379ffe4fdb4 public void restart() { org.spigotmc.RestartCommand.restart(); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 7c29d92362a82330440dff151bcf421f15c68f71..39e98f1c62f372bca97fa47df8e79af693830a4a 100644 +index e7746952417a3ca4ea97103e38568db42039f717..754a47528fb675ceae7020d7ae26d1f9d951d27c 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -173,6 +173,14 @@ public class Main { diff --git a/patches/server/0003-Purpur-client-support.patch b/patches/server/0003-Purpur-client-support.patch new file mode 100644 index 000000000..00e3eff75 --- /dev/null +++ b/patches/server/0003-Purpur-client-support.patch @@ -0,0 +1,60 @@ +From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 +From: William Blake Galbreath +Date: Fri, 30 Jul 2021 14:31:25 -0500 +Subject: [PATCH] Purpur client support + + +diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java +index 6a11b262a6f1cd5eba96471666098c82978027ff..8a6d072bf5bb00a7c2a0460b85ba93b549825374 100644 +--- a/src/main/java/net/minecraft/server/level/ServerPlayer.java ++++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java +@@ -274,6 +274,7 @@ public class ServerPlayer extends Player { + public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper + public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper + public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event ++ public boolean purpurClient = false; // Purpur + + // 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/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +index 2a1cf4ff3d0cc062b593f5c58ee80b00395b097e..566a9449cf8a10fff9266a4384cfeb9492f4666e 100644 +--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +@@ -56,6 +56,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit + private @Nullable String clientBrandName = null; // Paper - Brand name + protected static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support ++ protected static final ResourceLocation PURPUR_CLIENT = new ResourceLocation("purpur", "client"); // Purpur + + public ServerCommonPacketListenerImpl(MinecraftServer minecraftserver, Connection networkmanager, CommonListenerCookie commonlistenercookie, ServerPlayer player) { // CraftBukkit + this.server = minecraftserver; +@@ -133,6 +134,13 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t register custom payload", ex); + this.disconnect("Invalid payload REGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause + } ++ // Purpur start ++ } else if (identifier.equals(PURPUR_CLIENT)) { ++ try { ++ player.purpurClient = true; ++ } catch (Exception ignore) { ++ } ++ // Purpur end + } else if (identifier.equals(CUSTOM_UNREGISTER)) { + try { + String channels = payload.toString(com.google.common.base.Charsets.UTF_8); +diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +index e188bb3ba5d2ec28421947c0b66b25eecb569bfe..5bcd736cae259e0aa425d709a61c680d80447631 100644 +--- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java ++++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +@@ -3283,4 +3283,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { + return this.spigot; + } + // Spigot end ++ ++ // Purpur start ++ @Override ++ public boolean usesPurpurClient() { ++ return getHandle().purpurClient; ++ } ++ // Purpur end + } diff --git a/patches/server/0006-Fix-decompile-errors.patch b/patches/server/0004-Fix-decompile-errors.patch similarity index 88% rename from patches/server/0006-Fix-decompile-errors.patch rename to patches/server/0004-Fix-decompile-errors.patch index 9f9c3c120..828fc95cc 100644 --- a/patches/server/0006-Fix-decompile-errors.patch +++ b/patches/server/0004-Fix-decompile-errors.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fix decompile errors diff --git a/src/main/java/net/minecraft/world/entity/decoration/Painting.java b/src/main/java/net/minecraft/world/entity/decoration/Painting.java -index 0f4ef103afcbabc04880c8fc3547b861341c15fc..d5784a19cec98eb199a51acd9e1f4de8c6bf7265 100644 +index d9016807bc21c38a5c38170e1335c79b39355bcb..03c065d0ad97d29f3586ba2bf3cd207b867ed634 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/Painting.java +++ b/src/main/java/net/minecraft/world/entity/decoration/Painting.java @@ -121,7 +121,7 @@ public class Painting extends HangingEntity implements VariantHolder getBrain() { @@ -44,10 +44,10 @@ index d02ee11066fc4f07ccb110b09b86d895ff90d4f2..e1be4a77fae0b9120781f460079269b8 @Override diff --git a/src/main/java/net/minecraft/world/level/block/Blocks.java b/src/main/java/net/minecraft/world/level/block/Blocks.java -index 877035b6c6593a28f475b9c5bcd7727e3fcdb802..0453397c157c8c7968947445f41bc46b68b111e8 100644 +index d5654cfe37bd82f1290b280990a8502432491ae1..b49e02ac7b3db9a5b79ce3f106ead19af4e7cfa6 100644 --- a/src/main/java/net/minecraft/world/level/block/Blocks.java +++ b/src/main/java/net/minecraft/world/level/block/Blocks.java -@@ -1159,7 +1159,7 @@ public class Blocks { +@@ -1160,7 +1160,7 @@ public class Blocks { } private static Boolean ocelotOrParrot(BlockState state, BlockGetter world, BlockPos pos, EntityType type) { diff --git a/patches/server/0007-Component-related-conveniences.patch b/patches/server/0005-Component-related-conveniences.patch similarity index 90% rename from patches/server/0007-Component-related-conveniences.patch rename to patches/server/0005-Component-related-conveniences.patch index a2f21c219..05961594c 100644 --- a/patches/server/0007-Component-related-conveniences.patch +++ b/patches/server/0005-Component-related-conveniences.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Component related conveniences diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0c3da427151d9a2ce1ca69acff283a153bd758f7..944866d42dbb4732f669c8c697934fdf0c212978 100644 +index 8a6d072bf5bb00a7c2a0460b85ba93b549825374..c30c707fc08493b9ee0c8d48652df80e55b8764f 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1780,6 +1780,26 @@ public class ServerPlayer extends Player { +@@ -1782,6 +1782,26 @@ public class ServerPlayer extends Player { this.lastSentExp = -1; // CraftBukkit - Added to reset } @@ -36,10 +36,10 @@ index 0c3da427151d9a2ce1ca69acff283a153bd758f7..944866d42dbb4732f669c8c697934fdf public void displayClientMessage(Component message, boolean overlay) { this.sendSystemMessage(message, overlay); diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index f097ec5b4e3ad6b1a7c464a8cff4f8b2568fcf4f..78636bf26ac8efaffd8a8f4b5bbc703d6b670b7c 100644 +index ba415d400c706c0483c0dc8da959b5ff39de1f4d..2fcf7f80be5f6a96c4ed45459fef3ced1f9e3813 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1045,6 +1045,20 @@ public abstract class PlayerList { +@@ -1039,6 +1039,20 @@ public abstract class PlayerList { } // CraftBukkit end @@ -81,10 +81,10 @@ index 25a5a3b949a0eb632611355e74ccd4865be108ca..14fcfd7c1d3a62833978e163f4e0d6f9 return this.type().msgId(); } diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 36795968f4c296f680f79cc5a795391ae13c64e4..6951b47abb5d36cdd9fe200152a93155c31aedaf 100644 +index f20ae9153b7098980ce6c0e75fcbbb4da652661b..78ba2e50abc3b5575bead1b51f37b530f5a7c4d7 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4047,6 +4047,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4054,6 +4054,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return SlotAccess.NULL; } diff --git a/patches/server/0005-Purpur-client-support.patch b/patches/server/0005-Purpur-client-support.patch deleted file mode 100644 index 3a9a2c820..000000000 --- a/patches/server/0005-Purpur-client-support.patch +++ /dev/null @@ -1,60 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Fri, 30 Jul 2021 14:31:25 -0500 -Subject: [PATCH] Purpur client support - - -diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index b382da838acc04a1c5d89064b4fa43bcdd38ae71..0c3da427151d9a2ce1ca69acff283a153bd758f7 100644 ---- a/src/main/java/net/minecraft/server/level/ServerPlayer.java -+++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -278,6 +278,7 @@ public class ServerPlayer extends Player { - public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet cachedSingleHashSet; // Paper - public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event -+ public boolean purpurClient = false; // Purpur - - 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)); - public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 6cafc20ce006872bedd28a34db11204c3c1fef58..c39070e445fc2e9a62d45ba88471525e06ddb807 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -3574,6 +3574,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - private static final ResourceLocation CUSTOM_UNREGISTER = new ResourceLocation("unregister"); - - private static final ResourceLocation MINECRAFT_BRAND = new ResourceLocation("brand"); // Paper - Brand support -+ private static final ResourceLocation PURPUR_CLIENT = new ResourceLocation("purpur", "client"); // Purpur - - @Override - public void handleCustomPayload(ServerboundCustomPayloadPacket packet) { -@@ -3598,6 +3599,13 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - ServerGamePacketListenerImpl.LOGGER.error("Couldn\'t unregister custom payload", ex); - this.disconnect("Invalid payload UNREGISTER!", org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PAYLOAD); // Paper - kick event cause - } -+ // Purpur start -+ } else if (packet.identifier.equals(PURPUR_CLIENT)) { -+ try { -+ player.purpurClient = true; -+ } catch (Exception ignore) { -+ } -+ // Purpur end - } else { - try { - byte[] data = new byte[packet.data.readableBytes()]; -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 3d5876cbadb5c8c02de751c3e15fc7f251ea7d35..ca91d359059303c40b2b914eac88666cde785f01 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3267,4 +3267,11 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - return this.spigot; - } - // Spigot end -+ -+ // Purpur start -+ @Override -+ public boolean usesPurpurClient() { -+ return getHandle().purpurClient; -+ } -+ // Purpur end - } diff --git a/patches/server/0008-Ridables.patch b/patches/server/0006-Ridables.patch similarity index 93% rename from patches/server/0008-Ridables.patch rename to patches/server/0006-Ridables.patch index f31b505d6..3abe20c9c 100644 --- a/patches/server/0008-Ridables.patch +++ b/patches/server/0006-Ridables.patch @@ -22,10 +22,10 @@ index 83cab746d1d6fe25c043c8aee28c39412b90c127..ec6b58dae525c81bbb1c0e2d96fbded6 super(x, y, z); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index ec6ac4baedf3fa7edd80695112b228a642baf4e2..9487d8aa544d3718395144580a6a00bed080dbe8 100644 +index 34ece9ef681db6ebd0081e676e5eb9a0747442c4..8c4bc2d32fa1c6d372edd8169207de17f41b3c19 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1539,6 +1539,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Paper net.minecraft.world.level.block.entity.HopperBlockEntity.skipHopperEvents = worldserver.paperConfig().hopper.disableMoveEvent || org.bukkit.event.inventory.InventoryMoveItemEvent.getHandlerList().getRegisteredListeners().length == 0; // Paper worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper @@ -34,7 +34,7 @@ index ec6ac4baedf3fa7edd80695112b228a642baf4e2..9487d8aa544d3718395144580a6a00be this.profiler.push(() -> { return worldserver + " " + worldserver.dimension().location(); diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index dbb59969cf55eda997588f4c3ef7dc899ea619bb..4c3b5a26a6b04afff3a707929ced3c62b5256a67 100644 +index 8cb1299d9110adc8f11e9be984ed8a4326a330cf..d060a6a45c614c92dd45e96bc1bf39ace3347fbb 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -223,6 +223,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -46,10 +46,10 @@ index dbb59969cf55eda997588f4c3ef7dc899ea619bb..4c3b5a26a6b04afff3a707929ced3c62 final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 944866d42dbb4732f669c8c697934fdf0c212978..33d13eaa0edef9e1e6652affbc8e04fa51c31df1 100644 +index c30c707fc08493b9ee0c8d48652df80e55b8764f..efaac631df6fb44979045c79162b9f9c580c3440 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -752,6 +752,15 @@ public class ServerPlayer extends Player { +@@ -754,6 +754,15 @@ public class ServerPlayer extends Player { this.trackStartFallingPosition(); this.trackEnteredOrExitedLavaOnVehicle(); this.advancements.flushDirty(this); @@ -66,12 +66,12 @@ index 944866d42dbb4732f669c8c697934fdf0c212978..33d13eaa0edef9e1e6652affbc8e04fa public void doTick() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index c39070e445fc2e9a62d45ba88471525e06ddb807..2e8920a0aa8177942ebad4bfbdb3ad45882e5e65 100644 +index b5fe3786b337fb99920aac72b865e6a25bcb9649..2b4a9b41cc8f826b39bcabbfd9dcd2ff9a875e23 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2849,6 +2849,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -2711,6 +2711,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); + cserver.getPluginManager().callEvent(event); + player.processClick(enumhand); // Purpur + @@ -79,10 +79,10 @@ index c39070e445fc2e9a62d45ba88471525e06ddb807..2e8920a0aa8177942ebad4bfbdb3ad45 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. diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 6951b47abb5d36cdd9fe200152a93155c31aedaf..14624fc143c9553930f181f7db93caecf24c0495 100644 +index 78ba2e50abc3b5575bead1b51f37b530f5a7c4d7..7f97cbb040e9d81ee3cccfddbed682bebaa4bda3 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -376,7 +376,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -375,7 +375,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -91,7 +91,7 @@ index 6951b47abb5d36cdd9fe200152a93155c31aedaf..14624fc143c9553930f181f7db93caec private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -2942,6 +2942,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2934,6 +2934,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { this.passengers = ImmutableList.copyOf(list); } @@ -105,7 +105,7 @@ index 6951b47abb5d36cdd9fe200152a93155c31aedaf..14624fc143c9553930f181f7db93caec this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -2982,6 +2989,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -2974,6 +2981,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return false; } // Spigot end @@ -120,12 +120,12 @@ index 6951b47abb5d36cdd9fe200152a93155c31aedaf..14624fc143c9553930f181f7db93caec if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -4883,4 +4898,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -4850,4 +4865,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } // Paper end + -+ // Purpur start ++ // Purpur start + @Nullable + private Player rider = null; + @@ -167,7 +167,7 @@ index 6951b47abb5d36cdd9fe200152a93155c31aedaf..14624fc143c9553930f181f7db93caec + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index 759713f7c646aaf1a918c87a2834a1d405385dad..c6a06e07f0b4bb29b5f4c70dfa53ff6db2e4e6ea 100644 +index 1bb8b6e91c44cd13411d96d749fa64835c75a267..75c278b67ad2b78766efd8f89c4c2ca7eb7cdcb2 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -23,6 +23,19 @@ public class GlowSquid extends Squid { @@ -191,10 +191,10 @@ index 759713f7c646aaf1a918c87a2834a1d405385dad..c6a06e07f0b4bb29b5f4c70dfa53ff6d 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 d265a32bd273beed0e65e224e1c5f9c0bca7b3fb..bfa091d30aafb34241953d7c700f13183e961bbf 100644 +index 641d4bb568784087426a5e28f96e16858ccb1074..e6b83abce3bbd2f5e89d02415bcc6b1a1b0b5da9 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 { +@@ -219,9 +219,9 @@ public abstract class LivingEntity extends Entity implements Attackable { protected int deathScore; public float lastHurt; public boolean jumping; @@ -207,7 +207,7 @@ index d265a32bd273beed0e65e224e1c5f9c0bca7b3fb..bfa091d30aafb34241953d7c700f1318 protected int lerpSteps; protected double lerpX; protected double lerpY; -@@ -286,7 +286,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -287,7 +287,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.effectsDirty = true; this.useItem = ItemStack.EMPTY; this.lastClimbablePos = Optional.empty(); @@ -216,15 +216,15 @@ index d265a32bd273beed0e65e224e1c5f9c0bca7b3fb..bfa091d30aafb34241953d7c700f1318 this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -337,6 +337,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -338,6 +338,7 @@ public abstract class LivingEntity extends Entity implements Attackable { public static AttributeSupplier.Builder createLivingAttributes() { - return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS); + return AttributeSupplier.builder().add(Attributes.MAX_HEALTH).add(Attributes.KNOCKBACK_RESISTANCE).add(Attributes.MOVEMENT_SPEED).add(Attributes.ARMOR).add(Attributes.ARMOR_TOUGHNESS).add(Attributes.MAX_ABSORPTION); } + public boolean shouldSendAttribute(Attribute attribute) { return true; } // Purpur @Override protected void checkFallDamage(double heightDifference, boolean onGround, BlockState state, BlockPos landedPosition) { -@@ -2690,7 +2691,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2699,7 +2700,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected long lastJumpTime = 0L; // Paper @@ -233,7 +233,7 @@ index d265a32bd273beed0e65e224e1c5f9c0bca7b3fb..bfa091d30aafb34241953d7c700f1318 Vec3 vec3d = this.getDeltaMovement(); // Paper start long time = System.nanoTime(); -@@ -3462,8 +3463,10 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3465,8 +3466,10 @@ public abstract class LivingEntity extends Entity implements Attackable { this.pushEntities(); this.level().getProfiler().pop(); // Paper start @@ -246,7 +246,7 @@ index d265a32bd273beed0e65e224e1c5f9c0bca7b3fb..bfa091d30aafb34241953d7c700f1318 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()); -@@ -3473,6 +3476,21 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -3476,6 +3479,21 @@ 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()); } } @@ -269,10 +269,10 @@ index d265a32bd273beed0e65e224e1c5f9c0bca7b3fb..bfa091d30aafb34241953d7c700f1318 // Paper end if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 7e453b4c49975bb06cb080f3626545286b947ddc..9ed3354296746e1c50d55bca8c07fd4946255795 100644 +index d28c477171c1b6888a45175075017d960464b5cd..439506a5916662c1976283da9834d6f19cfa7165 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -145,8 +145,8 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -147,8 +147,8 @@ public abstract class Mob extends LivingEntity implements Targeting { this.restrictRadius = -1.0F; this.goalSelector = new GoalSelector(world.getProfilerSupplier()); this.targetSelector = new GoalSelector(world.getProfilerSupplier()); @@ -283,7 +283,7 @@ index 7e453b4c49975bb06cb080f3626545286b947ddc..9ed3354296746e1c50d55bca8c07fd49 this.jumpControl = new JumpControl(this); this.bodyRotationControl = this.createBodyControl(); this.navigation = this.createNavigation(world); -@@ -1388,7 +1388,7 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1385,7 +1385,7 @@ public abstract class Mob extends LivingEntity implements Targeting { protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} protected InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -292,7 +292,7 @@ index 7e453b4c49975bb06cb080f3626545286b947ddc..9ed3354296746e1c50d55bca8c07fd49 } public boolean isWithinRestriction() { -@@ -1766,4 +1766,56 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -1769,4 +1769,56 @@ public abstract class Mob extends LivingEntity implements Targeting { return itemmonsteregg == null ? null : new ItemStack(itemmonsteregg); } @@ -350,13 +350,13 @@ index 7e453b4c49975bb06cb080f3626545286b947ddc..9ed3354296746e1c50d55bca8c07fd49 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027cfc868fb 100644 +index 7204b973c3ad9239e82355513f6d538107102e48..ffd1ae235e6602e73c6585f60c6ef5dd21844a12 100644 --- a/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java +++ b/src/main/java/net/minecraft/world/entity/ai/attributes/AttributeMap.java -@@ -24,14 +24,21 @@ public class AttributeMap { +@@ -23,13 +23,20 @@ public class AttributeMap { + private final Map attributes = Maps.newHashMap(); private final Set dirtyAttributes = Sets.newHashSet(); private final AttributeSupplier supplier; - private final java.util.function.Function createInstance; // Pufferfish + private final net.minecraft.world.entity.LivingEntity entity; // Purpur public AttributeMap(AttributeSupplier defaultAttributes) { @@ -367,7 +367,6 @@ index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027 + this.entity = entity; + // Purpur end this.supplier = defaultAttributes; - this.createInstance = attribute -> this.supplier.createInstance(this::onAttributeModified, attribute); // Pufferfish } private void onAttributeModified(AttributeInstance instance) { @@ -376,7 +375,7 @@ index e283eb57c25f7de222f9d09dca851169f5f6e488..210a0bee1227e4671909dd553ab22027 this.dirtyAttributes.add(instance); } -@@ -43,7 +50,7 @@ public class AttributeMap { +@@ -41,7 +48,7 @@ public class AttributeMap { public Collection getSyncableAttributes() { return this.attributes.values().stream().filter((attribute) -> { @@ -527,7 +526,7 @@ index 7df56705a4a0de2dc4ff7ab133fc26612c219162..384bed4505b6cabb1ae151cd2c4eb5e5 --this.lookAtCooldown; this.getYRotD().ifPresent((yaw) -> { diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index 2c91fe46355c9a201507de5577f693ed4f5fb974..e184d2a89a89d4bf77a32a2d610175c5bbd38a03 100644 +index 5beaa849a250ea005733250ad3edfa8382224667..2ee2097ebf7753d63a99fdf492da374849a345eb 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -18,6 +18,7 @@ import net.minecraft.world.entity.EntityDimensions; @@ -801,10 +800,10 @@ index 55026e1731e41b4e3e4c6a8fef5d96a32051a556..706ae64b894709601dccfb621d3c215f } diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 90ce201bc7c47cef9bc59d7b535a7453854bac75..90ec526b135a6de6e7ba16fdd3a113ef92b42ef6 100644 +index de51ce9875e12961e6e549e87d76f492d2f19787..3e89e788c796fe168e43a6b78c0d6c1fc077fc78 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -97,6 +97,31 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -98,6 +98,31 @@ public class Cat extends TamableAnimal implements VariantHolder { super(type, world); } @@ -836,7 +835,7 @@ index 90ce201bc7c47cef9bc59d7b535a7453854bac75..90ec526b135a6de6e7ba16fdd3a113ef public ResourceLocation getResourceLocation() { return this.getVariant().texture(); } -@@ -105,6 +130,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -106,6 +131,7 @@ public class Cat extends TamableAnimal implements VariantHolder { protected void registerGoals() { this.temptGoal = new Cat.CatTemptGoal(this, 0.6D, Cat.TEMPT_INGREDIENT, true); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -844,7 +843,7 @@ index 90ce201bc7c47cef9bc59d7b535a7453854bac75..90ec526b135a6de6e7ba16fdd3a113ef this.goalSelector.addGoal(1, new PanicGoal(this, 1.5D)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Cat.CatRelaxOnOwnerGoal(this)); -@@ -117,6 +143,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -118,6 +144,7 @@ public class Cat extends TamableAnimal implements VariantHolder { this.goalSelector.addGoal(10, new BreedGoal(this, 0.8D)); this.goalSelector.addGoal(11, new WaterAvoidingRandomStrollGoal(this, 0.8D, 1.0000001E-5F)); this.goalSelector.addGoal(12, new LookAtPlayerGoal(this, Player.class, 10.0F)); @@ -852,7 +851,7 @@ index 90ce201bc7c47cef9bc59d7b535a7453854bac75..90ec526b135a6de6e7ba16fdd3a113ef this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Rabbit.class, false, (Predicate) null)); this.targetSelector.addGoal(1, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); } -@@ -373,6 +400,7 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -374,6 +401,7 @@ public class Cat extends TamableAnimal implements VariantHolder { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -861,10 +860,10 @@ index 90ce201bc7c47cef9bc59d7b535a7453854bac75..90ec526b135a6de6e7ba16fdd3a113ef Item item = itemstack.getItem(); diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index 84cefbc339ca368ac306d521012ce2f826a660b5..600b7b4e510871de0dee4051158d344734f04966 100644 +index 5e7e6526e2750d508a870dfbdbb46e520d201796..89e93366395136af826d26be2b85ac881e0dfacc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -54,9 +54,27 @@ public class Chicken extends Animal { +@@ -55,9 +55,27 @@ public class Chicken extends Animal { this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); } @@ -916,10 +915,10 @@ index 824e5e4fe7619ae46061c3c978c9a044db8c84ab..e2a98b45e56a368de19bb65e304370a5 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 0263acf81330ada1bb8ae7d52a3b04e08d0c4dcb..11082cf272b72123d8917baa9a0d0e5367dca66b 100644 +index 3cdd9f379c7e2d46ea47c9ef55b121c93ec0bb4a..b0cff23aa6f841ad291437964ea5bebb6395de84 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -42,9 +42,27 @@ public class Cow extends Animal { +@@ -45,9 +45,27 @@ public class Cow extends Animal { super(type, world); } @@ -947,7 +946,7 @@ index 0263acf81330ada1bb8ae7d52a3b04e08d0c4dcb..11082cf272b72123d8917baa9a0d0e53 this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); -@@ -85,6 +103,7 @@ public class Cow extends Animal { +@@ -88,6 +106,7 @@ public class Cow extends Animal { @Override public InteractionResult mobInteract(Player player, InteractionHand hand) { @@ -955,7 +954,7 @@ index 0263acf81330ada1bb8ae7d52a3b04e08d0c4dcb..11082cf272b72123d8917baa9a0d0e53 ItemStack itemstack = player.getItemInHand(hand); if (itemstack.is(Items.BUCKET) && !this.isBaby()) { -@@ -92,7 +111,7 @@ public class Cow extends Animal { +@@ -95,7 +114,7 @@ public class Cow extends Animal { PlayerBucketFillEvent event = CraftEventFactory.callPlayerBucketFillEvent((ServerLevel) player.level(), player, this.blockPosition(), this.blockPosition(), null, itemstack, Items.MILK_BUCKET, hand); if (event.isCancelled()) { @@ -1090,10 +1089,10 @@ index 8448c5d778998390cf2b683f36e4e18ca7ffdc34..3dab78e2f39855f71bb7294521be71b3 this.setAirSupply(this.getMaxAirSupply()); } else { 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 62604ed2e82afd3603ccac5d9c6e285c431542b1..e0a21a0e8ff29f5b634fcb312881a1a93c6c3a44 100644 +index 31d4683f5e158f076ce9a416b7003478af293688..7d692f61ed4c6cc8e6b94eda4f48e9cb6baa0ae2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -141,6 +141,44 @@ public class Fox extends Animal implements VariantHolder { +@@ -144,6 +144,44 @@ public class Fox extends Animal implements VariantHolder { this.setCanPickUpLoot(true); } @@ -1138,7 +1137,7 @@ index 62604ed2e82afd3603ccac5d9c6e285c431542b1..e0a21a0e8ff29f5b634fcb312881a1a9 @Override protected void defineSynchedData() { super.defineSynchedData(); -@@ -160,6 +198,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -163,6 +201,7 @@ public class Fox extends Animal implements VariantHolder { return entityliving instanceof AbstractSchoolingFish; }); this.goalSelector.addGoal(0, new Fox.FoxFloatGoal()); @@ -1146,7 +1145,7 @@ index 62604ed2e82afd3603ccac5d9c6e285c431542b1..e0a21a0e8ff29f5b634fcb312881a1a9 this.goalSelector.addGoal(0, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Fox.FaceplantGoal()); this.goalSelector.addGoal(2, new Fox.FoxPanicGoal(2.2D)); -@@ -186,6 +225,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -189,6 +228,7 @@ public class Fox extends Animal implements VariantHolder { this.goalSelector.addGoal(11, new Fox.FoxSearchForItemsGoal()); this.goalSelector.addGoal(12, new Fox.FoxLookAtPlayerGoal(this, Player.class, 24.0F)); this.goalSelector.addGoal(13, new Fox.PerchAndSearchGoal()); @@ -1154,7 +1153,7 @@ index 62604ed2e82afd3603ccac5d9c6e285c431542b1..e0a21a0e8ff29f5b634fcb312881a1a9 this.targetSelector.addGoal(3, new Fox.DefendTrustedTargetGoal(LivingEntity.class, false, false, (entityliving) -> { return Fox.TRUSTED_TARGET_SELECTOR.test(entityliving) && !this.trusts(entityliving.getUUID()); })); -@@ -758,16 +798,16 @@ public class Fox extends Animal implements VariantHolder { +@@ -769,16 +809,16 @@ public class Fox extends Animal implements VariantHolder { return new Vec3(0.0D, (double) (0.55F * this.getEyeHeight()), (double) (this.getBbWidth() * 0.4F)); } @@ -1174,7 +1173,7 @@ index 62604ed2e82afd3603ccac5d9c6e285c431542b1..e0a21a0e8ff29f5b634fcb312881a1a9 } } -@@ -778,16 +818,16 @@ public class Fox extends Animal implements VariantHolder { +@@ -789,16 +829,16 @@ public class Fox extends Animal implements VariantHolder { } } @@ -1251,7 +1250,7 @@ index f383928fc5b331ddf128bdcb6a23010d8fe088d3..6815d7350a82c6d32f60aa6116466ebd float f1 = 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F; diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index a04374f91f2fbb31219d86b6ae63bcf8fdf7318c..7b0e3b46e3d318ee856d53cfc5532f3432447438 100644 +index 52cc265f1663d648b6bfd03f2ac3e191b1c16d44..9a84599457bbd14314e0c4f3fa8bf30bec8da347 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java @@ -63,6 +63,23 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder> optional = this.getEffectFromItemStack(itemstack); +@@ -144,7 +161,7 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder> optional = this.getEffectsFromItemStack(itemstack); - if (!optional.isPresent()) { + if (optional.isEmpty()) { - return InteractionResult.PASS; + return tryRide(player, hand); // Purpur } - Pair pair = (Pair) optional.get(); + if (!player.getAbilities().instabuild) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -index 924ea172cab5178e5754bfe09cc7b83c1a66faa6..c25549d516072bdb362f78efce3da730e08f3ccc 100644 +index 4300fab61765dd224fab084d118aae7294fc9de6..66f80ec010909648278c4e74c80d3766b9cf6c6a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Ocelot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Ocelot.java -@@ -68,6 +68,23 @@ public class Ocelot extends Animal { +@@ -70,6 +70,23 @@ public class Ocelot extends Animal { this.reassessTrustingGoals(); } @@ -1324,7 +1323,7 @@ index 924ea172cab5178e5754bfe09cc7b83c1a66faa6..c25549d516072bdb362f78efce3da730 public boolean isTrusting() { return (Boolean) this.entityData.get(Ocelot.DATA_TRUSTING); } -@@ -99,12 +116,14 @@ public class Ocelot extends Animal { +@@ -101,12 +118,14 @@ public class Ocelot extends Animal { protected void registerGoals() { this.temptGoal = new Ocelot.OcelotTemptGoal(this, 0.6D, Ocelot.TEMPT_INGREDIENT, true); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -1340,10 +1339,10 @@ index 924ea172cab5178e5754bfe09cc7b83c1a66faa6..c25549d516072bdb362f78efce3da730 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, false, false, Turtle.BABY_ON_LAND_SELECTOR)); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Panda.java b/src/main/java/net/minecraft/world/entity/animal/Panda.java -index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c361b9767 100644 +index 683cc5f9f066d554383fcd30e3654ac06ec76510..5b3a2010da3b6429da783f8263fd170a4fb8d80b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java -@@ -111,6 +111,32 @@ public class Panda extends Animal { +@@ -114,6 +114,32 @@ public class Panda extends Animal { } @@ -1376,7 +1375,7 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c @Override public boolean canTakeItem(ItemStack stack) { EquipmentSlot enumitemslot = Mob.getEquipmentSlotForItem(stack); -@@ -272,6 +298,7 @@ public class Panda extends Animal { +@@ -275,6 +301,7 @@ public class Panda extends Animal { @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); @@ -1384,7 +1383,7 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c this.goalSelector.addGoal(2, new Panda.PandaPanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new Panda.PandaBreedGoal(this, 1.0D)); this.goalSelector.addGoal(3, new Panda.PandaAttackGoal(this, 1.2000000476837158D, true)); -@@ -287,6 +314,7 @@ public class Panda extends Animal { +@@ -290,6 +317,7 @@ public class Panda extends Animal { this.goalSelector.addGoal(12, new Panda.PandaRollGoal(this)); this.goalSelector.addGoal(13, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(14, new WaterAvoidingRandomStrollGoal(this, 1.0D)); @@ -1392,7 +1391,7 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c this.targetSelector.addGoal(1, (new Panda.PandaHurtByTargetGoal(this, new Class[0])).setAlertOthers(new Class[0])); } -@@ -633,7 +661,7 @@ public class Panda extends Animal { +@@ -636,7 +664,7 @@ public class Panda extends Animal { ItemStack itemstack = player.getItemInHand(hand); if (this.isScared()) { @@ -1401,7 +1400,7 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c } else if (this.isOnBack()) { this.setOnBack(false); return InteractionResult.sidedSuccess(this.level().isClientSide); -@@ -650,7 +678,7 @@ public class Panda extends Animal { +@@ -653,7 +681,7 @@ public class Panda extends Animal { this.setInLove(player); } else { if (this.level().isClientSide || this.isSitting() || this.isInWater()) { @@ -1410,7 +1409,7 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c } this.tryToSit(); -@@ -669,7 +697,7 @@ public class Panda extends Animal { +@@ -672,7 +700,7 @@ public class Panda extends Animal { return InteractionResult.SUCCESS; } else { @@ -1419,8 +1418,8 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c } } -@@ -709,7 +737,7 @@ public class Panda extends Animal { - return !this.isOnBack() && !this.isScared() && !this.isEating() && !this.isRolling() && !this.isSitting(); +@@ -717,7 +745,7 @@ public class Panda extends Animal { + return new Vector3f(0.0F, dimensions.height - (this.isBaby() ? 0.4375F : 0.0F) * scaleFactor, 0.0F); } - private static class PandaMoveControl extends MoveControl { @@ -1428,7 +1427,7 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c private final Panda panda; -@@ -719,9 +747,9 @@ public class Panda extends Animal { +@@ -727,9 +755,9 @@ public class Panda extends Animal { } @Override @@ -1441,10 +1440,10 @@ index f43c4fed59c4c75540008284ddb197d9a6b5487b..cc12b93b5c95202c4e3417e3a35e5f5c } } diff --git a/src/main/java/net/minecraft/world/entity/animal/Parrot.java b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -index e1874aaa0065a6e8e6ae043713c22f08b58b5e21..dc6bc1ecb11a8d1776be488de4df7243d196f330 100644 +index 397264d31992fd43bd57736c25693ae001330b6d..a3cb82e65ea344de1889762f638e72fcf0a44714 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java -@@ -129,12 +129,68 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder type, Level world) { super(type, world); @@ -1514,7 +1513,7 @@ index e1874aaa0065a6e8e6ae043713c22f08b58b5e21..dc6bc1ecb11a8d1776be488de4df7243 @Nullable @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { -@@ -153,8 +209,10 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder { +@@ -87,6 +87,7 @@ public class Rabbit extends Animal implements VariantHolder { private boolean wasOnGround; private int jumpDelayTicks; public int moreCarrotTicks; @@ -1673,7 +1672,7 @@ index 082351bd5f98d8738334b9164375f63fdc890455..8e747771fe023dfa4cf61e5166d01736 public Rabbit(EntityType type, Level world) { super(type, world); -@@ -93,9 +94,55 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -94,9 +95,55 @@ public class Rabbit extends Animal implements VariantHolder { this.moveControl = new Rabbit.RabbitMoveControl(this); } @@ -1729,7 +1728,7 @@ index 082351bd5f98d8738334b9164375f63fdc890455..8e747771fe023dfa4cf61e5166d01736 this.goalSelector.addGoal(1, new ClimbOnTopOfPowderSnowGoal(this, this.level())); this.goalSelector.addGoal(1, new Rabbit.RabbitPanicGoal(this, 2.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 0.8D)); -@@ -110,6 +157,14 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -111,6 +158,14 @@ public class Rabbit extends Animal implements VariantHolder { @Override protected float getJumpPower() { @@ -1744,7 +1743,7 @@ index 082351bd5f98d8738334b9164375f63fdc890455..8e747771fe023dfa4cf61e5166d01736 float f = 0.3F; if (this.horizontalCollision || this.moveControl.hasWanted() && this.moveControl.getWantedY() > this.getY() + 0.5D) { -@@ -134,7 +189,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -135,7 +190,7 @@ public class Rabbit extends Animal implements VariantHolder { } @Override @@ -1753,7 +1752,7 @@ index 082351bd5f98d8738334b9164375f63fdc890455..8e747771fe023dfa4cf61e5166d01736 super.jumpFromGround(); double d0 = this.moveControl.getSpeedModifier(); -@@ -184,6 +239,13 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -185,6 +240,13 @@ public class Rabbit extends Animal implements VariantHolder { @Override public void customServerAiStep() { @@ -1767,7 +1766,7 @@ index 082351bd5f98d8738334b9164375f63fdc890455..8e747771fe023dfa4cf61e5166d01736 if (this.jumpDelayTicks > 0) { --this.jumpDelayTicks; } -@@ -468,7 +530,7 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -469,7 +531,7 @@ public class Rabbit extends Animal implements VariantHolder { } } @@ -1776,7 +1775,7 @@ index 082351bd5f98d8738334b9164375f63fdc890455..8e747771fe023dfa4cf61e5166d01736 private final Rabbit rabbit; private double nextJumpSpeed; -@@ -479,14 +541,14 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -480,14 +542,14 @@ public class Rabbit extends Animal implements VariantHolder { } @Override @@ -1817,10 +1816,10 @@ index 0af79daa357f53a8871e293b57e16c099e5d3f64..87c442fb198cad8671ad1419e589a5a6 public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index c0e89262c596fbdd0bb3c3f76baccb17a1bb5fcd..0e2f10fa133281477ab96ba743266ade4d5f2119 100644 +index 55afa58f3df53ce548c7484d8fff62c903f9dc07..80b91cdaffc0af25b9a8b13281519cf093928e85 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -117,10 +117,28 @@ public class Sheep extends Animal implements Shearable { +@@ -119,10 +119,28 @@ public class Sheep extends Animal implements Shearable { super(type, world); } @@ -2010,10 +2009,10 @@ index b05b560b7570e97bc234b75f26233909fcf575b3..71234b258157579d3a47064e7e299bb7 return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..46b71439efdab39c28d29684913bec2a1ba6491a 100644 +index 490472bb618e9ac07da5883a71dff8920525b1e2..b9fb6c5527a621bc8012188d2e08604fe730e6c8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -83,6 +83,23 @@ public class Turtle extends Animal { +@@ -86,6 +86,23 @@ public class Turtle extends Animal { this.setMaxUpStep(1.0F); } @@ -2037,7 +2036,7 @@ index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..46b71439efdab39c28d29684913bec2a public void setHomePos(BlockPos pos) { this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } -@@ -185,6 +202,7 @@ public class Turtle extends Animal { +@@ -188,6 +205,7 @@ public class Turtle extends Animal { @Override protected void registerGoals() { @@ -2045,8 +2044,8 @@ index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..46b71439efdab39c28d29684913bec2a this.goalSelector.addGoal(0, new Turtle.TurtlePanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new Turtle.TurtleBreedGoal(this, 1.0D)); this.goalSelector.addGoal(1, new Turtle.TurtleLayEggGoal(this, 1.0D)); -@@ -342,13 +360,15 @@ public class Turtle extends Animal { - org.bukkit.craftbukkit.event.CraftEventFactory.entityDamage = null; // CraftBukkit +@@ -351,13 +369,15 @@ public class Turtle extends Animal { + return new Vector3f(0.0F, dimensions.height + (this.isBaby() ? 0.0F : 0.15625F) * scaleFactor, -0.25F * scaleFactor); } - private static class TurtleMoveControl extends MoveControl { @@ -2062,7 +2061,7 @@ index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..46b71439efdab39c28d29684913bec2a } private void updateSpeed() { -@@ -367,8 +387,18 @@ public class Turtle extends Animal { +@@ -376,8 +396,18 @@ public class Turtle extends Animal { } @@ -2082,7 +2081,7 @@ index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..46b71439efdab39c28d29684913bec2a this.updateSpeed(); if (this.operation == MoveControl.Operation.MOVE_TO && !this.turtle.getNavigation().isDone()) { double d0 = this.wantedX - this.turtle.getX(); -@@ -384,7 +414,7 @@ public class Turtle extends Animal { +@@ -393,7 +423,7 @@ public class Turtle extends Animal { this.turtle.setYRot(this.rotlerp(this.turtle.getYRot(), f, 90.0F)); this.turtle.yBodyRot = this.turtle.getYRot(); @@ -2092,10 +2091,10 @@ index d3c15d029d5f003cba3c89f7ea1f3ed4f943f2bd..46b71439efdab39c28d29684913bec2a this.turtle.setSpeed(Mth.lerp(0.125F, this.turtle.getSpeed(), f1)); this.turtle.setDeltaMovement(this.turtle.getDeltaMovement().add(0.0D, (double) this.turtle.getSpeed() * d1 * 0.1D, 0.0D)); diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 57ceec70bb150afaa66962090b142048d5b50c2f..40d647d6b3132f8273d43a1addcb8c8116c7ec19 100644 +index eecb7511582e5e316b71fa4a4734881424be5ca7..2efa2e19485f9d959a55115ab62f985454689379 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -103,9 +103,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -105,9 +105,32 @@ public class Wolf extends TamableAnimal implements NeutralMob { this.setPathfindingMalus(BlockPathTypes.DANGER_POWDER_SNOW, -1.0F); } @@ -2128,7 +2127,7 @@ index 57ceec70bb150afaa66962090b142048d5b50c2f..40d647d6b3132f8273d43a1addcb8c81 this.goalSelector.addGoal(1, new Wolf.WolfPanicGoal(1.5D)); this.goalSelector.addGoal(2, new SitWhenOrderedToGoal(this)); this.goalSelector.addGoal(3, new Wolf.WolfAvoidEntityGoal<>(this, Llama.class, 24.0F, 1.5D, 1.5D)); -@@ -117,6 +140,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -119,6 +142,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { this.goalSelector.addGoal(9, new BegGoal(this, 8.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(10, new RandomLookAroundGoal(this)); @@ -2137,10 +2136,10 @@ index 57ceec70bb150afaa66962090b142048d5b50c2f..40d647d6b3132f8273d43a1addcb8c81 this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index 1a0eee3b766a5ce5623c32ed9c023a0f80db1d1a..6c2129b93dbeaeb1e8e8db58fce8670ef8ce5716 100644 +index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..80ff5b8b2041afd7ffef99c33ecd4f5252e827fe 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -@@ -101,10 +101,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -100,10 +100,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS private float spinningAnimationTicks; private float spinningAnimationTicks0; public boolean forceDancing = false; // CraftBukkit @@ -2165,7 +2164,7 @@ index 1a0eee3b766a5ce5623c32ed9c023a0f80db1d1a..6c2129b93dbeaeb1e8e8db58fce8670e this.setCanPickUpLoot(this.canPickUpLoot()); this.vibrationUser = new Allay.VibrationUser(); this.vibrationData = new VibrationSystem.Data(); -@@ -118,6 +131,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -117,6 +130,28 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS } // CraftBukkit end @@ -2194,17 +2193,16 @@ index 1a0eee3b766a5ce5623c32ed9c023a0f80db1d1a..6c2129b93dbeaeb1e8e8db58fce8670e @Override protected Brain.Provider brainProvider() { return Brain.provider(Allay.MEMORY_TYPES, Allay.SENSOR_TYPES); -@@ -226,7 +261,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -224,6 +259,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @Override protected void customServerAiStep() { this.level().getProfiler().push("allayBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("allayActivityUpdate"); 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 42e22a4b9cb6841de04862cc81454da3232aa65a..b76bead9c107889e9b2f11bdc24ad7da811f97ed 100644 +index aa850cfaa0534d57e83f37360724da2428a48a18..74ea2d9fbd4967f666ac469ff4067fe0c597c655 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,23 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { return this.modelRotationValues; -@@ -289,7 +306,7 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder { +@@ -79,16 +79,65 @@ public class Frog extends Animal implements VariantHolder { public final AnimationState croakAnimationState = new AnimationState(); public final AnimationState tongueAnimationState = new AnimationState(); public final AnimationState swimIdleAnimationState = new AnimationState(); @@ -2364,16 +2361,15 @@ index 80ddb3059d6484c2b90c55ef601043798f1a4b50..f189e0493286d58fbe16a30912b3a1dc @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -166,7 +215,7 @@ public class Frog extends Animal implements VariantHolder { +@@ -167,6 +216,7 @@ public class Frog extends Animal implements VariantHolder { @Override protected void customServerAiStep() { this.level().getProfiler().push("frogBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish this.getBrain().tick((ServerLevel)this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("frogActivityUpdate"); -@@ -347,7 +396,7 @@ public class Frog extends Animal implements VariantHolder { +@@ -352,7 +402,7 @@ public class Frog extends Animal implements VariantHolder { return world.getBlockState(pos.below()).is(BlockTags.FROGS_SPAWNABLE_ON) && isBrightEnoughToSpawn(world, pos); } @@ -2383,7 +2379,7 @@ index 80ddb3059d6484c2b90c55ef601043798f1a4b50..f189e0493286d58fbe16a30912b3a1dc super(entity); } diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -index 6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5..af8438ae8c805d3276ef2d82eb39b08880fcc8a1 100644 +index 4aeab90e778629c355189dfe79c39c4b21f5f5ac..b3533626fd12686d6ebb3330874f805c99a1f5f2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java @@ -45,13 +45,50 @@ public class Tadpole extends AbstractFish { @@ -2438,20 +2434,19 @@ index 6ed4ac06c76b8d0d6e8db778cade15dbd1e3e5f5..af8438ae8c805d3276ef2d82eb39b088 @Override protected PathNavigation createNavigation(Level world) { return new WaterBoundPathNavigation(this, world); -@@ -81,7 +118,7 @@ public class Tadpole extends AbstractFish { +@@ -80,6 +117,7 @@ public class Tadpole extends AbstractFish { @Override protected void customServerAiStep() { this.level().getProfiler().push("tadpoleBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("tadpoleActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index 7f21d1d400c8a5615ed1a787dcb0680338f8c28d..ec956339b02fc9da53563d67c0eeaa91a3c3a8ee 100644 +index 111a244087e24f25ba8524a46a228da10cd9498a..e82904142e32fe2da62e2cd00b8436b94de8c048 100644 --- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -@@ -90,6 +90,23 @@ public class Goat extends Animal { +@@ -92,6 +92,23 @@ public class Goat extends Animal { return InstrumentItem.create(Items.GOAT_HORN, (Holder) holderset.getRandomElement(randomsource).get()); } @@ -2475,20 +2470,19 @@ index 7f21d1d400c8a5615ed1a787dcb0680338f8c28d..ec956339b02fc9da53563d67c0eeaa91 @Override protected Brain.Provider brainProvider() { return Brain.provider(Goat.MEMORY_TYPES, Goat.SENSOR_TYPES); -@@ -193,7 +210,7 @@ public class Goat extends Animal { +@@ -194,6 +211,7 @@ public class Goat extends Animal { @Override protected void customServerAiStep() { this.level().getProfiler().push("goatBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Uncomment when pufferfish patch ++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); this.level().getProfiler().push("goatActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 49d7109b6ca63c8073db777549a65b2fcb70967e..4b656f4e1660978e3dd284093241003cabff4f23 100644 +index 09e9c0e55c789f03a4b64136f28154bd114db6f5..27050c00ea4e4b301d4c85528117fc1d87e6f1ef 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -147,12 +147,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -149,12 +149,22 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, protected AbstractHorse(EntityType type, Level world) { super(type, world); @@ -2511,7 +2505,7 @@ index 49d7109b6ca63c8073db777549a65b2fcb70967e..4b656f4e1660978e3dd284093241003c this.goalSelector.addGoal(1, new PanicGoal(this, 1.2D)); this.goalSelector.addGoal(1, new RunAroundLikeCrazyGoal(this, 1.2D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D, AbstractHorse.class)); -@@ -163,6 +173,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -165,6 +175,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, if (this.canPerformRearing()) { this.goalSelector.addGoal(9, new RandomStandGoal(this)); } @@ -2556,10 +2550,10 @@ index 5f5dc651d570989ec1294c31a14dcfede466b80a..3e50581033e88e8eddcbd85bfa890cbe protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index d28089c37707f323f73e60cb0ebed4e3cdf8c0fd..42d5b435728aa497dc34f0ac984e8637fe96343d 100644 +index 5f61c97478f005aaaaad1b027118079db7275cf7..0549974c56ae7d05b5eec77029c5d08a6614a8bf 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -@@ -76,7 +76,51 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, Level world) { super(type, world); @@ -2611,7 +2605,7 @@ index d28089c37707f323f73e60cb0ebed4e3cdf8c0fd..42d5b435728aa497dc34f0ac984e8637 public boolean isTraderLlama() { return false; -@@ -127,6 +171,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder entitytypes, Level world) { super(EntityType.ENDER_DRAGON, world); -@@ -126,7 +127,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -128,7 +129,37 @@ public class EnderDragon extends Mob implements Enemy { this.noPhysics = true; this.noCulling = true; this.phaseManager = new EnderDragonPhaseManager(this); @@ -2840,7 +2835,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb } public void setDragonFight(EndDragonFight fight) { -@@ -141,6 +172,17 @@ public class EnderDragon extends Mob implements Enemy { +@@ -143,6 +174,17 @@ public class EnderDragon extends Mob implements Enemy { return this.fightOrigin; } @@ -2858,7 +2853,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb public static AttributeSupplier.Builder createAttributes() { return Mob.createMobAttributes().add(Attributes.MAX_HEALTH, 200.0D); } -@@ -202,6 +244,37 @@ public class EnderDragon extends Mob implements Enemy { +@@ -204,6 +246,37 @@ public class EnderDragon extends Mob implements Enemy { @Override public void aiStep() { @@ -2896,7 +2891,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb this.processFlappingMovement(); if (this.level().isClientSide) { this.setHealth(this.getHealth()); -@@ -228,6 +301,8 @@ public class EnderDragon extends Mob implements Enemy { +@@ -230,6 +303,8 @@ public class EnderDragon extends Mob implements Enemy { float f; if (this.isDeadOrDying()) { @@ -2905,7 +2900,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb float f1 = (this.random.nextFloat() - 0.5F) * 8.0F; f = (this.random.nextFloat() - 0.5F) * 4.0F; -@@ -240,9 +315,9 @@ public class EnderDragon extends Mob implements Enemy { +@@ -242,9 +317,9 @@ public class EnderDragon extends Mob implements Enemy { f = 0.2F / ((float) vec3d.horizontalDistance() * 10.0F + 1.0F); f *= (float) Math.pow(2.0D, vec3d.y); @@ -2917,7 +2912,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb this.flapTime += f * 0.5F; } else { this.flapTime += f; -@@ -287,7 +362,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -278,7 +353,7 @@ public class EnderDragon extends Mob implements Enemy { } this.phaseManager.getCurrentPhase().doClientTick(); @@ -2926,7 +2921,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb DragonPhaseInstance idragoncontroller = this.phaseManager.getCurrentPhase(); idragoncontroller.doServerTick(); -@@ -356,7 +431,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -347,7 +422,7 @@ public class EnderDragon extends Mob implements Enemy { this.tickPart(this.body, (double) (f11 * 0.5F), 0.0D, (double) (-f12 * 0.5F)); this.tickPart(this.wing1, (double) (f12 * 4.5F), 2.0D, (double) (f11 * 4.5F)); this.tickPart(this.wing2, (double) (f12 * -4.5F), 2.0D, (double) (f11 * -4.5F)); @@ -2935,7 +2930,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb this.knockBack(this.level().getEntities((Entity) this, this.wing1.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.knockBack(this.level().getEntities((Entity) this, this.wing2.getBoundingBox().inflate(4.0D, 2.0D, 4.0D).move(0.0D, -2.0D, 0.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); this.hurt(this.level().getEntities((Entity) this, this.head.getBoundingBox().inflate(1.0D), EntitySelector.NO_CREATIVE_OR_SPECTATOR)); -@@ -400,7 +475,7 @@ public class EnderDragon extends Mob implements Enemy { +@@ -391,7 +466,7 @@ public class EnderDragon extends Mob implements Enemy { } if (!this.level().isClientSide) { @@ -2945,7 +2940,7 @@ index a24ae93efcdb2da5782d342c7697a1bb253400c7..c5100d3d8c36bf0c07f2028c5d3ec4bb this.dragonFight.updateDragon(this); } diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index c65ab566c6241dd6a44bd11a449ef0c4b2f6dc65..6674d1b184246ecce5270a6826b153903e4a5a88 100644 +index 1e07febcf7a3dfb281728cc5e3e4f15dd776d7e0..6c86411658ef0bf64cb8cf4f213112b65f2d1d90 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java @@ -84,16 +84,30 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -3094,7 +3089,7 @@ index c65ab566c6241dd6a44bd11a449ef0c4b2f6dc65..6674d1b184246ecce5270a6826b15390 this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); } -@@ -263,6 +377,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -256,6 +370,16 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @Override protected void customServerAiStep() { @@ -3111,7 +3106,7 @@ index c65ab566c6241dd6a44bd11a449ef0c4b2f6dc65..6674d1b184246ecce5270a6826b15390 int i; if (this.getInvulnerableTicks() > 0) { -@@ -583,11 +707,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -576,11 +700,11 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob } public int getAlternativeTarget(int headIndex) { @@ -3126,7 +3121,7 @@ index c65ab566c6241dd6a44bd11a449ef0c4b2f6dc65..6674d1b184246ecce5270a6826b15390 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java -index 26c7b2f18f21b04529f989b345c385693d98c903..b31076f93fda4db8306135a2679be598063b2e09 100644 +index b319021b22c5dceba6199ed27814b2dcf47b8d50..2dbcfd847dd5b6db587b291a8a7a6e278949c3a9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -70,12 +70,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -3229,10 +3224,10 @@ index 17aa7676ab624440651850bbe5689f8a6c9dbeed..63049b0b4a4ae09e5925129dc363e43d if (this.nextHeightOffsetChangeTick <= 0) { this.nextHeightOffsetChangeTick = 100; diff --git a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java -index da48bd8e15463be8170262ae90a8e95575959bf2..34abd8093015d7cdaf2faca2396d3950ca0a361b 100644 +index 70d25bb45ad603095a1f5812cc396dfc5f16a1e1..562faf0257388d9c22146a418f25716cef7471b8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java +++ b/src/main/java/net/minecraft/world/entity/monster/CaveSpider.java -@@ -28,6 +28,23 @@ public class CaveSpider extends Spider { +@@ -29,6 +29,23 @@ public class CaveSpider extends Spider { return Spider.createAttributes().add(Attributes.MAX_HEALTH, 12.0D); } @@ -3433,10 +3428,10 @@ index 991d728db2a3b64316fc2102cf3aee470327a62e..c64c88ddd929d49fcfc6ebc2d0030bc8 } diff --git a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java -index 8f481e11815d7162dd62a2b850b3d2af6d904519..16486ece9fc415d875ff94d9b806b0b5884ebc11 100644 +index efc1d49c5bfea7d1674b8a9de2c8b617657eda0f..37afe706c5c453003ea96e62f376f45d7b8eb4a8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java -@@ -33,6 +33,18 @@ public class ElderGuardian extends Guardian { +@@ -36,6 +36,18 @@ public class ElderGuardian extends Guardian { } @@ -3456,10 +3451,10 @@ index 8f481e11815d7162dd62a2b850b3d2af6d904519..16486ece9fc415d875ff94d9b806b0b5 return Guardian.createAttributes().add(Attributes.MOVEMENT_SPEED, 0.30000001192092896D).add(Attributes.ATTACK_DAMAGE, 8.0D).add(Attributes.MAX_HEALTH, 80.0D); } diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index 410f10ad93935d1c078447a4596023f367a8e9b7..dc359bb3a45a0b648933894e18d4ee6b51e3c7bc 100644 +index b0a97679157a18a3c623ce3b2ae315789772c254..bc2b436b03548effa821311d35433bc328d54a91 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -96,9 +96,27 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -98,9 +98,27 @@ public class EnderMan extends Monster implements NeutralMob { this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); } @@ -3487,7 +3482,7 @@ index 410f10ad93935d1c078447a4596023f367a8e9b7..dc359bb3a45a0b648933894e18d4ee6b this.goalSelector.addGoal(1, new EnderMan.EndermanFreezeWhenLookedAt(this)); this.goalSelector.addGoal(2, new MeleeAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D, 0.0F)); -@@ -106,6 +124,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -108,6 +126,7 @@ public class EnderMan extends Monster implements NeutralMob { this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); this.goalSelector.addGoal(10, new EnderMan.EndermanLeaveBlockGoal(this)); this.goalSelector.addGoal(11, new EnderMan.EndermanTakeBlockGoal(this)); @@ -3495,7 +3490,7 @@ index 410f10ad93935d1c078447a4596023f367a8e9b7..dc359bb3a45a0b648933894e18d4ee6b this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, true, false)); -@@ -287,7 +306,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -294,7 +313,7 @@ public class EnderMan extends Monster implements NeutralMob { @Override protected void customServerAiStep() { @@ -3504,7 +3499,7 @@ index 410f10ad93935d1c078447a4596023f367a8e9b7..dc359bb3a45a0b648933894e18d4ee6b float f = this.getLightLevelDependentMagicValue(); if (f > 0.5F && this.level().canSeeSky(this.blockPosition()) && this.random.nextFloat() * 30.0F < (f - 0.4F) * 2.0F && this.tryEscape(com.destroystokyo.paper.event.entity.EndermanEscapeEvent.Reason.RUNAWAY)) { // Paper -@@ -408,6 +427,7 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -409,6 +428,7 @@ public class EnderMan extends Monster implements NeutralMob { public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { return false; @@ -3513,10 +3508,10 @@ index 410f10ad93935d1c078447a4596023f367a8e9b7..dc359bb3a45a0b648933894e18d4ee6b boolean flag = source.getDirectEntity() instanceof ThrownPotion; boolean flag1; diff --git a/src/main/java/net/minecraft/world/entity/monster/Endermite.java b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -index 29b8771ec85f07fcd9d9ba041c9a25a212009b16..638665391f7552d054965f7e449b96ec6bceb03d 100644 +index 66b6c55f72aec7e4e9dfa5417a46ba68dbb16a83..7fb02aab225a45e951ab1e7c6ba1c53f53d0fecd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Endermite.java +++ b/src/main/java/net/minecraft/world/entity/monster/Endermite.java -@@ -37,14 +37,33 @@ public class Endermite extends Monster { +@@ -38,14 +38,33 @@ public class Endermite extends Monster { this.xpReward = 3; } @@ -3551,10 +3546,10 @@ index 29b8771ec85f07fcd9d9ba041c9a25a212009b16..638665391f7552d054965f7e449b96ec this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); } diff --git a/src/main/java/net/minecraft/world/entity/monster/Evoker.java b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -index a6dde4e31790eaecff27135a4036627192c85702..13e0fc756c6f572d0d688ae788e784eda6ce6d98 100644 +index 7f0fbca7638bf89465bafed9d106813b86f0149b..a566824074850724023830f6b6fa3728d0b2aa99 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Evoker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Evoker.java -@@ -48,10 +48,28 @@ public class Evoker extends SpellcasterIllager { +@@ -50,10 +50,28 @@ public class Evoker extends SpellcasterIllager { this.xpReward = 10; } @@ -3583,7 +3578,7 @@ index a6dde4e31790eaecff27135a4036627192c85702..13e0fc756c6f572d0d688ae788e784ed this.goalSelector.addGoal(1, new Evoker.EvokerCastingSpellGoal()); this.goalSelector.addGoal(2, new AvoidEntityGoal<>(this, Player.class, 8.0F, 0.6D, 1.0D)); this.goalSelector.addGoal(4, new Evoker.EvokerSummonSpellGoal()); -@@ -60,6 +78,7 @@ public class Evoker extends SpellcasterIllager { +@@ -62,6 +80,7 @@ public class Evoker extends SpellcasterIllager { this.goalSelector.addGoal(8, new RandomStrollGoal(this, 0.6D)); this.goalSelector.addGoal(9, new LookAtPlayerGoal(this, Player.class, 3.0F, 1.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); @@ -3592,10 +3587,10 @@ index a6dde4e31790eaecff27135a4036627192c85702..13e0fc756c6f572d0d688ae788e784ed this.targetSelector.addGoal(2, (new NearestAttackableTargetGoal<>(this, Player.class, true)).setUnseenMemoryTicks(300)); this.targetSelector.addGoal(3, (new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)).setUnseenMemoryTicks(300)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ghast.java b/src/main/java/net/minecraft/world/entity/monster/Ghast.java -index 592b0dae251800552a0771ec46b4b8532b63075d..9f09ccd41320423179dd1cf81c2a7094b88a008b 100644 +index c135bc245f59a1af706f98b9d140dee77016b12f..3f886ffb0aa8591e4ca8324301ae9a8eeac57ab4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ghast.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ghast.java -@@ -44,11 +44,47 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -45,11 +45,47 @@ public class Ghast extends FlyingMob implements Enemy { this.moveControl = new Ghast.GhastMoveControl(this); } @@ -3643,7 +3638,7 @@ index 592b0dae251800552a0771ec46b4b8532b63075d..9f09ccd41320423179dd1cf81c2a7094 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entityliving) -> { return Math.abs(entityliving.getY() - this.getY()) <= 4.0D; })); -@@ -103,7 +139,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -104,7 +140,7 @@ public class Ghast extends FlyingMob implements Enemy { } public static AttributeSupplier.Builder createAttributes() { @@ -3652,7 +3647,7 @@ index 592b0dae251800552a0771ec46b4b8532b63075d..9f09ccd41320423179dd1cf81c2a7094 } @Override -@@ -160,7 +196,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -171,7 +207,7 @@ public class Ghast extends FlyingMob implements Enemy { return 2.6F; } @@ -3661,7 +3656,7 @@ index 592b0dae251800552a0771ec46b4b8532b63075d..9f09ccd41320423179dd1cf81c2a7094 private final Ghast ghast; private int floatDuration; -@@ -171,7 +207,7 @@ public class Ghast extends FlyingMob implements Enemy { +@@ -182,7 +218,7 @@ public class Ghast extends FlyingMob implements Enemy { } @Override @@ -3671,10 +3666,10 @@ index 592b0dae251800552a0771ec46b4b8532b63075d..9f09ccd41320423179dd1cf81c2a7094 if (this.floatDuration-- <= 0) { this.floatDuration += this.ghast.getRandom().nextInt(5) + 2; diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java -index 41004c28edb748e12c4f868aa07b4672891197c1..33d9d90495efc8b80a8f948752becfb203ee8e63 100644 +index 793c72bb7b86e404926085629121d6cad19a2740..198e3219e8f44eaea8ff1914c6c20efda172ff70 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -14,6 +14,29 @@ public class Giant extends Monster { +@@ -15,6 +15,29 @@ public class Giant extends Monster { super(type, world); } @@ -3705,10 +3700,10 @@ index 41004c28edb748e12c4f868aa07b4672891197c1..33d9d90495efc8b80a8f948752becfb2 protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return 10.440001F; diff --git a/src/main/java/net/minecraft/world/entity/monster/Guardian.java b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d48e3c6853 100644 +index 45300f79cba6133d2a2eca706eae03ee3cd973c3..3a2ed35542c775a0712b3bec94b7292215e4fba5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Guardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/Guardian.java -@@ -69,15 +69,36 @@ public class Guardian extends Monster { +@@ -70,15 +70,36 @@ public class Guardian extends Monster { this.xpReward = 10; this.setPathfindingMalus(BlockPathTypes.WATER, 0.0F); this.moveControl = new Guardian.GuardianMoveControl(this); @@ -3745,7 +3740,7 @@ index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d4 this.goalSelector.addGoal(4, this.guardianAttackGoal = new Guardian.GuardianAttackGoal(this)); // CraftBukkit - assign field this.goalSelector.addGoal(5, pathfindergoalmovetowardsrestriction); this.goalSelector.addGoal(7, this.randomStrollGoal); -@@ -86,6 +107,7 @@ public class Guardian extends Monster { +@@ -87,6 +108,7 @@ public class Guardian extends Monster { this.goalSelector.addGoal(9, new RandomLookAroundGoal(this)); this.randomStrollGoal.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); pathfindergoalmovetowardsrestriction.setFlags(EnumSet.of(Goal.Flag.MOVE, Goal.Flag.LOOK)); @@ -3753,7 +3748,7 @@ index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d4 this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 10, true, false, new Guardian.GuardianAttackSelector(this))); } -@@ -351,7 +373,7 @@ public class Guardian extends Monster { +@@ -352,7 +374,7 @@ public class Guardian extends Monster { @Override public void travel(Vec3 movementInput) { if (this.isControlledByLocalInstance() && this.isInWater()) { @@ -3762,8 +3757,8 @@ index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d4 this.move(MoverType.SELF, this.getDeltaMovement()); this.setDeltaMovement(this.getDeltaMovement().scale(0.9D)); if (!this.isMoving() && this.getTarget() == null) { -@@ -363,7 +385,7 @@ public class Guardian extends Monster { - +@@ -369,7 +391,7 @@ public class Guardian extends Monster { + return new Vector3f(0.0F, dimensions.height + 0.125F * scaleFactor, 0.0F); } - private static class GuardianMoveControl extends MoveControl { @@ -3771,7 +3766,7 @@ index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d4 private final Guardian guardian; -@@ -372,8 +394,17 @@ public class Guardian extends Monster { +@@ -378,8 +400,17 @@ public class Guardian extends Monster { this.guardian = guardian; } @@ -3790,7 +3785,7 @@ index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d4 if (this.operation == MoveControl.Operation.MOVE_TO && !this.guardian.getNavigation().isDone()) { Vec3 vec3d = new Vec3(this.wantedX - this.guardian.getX(), this.wantedY - this.guardian.getY(), this.wantedZ - this.guardian.getZ()); double d0 = vec3d.length(); -@@ -384,7 +415,7 @@ public class Guardian extends Monster { +@@ -390,7 +421,7 @@ public class Guardian extends Monster { this.guardian.setYRot(this.rotlerp(this.guardian.getYRot(), f, 90.0F)); this.guardian.yBodyRot = this.guardian.getYRot(); @@ -3800,10 +3795,10 @@ index 5e9b9e9f124ec6103b2e832ae94bc5b334a2c533..a893a8cb6f9aa79520d9a7814be459d4 this.guardian.setSpeed(f2); diff --git a/src/main/java/net/minecraft/world/entity/monster/Husk.java b/src/main/java/net/minecraft/world/entity/monster/Husk.java -index efe8e6b895da1a81e5de42697fda58443cf15a59..5beed21038f88ebb4826b66013d0ae45a1f1ec34 100644 +index 8ef1e325d722ca36fc0fc36f1e5287d7002b9fb2..774c15a91b0e988364acc33b8516ef132bcc9464 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Husk.java +++ b/src/main/java/net/minecraft/world/entity/monster/Husk.java -@@ -22,6 +22,23 @@ public class Husk extends Zombie { +@@ -24,6 +24,23 @@ public class Husk extends Zombie { super(type, world); } @@ -3916,10 +3911,10 @@ index 2858ea5562d06c11e5c7337a2b123f9be7a3f62e..aad51022eac584fbc058c2b25e2bf192 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Phantom.java b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..8c8ff7d291999cc8ab251a145db000871050236f 100644 +index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..34de7704ad6bf6989fb83a1e24905098d7ba0123 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java -@@ -60,6 +60,64 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -61,6 +61,64 @@ public class Phantom extends FlyingMob implements Enemy { this.lookControl = new Phantom.PhantomLookControl(this); } @@ -3984,7 +3979,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..8c8ff7d291999cc8ab251a145db00087 @Override public boolean isFlapping() { return (this.getUniqueFlapTickOffset() + this.tickCount) % Phantom.TICKS_PER_FLAP == 0; -@@ -72,9 +130,11 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -73,9 +131,11 @@ public class Phantom extends FlyingMob implements Enemy { @Override protected void registerGoals() { @@ -3996,7 +3991,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..8c8ff7d291999cc8ab251a145db00087 this.targetSelector.addGoal(1, new Phantom.PhantomAttackPlayerTargetGoal()); } -@@ -145,6 +205,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -146,6 +206,7 @@ public class Phantom extends FlyingMob implements Enemy { @Override public void aiStep() { if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - Configurable Burning @@ -4004,7 +3999,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..8c8ff7d291999cc8ab251a145db00087 this.setSecondsOnFire(8); } -@@ -269,7 +330,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -274,7 +335,7 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -4013,7 +4008,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..8c8ff7d291999cc8ab251a145db00087 private float speed = 0.1F; -@@ -277,8 +338,19 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -282,8 +343,19 @@ public class Phantom extends FlyingMob implements Enemy { super(entity); } @@ -4034,7 +4029,7 @@ index 4a132c3eff6978e927bcd4df56b9ce0306af6d19..8c8ff7d291999cc8ab251a145db00087 if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -324,14 +396,20 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -329,14 +401,20 @@ public class Phantom extends FlyingMob implements Enemy { } } @@ -4097,10 +4092,10 @@ index cec545c3baa6599d47b9cf1a4b97de8771062a22..31d204d8d81ccc30371070af3678d82d this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Ravager.java b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -index e87c6c8ab585d6b0b38bbb8e42c0082e38f03250..8a99c74f1cb6b558421b11e8562ba6082492b2d2 100644 +index 0c11d9bef8f0129c541e30ad057612e881703b24..cfa324c6a75ac83cff4ba87034677d4e9415189e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java -@@ -68,14 +68,39 @@ public class Ravager extends Raider { +@@ -71,14 +71,39 @@ public class Ravager extends Raider { this.setPathfindingMalus(BlockPathTypes.LEAVES, 0.0F); } @@ -4132,7 +4127,7 @@ index e87c6c8ab585d6b0b38bbb8e42c0082e38f03250..8a99c74f1cb6b558421b11e8562ba608 super.registerGoals(); this.goalSelector.addGoal(0, new FloatGoal(this)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.goalSelector.addGoal(4, new Ravager.RavagerMeleeAttackGoal()); + this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, true)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 0.4D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); this.goalSelector.addGoal(10, new LookAtPlayerGoal(this, Mob.class, 8.0F)); @@ -4140,7 +4135,7 @@ index e87c6c8ab585d6b0b38bbb8e42c0082e38f03250..8a99c74f1cb6b558421b11e8562ba608 this.targetSelector.addGoal(2, (new HurtByTargetGoal(this, new Class[]{Raider.class})).setAlertOthers()); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true, (entityliving) -> { -@@ -153,7 +178,7 @@ public class Ravager extends Raider { +@@ -136,7 +161,7 @@ public class Ravager extends Raider { @Override public void aiStep() { super.aiStep(); @@ -4150,10 +4145,10 @@ index e87c6c8ab585d6b0b38bbb8e42c0082e38f03250..8a99c74f1cb6b558421b11e8562ba608 this.getAttribute(Attributes.MOVEMENT_SPEED).setBaseValue(0.0D); } else { diff --git a/src/main/java/net/minecraft/world/entity/monster/Shulker.java b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -index d2073de07bdad71b20e05046577b16649123967b..3e5548d0489b13b4a1d5c22c9d3bf19ead87928e 100644 +index 8cb6f2d32c4b7a62ec1bdfeb8b661a1387cafe4b..eea85643a2cedb5fd1a08892aea82b96b935e408 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Shulker.java +++ b/src/main/java/net/minecraft/world/entity/monster/Shulker.java -@@ -98,12 +98,31 @@ public class Shulker extends AbstractGolem implements VariantHolder type, Level world) { super(type, world); -@@ -71,12 +72,48 @@ public class Slime extends Mob implements Enemy { +@@ -68,12 +69,48 @@ public class Slime extends Mob implements Enemy { this.moveControl = new Slime.SlimeMoveControl(this); } @@ -4321,7 +4316,7 @@ index 343433158507451152e5b2fc5e5fd0b0e6b229db..c74db4080ad3d726c4b5cb374e20e6df this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, (entityliving) -> { return Math.abs(entityliving.getY() - this.getY()) <= 4.0D; })); -@@ -368,11 +405,12 @@ public class Slime extends Mob implements Enemy { +@@ -375,11 +412,12 @@ public class Slime extends Mob implements Enemy { } @Override @@ -4335,7 +4330,7 @@ index 343433158507451152e5b2fc5e5fd0b0e6b229db..c74db4080ad3d726c4b5cb374e20e6df } @Nullable -@@ -406,7 +444,7 @@ public class Slime extends Mob implements Enemy { +@@ -413,7 +451,7 @@ public class Slime extends Mob implements Enemy { return super.getDimensions(pose).scale(0.255F * (float) this.getSize()); } @@ -4344,7 +4339,7 @@ index 343433158507451152e5b2fc5e5fd0b0e6b229db..c74db4080ad3d726c4b5cb374e20e6df private float yRot; private int jumpDelay; -@@ -425,21 +463,33 @@ public class Slime extends Mob implements Enemy { +@@ -432,21 +470,33 @@ public class Slime extends Mob implements Enemy { } public void setWantedMovement(double speed) { @@ -4381,7 +4376,7 @@ index 343433158507451152e5b2fc5e5fd0b0e6b229db..c74db4080ad3d726c4b5cb374e20e6df if (this.jumpDelay-- <= 0) { this.jumpDelay = this.slime.getJumpDelay(); if (this.isAggressive) { -@@ -456,7 +506,7 @@ public class Slime extends Mob implements Enemy { +@@ -463,7 +513,7 @@ public class Slime extends Mob implements Enemy { this.mob.setSpeed(0.0F); } } else { @@ -4391,10 +4386,10 @@ index 343433158507451152e5b2fc5e5fd0b0e6b229db..c74db4080ad3d726c4b5cb374e20e6df } diff --git a/src/main/java/net/minecraft/world/entity/monster/Spider.java b/src/main/java/net/minecraft/world/entity/monster/Spider.java -index 05432184077752b1d0cb764a5e39ed875748b2d6..9f6eaf76a39a9c3e7aed2e0ce91960200b4de664 100644 +index 71b5a9c97a13f703073c0122742ff9e8a0e49df2..3c3eb009f2d80d658447034c3df41070f254349b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java -@@ -51,14 +51,33 @@ public class Spider extends Monster { +@@ -53,14 +53,33 @@ public class Spider extends Monster { super(type, world); } @@ -4457,7 +4452,7 @@ index 118b636a44e4b062e812e433f603b039276337da..137ee6d1aa8ec334009b6fab21b9f303 BlockPos blockPos = pos; diff --git a/src/main/java/net/minecraft/world/entity/monster/Strider.java b/src/main/java/net/minecraft/world/entity/monster/Strider.java -index ebf54d6e36fdee2833250816fae14195ac45eb67..ccc76bf5431af723eef8e4d39c96daa44d1f6b5c 100644 +index 61162ecd43dc5e6f7898daecdec49f444e6d869b..bfd69abf24d788b5e539498d56ade57fcb78f580 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Strider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Strider.java @@ -100,6 +100,23 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @@ -4487,12 +4482,12 @@ index ebf54d6e36fdee2833250816fae14195ac45eb67..ccc76bf5431af723eef8e4d39c96daa4 @@ -161,6 +178,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { @Override protected void registerGoals() { - this.panicGoal = new PanicGoal(this, 1.65D); + this.goalSelector.addGoal(1, new PanicGoal(this, 1.65D)); + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.goalSelector.addGoal(1, this.panicGoal); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); this.temptGoal = new TemptGoal(this, 1.4D, Strider.TEMPT_ITEMS, false); -@@ -470,7 +488,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { + this.goalSelector.addGoal(3, this.temptGoal); +@@ -468,7 +486,7 @@ public class Strider extends Animal implements ItemSteerable, Saddleable { if (!enuminteractionresult.consumesAction()) { ItemStack itemstack = player.getItemInHand(hand); @@ -4502,7 +4497,7 @@ index ebf54d6e36fdee2833250816fae14195ac45eb67..ccc76bf5431af723eef8e4d39c96daa4 if (flag && !this.isSilent()) { this.level().playSound((Player) null, this.getX(), this.getY(), this.getZ(), SoundEvents.STRIDER_EAT, this.getSoundSource(), 1.0F, 1.0F + (this.random.nextFloat() - this.random.nextFloat()) * 0.2F); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vex.java b/src/main/java/net/minecraft/world/entity/monster/Vex.java -index 65cb385ab294e362d666a6d03c4496cdc3b64890..40f42c83d6417258123753ba9315ca27c2b43b22 100644 +index 90e577b1a89b02c38daff2845a63dafe5ed929e1..566fa6f2f26139e457584b6e73fd8609efbf67d7 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vex.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vex.java @@ -63,6 +63,50 @@ public class Vex extends Monster implements TraceableEntity { @@ -4586,8 +4581,8 @@ index 65cb385ab294e362d666a6d03c4496cdc3b64890..40f42c83d6417258123753ba9315ca27 } @Override -@@ -235,14 +281,14 @@ public class Vex extends Monster implements TraceableEntity { - return 0.4D; +@@ -240,14 +286,14 @@ public class Vex extends Monster implements TraceableEntity { + return new Vector3f(0.0F, dimensions.height - 0.0625F * scaleFactor, 0.0F); } - private class VexMoveControl extends MoveControl { @@ -4603,7 +4598,7 @@ index 65cb385ab294e362d666a6d03c4496cdc3b64890..40f42c83d6417258123753ba9315ca27 if (this.operation == MoveControl.Operation.MOVE_TO) { Vec3 vec3d = new Vec3(this.wantedX - Vex.this.getX(), this.wantedY - Vex.this.getY(), this.wantedZ - Vex.this.getZ()); double d0 = vec3d.length(); -@@ -251,7 +297,7 @@ public class Vex extends Monster implements TraceableEntity { +@@ -256,7 +302,7 @@ public class Vex extends Monster implements TraceableEntity { this.operation = MoveControl.Operation.WAIT; Vex.this.setDeltaMovement(Vex.this.getDeltaMovement().scale(0.5D)); } else { @@ -4613,7 +4608,7 @@ index 65cb385ab294e362d666a6d03c4496cdc3b64890..40f42c83d6417258123753ba9315ca27 Vec3 vec3d1 = Vex.this.getDeltaMovement(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java -index 2acc531bd9e948251cac77d979f973678f576394..f8337259af80cede27e9a37c5634ccba9f837076 100644 +index ad41bbbf5395ed18c2c9e1e692c7661a6e0cb98c..049e81af9d5cc746e872be9bdec80917e3137be3 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Vindicator.java +++ b/src/main/java/net/minecraft/world/entity/monster/Vindicator.java @@ -58,14 +58,33 @@ public class Vindicator extends AbstractIllager { @@ -4645,16 +4640,16 @@ index 2acc531bd9e948251cac77d979f973678f576394..f8337259af80cede27e9a37c5634ccba this.goalSelector.addGoal(1, new Vindicator.VindicatorBreakDoorGoal(this)); this.goalSelector.addGoal(2, new AbstractIllager.RaiderOpenDoorGoal(this)); this.goalSelector.addGoal(3, new Raider.HoldGroundAttackGoal(this, 10.0F)); - this.goalSelector.addGoal(4, new Vindicator.VindicatorMeleeAttackGoal(this)); + this.goalSelector.addGoal(4, new MeleeAttackGoal(this, 1.0D, false)); + this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, Raider.class)).setAlertOthers()); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Witch.java b/src/main/java/net/minecraft/world/entity/monster/Witch.java -index 701f6bf1d558cf0ec4bc1abb9e1f66d96ea5a6c9..c7ceeb28b53879395c697cbb3778563511bc1209 100644 +index 580dff41d746d9591f718081d9dfe4ac77e7eeaa..c146d16acac7d3ea380b5e3591f22491c102d7a9 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java -@@ -57,6 +57,23 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -59,6 +59,23 @@ public class Witch extends Raider implements RangedAttackMob { super(type, world); } @@ -4678,7 +4673,7 @@ index 701f6bf1d558cf0ec4bc1abb9e1f66d96ea5a6c9..c7ceeb28b53879395c697cbb37785635 @Override protected void registerGoals() { super.registerGoals(); -@@ -65,10 +82,12 @@ public class Witch extends Raider implements RangedAttackMob { +@@ -67,10 +84,12 @@ public class Witch extends Raider implements RangedAttackMob { }); this.attackPlayersGoal = new NearestAttackableWitchTargetGoal<>(this, Player.class, 10, true, false, (Predicate) null); this.goalSelector.addGoal(1, new FloatGoal(this)); @@ -4692,7 +4687,7 @@ index 701f6bf1d558cf0ec4bc1abb9e1f66d96ea5a6c9..c7ceeb28b53879395c697cbb37785635 this.targetSelector.addGoal(2, this.healRaidersGoal); this.targetSelector.addGoal(3, this.attackPlayersGoal); diff --git a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java -index 9a81cb0c3a5ac40ff50dc7c81f6196a447cd03c6..45c7d673cb15fc002538c2713e36f591fe33de92 100644 +index 3dcd43279ce1295b37c3504ecbdaac5275df2b80..728e3c78fb17d954247cc62f05cdd970d8b5f540 100644 --- a/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/WitherSkeleton.java @@ -35,6 +35,23 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -4720,10 +4715,10 @@ index 9a81cb0c3a5ac40ff50dc7c81f6196a447cd03c6..45c7d673cb15fc002538c2713e36f591 protected void registerGoals() { this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 7815af9b64ead32d6f7bcad6f86b2d21ec4aec22..393dde215894616c073efd28b529c9dac9815adc 100644 +index 11275a9ec6faa69c9f054683cb47312e443ba883..dc29e875c1e184c1c4553c127bb8c86dddf8c5ab 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -67,6 +67,23 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -69,6 +69,23 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4747,7 +4742,7 @@ index 7815af9b64ead32d6f7bcad6f86b2d21ec4aec22..393dde215894616c073efd28b529c9da @Override protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); -@@ -199,6 +216,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -201,6 +218,7 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level().getProfiler().push("zoglinBrain"); @@ -4756,10 +4751,10 @@ index 7815af9b64ead32d6f7bcad6f86b2d21ec4aec22..393dde215894616c073efd28b529c9da this.level().getProfiler().pop(); this.updateActivity(); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index 3f8c1d1d3c408fc4f15c4b5680bc22c86f104a9d..d3f1bcd9daeea282bef549ea18cedf0fc7a9ad8d 100644 +index 1ddbba72a5fd3d225b651815a38d178941fba289..fb4b3bb082e299723613a28831ff8f9c2eae7ffd 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -106,11 +106,30 @@ public class Zombie extends Monster { +@@ -107,11 +107,30 @@ public class Zombie extends Monster { this(EntityType.ZOMBIE, world); } @@ -4791,10 +4786,10 @@ index 3f8c1d1d3c408fc4f15c4b5680bc22c86f104a9d..d3f1bcd9daeea282bef549ea18cedf0f } diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 25ed5571b24e590bc95056020d84496492b53298..87ae149be7a3eaf14406a7df9f174574d77c63c5 100644 +index 807cff3fb51269b97d9aecbcc4706f0a139dfeaa..be1234f1c087b3140c79278e7d7e7c1394352cc8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -79,6 +79,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -82,6 +82,23 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { }); } @@ -4819,10 +4814,10 @@ index 25ed5571b24e590bc95056020d84496492b53298..87ae149be7a3eaf14406a7df9f174574 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index aff140cfb2bbdce8b512080cf394c84c5c4ff807..fe9bdc4006b916748e55a976b6c8621070fb73c5 100644 +index 1afe8a8694c1fd0bf43ce3c0c36a83fda9aec141..252d2994fac423ea1fef36bdc7c09778203049cb 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -63,6 +63,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -64,6 +64,23 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F); } @@ -4847,10 +4842,10 @@ index aff140cfb2bbdce8b512080cf394c84c5c4ff807..fe9bdc4006b916748e55a976b6c86210 public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index d6d61b91096d28eea1e5af69ea1c07890820ee7f..8ba7896a823d60065c1e293d0fcdb2d3ac76da77 100644 +index 4257f2282152aee09533c9a2e53018d3e49effa4..fda37baf4afef5e51265833166767b7ae8fccb96 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -67,6 +67,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -69,6 +69,23 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { this.xpReward = 5; } @@ -4874,17 +4869,16 @@ index d6d61b91096d28eea1e5af69ea1c07890820ee7f..8ba7896a823d60065c1e293d0fcdb2d3 @Override public boolean canBeLeashed(Player player) { return !this.isLeashed(); -@@ -130,7 +147,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -131,6 +148,7 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @Override protected void customServerAiStep() { this.level().getProfiler().push("hoglinBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - Pufferfish this.getBrain().tick((ServerLevel)this.level(), this); this.level().getProfiler().pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index e235cc9d1b3ce59ab662ef3cf3ce0267ca78536d..c54f70f608093511f9ef1e7e904d9497a4710bdd 100644 +index 6407ddef8442fce4f310ac4babf3e3de0dd5fc9a..4c47457aba8e85770b204b0b2a27e21e11371277 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -96,6 +96,23 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -4911,12 +4905,11 @@ index e235cc9d1b3ce59ab662ef3cf3ce0267ca78536d..c54f70f608093511f9ef1e7e904d9497 @Override public void addAdditionalSaveData(CompoundTag nbt) { super.addAdditionalSaveData(nbt); -@@ -309,7 +326,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -303,6 +320,7 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @Override protected void customServerAiStep() { this.level().getProfiler().push("piglinBrain"); -- if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider ++ //if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish this.getBrain().tick((ServerLevel) this.level(), this); this.level().getProfiler().pop(); PiglinAi.updateActivity(this); @@ -4957,10 +4950,10 @@ index e1be4a77fae0b9120781f460079269b85c993930..2d842c0dfce1c7e7229bd42b2a92c024 this.level().getProfiler().pop(); PiglinBruteAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -index 71db8bd6885377d55cfc571fccc21df6d8a57b54..0aa6874022d4ee8e38f2d85c45a2a4201c2a83fe 100644 +index b2bc3a832c310448046ccde37a04918aa6d63197..c31a23faa07e3261d609bbecae0c2f3b15a382c6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/Warden.java -@@ -121,8 +121,32 @@ public class Warden extends Monster implements VibrationSystem { +@@ -122,8 +122,32 @@ public class Warden extends Monster implements VibrationSystem { this.setPathfindingMalus(BlockPathTypes.LAVA, 8.0F); this.setPathfindingMalus(BlockPathTypes.DAMAGE_FIRE, 0.0F); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, 0.0F); @@ -4993,7 +4986,7 @@ index 71db8bd6885377d55cfc571fccc21df6d8a57b54..0aa6874022d4ee8e38f2d85c45a2a420 @Override public Packet getAddEntityPacket() { return new ClientboundAddEntityPacket(this, this.hasPose(Pose.EMERGING) ? 1 : 0); -@@ -396,19 +420,16 @@ public class Warden extends Monster implements VibrationSystem { +@@ -395,19 +419,16 @@ public class Warden extends Monster implements VibrationSystem { @Contract("null->false") public boolean canTargetEntity(@Nullable Entity entity) { @@ -5017,10 +5010,10 @@ index 71db8bd6885377d55cfc571fccc21df6d8a57b54..0aa6874022d4ee8e38f2d85c45a2a420 public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) { diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index c4ddf2661bca728d504918171295e10e307b18b4..7b58329067d8debeb34abe801d150038a362ffed 100644 +index f555e29c7f9ea4ddb243a018bdc93d2bf1950c3c..ee4892919763e10c7b2072851bfbbccda00c89ac 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -156,6 +156,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -155,6 +155,28 @@ public class Villager extends AbstractVillager implements ReputationEventHandler this.setVillagerData(this.getVillagerData().setType(type).setProfession(VillagerProfession.NONE)); } @@ -5049,16 +5042,15 @@ index c4ddf2661bca728d504918171295e10e307b18b4..7b58329067d8debeb34abe801d150038 @Override public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error -@@ -257,7 +279,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -254,6 +276,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler + protected void customServerAiStep(final boolean inactive) { // Paper end this.level().getProfiler().push("villagerBrain"); - // Pufferfish start -- if (!inactive && this.behaviorTick++ % this.activatedPriority == 0) { -+ if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider - this.getBrain().tick((ServerLevel) this.level(), this); // Paper - } - // Pufferfish end -@@ -317,7 +339,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler ++ //if (!inactive && (getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) { // Purpur - only use brain if no rider // Purpur - TODO: Pufferfish + if (!inactive) this.getBrain().tick((ServerLevel) this.level(), this); // Paper + this.level().getProfiler().pop(); + if (this.assignProfessionWhenSpawned) { +@@ -311,7 +334,7 @@ public class Villager extends AbstractVillager implements ReputationEventHandler if (!itemstack.is(Items.VILLAGER_SPAWN_EGG) && this.isAlive() && !this.isTrading() && !this.isSleeping()) { if (this.isBaby()) { this.setUnhappy(); @@ -5067,7 +5059,7 @@ index c4ddf2661bca728d504918171295e10e307b18b4..7b58329067d8debeb34abe801d150038 } else { boolean flag = this.getOffers().isEmpty(); -@@ -330,8 +352,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -324,8 +347,9 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } if (flag) { @@ -5079,10 +5071,10 @@ index c4ddf2661bca728d504918171295e10e307b18b4..7b58329067d8debeb34abe801d150038 this.startTrading(player); } 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 0002f3a2f2e096d4b2015baf707707f6cc1a9582..7e5650a56d87a48df7ee0a862b22bf015bb48b2a 100644 +index 3c2941d799c9acb3dd9e2b67b7092f4bba5ede17..808bf21dc16b5007c49a56c6597fd66c3ec4992e 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -66,6 +66,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -70,6 +70,23 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill //this.setDespawnDelay(48000); // CraftBukkit - set default from MobSpawnerTrader // Paper - move back to MobSpawnerTrader - Vanilla behavior is that only traders spawned by it have this value set. } @@ -5106,7 +5098,7 @@ index 0002f3a2f2e096d4b2015baf707707f6cc1a9582..7e5650a56d87a48df7ee0a862b22bf01 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new FloatGoal(this)); -@@ -113,8 +130,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -117,8 +134,9 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } if (this.getOffers().isEmpty()) { @@ -5118,10 +5110,10 @@ index 0002f3a2f2e096d4b2015baf707707f6cc1a9582..7e5650a56d87a48df7ee0a862b22bf01 this.setTradingPlayer(player); this.openTradingScreen(player, this.getDisplayName(), 1); 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 58152160d609d0e9d105153aeb166a56a7955603..cf008b8c7a2eb0c642fd9c2da376df86dcd588e2 100644 +index d58b4c0dbe651b5068212e5f14dce3164ee520f5..90d437ef429fa6eef620eb54fcb9512e46b19b15 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -198,6 +198,19 @@ public abstract class Player extends LivingEntity { +@@ -199,6 +199,19 @@ public abstract class Player extends LivingEntity { } // CraftBukkit end @@ -5189,10 +5181,10 @@ index 06d1bdb9bd124b201c36d284c50d22bf50d3735a..937f57d8af629c4e913d7ccabf6adab1 public boolean isPickable() { return false; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 2dbe8b870fd39b4d22e9725912f443757ae70761..912d9e4b3168cf89bd263ba63e049a791beefc90 100644 +index e932cfac619c30b8c7444a9fa41e0403a6eadf6a..083bc0c2cdab2d1d54e66bb41f12f92fbc176d19 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -@@ -1507,4 +1507,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { +@@ -1506,4 +1506,27 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { return this.getHandle().getScoreboardName(); } // Paper end - entity scoreboard name @@ -5221,10 +5213,10 @@ index 2dbe8b870fd39b4d22e9725912f443757ae70761..912d9e4b3168cf89bd263ba63e049a79 + // 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 090b1ee57ddef58ca71469ad860960f66da7d5a2..5641df31686d6203a523b04406c2c85eab2240d2 100644 +index 50fed722bbba5c663e4be33a179ea75dfa2dd9e9..c3eaef001e6d7be7f16977c3f539d5d4a478c734 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java -@@ -590,6 +590,15 @@ public class CraftEventFactory { +@@ -592,6 +592,15 @@ public class CraftEventFactory { // Paper end craftServer.getPluginManager().callEvent(event); @@ -5240,7 +5232,7 @@ index 090b1ee57ddef58ca71469ad860960f66da7d5a2..5641df31686d6203a523b04406c2c85e return event; } -@@ -1031,6 +1040,7 @@ public class CraftEventFactory { +@@ -1033,6 +1042,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 @@ -5248,7 +5240,7 @@ index 090b1ee57ddef58ca71469ad860960f66da7d5a2..5641df31686d6203a523b04406c2c85e } event.setCancelled(cancelled); -@@ -1145,6 +1155,7 @@ public class CraftEventFactory { +@@ -1147,6 +1157,7 @@ public class CraftEventFactory { } else { entity.lastDamageCancelled = true; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled } @@ -5256,7 +5248,7 @@ index 090b1ee57ddef58ca71469ad860960f66da7d5a2..5641df31686d6203a523b04406c2c85e return event; } -@@ -1208,6 +1219,7 @@ public class CraftEventFactory { +@@ -1210,6 +1221,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 diff --git a/patches/server/0009-Configurable-entity-base-attributes.patch b/patches/server/0007-Configurable-entity-base-attributes.patch similarity index 94% rename from patches/server/0009-Configurable-entity-base-attributes.patch rename to patches/server/0007-Configurable-entity-base-attributes.patch index ba8c17d2e..496bf0c4c 100644 --- a/patches/server/0009-Configurable-entity-base-attributes.patch +++ b/patches/server/0007-Configurable-entity-base-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable entity base attributes diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 14624fc143c9553930f181f7db93caecf24c0495..9e1124be5c6f297b4f6bc8a1bb2dc1476cac4d71 100644 +index 7f97cbb040e9d81ee3cccfddbed682bebaa4bda3..f859e05ddc13b4d27f73fbd2abd331f3c8804363 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -156,7 +156,7 @@ import org.bukkit.plugin.PluginManager; +@@ -155,7 +155,7 @@ import org.bukkit.plugin.PluginManager; // CraftBukkit end public abstract class Entity implements Nameable, EntityAccess, CommandSource { @@ -18,7 +18,7 @@ index 14624fc143c9553930f181f7db93caecf24c0495..9e1124be5c6f297b4f6bc8a1bb2dc147 private static final int CURRENT_LEVEL = 2; public boolean preserveMotion = true; // Paper - keep initial motion on first setPositionRotation diff --git a/src/main/java/net/minecraft/world/entity/GlowSquid.java b/src/main/java/net/minecraft/world/entity/GlowSquid.java -index c6a06e07f0b4bb29b5f4c70dfa53ff6db2e4e6ea..730958dab7f074930cdccb88a89aa26e2b6a112b 100644 +index 75c278b67ad2b78766efd8f89c4c2ca7eb7cdcb2..dc99e7f0e6f173c1313c0d5e9ea5dd6bdbdac169 100644 --- a/src/main/java/net/minecraft/world/entity/GlowSquid.java +++ b/src/main/java/net/minecraft/world/entity/GlowSquid.java @@ -36,6 +36,11 @@ public class GlowSquid extends Squid { @@ -34,10 +34,10 @@ index c6a06e07f0b4bb29b5f4c70dfa53ff6db2e4e6ea..730958dab7f074930cdccb88a89aa26e 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 8fdeda8939879eb070cdd8808263f4beaf144f9e..734ca15f79186cb0385b845c40ea56be7ab085cf 100644 +index e6b83abce3bbd2f5e89d02415bcc6b1a1b0b5da9..91f8f6c918ab5bc8a456b924b9b02b03905841aa 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -287,6 +287,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -288,6 +288,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.useItem = ItemStack.EMPTY; this.lastClimbablePos = Optional.empty(); this.attributes = new AttributeMap(DefaultAttributes.getSupplier(type), this); // Purpur @@ -45,7 +45,7 @@ index 8fdeda8939879eb070cdd8808263f4beaf144f9e..734ca15f79186cb0385b845c40ea56be this.craftAttributes = new CraftAttributeMap(this.attributes); // CraftBukkit // CraftBukkit - setHealth(getMaxHealth()) inlined and simplified to skip the instanceof check for EntityPlayer, as getBukkitEntity() is not initialized in constructor this.entityData.set(LivingEntity.DATA_HEALTH_ID, (float) this.getAttribute(Attributes.MAX_HEALTH).getValue()); -@@ -302,6 +303,8 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -303,6 +304,8 @@ public abstract class LivingEntity extends Entity implements Attackable { this.brain = this.makeBrain(new Dynamic(dynamicopsnbt, (Tag) dynamicopsnbt.createMap((Map) ImmutableMap.of(dynamicopsnbt.createString("memories"), (Tag) dynamicopsnbt.emptyMap())))); } @@ -55,7 +55,7 @@ index 8fdeda8939879eb070cdd8808263f4beaf144f9e..734ca15f79186cb0385b845c40ea56be return this.brain; } diff --git a/src/main/java/net/minecraft/world/entity/ambient/Bat.java b/src/main/java/net/minecraft/world/entity/ambient/Bat.java -index e184d2a89a89d4bf77a32a2d610175c5bbd38a03..c283900e6c43fda62428a6e6d8b70e512458e779 100644 +index 2ee2097ebf7753d63a99fdf492da374849a345eb..41ac8d2cb5424aecb58158122009b5dca9b51b55 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -264,6 +264,18 @@ public class Bat extends AmbientCreature { @@ -94,10 +94,10 @@ index 706ae64b894709601dccfb621d3c215f073e98e9..e7f95639a442cf602fef0ed7aec0f5f9 public int getRemainingPersistentAngerTime() { return (Integer) this.entityData.get(Bee.DATA_REMAINING_ANGER_TIME); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cat.java b/src/main/java/net/minecraft/world/entity/animal/Cat.java -index 90ec526b135a6de6e7ba16fdd3a113ef92b42ef6..49a6ac765e71b311c91cbfd4cf9cde2daa729239 100644 +index 3e89e788c796fe168e43a6b78c0d6c1fc077fc78..87642c1c2c1f39a1c2029797bab73f60c19a1080 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java -@@ -122,6 +122,11 @@ public class Cat extends TamableAnimal implements VariantHolder { +@@ -123,6 +123,11 @@ public class Cat extends TamableAnimal implements VariantHolder { } // Purpur end @@ -110,10 +110,10 @@ index 90ec526b135a6de6e7ba16fdd3a113ef92b42ef6..49a6ac765e71b311c91cbfd4cf9cde2d return this.getVariant().texture(); } diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index 600b7b4e510871de0dee4051158d344734f04966..ea404a84a43a02a5614d5142bb78a586edfc69f6 100644 +index 89e93366395136af826d26be2b85ac881e0dfacc..3c06fe81e2e1d7bd546ead0d13d87cbe7e2e7b5b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -71,6 +71,11 @@ public class Chicken extends Animal { +@@ -72,6 +72,11 @@ public class Chicken extends Animal { } // Purpur end @@ -142,10 +142,10 @@ index e2a98b45e56a368de19bb65e304370a5998c7cb9..3d61c2d5da103de68242c16d85c70381 public ItemStack getBucketItemStack() { return new ItemStack(Items.COD_BUCKET); diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 11082cf272b72123d8917baa9a0d0e5367dca66b..621fe1c08dda65934437eeab679b6e5cd2d11d3d 100644 +index b0cff23aa6f841ad291437964ea5bebb6395de84..f440eabffb1abe4c7370bf7badf6137a22f99071 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java -@@ -59,6 +59,11 @@ public class Cow extends Animal { +@@ -62,6 +62,11 @@ public class Cow extends Animal { } // Purpur end @@ -174,10 +174,10 @@ index 3dab78e2f39855f71bb7294521be71b3faa59b81..89e3dbfddc739f97fdb6ec9a5714530f @Override public SpawnGroupData finalizeSpawn(ServerLevelAccessor world, DifficultyInstance difficulty, MobSpawnType spawnReason, @Nullable SpawnGroupData entityData, @Nullable CompoundTag entityNbt) { 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 e0a21a0e8ff29f5b634fcb312881a1a93c6c3a44..d6370eb9af9842710052e0e497af52122f265488 100644 +index 7d692f61ed4c6cc8e6b94eda4f48e9cb6baa0ae2..5a7f4c0565b2d8f95930b39e1aacd9904e382736 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -179,6 +179,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -182,6 +182,11 @@ public class Fox extends Animal implements VariantHolder { } // Purpur end @@ -206,7 +206,7 @@ index 6815d7350a82c6d32f60aa6116466ebd06a920f9..95ff109511c97d603aeaf9e73c49397a @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 7b0e3b46e3d318ee856d53cfc5532f3432447438..780a11339d2492dd607e3ef91867ffbb9062e2cd 100644 +index 9a84599457bbd14314e0c4f3fa8bf30bec8da347..e3fe62285ced917de6817916e99483e117008670 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java @@ -80,6 +80,11 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder { +@@ -138,6 +138,11 @@ public class Rabbit extends Animal implements VariantHolder { } wasOnGround = onGround; } @@ -363,10 +363,10 @@ index 87c442fb198cad8671ad1419e589a5a67c4fdca8..742805994f29a18af444912b10af631d public int getMaxSchoolSize() { return 5; diff --git a/src/main/java/net/minecraft/world/entity/animal/Sheep.java b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -index 0e2f10fa133281477ab96ba743266ade4d5f2119..3d212b09258b9777079d4bc7ce950f529cdce69e 100644 +index 80b91cdaffc0af25b9a8b13281519cf093928e85..c24299cb482beaef3e2e860475c66e068fa03eb1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Sheep.java +++ b/src/main/java/net/minecraft/world/entity/animal/Sheep.java -@@ -134,6 +134,11 @@ public class Sheep extends Animal implements Shearable { +@@ -136,6 +136,11 @@ public class Sheep extends Animal implements Shearable { } // Purpur end @@ -427,10 +427,10 @@ index 71234b258157579d3a47064e7e299bb7fb90908f..7d02e552a27632939bb9c40a62f4e0df return "entity.minecraft.tropical_fish.predefined." + variant; } diff --git a/src/main/java/net/minecraft/world/entity/animal/Turtle.java b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -index 46b71439efdab39c28d29684913bec2a1ba6491a..6ae82b6293f236fc926f411de2badc496b35399b 100644 +index b9fb6c5527a621bc8012188d2e08604fe730e6c8..4b76c207c7f1eee6bdceebeeba50779557a2662a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Turtle.java +++ b/src/main/java/net/minecraft/world/entity/animal/Turtle.java -@@ -100,6 +100,11 @@ public class Turtle extends Animal { +@@ -103,6 +103,11 @@ public class Turtle extends Animal { } // Purpur end @@ -443,10 +443,10 @@ index 46b71439efdab39c28d29684913bec2a1ba6491a..6ae82b6293f236fc926f411de2badc49 this.entityData.set(Turtle.HOME_POS, pos.immutable()); // Paper - called with mutablepos... } diff --git a/src/main/java/net/minecraft/world/entity/animal/Wolf.java b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -index 40d647d6b3132f8273d43a1addcb8c8116c7ec19..1a27e811169a58515c796344ffa1bb3c46d1014a 100644 +index 2efa2e19485f9d959a55115ab62f985454689379..eecdb1f1d49951cb8a294d176afd12c68fb6c3b1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java -@@ -125,6 +125,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { +@@ -127,6 +127,11 @@ public class Wolf extends TamableAnimal implements NeutralMob { } // Purpur end @@ -459,7 +459,7 @@ index 40d647d6b3132f8273d43a1addcb8c8116c7ec19..1a27e811169a58515c796344ffa1bb3c protected void registerGoals() { this.goalSelector.addGoal(1, new FloatGoal(this)); 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 b76bead9c107889e9b2f11bdc24ad7da811f97ed..e1c0c122dde56b8dd797d1278340260150025cf9 100644 +index 74ea2d9fbd4967f666ac469ff4067fe0c597c655..ab04ea644615d2118d6fb1da95968cbb3139a6a2 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 @@ -115,6 +115,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getModelRotationValues() { return this.modelRotationValues; diff --git a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -index 76a38d235de3499ca19c3ccacd9289c7355012db..5ec8815cc69f5abe03a29224650edfb153c9f5d0 100644 +index 29108c481756d3150fd0ae69f6d249d127b11fdd..85a557b50498bb83eeec4125aa2ae14f3bfaaab8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java +++ b/src/main/java/net/minecraft/world/entity/animal/camel/Camel.java -@@ -326,6 +326,23 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Rider +@@ -320,6 +320,23 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl return this.dashCooldown; } @@ -503,10 +503,10 @@ index 76a38d235de3499ca19c3ccacd9289c7355012db..5ec8815cc69f5abe03a29224650edfb1 protected SoundEvent getAmbientSound() { return SoundEvents.CAMEL_AMBIENT; diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 4b656f4e1660978e3dd284093241003cabff4f23..7a7466092a2cd194abec3abdb77a7c649b4b433c 100644 +index 27050c00ea4e4b301d4c85528117fc1d87e6f1ef..ad4d4e38a2f0125e0943945c9440a9be80b60257 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -160,6 +160,44 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -162,6 +162,44 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, } // Purpur end @@ -551,7 +551,7 @@ index 4b656f4e1660978e3dd284093241003cabff4f23..7a7466092a2cd194abec3abdb77a7c64 @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HorseHasRider(this)); // Purpur -@@ -1258,7 +1296,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -1245,7 +1283,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, entityData = new AgeableMob.AgeableMobGroupData(0.2F); } @@ -613,10 +613,10 @@ index 3e50581033e88e8eddcbd85bfa890cbe0b88a7e6..92339f5a07dcb6bf7eb1bce6d584464e protected void randomizeAttributes(RandomSource random) { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue((double)generateMaxHealth(random::nextInt)); diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 42d5b435728aa497dc34f0ac984e8637fe96343d..967d1ff37ecc9a2cf81a1a6be8ceeb96b42ff847 100644 +index 0549974c56ae7d05b5eec77029c5d08a6614a8bf..278c33b7de4472a746cdbc1faaa68e05592777bc 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -@@ -122,6 +122,21 @@ public class Llama extends AbstractChestedHorse implements VariantHolder(this, AbstractPiglin.class, true)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -index 393dde215894616c073efd28b529c9dac9815adc..323ec328226e3a46ef8afeaf07178bb9f4042134 100644 +index dc29e875c1e184c1c4553c127bb8c86dddf8c5ab..1d862dd019b2d024f61cfc8956430d18d94b1ebf 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zoglin.java -@@ -84,6 +84,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { +@@ -86,6 +86,11 @@ public class Zoglin extends Monster implements Enemy, HoglinBase { } // Purpur end @@ -1353,10 +1353,10 @@ index 393dde215894616c073efd28b529c9dac9815adc..323ec328226e3a46ef8afeaf07178bb9 protected Brain.Provider brainProvider() { return Brain.provider(MEMORY_TYPES, SENSOR_TYPES); diff --git a/src/main/java/net/minecraft/world/entity/monster/Zombie.java b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -index d3f1bcd9daeea282bef549ea18cedf0fc7a9ad8d..b3a31549179760388bc2958b4339848d1f0b293d 100644 +index fb4b3bb082e299723613a28831ff8f9c2eae7ffd..004de1b76734d9015537fa4885656101d2f07efa 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java -@@ -123,6 +123,11 @@ public class Zombie extends Monster { +@@ -124,6 +124,11 @@ public class Zombie extends Monster { } // Purpur end @@ -1368,7 +1368,7 @@ index d3f1bcd9daeea282bef549ea18cedf0fc7a9ad8d..b3a31549179760388bc2958b4339848d @Override protected void registerGoals() { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur -@@ -614,7 +619,7 @@ public class Zombie extends Monster { +@@ -615,7 +620,7 @@ public class Zombie extends Monster { } protected void randomizeReinforcementsChance() { @@ -1378,10 +1378,10 @@ index d3f1bcd9daeea282bef549ea18cedf0fc7a9ad8d..b3a31549179760388bc2958b4339848d @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -index 87ae149be7a3eaf14406a7df9f174574d77c63c5..c89680f83275169728f923e70a17cb88d4480f01 100644 +index be1234f1c087b3140c79278e7d7e7c1394352cc8..a205c668d0d7b428622fbcaa1598f01c685b516e 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombieVillager.java -@@ -96,6 +96,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { +@@ -99,6 +99,16 @@ public class ZombieVillager extends Zombie implements VillagerDataHolder { } // Purpur end @@ -1399,10 +1399,10 @@ index 87ae149be7a3eaf14406a7df9f174574d77c63c5..c89680f83275169728f923e70a17cb88 protected void defineSynchedData() { super.defineSynchedData(); diff --git a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -index fe9bdc4006b916748e55a976b6c8621070fb73c5..8f22bfcde4bb8ad73794f2b98b156113e5a2a6c9 100644 +index 252d2994fac423ea1fef36bdc7c09778203049cb..fa5fa58ee03243054a38475634a6aa67815ca77d 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java -@@ -80,6 +80,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -81,6 +81,11 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { } // Purpur end @@ -1414,7 +1414,7 @@ index fe9bdc4006b916748e55a976b6c8621070fb73c5..8f22bfcde4bb8ad73794f2b98b156113 @Override public void setPersistentAngerTarget(@Nullable UUID angryAt) { this.persistentAngerTarget = angryAt; -@@ -267,7 +272,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { +@@ -263,7 +268,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @Override protected void randomizeReinforcementsChance() { @@ -1424,10 +1424,10 @@ index fe9bdc4006b916748e55a976b6c8621070fb73c5..8f22bfcde4bb8ad73794f2b98b156113 @Nullable diff --git a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -index 8ba7896a823d60065c1e293d0fcdb2d3ac76da77..66f2695403a04c2e9540bf2ec290bf1cc5a377ca 100644 +index fda37baf4afef5e51265833166767b7ae8fccb96..0365afdc6188d155f9d44812055fa8310114e06a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/hoglin/Hoglin.java -@@ -84,6 +84,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -86,6 +86,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { } // Purpur end @@ -1440,7 +1440,7 @@ index 8ba7896a823d60065c1e293d0fcdb2d3ac76da77..66f2695403a04c2e9540bf2ec290bf1c public boolean canBeLeashed(Player player) { return !this.isLeashed(); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index c54f70f608093511f9ef1e7e904d9497a4710bdd..e45c061931c5ca03e204b78e60010a906d3ec945 100644 +index 4c47457aba8e85770b204b0b2a27e21e11371277..7507b22e4ec079f359974d7e05eff3b29e59c8e6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java @@ -113,6 +113,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -1472,10 +1472,10 @@ index 2d842c0dfce1c7e7229bd42b2a92c024a4162b68..04e54c241078e6cd6419a21ba1bf913f return Monster.createMonsterAttributes().add(Attributes.MAX_HEALTH, 50.0D).add(Attributes.MOVEMENT_SPEED, (double)0.35F).add(Attributes.ATTACK_DAMAGE, 7.0D); } diff --git a/src/main/java/net/minecraft/world/entity/npc/Villager.java b/src/main/java/net/minecraft/world/entity/npc/Villager.java -index 7b58329067d8debeb34abe801d150038a362ffed..773e9ea9036ecfe48cae481484e9f5e64b6cc29b 100644 +index ee4892919763e10c7b2072851bfbbccda00c89ac..44aad6e77bbf640547b6bab24587ea93db630c7a 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java -@@ -178,6 +178,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler +@@ -177,6 +177,11 @@ public class Villager extends AbstractVillager implements ReputationEventHandler } // Purpur end @@ -1488,10 +1488,10 @@ index 7b58329067d8debeb34abe801d150038a362ffed..773e9ea9036ecfe48cae481484e9f5e6 public Brain getBrain() { return (Brain) super.getBrain(); // CraftBukkit - decompile error 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 7e5650a56d87a48df7ee0a862b22bf015bb48b2a..33702273c7fabdb8e5bfb3d0e15530f109e318be 100644 +index 808bf21dc16b5007c49a56c6597fd66c3ec4992e..9178c018c8e008b46a978bb95c244abf986f93d9 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -@@ -83,6 +83,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill +@@ -87,6 +87,11 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill } // Purpur end diff --git a/patches/server/0010-Barrels-and-enderchests-6-rows.patch b/patches/server/0008-Barrels-and-enderchests-6-rows.patch similarity index 98% rename from patches/server/0010-Barrels-and-enderchests-6-rows.patch rename to patches/server/0008-Barrels-and-enderchests-6-rows.patch index 14ac1755b..6fdebf360 100644 --- a/patches/server/0010-Barrels-and-enderchests-6-rows.patch +++ b/patches/server/0008-Barrels-and-enderchests-6-rows.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Barrels and enderchests 6 rows diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 78636bf26ac8efaffd8a8f4b5bbc703d6b670b7c..42801a26b9d5f8af2d0ce1fef864bb031cfa8965 100644 +index 2fcf7f80be5f6a96c4ed45459fef3ced1f9e3813..94e55c34084a8bccac95b8e5d108760758e4d61a 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1170,6 +1170,27 @@ public abstract class PlayerList { +@@ -1164,6 +1164,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); } // Paper @@ -37,10 +37,10 @@ index 78636bf26ac8efaffd8a8f4b5bbc703d6b670b7c..42801a26b9d5f8af2d0ce1fef864bb03 public boolean isWhiteListed(GameProfile profile) { 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 cf008b8c7a2eb0c642fd9c2da376df86dcd588e2..96726f06b83193fd7c5156efe6411b10eb1db435 100644 +index 90d437ef429fa6eef620eb54fcb9512e46b19b15..ea475f6fff35e346ca153a385d6b20f90b5f4283 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -187,6 +187,7 @@ public abstract class Player extends LivingEntity { +@@ -188,6 +188,7 @@ public abstract class Player extends LivingEntity { public boolean affectsSpawning = true; public net.kyori.adventure.util.TriState flyingFallDamage = net.kyori.adventure.util.TriState.NOT_SET; // Paper end diff --git a/patches/server/0011-Llama-API.patch b/patches/server/0009-Llama-API.patch similarity index 91% rename from patches/server/0011-Llama-API.patch rename to patches/server/0009-Llama-API.patch index 70e7fd31b..45f03e0d6 100644 --- a/patches/server/0011-Llama-API.patch +++ b/patches/server/0009-Llama-API.patch @@ -25,10 +25,10 @@ index 21725aee29e9120d1c7e1e19f91c21a73a28844f..849f0c7c6d13df00d90211a48d8b56ab double d = this.llama.distanceToSqr(this.llama.getCaravanHead()); if (d > 676.0D) { diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -index 967d1ff37ecc9a2cf81a1a6be8ceeb96b42ff847..72fe2dd69a9ae51e14ec91a83eac2dd74bd76cca 100644 +index 278c33b7de4472a746cdbc1faaa68e05592777bc..15a08abe94cb97de1450ff42cfb924a537b9eb5c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/Llama.java -@@ -73,6 +73,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder type, Level world) { super(type, world); -@@ -168,7 +169,7 @@ public class Llama extends AbstractChestedHorse implements VariantHolder Date: Thu, 8 Aug 2019 15:29:15 -0500 Subject: [PATCH] AFK API -Adds the option for display names to be used in the afk broadcast diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 33d13eaa0edef9e1e6652affbc8e04fa51c31df1..f9571a379214d24a24e0b6b6277636666c1661f1 100644 +index efaac631df6fb44979045c79162b9f9c580c3440..03edb4c297285e472ca2a384fd3a95410cc5d8ee 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -2122,8 +2122,68 @@ public class ServerPlayer extends Player { +@@ -2127,8 +2127,68 @@ public class ServerPlayer extends Player { public void resetLastActionTime() { this.lastActionTime = Util.getMillis(); @@ -79,31 +78,31 @@ index 33d13eaa0edef9e1e6652affbc8e04fa51c31df1..f9571a379214d24a24e0b6b627763666 return this.stats; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index e936fa6e638a7ff4b087ecb4247c467be6fe9c57..f23e8f89e09551d245fcef5507ecd061ed1b3ca9 100644 +index 2b4a9b41cc8f826b39bcabbfd9dcd2ff9a875e23..4d81437253e5a66fb46cad979edfcf987f455477 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -342,6 +342,20 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - private boolean justTeleported = false; +@@ -323,6 +323,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private boolean hasMoved; // Spigot + // CraftBukkit end -+ // Purpur start ++ // Purpur start + private final com.google.common.cache.LoadingCache kickPermissionCache = com.google.common.cache.CacheBuilder.newBuilder() -+ .maximumSize(1000) -+ .expireAfterWrite(1, java.util.concurrent.TimeUnit.MINUTES) -+ .build( -+ new com.google.common.cache.CacheLoader<>() { -+ @Override -+ public Boolean load(CraftPlayer player) { -+ return player.hasPermission("purpur.bypassIdleKick"); -+ } -+ } -+ ); ++ .maximumSize(1000) ++ .expireAfterWrite(1, java.util.concurrent.TimeUnit.MINUTES) ++ .build( ++ new com.google.common.cache.CacheLoader<>() { ++ @Override ++ public Boolean load(CraftPlayer player) { ++ return player.hasPermission("purpur.bypassIdleKick"); ++ } ++ } ++ ); + // Purpur end + - public CraftPlayer getCraftPlayer() { - return (this.player == null) ? null : (CraftPlayer) this.player.getBukkitEntity(); - } -@@ -435,6 +449,12 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + @Override + public void tick() { + if (this.ackBlockChangesUpTo > -1) { +@@ -390,6 +404,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } if (this.player.getLastActionTime() > 0L && this.server.getPlayerIdleTimeout() > 0 && Util.getMillis() - this.player.getLastActionTime() > (long) this.server.getPlayerIdleTimeout() * 1000L * 60L && !this.player.wonGame) { // Paper - Prevent AFK kick while watching end credits. @@ -116,7 +115,7 @@ index e936fa6e638a7ff4b087ecb4247c467be6fe9c57..f23e8f89e09551d245fcef5507ecd061 this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -753,6 +773,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -638,6 +658,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -125,7 +124,7 @@ index e936fa6e638a7ff4b087ecb4247c467be6fe9c57..f23e8f89e09551d245fcef5507ecd061 // Skip the first time we do this if (true) { // Spigot - don't skip any move events Location oldTo = to.clone(); -@@ -1582,7 +1604,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1466,7 +1488,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (!event.isAllowed()) { flag2 = true; // Paper - diff on change, this should be moved wrongly if (event.getLogWarning()) @@ -134,7 +133,7 @@ index e936fa6e638a7ff4b087ecb4247c467be6fe9c57..f23e8f89e09551d245fcef5507ecd061 } // Paper end } -@@ -1644,6 +1666,8 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic +@@ -1528,6 +1550,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -178,7 +177,7 @@ index 3ff999734d14e2b6e7828e117f5ee32a60c26bc1..cfa9607241c3e69777ffc317206996c2 private EntitySelector() {} // Paper start diff --git a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java -index d25307ae8bbdf10ae067ec70fc2cb957b852a0eb..54bdb81785b617e13e67530752395f2a0c6d703a 100644 +index 58422f00c7d64dbd1cf6d7211c9838875cbe7778..db988d263b470e597d6df362da43d76005444572 100644 --- a/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java +++ b/src/main/java/net/minecraft/world/entity/ai/targeting/TargetingConditions.java @@ -64,6 +64,10 @@ public class TargetingConditions { @@ -193,10 +192,10 @@ index d25307ae8bbdf10ae067ec70fc2cb957b852a0eb..54bdb81785b617e13e67530752395f2a if (baseEntity == null) { if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level().getDifficulty() == Difficulty.PEACEFUL)) { 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 96726f06b83193fd7c5156efe6411b10eb1db435..7b39cb5346925c14f3f144d622ca7e5855420aa6 100644 +index ea475f6fff35e346ca153a385d6b20f90b5f4283..535fe476ebe5b791cae7a4013c4a498b89d047e3 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java -@@ -193,6 +193,13 @@ public abstract class Player extends LivingEntity { +@@ -194,6 +194,13 @@ public abstract class Player extends LivingEntity { public boolean fauxSleeping; public int oldLevel = -1; @@ -211,10 +210,10 @@ index 96726f06b83193fd7c5156efe6411b10eb1db435..7b39cb5346925c14f3f144d622ca7e58 public CraftHumanEntity getBukkitEntity() { return (CraftHumanEntity) super.getBukkitEntity(); diff --git a/src/main/java/net/minecraft/world/level/EntityGetter.java b/src/main/java/net/minecraft/world/level/EntityGetter.java -index 3b959f42d958bf0f426853aee56753d6c455fcdb..d17abb283ea818244df0379d6b57fc634071e0b9 100644 +index b3293a722fb5c5262a777402140c764c03367800..67ebddfdcc298198f1a79a0b4875ec8258244ffd 100644 --- a/src/main/java/net/minecraft/world/level/EntityGetter.java +++ b/src/main/java/net/minecraft/world/level/EntityGetter.java -@@ -154,7 +154,7 @@ public interface EntityGetter { +@@ -191,7 +191,7 @@ public interface EntityGetter { default boolean hasNearbyAlivePlayer(double x, double y, double z, double range) { for(Player player : this.players()) { @@ -224,10 +223,10 @@ index 3b959f42d958bf0f426853aee56753d6c455fcdb..d17abb283ea818244df0379d6b57fc63 if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 7f7375c0a3e680ef60fb9fc6157b72bb0812d1c3..d0986b7b130f790c21d2324d0014d258bc36c527 100644 +index 5bcd736cae259e0aa425d709a61c680d80447631..b2fa6e8316a13a27a01a42bb8943472ca12d9249 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -517,10 +517,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -519,10 +519,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @Override public void setPlayerListName(String name) { @@ -244,7 +243,7 @@ index 7f7375c0a3e680ef60fb9fc6157b72bb0812d1c3..d0986b7b130f790c21d2324d0014d258 for (ServerPlayer player : (List) server.getHandle().players) { if (player.getBukkitEntity().canSee(this)) { player.connection.send(new ClientboundPlayerInfoUpdatePacket(ClientboundPlayerInfoUpdatePacket.Action.UPDATE_DISPLAY_NAME, this.getHandle())); -@@ -3273,5 +3278,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -3289,5 +3294,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { public boolean usesPurpurClient() { return getHandle().purpurClient; } @@ -318,10 +317,10 @@ index 27ce55687c7c59fdfdcc4553240ea8b023919b77..3ed1a91c93f659306acaf8bad6820f49 public boolean untamedTamablesAreRidable = true; public boolean useNightVisionWhenRiding = false; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 68557964e27fa1e5ba218178f9bcc0b28e3a78d9..12adaba78ec30e463963f99c0d78e844756143a1 100644 +index 2f9e5a1adf9d67ffe18d95f2822ca3d2288fb27a..882541c570fa9d2bf0e03df30e112c84fa075c35 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java -@@ -203,6 +203,7 @@ public class ActivationRange +@@ -199,6 +199,7 @@ public class ActivationRange continue; } diff --git a/patches/server/0013-Bring-back-server-name.patch b/patches/server/0011-Bring-back-server-name.patch similarity index 86% rename from patches/server/0013-Bring-back-server-name.patch rename to patches/server/0011-Bring-back-server-name.patch index 98247ea72..2f0b01cec 100644 --- a/patches/server/0013-Bring-back-server-name.patch +++ b/patches/server/0011-Bring-back-server-name.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Bring back server name diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index 818289e831e3dad29345c43265e2efd7689bc500..1ea3012995c738c67b31e997c138f824f9e69ba1 100644 +index 0d0ed4cb50364828d0a028ee69654e23b3b8d913..5b20ac9ef8f05d111ba32f6435f1299e054f0b8c 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -58,6 +58,7 @@ public class DedicatedServerProperties extends Settings // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Pufferfish - Pufferfish > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Purpur"; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! ++ return org.purpurmc.purpur.PurpurConfig.serverModName; // Purpur - Purpur > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! } public SystemReport fillSystemReport(SystemReport details) { diff --git a/patches/server/0015-LivingEntity-safeFallDistance.patch b/patches/server/0013-LivingEntity-safeFallDistance.patch similarity index 84% rename from patches/server/0015-LivingEntity-safeFallDistance.patch rename to patches/server/0013-LivingEntity-safeFallDistance.patch index b33af2909..4142cd1e3 100644 --- a/patches/server/0015-LivingEntity-safeFallDistance.patch +++ b/patches/server/0013-LivingEntity-safeFallDistance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] LivingEntity safeFallDistance diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 67f6432160ddd85051305bc830bab4f922cdbba6..0d8c8f9529003a4a216e12e231e212058bb0fb28 100644 +index 91f8f6c918ab5bc8a456b924b9b02b03905841aa..e2a09ca6fca5aa9623eae152e9861f81f7371811 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -253,6 +253,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -254,6 +254,7 @@ public abstract class LivingEntity extends Entity implements Attackable { private boolean skipDropExperience; // CraftBukkit start public int expToDrop; @@ -16,7 +16,7 @@ index 67f6432160ddd85051305bc830bab4f922cdbba6..0d8c8f9529003a4a216e12e231e21205 public boolean forceDrops; public ArrayList drops = new ArrayList(); public final org.bukkit.craftbukkit.attribute.CraftAttributeMap craftAttributes; -@@ -353,7 +354,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -354,7 +355,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.tryAddSoulSpeed(); } @@ -25,7 +25,7 @@ index 67f6432160ddd85051305bc830bab4f922cdbba6..0d8c8f9529003a4a216e12e231e21205 double d1 = this.getX(); double d2 = this.getY(); double d3 = this.getZ(); -@@ -368,7 +369,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -369,7 +370,7 @@ public abstract class LivingEntity extends Entity implements Attackable { d3 = (double) landedPosition.getZ() + 0.5D + d5 / d6 * 0.5D; } @@ -34,7 +34,7 @@ index 67f6432160ddd85051305bc830bab4f922cdbba6..0d8c8f9529003a4a216e12e231e21205 double d7 = Math.min((double) (0.2F + f / 15.0F), 2.5D); int i = (int) (150.0D * d7); -@@ -2058,7 +2059,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2066,7 +2067,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); @@ -44,10 +44,10 @@ index 67f6432160ddd85051305bc830bab4f922cdbba6..0d8c8f9529003a4a216e12e231e21205 } diff --git a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -index 7a7466092a2cd194abec3abdb77a7c649b4b433c..fdf41f4990923aa4309febb9c0ca8009de8e16f1 100644 +index ad4d4e38a2f0125e0943945c9440a9be80b60257..d3b655ccf40d24b7f5a09383fd5771bb275ac4b7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java +++ b/src/main/java/net/minecraft/world/entity/animal/horse/AbstractHorse.java -@@ -384,7 +384,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, +@@ -386,7 +386,7 @@ public abstract class AbstractHorse extends Animal implements ContainerListener, @Override protected int calculateFallDamage(float fallDistance, float damageMultiplier) { @@ -57,10 +57,10 @@ index 7a7466092a2cd194abec3abdb77a7c649b4b433c..fdf41f4990923aa4309febb9c0ca8009 protected int getInventorySize() { diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java -index 3f7d21a5be726d301e1bcaa11f1788b51c23a7cd..db95323da1aef267aa4fbe56aaff63cb8684e15b 100644 +index 2a30499fd6f4a1340f6911f0f7f079bcbe8576a3..c3c0fbe71c9af1125c80698865cb9eaf42d4a1c5 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -12,6 +12,7 @@ import net.minecraft.world.level.LevelReader; +@@ -13,6 +13,7 @@ import net.minecraft.world.level.LevelReader; public class Giant extends Monster { public Giant(EntityType type, Level world) { super(type, world); @@ -69,7 +69,7 @@ index 3f7d21a5be726d301e1bcaa11f1788b51c23a7cd..db95323da1aef267aa4fbe56aaff63cb // Purpur start diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 9e3baf31775326e67a5a3bd5d9e836833b4810ba..4ba5c78fa10c1e30962f30d97821fa105f804904 100644 +index feb5f25886889710d51ab2a88192727c948322ca..92f17bc1631e13bf025cf7b867f6c13ccdacc4e7 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -1099,4 +1099,16 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { diff --git a/patches/server/0016-Lagging-threshold.patch b/patches/server/0014-Lagging-threshold.patch similarity index 86% rename from patches/server/0016-Lagging-threshold.patch rename to patches/server/0014-Lagging-threshold.patch index 11d5a40bc..c976f1b07 100644 --- a/patches/server/0016-Lagging-threshold.patch +++ b/patches/server/0014-Lagging-threshold.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Lagging threshold diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1265167bc9167cb586b98391ea3daaa09fa4e7fb..287f5b64622cdc98cbe8248c89af27c97fdf8347 100644 +index 64aeb6c3e99801e8683d09575b579d3032a152b6..e302593cd3cdba2128355be65ce3f2e40df9f660 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -306,6 +306,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop implements FeatureElement, EntityTypeT +@@ -314,6 +314,16 @@ public class EntityType implements FeatureElement, EntityTypeT return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error } @@ -25,7 +25,7 @@ index aa5cec6d56d7a8e80861aa4c9b4a74ca3e64be8c..08beb4c4dfcb0986cdebb4d0cacc25e4 public static ResourceLocation getKey(EntityType type) { return BuiltInRegistries.ENTITY_TYPE.getKey(type); } -@@ -530,6 +540,16 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -529,6 +539,16 @@ public class EntityType implements FeatureElement, EntityTypeT return this.category; } diff --git a/patches/server/0019-Anvil-API.patch b/patches/server/0016-Anvil-API.patch similarity index 98% rename from patches/server/0019-Anvil-API.patch rename to patches/server/0016-Anvil-API.patch index 07b1a4ff8..330e4ff7f 100644 --- a/patches/server/0019-Anvil-API.patch +++ b/patches/server/0016-Anvil-API.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Anvil API diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index 7bba845462813615224f48322c51c7b480adcaa7..38d47fbcd49cc291040ea00470abeb982fe2714c 100644 +index ffd349c1b80df0f1e8c02bda23700184825170fd..29f301bde378bd320d5c44f2c1b6bf9dc185e286 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 { diff --git a/patches/server/0020-Alternative-Keepalive-Handling.patch b/patches/server/0017-Alternative-Keepalive-Handling.patch similarity index 75% rename from patches/server/0020-Alternative-Keepalive-Handling.patch rename to patches/server/0017-Alternative-Keepalive-Handling.patch index 787804745..91ca80406 100644 --- a/patches/server/0020-Alternative-Keepalive-Handling.patch +++ b/patches/server/0017-Alternative-Keepalive-Handling.patch @@ -4,19 +4,36 @@ Date: Fri, 11 Oct 2019 00:17:39 -0500 Subject: [PATCH] Alternative Keepalive Handling -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 524f12913c7716aea8ae4829885dce1e72f4d8d5..a36468933f9d942ab539207e557c56c4839769bc 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -265,6 +265,7 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - private long keepAliveTime = Util.getMillis(); +diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +index 566a9449cf8a10fff9266a4384cfeb9492f4666e..9bc03cd18bf30bc71f79a6c11f3f30664cf6b822 100644 +--- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java ++++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +@@ -51,6 +51,7 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + private long keepAliveTime = Util.getMillis(); // Paper private boolean keepAlivePending; private long keepAliveChallenge; + private it.unimi.dsi.fastutil.longs.LongList keepAlives = new it.unimi.dsi.fastutil.longs.LongArrayList(); // Purpur - // CraftBukkit start - multithreaded fields - private final AtomicInteger chatSpamTickCount = new AtomicInteger(); - private final java.util.concurrent.atomic.AtomicInteger tabSpamLimiter = new java.util.concurrent.atomic.AtomicInteger(); // Paper - configurable tab spam limits -@@ -417,6 +418,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic + private int latency; + private volatile boolean suspendFlushingOnServerThread = false; + private static final long KEEPALIVE_LIMIT = Long.getLong("paper.playerconnection.keepalive", 30) * 1000; // Paper - provide property to set keepalive limit +@@ -92,6 +93,16 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack + + @Override + public void handleKeepAlive(ServerboundKeepAlivePacket packet) { ++ // Purpur start ++ if (org.purpurmc.purpur.PurpurConfig.useAlternateKeepAlive) { ++ long id = packet.getId(); ++ if (keepAlives.size() > 0 && keepAlives.contains(id)) { ++ int ping = (int) (Util.getMillis() - id); ++ player.latency = (player.latency * 3 + ping) / 4; ++ keepAlives.clear(); // we got a valid response, lets roll with it and forget the rest ++ } ++ } else ++ // Purpur end + //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit // Paper - This shouldn't be on the main thread + if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { + int i = (int) (Util.getMillis() - this.keepAliveTime); +@@ -207,6 +218,21 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack long currentTime = Util.getMillis(); long elapsedTime = currentTime - this.keepAliveTime; @@ -38,23 +55,6 @@ index 524f12913c7716aea8ae4829885dce1e72f4d8d5..a36468933f9d942ab539207e557c56c4 if (this.keepAlivePending) { if (!this.processedDisconnect && elapsedTime >= KEEPALIVE_LIMIT) { // check keepalive limit, don't fire if already disconnected ServerGamePacketListenerImpl.LOGGER.warn("{} was kicked due to keepalive timeout!", this.player.getScoreboardName()); // more info -@@ -3559,6 +3575,16 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - - @Override - public void handleKeepAlive(ServerboundKeepAlivePacket packet) { -+ // Purpur start -+ if (org.purpurmc.purpur.PurpurConfig.useAlternateKeepAlive) { -+ long id = packet.getId(); -+ if (keepAlives.size() > 0 && keepAlives.contains(id)) { -+ int ping = (int) (Util.getMillis() - id); -+ player.latency = (player.latency * 3 + ping) / 4; -+ keepAlives.clear(); // we got a valid response, lets roll with it and forget the rest -+ } -+ } else -+ // Purpur end - //PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // CraftBukkit // Paper - This shouldn't be on the main thread - if (this.keepAlivePending && packet.getId() == this.keepAliveChallenge) { - int i = (int) (Util.getMillis() - this.keepAliveTime); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java index 34afed28faeb56352b48faf8078a5fb07912eb5e..ad239ba9259c5a63b40261ebc44224893496b47d 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java diff --git a/patches/server/0018-Player-invulnerabilities.patch b/patches/server/0018-Player-invulnerabilities.patch deleted file mode 100644 index df1e66750..000000000 --- a/patches/server/0018-Player-invulnerabilities.patch +++ /dev/null @@ -1,169 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: William Blake Galbreath -Date: Sat, 2 May 2020 20:55:44 -0500 -Subject: [PATCH] Player invulnerabilities - - -diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index f9571a379214d24a24e0b6b6277636666c1661f1..ffc10f3cb841eafbf90b7f26b485991ced31d4d1 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 { - public PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - there are a lot of changes to do if we change all methods leading to the event - public boolean purpurClient = false; // Purpur -+ public boolean acceptingResourcePack = false; // Purpur - - 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)); - public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; -@@ -419,6 +420,7 @@ public class ServerPlayer extends Player { - this.bukkitPickUpLoot = true; - this.maxHealthCache = this.getMaxHealth(); - this.cachedSingleMobDistanceMap = new com.destroystokyo.paper.util.PooledHashSets.PooledObjectLinkedOpenHashSet<>(this); // Paper -+ this.spawnInvulnerableTime = world.purpurConfig.playerSpawnInvulnerableTicks; // Purpur - } - - // Yes, this doesn't match Vanilla, but it's the best we can do for now. -@@ -1100,6 +1102,12 @@ public class ServerPlayer extends Player { - - } - -+ // Purpur start -+ public boolean isSpawnInvulnerable() { -+ return spawnInvulnerableTime > 0 || frozen; -+ } -+ // Purpur end -+ - @Override - public boolean hurt(DamageSource source, float amount) { - if (this.isInvulnerableTo(source)) { -@@ -1107,7 +1115,7 @@ public class ServerPlayer extends Player { - } else { - boolean flag = this.server.isDedicatedServer() && this.isPvpAllowed() && source.is(DamageTypeTags.IS_FALL); - -- if (!flag && this.spawnInvulnerableTime > 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { -+ if (!flag && isSpawnInvulnerable() && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { // Purpur - return false; - } else { - Entity entity = source.getEntity(); -@@ -1286,6 +1294,7 @@ public class ServerPlayer extends Player { - } - // Paper end - -+ this.spawnInvulnerableTime = worldserver.purpurConfig.playerSpawnInvulnerableTicks; // Purpur - return this; - } - } -@@ -2108,6 +2117,7 @@ public class ServerPlayer extends Player { - } - - public void sendTexturePack(String url, String hash, boolean required, @Nullable Component resourcePackPrompt) { -+ this.acceptingResourcePack = true; // Purpur - this.connection.send(new ClientboundResourcePackPacket(url, hash, required, resourcePackPrompt)); - } - -@@ -2695,9 +2705,17 @@ public class ServerPlayer extends Player { - - @Override - public boolean isImmobile() { -- return super.isImmobile() || (this.connection != null && this.connection.isDisconnected()); // Paper -+ return super.isImmobile() || frozen || (this.connection != null && this.connection.isDisconnected()); // Paper // Purpur - } - -+ // Purpur start -+ private boolean frozen = false; -+ -+ public void setFrozen(boolean frozen) { -+ this.frozen = frozen; -+ } -+ // Purpur end -+ - @Override - public Scoreboard getScoreboard() { - return this.getBukkitEntity().getScoreboard().getHandle(); -diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f23e8f89e09551d245fcef5507ecd061ed1b3ca9..81cbb6a55fd3e6a3b9ec96cc54b43e123c243482 100644 ---- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -+++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -2149,12 +2149,21 @@ public class ServerGamePacketListenerImpl implements ServerPlayerConnection, Tic - @Override - public void handleResourcePackResponse(ServerboundResourcePackPacket packet) { - PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -+ // Purpur start -+ if (player.level().purpurConfig.playerInvulnerableWhileAcceptingResourcePack && !this.player.acceptingResourcePack) { -+ ServerGamePacketListenerImpl.LOGGER.info("Disconnecting {} due to resource pack packet exploitation attempt", this.player.getName()); -+ this.disconnect(Component.translatable("multiplayer.texturePrompt.failure.line1"), org.bukkit.event.player.PlayerKickEvent.Cause.RESOURCE_PACK_REJECTION); // "Server resource pack couldn't be applied" -+ return; -+ } -+ // Purpur end - if (packet.getAction() == ServerboundResourcePackPacket.Action.DECLINED && this.server.isResourcePackRequired()) { - ServerGamePacketListenerImpl.LOGGER.info("Disconnecting {} due to resource pack rejection", this.player.getGameProfile().getName()); // Paper - Don't print component in resource pack rejection message - this.disconnect(Component.translatable("multiplayer.requiredTexturePrompt.disconnect"), org.bukkit.event.player.PlayerKickEvent.Cause.RESOURCE_PACK_REJECTION); // Paper - add cause - } - // Paper start - PlayerResourcePackStatusEvent.Status packStatus = PlayerResourcePackStatusEvent.Status.values()[packet.action.ordinal()]; -+ if (player.level().purpurConfig.playerInvulnerableWhileAcceptingResourcePack) player.setFrozen(packStatus == PlayerResourcePackStatusEvent.Status.ACCEPTED); // Purpur -+ this.player.acceptingResourcePack = packStatus == PlayerResourcePackStatusEvent.Status.ACCEPTED; // Purpur - player.getBukkitEntity().setResourcePackStatus(packStatus); - this.cserver.getPluginManager().callEvent(new PlayerResourcePackStatusEvent(this.getCraftPlayer(), packStatus)); // CraftBukkit - // Paper end -diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 42801a26b9d5f8af2d0ce1fef864bb031cfa8965..2cac536ebbc21a23a2219c630fe477bf9c00ce65 100644 ---- a/src/main/java/net/minecraft/server/players/PlayerList.java -+++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -985,6 +985,8 @@ public abstract class PlayerList { - } - // Paper end - -+ entityplayer1.spawnInvulnerableTime = entityplayer1.level().purpurConfig.playerSpawnInvulnerableTicks; // Purpur -+ - // CraftBukkit end - return entityplayer1; - } -diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index d0986b7b130f790c21d2324d0014d258bc36c527..c6ede1fac5c68f2912a9c401765bd10b09afe7f9 100644 ---- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -+++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -3293,5 +3293,20 @@ public class CraftPlayer extends CraftHumanEntity implements Player { - public void resetIdleTimer() { - getHandle().resetLastActionTime(); - } -+ -+ @Override -+ public boolean isSpawnInvulnerable() { -+ return getHandle().isSpawnInvulnerable(); -+ } -+ -+ @Override -+ public int getSpawnInvulnerableTicks() { -+ return getHandle().spawnInvulnerableTime; -+ } -+ -+ @Override -+ public void setSpawnInvulnerableTicks(int spawnInvulnerableTime) { -+ getHandle().spawnInvulnerableTime = spawnInvulnerableTime; -+ } - // Purpur end - } -diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 3ed1a91c93f659306acaf8bad6820f49208554c8..f521d0e73908037c76c5669b401e422040e2a77b 100644 ---- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -+++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -95,6 +95,8 @@ public class PurpurWorldConfig { - public boolean idleTimeoutCountAsSleeping = false; - public boolean idleTimeoutUpdateTabList = false; - public boolean idleTimeoutTargetPlayer = true; -+ public int playerSpawnInvulnerableTicks = 60; -+ public boolean playerInvulnerableWhileAcceptingResourcePack = false; - private void playerSettings() { - if (PurpurConfig.version < 19) { - boolean oldVal = getBoolean("gameplay-mechanics.player.idle-timeout.mods-target", idleTimeoutTargetPlayer); -@@ -106,6 +108,8 @@ public class PurpurWorldConfig { - idleTimeoutCountAsSleeping = getBoolean("gameplay-mechanics.player.idle-timeout.count-as-sleeping", idleTimeoutCountAsSleeping); - idleTimeoutUpdateTabList = getBoolean("gameplay-mechanics.player.idle-timeout.update-tab-list", idleTimeoutUpdateTabList); - idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); -+ playerSpawnInvulnerableTicks = getInt("gameplay-mechanics.player.spawn-invulnerable-ticks", playerSpawnInvulnerableTicks); -+ playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); - } - - public boolean babiesAreRidable = true; diff --git a/patches/server/0021-Silk-touch-spawners.patch b/patches/server/0018-Silk-touch-spawners.patch similarity index 96% rename from patches/server/0021-Silk-touch-spawners.patch rename to patches/server/0018-Silk-touch-spawners.patch index feeaf3d03..a0dd9db8f 100644 --- a/patches/server/0021-Silk-touch-spawners.patch +++ b/patches/server/0018-Silk-touch-spawners.patch @@ -89,11 +89,11 @@ index 936d844a5a246138c9f9ae4ae6e318242b8f1420..93f5f226cf6fd6110e4daa02b3f5d9ad int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f521d0e73908037c76c5669b401e422040e2a77b..ef20a9601527281d052c531e7e769ea480622481 100644 +index 3ed1a91c93f659306acaf8bad6820f49208554c8..570abbb70cfb523917de473bd91640719c40a611 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -112,6 +112,38 @@ public class PurpurWorldConfig { - playerInvulnerableWhileAcceptingResourcePack = getBoolean("gameplay-mechanics.player.invulnerable-while-accepting-resource-pack", playerInvulnerableWhileAcceptingResourcePack); +@@ -108,6 +108,38 @@ public class PurpurWorldConfig { + idleTimeoutTargetPlayer = getBoolean("gameplay-mechanics.player.idle-timeout.mobs-target", idleTimeoutTargetPlayer); } + public boolean silkTouchEnabled = false; diff --git a/patches/server/0022-Add-turtle-egg-block-options.patch b/patches/server/0019-Add-turtle-egg-block-options.patch similarity index 89% rename from patches/server/0022-Add-turtle-egg-block-options.patch rename to patches/server/0019-Add-turtle-egg-block-options.patch index d2cc049d4..8666b8216 100644 --- a/patches/server/0022-Add-turtle-egg-block-options.patch +++ b/patches/server/0019-Add-turtle-egg-block-options.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add turtle egg block options diff --git a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java -index 6c1a0e6f961e46a1a89850746a71e97b32514adf..1942649e868fc985a488034c411a6721595ecc67 100644 +index 07157822659288e76b2fba34db8d5d566506f33b..18feb559f9fd157dd4a01faf2b2bb18df2a64675 100644 --- a/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java +++ b/src/main/java/net/minecraft/world/level/block/TurtleEggBlock.java -@@ -193,6 +193,25 @@ public class TurtleEggBlock extends Block { +@@ -195,6 +195,25 @@ public class TurtleEggBlock extends Block { } private boolean canDestroyEgg(Level world, Entity entity) { @@ -36,10 +36,10 @@ index 6c1a0e6f961e46a1a89850746a71e97b32514adf..1942649e868fc985a488034c411a6721 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index ef20a9601527281d052c531e7e769ea480622481..1b06b531cc334b00b8f12634bd36766619098f16 100644 +index 570abbb70cfb523917de473bd91640719c40a611..7a4c1c04b7e3c558ac19b72693d5abe6c14acdfe 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -144,6 +144,15 @@ public class PurpurWorldConfig { +@@ -140,6 +140,15 @@ public class PurpurWorldConfig { }); } diff --git a/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch b/patches/server/0020-Logger-settings-suppressing-pointless-logs.patch similarity index 79% rename from patches/server/0023-Logger-settings-suppressing-pointless-logs.patch rename to patches/server/0020-Logger-settings-suppressing-pointless-logs.patch index de40b9614..fe81866fd 100644 --- a/patches/server/0023-Logger-settings-suppressing-pointless-logs.patch +++ b/patches/server/0020-Logger-settings-suppressing-pointless-logs.patch @@ -5,17 +5,17 @@ Subject: [PATCH] Logger settings (suppressing pointless logs) diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java -index acc49f66bf34e2507d0ee6fec0a56b11bfc68f46..52891c4a4260d1938f2f4565b5219ad303555638 100644 +index e38e2e5a7ddba9c140f362021b6be0b0974f7cd1..0b3a06027f2c600960cd88159803be187c4d0317 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java -@@ -147,6 +147,7 @@ public class PlayerAdvancements { - if (advancement == null) { - // CraftBukkit start - if (entry.getKey().getNamespace().equals("minecraft")) { -+ if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressIgnoredAdvancementWarnings) // Purpur - PlayerAdvancements.LOGGER.warn("Ignored advancement '{}' in progress file {} - it doesn't exist anymore?", entry.getKey(), this.playerSavePath); - } - // CraftBukkit end +@@ -200,6 +200,7 @@ public class PlayerAdvancements { + + if (advancementholder == null) { + if (!minecraftkey.getNamespace().equals("minecraft")) return; // CraftBukkit ++ if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressIgnoredAdvancementWarnings) // Purpur + PlayerAdvancements.LOGGER.warn("Ignored advancement '{}' in progress file {} - it doesn't exist anymore?", minecraftkey, this.playerSavePath); + } else { + this.startProgress(advancementholder, advancementprogress); diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java index 877498729c66de9aa6a27c9148f7494d7895615c..acd7468ee3c86d3456e96e4ec3d7e6a4c612e89d 100644 --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java @@ -29,17 +29,17 @@ index 877498729c66de9aa6a27c9148f7494d7895615c..acd7468ee3c86d3456e96e4ec3d7e6a4 Util.logAndPauseIfInIde("Detected setBlock in a far chunk [" + i + ", " + j + "], pos: " + pos + ", status: " + this.generatingStatus + (this.currentlyGenerating == null ? "" : ", currently generating: " + (String) this.currentlyGenerating.get())); hasSetFarWarned = true; diff --git a/src/main/java/net/minecraft/stats/ServerRecipeBook.java b/src/main/java/net/minecraft/stats/ServerRecipeBook.java -index ea29e07a105f3ba6a878bdccf36e7eaf66280280..d5dce6c8d85938d61a57a78f82381d26daf8f87a 100644 +index 4103ddf16164e3992fef0765d368282572537e29..a0cb49233b1dbf53ce9d1bcc52b8967829d0530e 100644 --- a/src/main/java/net/minecraft/stats/ServerRecipeBook.java +++ b/src/main/java/net/minecraft/stats/ServerRecipeBook.java @@ -125,6 +125,7 @@ public class ServerRecipeBook extends RecipeBook { - Optional> optional = recipeManager.byKey(minecraftkey); + Optional> optional = recipeManager.byKey(minecraftkey); - if (!optional.isPresent()) { + if (optional.isEmpty()) { + if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressUnrecognizedRecipeErrors) // Purpur ServerRecipeBook.LOGGER.error("Tried to load unrecognized recipe: {} removed now.", minecraftkey); } else { - handler.accept((Recipe) optional.get()); + handler.accept((RecipeHolder) optional.get()); diff --git a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java b/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java index 2677e21d8239bf0361a3bc5c9a50c328e54d70f6..544a79d5da661aff19e2019f7b83a3a49350bb68 100644 --- a/src/main/java/org/bukkit/craftbukkit/legacy/CraftLegacy.java @@ -53,7 +53,7 @@ index 2677e21d8239bf0361a3bc5c9a50c328e54d70f6..544a79d5da661aff19e2019f7b83a3a4 if (MinecraftServer.getServer() != null && MinecraftServer.getServer().isDebugging()) { new Exception().printStackTrace(); diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index fa27bb42697cd5741b7308b34cd768232604a20f..9db231480f0763c2b6514a956ec9398b98b7d1bc 100644 +index ad239ba9259c5a63b40261ebc44224893496b47d..308d7556f5b12c0aa5b2fde5a23ef6fbacb303de 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -237,4 +237,15 @@ public class PurpurConfig { diff --git a/patches/server/0024-Disable-outdated-build-check.patch b/patches/server/0021-Disable-outdated-build-check.patch similarity index 92% rename from patches/server/0024-Disable-outdated-build-check.patch rename to patches/server/0021-Disable-outdated-build-check.patch index 04e6b5845..42dc74d4a 100644 --- a/patches/server/0024-Disable-outdated-build-check.patch +++ b/patches/server/0021-Disable-outdated-build-check.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Disable outdated build check diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index 39e98f1c62f372bca97fa47df8e79af693830a4a..c23f1e90420c76495da33a579a479de730f6a051 100644 +index 754a47528fb675ceae7020d7ae26d1f9d951d27c..d0372aa58214019b0b24a84eb8afdec6aec975a6 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -300,7 +300,7 @@ public class Main { diff --git a/patches/server/0025-Giants-AI-settings.patch b/patches/server/0022-Giants-AI-settings.patch similarity index 92% rename from patches/server/0025-Giants-AI-settings.patch rename to patches/server/0022-Giants-AI-settings.patch index c472515ae..a9b0ffe4c 100644 --- a/patches/server/0025-Giants-AI-settings.patch +++ b/patches/server/0022-Giants-AI-settings.patch @@ -5,16 +5,17 @@ Subject: [PATCH] Giants AI settings diff --git a/src/main/java/net/minecraft/world/entity/monster/Giant.java b/src/main/java/net/minecraft/world/entity/monster/Giant.java -index db95323da1aef267aa4fbe56aaff63cb8684e15b..12e27b36b3f9949eb644175dd346c487277b2d39 100644 +index c3c0fbe71c9af1125c80698865cb9eaf42d4a1c5..d014731fe352246299253bf005e23673abe091bc 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Giant.java +++ b/src/main/java/net/minecraft/world/entity/monster/Giant.java -@@ -1,13 +1,36 @@ +@@ -1,14 +1,37 @@ package net.minecraft.world.entity.monster; import net.minecraft.core.BlockPos; +import net.minecraft.nbt.CompoundTag; +import net.minecraft.world.Difficulty; +import net.minecraft.world.DifficultyInstance; + import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.EntityDimensions; import net.minecraft.world.entity.EntityType; +import net.minecraft.world.entity.EquipmentSlot; @@ -45,7 +46,7 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..12e27b36b3f9949eb644175dd346c487 public class Giant extends Monster { public Giant(EntityType type, Level world) { -@@ -33,8 +56,23 @@ public class Giant extends Monster { +@@ -34,8 +57,23 @@ public class Giant extends Monster { @Override protected void registerGoals() { @@ -71,7 +72,7 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..12e27b36b3f9949eb644175dd346c487 } // Purpur end -@@ -45,6 +83,32 @@ public class Giant extends Monster { +@@ -46,6 +84,32 @@ public class Giant extends Monster { this.getAttribute(Attributes.ATTACK_DAMAGE).setBaseValue(this.level().purpurConfig.giantAttackDamage); } @@ -104,7 +105,7 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..12e27b36b3f9949eb644175dd346c487 @Override protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { return 10.440001F; -@@ -56,6 +120,6 @@ public class Giant extends Monster { +@@ -62,6 +126,6 @@ public class Giant extends Monster { @Override public float getWalkTargetValue(BlockPos pos, LevelReader world) { @@ -113,10 +114,10 @@ index db95323da1aef267aa4fbe56aaff63cb8684e15b..12e27b36b3f9949eb644175dd346c487 } } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1b06b531cc334b00b8f12634bd36766619098f16..916249a2ad6721182f0e71e785db3b50839d4961 100644 +index 7a4c1c04b7e3c558ac19b72693d5abe6c14acdfe..b18c498b6fd17ef298cc6ee7b2386188f0b75b36 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -558,6 +558,10 @@ public class PurpurWorldConfig { +@@ -554,6 +554,10 @@ public class PurpurWorldConfig { public double giantMovementSpeed = 0.5D; public double giantAttackDamage = 50.0D; public double giantMaxHealth = 100.0D; @@ -127,7 +128,7 @@ index 1b06b531cc334b00b8f12634bd36766619098f16..916249a2ad6721182f0e71e785db3b50 private void giantSettings() { giantRidable = getBoolean("mobs.giant.ridable", giantRidable); giantRidableInWater = getBoolean("mobs.giant.ridable-in-water", giantRidableInWater); -@@ -574,6 +578,10 @@ public class PurpurWorldConfig { +@@ -570,6 +574,10 @@ public class PurpurWorldConfig { set("mobs.giant.attributes.max_health", oldValue); } giantMaxHealth = getDouble("mobs.giant.attributes.max_health", giantMaxHealth); diff --git a/patches/server/0026-Zombie-horse-naturally-spawn.patch b/patches/server/0023-Zombie-horse-naturally-spawn.patch similarity index 90% rename from patches/server/0026-Zombie-horse-naturally-spawn.patch rename to patches/server/0023-Zombie-horse-naturally-spawn.patch index bcbc7122f..1264def3b 100644 --- a/patches/server/0026-Zombie-horse-naturally-spawn.patch +++ b/patches/server/0023-Zombie-horse-naturally-spawn.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Zombie horse naturally spawn diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 4c3b5a26a6b04afff3a707929ced3c62b5256a67..11f92c1011a1accaf485e5785d2e9ebc8440406c 100644 +index d060a6a45c614c92dd45e96bc1bf39ace3347fbb..b0064cda4b0283d46dad53675ec70ff10c4d2015 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -971,10 +971,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -864,10 +864,18 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag1 = this.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && this.random.nextDouble() < (double) difficultydamagescaler.getEffectiveDifficulty() * this.paperConfig().entities.spawning.skeletonHorseThunderSpawnChance.or(0.01D) && !this.getBlockState(blockposition.below()).is(Blocks.LIGHTNING_ROD); // Paper if (flag1) { @@ -30,10 +30,10 @@ index 4c3b5a26a6b04afff3a707929ced3c62b5256a67..11f92c1011a1accaf485e5785d2e9ebc entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ()); this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 916249a2ad6721182f0e71e785db3b50839d4961..1f636491c6da434708359224107cfc1de1cd6034 100644 +index b18c498b6fd17ef298cc6ee7b2386188f0b75b36..bae186807d44745942faf8919831f82e475a4f63 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -1488,6 +1488,7 @@ public class PurpurWorldConfig { +@@ -1484,6 +1484,7 @@ public class PurpurWorldConfig { public double zombieHorseJumpStrengthMax = 1.0D; public double zombieHorseMovementSpeedMin = 0.2D; public double zombieHorseMovementSpeedMax = 0.2D; @@ -41,7 +41,7 @@ index 916249a2ad6721182f0e71e785db3b50839d4961..1f636491c6da434708359224107cfc1d private void zombieHorseSettings() { zombieHorseRidableInWater = getBoolean("mobs.zombie_horse.ridable-in-water", zombieHorseRidableInWater); zombieHorseCanSwim = getBoolean("mobs.zombie_horse.can-swim", zombieHorseCanSwim); -@@ -1503,6 +1504,7 @@ public class PurpurWorldConfig { +@@ -1499,6 +1500,7 @@ public class PurpurWorldConfig { zombieHorseJumpStrengthMax = getDouble("mobs.zombie_horse.attributes.jump_strength.max", zombieHorseJumpStrengthMax); zombieHorseMovementSpeedMin = getDouble("mobs.zombie_horse.attributes.movement_speed.min", zombieHorseMovementSpeedMin); zombieHorseMovementSpeedMax = getDouble("mobs.zombie_horse.attributes.movement_speed.max", zombieHorseMovementSpeedMax); diff --git a/patches/server/0027-Charged-creeper-naturally-spawn.patch b/patches/server/0024-Charged-creeper-naturally-spawn.patch similarity index 92% rename from patches/server/0027-Charged-creeper-naturally-spawn.patch rename to patches/server/0024-Charged-creeper-naturally-spawn.patch index 0071bedad..53a7034e1 100644 --- a/patches/server/0027-Charged-creeper-naturally-spawn.patch +++ b/patches/server/0024-Charged-creeper-naturally-spawn.patch @@ -24,10 +24,10 @@ index e31094f270117dec3053620c06e409953fb6d710..a1e3f29ce49dc41ad70f74ee224250fe protected SoundEvent getHurtSound(DamageSource source) { return SoundEvents.CREEPER_HURT; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 1f636491c6da434708359224107cfc1de1cd6034..607298a7fe2f2f7b2320a028d1343c1575decf31 100644 +index bae186807d44745942faf8919831f82e475a4f63..8503f57e3b07318331045aa25aa0fd07b8ca17ed 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -349,6 +349,7 @@ public class PurpurWorldConfig { +@@ -345,6 +345,7 @@ public class PurpurWorldConfig { public boolean creeperRidableInWater = true; public boolean creeperControllable = true; public double creeperMaxHealth = 20.0D; @@ -35,7 +35,7 @@ index 1f636491c6da434708359224107cfc1de1cd6034..607298a7fe2f2f7b2320a028d1343c15 private void creeperSettings() { creeperRidable = getBoolean("mobs.creeper.ridable", creeperRidable); creeperRidableInWater = getBoolean("mobs.creeper.ridable-in-water", creeperRidableInWater); -@@ -359,6 +360,7 @@ public class PurpurWorldConfig { +@@ -355,6 +356,7 @@ public class PurpurWorldConfig { set("mobs.creeper.attributes.max_health", oldValue); } creeperMaxHealth = getDouble("mobs.creeper.attributes.max_health", creeperMaxHealth); diff --git a/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch b/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch similarity index 87% rename from patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch rename to patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch index c7968f43b..6640c1049 100644 --- a/patches/server/0028-Rabbit-naturally-spawn-toast-and-killer.patch +++ b/patches/server/0025-Rabbit-naturally-spawn-toast-and-killer.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Rabbit naturally spawn toast and killer diff --git a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -index 9be247def3ab8c74c569f653ec971aaf1b5ed5c9..6d5213d26dbd9d36c5cbe6056091d9e5c85e23c4 100644 +index 23ede55b9b1198c72fe93b086129d4725d9352fe..106600ad9712d9a4fdf6770e81b40606b2f9b9b2 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Rabbit.java +++ b/src/main/java/net/minecraft/world/entity/animal/Rabbit.java -@@ -468,10 +468,23 @@ public class Rabbit extends Animal implements VariantHolder { +@@ -469,10 +469,23 @@ public class Rabbit extends Animal implements VariantHolder { } this.setVariant(entityrabbit_variant); @@ -33,10 +33,10 @@ index 9be247def3ab8c74c569f653ec971aaf1b5ed5c9..6d5213d26dbd9d36c5cbe6056091d9e5 int i = world.getRandom().nextInt(100); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 607298a7fe2f2f7b2320a028d1343c1575decf31..5974f2ec7f42cf5ea58a5cfa124f0165a5fc5785 100644 +index 8503f57e3b07318331045aa25aa0fd07b8ca17ed..86232e49f12cae623dbe235fd0fac5fbf0255a2b 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -992,6 +992,8 @@ public class PurpurWorldConfig { +@@ -988,6 +988,8 @@ public class PurpurWorldConfig { public boolean rabbitRidableInWater = true; public boolean rabbitControllable = true; public double rabbitMaxHealth = 3.0D; @@ -45,7 +45,7 @@ index 607298a7fe2f2f7b2320a028d1343c1575decf31..5974f2ec7f42cf5ea58a5cfa124f0165 private void rabbitSettings() { rabbitRidable = getBoolean("mobs.rabbit.ridable", rabbitRidable); rabbitRidableInWater = getBoolean("mobs.rabbit.ridable-in-water", rabbitRidableInWater); -@@ -1002,6 +1004,8 @@ public class PurpurWorldConfig { +@@ -998,6 +1000,8 @@ public class PurpurWorldConfig { set("mobs.rabbit.attributes.max_health", oldValue); } rabbitMaxHealth = getDouble("mobs.rabbit.attributes.max_health", rabbitMaxHealth); diff --git a/patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch b/patches/server/0026-Fix-outdated-server-showing-in-ping-before-server-fu.patch similarity index 100% rename from patches/server/0029-Fix-outdated-server-showing-in-ping-before-server-fu.patch rename to patches/server/0026-Fix-outdated-server-showing-in-ping-before-server-fu.patch diff --git a/patches/server/0030-Tulips-change-fox-type.patch b/patches/server/0027-Tulips-change-fox-type.patch similarity index 79% rename from patches/server/0030-Tulips-change-fox-type.patch rename to patches/server/0027-Tulips-change-fox-type.patch index 0fec3be3e..ae12cdfc3 100644 --- a/patches/server/0030-Tulips-change-fox-type.patch +++ b/patches/server/0027-Tulips-change-fox-type.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Tulips change fox type 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 d6370eb9af9842710052e0e497af52122f265488..cedc4dac776dde310dbf1a22272ce54b14ca2c9e 100644 +index 5a7f4c0565b2d8f95930b39e1aacd9904e382736..f26fa004e1372f8711e76bc7fa4cdb383b989755 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java -@@ -35,6 +35,7 @@ import net.minecraft.util.RandomSource; +@@ -36,6 +36,7 @@ import net.minecraft.util.RandomSource; import net.minecraft.util.StringRepresentable; import net.minecraft.world.DifficultyInstance; import net.minecraft.world.InteractionHand; @@ -16,15 +16,7 @@ index d6370eb9af9842710052e0e497af52122f265488..cedc4dac776dde310dbf1a22272ce54b import net.minecraft.world.damagesource.DamageSource; import net.minecraft.world.entity.AgeableMob; import net.minecraft.world.entity.Entity; -@@ -88,6 +89,7 @@ import net.minecraft.world.level.block.Blocks; - import net.minecraft.world.level.block.CaveVines; - import net.minecraft.world.level.block.SweetBerryBushBlock; - import net.minecraft.world.level.block.state.BlockState; -+import net.minecraft.world.level.gameevent.GameEvent; - import net.minecraft.world.level.pathfinder.BlockPathTypes; - import net.minecraft.world.phys.Vec3; - -@@ -387,6 +389,11 @@ public class Fox extends Animal implements VariantHolder { +@@ -390,6 +391,11 @@ public class Fox extends Animal implements VariantHolder { } private void setTargetGoals() { @@ -36,7 +28,7 @@ index d6370eb9af9842710052e0e497af52122f265488..cedc4dac776dde310dbf1a22272ce54b if (this.getVariant() == Fox.Type.RED) { this.targetSelector.addGoal(4, this.landTargetGoal); this.targetSelector.addGoal(4, this.turtleEggTargetGoal); -@@ -420,6 +427,7 @@ public class Fox extends Animal implements VariantHolder { +@@ -423,6 +429,7 @@ public class Fox extends Animal implements VariantHolder { public void setVariant(Fox.Type variant) { this.entityData.set(Fox.DATA_TYPE_ID, variant.getId()); @@ -44,7 +36,7 @@ index d6370eb9af9842710052e0e497af52122f265488..cedc4dac776dde310dbf1a22272ce54b } List getTrustedUUIDs() { -@@ -756,6 +764,29 @@ public class Fox extends Animal implements VariantHolder { +@@ -762,6 +769,29 @@ public class Fox extends Animal implements VariantHolder { return this.getTrustedUUIDs().contains(uuid); } @@ -75,10 +67,10 @@ index d6370eb9af9842710052e0e497af52122f265488..cedc4dac776dde310dbf1a22272ce54b // Paper start - Cancellable death event protected org.bukkit.event.entity.EntityDeathEvent dropAllDeathLoot(DamageSource source) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 5974f2ec7f42cf5ea58a5cfa124f0165a5fc5785..d0b82fb2d43207f997b85c2a2d6abc3af98c2fbd 100644 +index 86232e49f12cae623dbe235fd0fac5fbf0255a2b..de3fe605c4cc477007d15468338a7de5dfc87c4c 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -513,6 +513,7 @@ public class PurpurWorldConfig { +@@ -509,6 +509,7 @@ public class PurpurWorldConfig { public boolean foxRidableInWater = true; public boolean foxControllable = true; public double foxMaxHealth = 10.0D; @@ -86,7 +78,7 @@ index 5974f2ec7f42cf5ea58a5cfa124f0165a5fc5785..d0b82fb2d43207f997b85c2a2d6abc3a private void foxSettings() { foxRidable = getBoolean("mobs.fox.ridable", foxRidable); foxRidableInWater = getBoolean("mobs.fox.ridable-in-water", foxRidableInWater); -@@ -523,6 +524,7 @@ public class PurpurWorldConfig { +@@ -519,6 +520,7 @@ public class PurpurWorldConfig { set("mobs.fox.attributes.max_health", oldValue); } foxMaxHealth = getDouble("mobs.fox.attributes.max_health", foxMaxHealth); diff --git a/patches/server/0031-Breedable-Polar-Bears.patch b/patches/server/0028-Breedable-Polar-Bears.patch similarity index 93% rename from patches/server/0031-Breedable-Polar-Bears.patch rename to patches/server/0028-Breedable-Polar-Bears.patch index b4d7eb90f..b0871157c 100644 --- a/patches/server/0031-Breedable-Polar-Bears.patch +++ b/patches/server/0028-Breedable-Polar-Bears.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Breedable Polar Bears diff --git a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java -index 48ec595e76c09cf719477a543364f1206664afa5..b2cf680e377f849a7cc17136ebca3cf33e34048c 100644 +index 70b45c622a459ace397d4d54cd99e8ae7fc1ce65..0377d40198b88512b1f204a31367c2db039a7f9c 100644 --- a/src/main/java/net/minecraft/world/entity/animal/PolarBear.java +++ b/src/main/java/net/minecraft/world/entity/animal/PolarBear.java @@ -99,6 +99,27 @@ public class PolarBear extends Animal implements NeutralMob { @@ -59,10 +59,10 @@ index 48ec595e76c09cf719477a543364f1206664afa5..b2cf680e377f849a7cc17136ebca3cf3 this.goalSelector.addGoal(5, new RandomStrollGoal(this, 1.0D)); this.goalSelector.addGoal(6, new LookAtPlayerGoal(this, Player.class, 6.0F)); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index d0b82fb2d43207f997b85c2a2d6abc3af98c2fbd..f994a8eb776c2ad1029b447ebab0273eb01e302f 100644 +index de3fe605c4cc477007d15468338a7de5dfc87c4c..4b97350dd6968125d91e02441b6a573ce7000943 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -964,6 +964,8 @@ public class PurpurWorldConfig { +@@ -960,6 +960,8 @@ public class PurpurWorldConfig { public boolean polarBearRidableInWater = true; public boolean polarBearControllable = true; public double polarBearMaxHealth = 30.0D; @@ -71,7 +71,7 @@ index d0b82fb2d43207f997b85c2a2d6abc3af98c2fbd..f994a8eb776c2ad1029b447ebab0273e private void polarBearSettings() { polarBearRidable = getBoolean("mobs.polar_bear.ridable", polarBearRidable); polarBearRidableInWater = getBoolean("mobs.polar_bear.ridable-in-water", polarBearRidableInWater); -@@ -974,6 +976,9 @@ public class PurpurWorldConfig { +@@ -970,6 +972,9 @@ public class PurpurWorldConfig { set("mobs.polar_bear.attributes.max_health", oldValue); } polarBearMaxHealth = getDouble("mobs.polar_bear.attributes.max_health", polarBearMaxHealth); diff --git a/patches/server/0032-Chickens-can-retaliate.patch b/patches/server/0029-Chickens-can-retaliate.patch similarity index 89% rename from patches/server/0032-Chickens-can-retaliate.patch rename to patches/server/0029-Chickens-can-retaliate.patch index dba975b0d..e320a51e1 100644 --- a/patches/server/0032-Chickens-can-retaliate.patch +++ b/patches/server/0029-Chickens-can-retaliate.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Chickens can retaliate diff --git a/src/main/java/net/minecraft/world/entity/animal/Chicken.java b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -index ea404a84a43a02a5614d5142bb78a586edfc69f6..0f49705e3c7adf033cee9d0746319885c830224f 100644 +index 3c06fe81e2e1d7bd546ead0d13d87cbe7e2e7b5b..bc3094493d7d25eaf50da8fdd74eacae25692b09 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Chicken.java +++ b/src/main/java/net/minecraft/world/entity/animal/Chicken.java -@@ -74,19 +74,30 @@ public class Chicken extends Animal { +@@ -75,19 +75,30 @@ public class Chicken extends Animal { @Override public void initAttributes() { this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(this.level().purpurConfig.chickenMaxHealth); @@ -40,7 +40,7 @@ index ea404a84a43a02a5614d5142bb78a586edfc69f6..0f49705e3c7adf033cee9d0746319885 } @Override -@@ -95,7 +106,7 @@ public class Chicken extends Animal { +@@ -96,7 +107,7 @@ public class Chicken extends Animal { } public static AttributeSupplier.Builder createAttributes() { @@ -50,10 +50,10 @@ index ea404a84a43a02a5614d5142bb78a586edfc69f6..0f49705e3c7adf033cee9d0746319885 @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index f994a8eb776c2ad1029b447ebab0273eb01e302f..535fc8b625b49c2451e17f5e73ea44b634adc6d9 100644 +index 4b97350dd6968125d91e02441b6a573ce7000943..c208253d9afcdaa18fdb1f020d3d385556190203 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -303,6 +303,7 @@ public class PurpurWorldConfig { +@@ -299,6 +299,7 @@ public class PurpurWorldConfig { public boolean chickenRidableInWater = false; public boolean chickenControllable = true; public double chickenMaxHealth = 4.0D; @@ -61,7 +61,7 @@ index f994a8eb776c2ad1029b447ebab0273eb01e302f..535fc8b625b49c2451e17f5e73ea44b6 private void chickenSettings() { chickenRidable = getBoolean("mobs.chicken.ridable", chickenRidable); chickenRidableInWater = getBoolean("mobs.chicken.ridable-in-water", chickenRidableInWater); -@@ -313,6 +314,7 @@ public class PurpurWorldConfig { +@@ -309,6 +310,7 @@ public class PurpurWorldConfig { set("mobs.chicken.attributes.max_health", oldValue); } chickenMaxHealth = getDouble("mobs.chicken.attributes.max_health", chickenMaxHealth); diff --git a/patches/server/0033-Add-option-to-set-armorstand-step-height.patch b/patches/server/0030-Add-option-to-set-armorstand-step-height.patch similarity index 82% rename from patches/server/0033-Add-option-to-set-armorstand-step-height.patch rename to patches/server/0030-Add-option-to-set-armorstand-step-height.patch index 32ac78889..fac05f34a 100644 --- a/patches/server/0033-Add-option-to-set-armorstand-step-height.patch +++ b/patches/server/0030-Add-option-to-set-armorstand-step-height.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add option to set armorstand step height diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 1ecca8fdab2fb12390446fd8e134032f1d003f4a..391d0782245f490152776e3c377a8040ad254322 100644 +index f859e05ddc13b4d27f73fbd2abd331f3c8804363..61183cfcff5f4c706d0491b844531596caa1080d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -334,7 +334,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { +@@ -333,7 +333,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource { public double xOld; public double yOld; public double zOld; @@ -18,10 +18,10 @@ index 1ecca8fdab2fb12390446fd8e134032f1d003f4a..391d0782245f490152776e3c377a8040 protected final RandomSource random; public int tickCount; diff --git a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -index 5c6e060a54ffb13c37ff5711992e964bdd59643d..5524a69952130ec38e151509ba7733459146d1b0 100644 +index 9b19cca3b8231b8fbda674f080922673503b1260..41d6127ef781a2119dc41f18b4831d9e150ba0fa 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java -@@ -682,6 +682,7 @@ public class ArmorStand extends LivingEntity { +@@ -690,6 +690,7 @@ public class ArmorStand extends LivingEntity { @Override public void tick() { @@ -30,7 +30,7 @@ index 5c6e060a54ffb13c37ff5711992e964bdd59643d..5524a69952130ec38e151509ba773345 if (!this.canTick) { if (this.noTickPoseDirty) { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 535fc8b625b49c2451e17f5e73ea44b634adc6d9..9ad3efdfdabb1a5a5c2c6a521521a55bf1aea1b2 100644 +index c208253d9afcdaa18fdb1f020d3d385556190203..5875b0e956a91ddb89adfdcb97418cc1d72a1ddf 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -90,6 +90,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0034-Cat-spawning-options.patch b/patches/server/0031-Cat-spawning-options.patch similarity index 94% rename from patches/server/0034-Cat-spawning-options.patch rename to patches/server/0031-Cat-spawning-options.patch index 19bd37d8d..de9b7978f 100644 --- a/patches/server/0034-Cat-spawning-options.patch +++ b/patches/server/0031-Cat-spawning-options.patch @@ -51,10 +51,10 @@ index 5f407535298a31a34cfe114dd863fd6a9b977707..29c7e33fe961020e5a0007287fe9b663 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 9ad3efdfdabb1a5a5c2c6a521521a55bf1aea1b2..524401b0ecdbe8cf67447072aafa58293dc11bf9 100644 +index 5875b0e956a91ddb89adfdcb97418cc1d72a1ddf..8f75164e9d877a61cc91886c1e1a7dd4026628c3 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -276,6 +276,9 @@ public class PurpurWorldConfig { +@@ -272,6 +272,9 @@ public class PurpurWorldConfig { public boolean catRidableInWater = true; public boolean catControllable = true; public double catMaxHealth = 10.0D; @@ -64,7 +64,7 @@ index 9ad3efdfdabb1a5a5c2c6a521521a55bf1aea1b2..524401b0ecdbe8cf67447072aafa5829 private void catSettings() { catRidable = getBoolean("mobs.cat.ridable", catRidable); catRidableInWater = getBoolean("mobs.cat.ridable-in-water", catRidableInWater); -@@ -286,6 +289,9 @@ public class PurpurWorldConfig { +@@ -282,6 +285,9 @@ public class PurpurWorldConfig { set("mobs.cat.attributes.max_health", oldValue); } catMaxHealth = getDouble("mobs.cat.attributes.max_health", catMaxHealth); diff --git a/patches/server/0035-Cows-eat-mushrooms.patch b/patches/server/0032-Cows-eat-mushrooms.patch similarity index 89% rename from patches/server/0035-Cows-eat-mushrooms.patch rename to patches/server/0032-Cows-eat-mushrooms.patch index b8e231e08..5fe654b66 100644 --- a/patches/server/0035-Cows-eat-mushrooms.patch +++ b/patches/server/0032-Cows-eat-mushrooms.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Cows eat mushrooms diff --git a/src/main/java/net/minecraft/world/entity/animal/Cow.java b/src/main/java/net/minecraft/world/entity/animal/Cow.java -index 621fe1c08dda65934437eeab679b6e5cd2d11d3d..28c7e240b7dd1957ccb6a45608b1d052a32dc18a 100644 +index f440eabffb1abe4c7370bf7badf6137a22f99071..d42c8bcd85ffb1e00d2883485bf22981611b0bc3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cow.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cow.java @@ -2,6 +2,7 @@ package net.minecraft.world.entity.animal; @@ -16,15 +16,15 @@ index 621fe1c08dda65934437eeab679b6e5cd2d11d3d..28c7e240b7dd1957ccb6a45608b1d052 import net.minecraft.server.level.ServerLevel; import net.minecraft.sounds.SoundEvent; import net.minecraft.sounds.SoundEvents; -@@ -29,6 +30,7 @@ import net.minecraft.world.item.ItemUtils; +@@ -30,6 +31,7 @@ import net.minecraft.world.item.ItemUtils; import net.minecraft.world.item.Items; import net.minecraft.world.item.crafting.Ingredient; import net.minecraft.world.level.Level; +import net.minecraft.world.level.block.Blocks; import net.minecraft.world.level.block.state.BlockState; - // CraftBukkit start - import org.bukkit.craftbukkit.event.CraftEventFactory; -@@ -70,6 +72,7 @@ public class Cow extends Animal { + import org.joml.Vector3f; + +@@ -73,6 +75,7 @@ public class Cow extends Animal { this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.goalSelector.addGoal(1, new PanicGoal(this, 2.0D)); this.goalSelector.addGoal(2, new BreedGoal(this, 1.0D)); @@ -32,7 +32,7 @@ index 621fe1c08dda65934437eeab679b6e5cd2d11d3d..28c7e240b7dd1957ccb6a45608b1d052 this.goalSelector.addGoal(3, new TemptGoal(this, 1.25D, Ingredient.of(Items.WHEAT), false)); this.goalSelector.addGoal(4, new FollowParentGoal(this, 1.25D)); this.goalSelector.addGoal(5, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -@@ -125,6 +128,10 @@ public class Cow extends Animal { +@@ -128,6 +131,10 @@ public class Cow extends Animal { player.setItemInHand(hand, itemstack1); return InteractionResult.sidedSuccess(this.level().isClientSide); @@ -43,9 +43,9 @@ index 621fe1c08dda65934437eeab679b6e5cd2d11d3d..28c7e240b7dd1957ccb6a45608b1d052 } else { return super.mobInteract(player, hand); } -@@ -140,4 +147,69 @@ public class Cow extends Animal { - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { - return this.isBaby() ? dimensions.height * 0.95F : 1.3F; +@@ -148,4 +155,69 @@ public class Cow extends Animal { + protected Vector3f getPassengerAttachmentPoint(Entity passenger, EntityDimensions dimensions, float scaleFactor) { + return new Vector3f(0.0F, dimensions.height - 0.03125F * scaleFactor, 0.0F); } + + // Purpur start - feed mushroom to change to mooshroom @@ -114,10 +114,10 @@ index 621fe1c08dda65934437eeab679b6e5cd2d11d3d..28c7e240b7dd1957ccb6a45608b1d052 + // Purpur end } diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 524401b0ecdbe8cf67447072aafa58293dc11bf9..e7268c1a19d6d6cf1166c7242f954f55463c6cfa 100644 +index 8f75164e9d877a61cc91886c1e1a7dd4026628c3..3d222e3cdb95409d9d35ef8a9224814e94c4b333 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -@@ -346,6 +346,7 @@ public class PurpurWorldConfig { +@@ -342,6 +342,7 @@ public class PurpurWorldConfig { public boolean cowRidableInWater = true; public boolean cowControllable = true; public double cowMaxHealth = 10.0D; @@ -125,7 +125,7 @@ index 524401b0ecdbe8cf67447072aafa58293dc11bf9..e7268c1a19d6d6cf1166c7242f954f55 private void cowSettings() { cowRidable = getBoolean("mobs.cow.ridable", cowRidable); cowRidableInWater = getBoolean("mobs.cow.ridable-in-water", cowRidableInWater); -@@ -356,6 +357,7 @@ public class PurpurWorldConfig { +@@ -352,6 +353,7 @@ public class PurpurWorldConfig { set("mobs.cow.attributes.max_health", oldValue); } cowMaxHealth = getDouble("mobs.cow.attributes.max_health", cowMaxHealth); diff --git a/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch b/patches/server/0033-Fix-cow-rotation-when-shearing-mooshroom.patch similarity index 88% rename from patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch rename to patches/server/0033-Fix-cow-rotation-when-shearing-mooshroom.patch index d0a54e840..aec0f2158 100644 --- a/patches/server/0036-Fix-cow-rotation-when-shearing-mooshroom.patch +++ b/patches/server/0033-Fix-cow-rotation-when-shearing-mooshroom.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix cow rotation when shearing mooshroom diff --git a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -index 780a11339d2492dd607e3ef91867ffbb9062e2cd..b27c0f21354a78025f9d1664c560fb8799bced91 100644 +index e3fe62285ced917de6817916e99483e117008670..c83e5d58ca5db1e63e099f36006043f7e78ea56f 100644 --- a/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java +++ b/src/main/java/net/minecraft/world/entity/animal/MushroomCow.java -@@ -202,7 +202,13 @@ public class MushroomCow extends Cow implements Shearable, VariantHolder 0 && !source.is(DamageTypeTags.BYPASSES_INVULNERABILITY)) { diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index 9948a28dae4edba877c13ef0156be5ff58df3fa2..5cdcc5792f19766d2d55d16859f8e0f68bd6479b 100644 +index 44a6118d3bd67a95180f750c17967561946e2e87..9d9d9cf2366441b453b66f91c53e7a0fe0c01e8f 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java -@@ -108,11 +108,13 @@ public abstract class AbstractMinecart extends Entity { +@@ -112,12 +112,14 @@ public abstract class AbstractMinecart extends Entity { private double flyingY = 0.949999988079071D; // Paper - restore vanilla precision private double flyingZ = 0.949999988079071D; // Paper - restore vanilla precision public double maxSpeed = 0.4D; @@ -29,12 +29,13 @@ index 9948a28dae4edba877c13ef0156be5ff58df3fa2..5cdcc5792f19766d2d55d16859f8e0f6 protected AbstractMinecart(EntityType type, Level world) { super(type, world); + this.targetDeltaMovement = Vec3.ZERO; this.blocksBuilding = true; + if (world != null) maxSpeed = storedMaxSpeed = world.purpurConfig.minecartMaxSpeed; // Purpur } protected AbstractMinecart(EntityType type, Level world, double x, double y, double z) { -@@ -335,6 +337,12 @@ public abstract class AbstractMinecart extends Entity { +@@ -342,6 +344,12 @@ public abstract class AbstractMinecart extends Entity { @Override public void tick() { @@ -111,10 +112,10 @@ index 9948a28dae4edba877c13ef0156be5ff58df3fa2..5cdcc5792f19766d2d55d16859f8e0f6 this.move(MoverType.SELF, this.getDeltaMovement()); if (!this.onGround()) { diff --git a/src/main/java/net/minecraft/world/item/MinecartItem.java b/src/main/java/net/minecraft/world/item/MinecartItem.java -index c6d2f764efa9b8bec730bbe757d480e365b25ccc..cef98413d25dcc2def82775bbae71f92b096d905 100644 +index a33395dc5a94d89b5ab273c7832813b6ff9ea3b7..2b2218e2de535ebc8f529f5b5bf98fa1ef819a5e 100644 --- a/src/main/java/net/minecraft/world/item/MinecartItem.java +++ b/src/main/java/net/minecraft/world/item/MinecartItem.java -@@ -120,8 +120,9 @@ public class MinecartItem extends Item { +@@ -122,8 +122,9 @@ public class MinecartItem extends Item { BlockState iblockdata = world.getBlockState(blockposition); if (!iblockdata.is(BlockTags.RAILS)) { @@ -126,7 +127,7 @@ index c6d2f764efa9b8bec730bbe757d480e365b25ccc..cef98413d25dcc2def82775bbae71f92 ItemStack itemstack = context.getItemInHand(); if (!world.isClientSide) { -@@ -149,6 +150,6 @@ public class MinecartItem extends Item { +@@ -151,6 +152,6 @@ public class MinecartItem extends Item { itemstack.shrink(1); return InteractionResult.sidedSuccess(world.isClientSide); @@ -135,7 +136,7 @@ index c6d2f764efa9b8bec730bbe757d480e365b25ccc..cef98413d25dcc2def82775bbae71f92 } } diff --git a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java -index de4c1e4701236e7d5ec77339c51ad6a9d8288bb6..5ac102afde62c08f36886b466010ccfedabfa05e 100644 +index e6a4a5898ffdcb2aa2bc01371a6d7dbc06d610ce..443bed339884f78ecda8abdbcdc9b57ea9768cc9 100644 --- a/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java +++ b/src/main/java/net/minecraft/world/level/block/state/BlockBehaviour.java @@ -89,7 +89,7 @@ public abstract class BlockBehaviour implements FeatureElement { @@ -148,7 +149,7 @@ index de4c1e4701236e7d5ec77339c51ad6a9d8288bb6..5ac102afde62c08f36886b466010ccfe protected ResourceLocation drops; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index 115085ecee8a765921d91288962f9ad8ab2391fa..df1d4a3e6cad6f8e73f28dc2c1da6c9821f6e01f 100644 +index ed64be25581f407edcd15b8eac1c4effd9bb8728..7290de61830b84ddc54f50353dd5c24a65192816 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -95,6 +95,68 @@ public class PurpurWorldConfig { diff --git a/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch b/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch similarity index 87% rename from patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch rename to patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch index 40f879b78..ec472048b 100644 --- a/patches/server/0042-Disable-loot-drops-on-death-by-cramming.patch +++ b/patches/server/0039-Disable-loot-drops-on-death-by-cramming.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Disable loot drops on death by cramming diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 287189fc95067d746e8253fc2633b843a72dcd73..bb8ba67c7a4a4c7a641e103bd20cbc0a01dc66b2 100644 +index e2a09ca6fca5aa9623eae152e9861f81f7371811..23c6ec58ab4bbd1807e3f05779258a9fd0e5133e 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -1805,6 +1805,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1826,6 +1826,7 @@ public abstract class LivingEntity extends Entity implements Attackable { this.dropEquipment(); // CraftBukkit - from below if (this.shouldDropLoot() && this.level().getGameRules().getBoolean(GameRules.RULE_DOMOBLOOT)) { @@ -16,7 +16,7 @@ index 287189fc95067d746e8253fc2633b843a72dcd73..bb8ba67c7a4a4c7a641e103bd20cbc0a this.dropFromLootTable(source, flag); // Paper start final boolean prev = this.clearEquipmentSlots; -@@ -1813,6 +1814,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1834,6 +1835,7 @@ public abstract class LivingEntity extends Entity implements Attackable { // Paper end this.dropCustomDeathLoot(source, i, flag); this.clearEquipmentSlots = prev; // Paper @@ -25,7 +25,7 @@ index 287189fc95067d746e8253fc2633b843a72dcd73..bb8ba67c7a4a4c7a641e103bd20cbc0a // 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, () -> { diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index df1d4a3e6cad6f8e73f28dc2c1da6c9821f6e01f..a1690b8cc9843b17103fc5906244ffbe72eec574 100644 +index 7290de61830b84ddc54f50353dd5c24a65192816..807b1b1de4019f279618c6e02ab90bf230ed5e66 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -95,6 +95,11 @@ public class PurpurWorldConfig { diff --git a/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch similarity index 95% rename from patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch rename to patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch index 1f95ecfd8..13d4d83f7 100644 --- a/patches/server/0043-Option-to-toggle-milk-curing-bad-omen.patch +++ b/patches/server/0040-Option-to-toggle-milk-curing-bad-omen.patch @@ -28,7 +28,7 @@ index f33977d95b6db473be4f95075ba99caf90ad0220..56dc04d8875971ee9a5d077a695509af return stack.isEmpty() ? new ItemStack(Items.BUCKET) : stack; diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index a1690b8cc9843b17103fc5906244ffbe72eec574..0549181f25cc9a31ea6ad9da8170c983667d6bb3 100644 +index 807b1b1de4019f279618c6e02ab90bf230ed5e66..e943bd03ea9010f7d7f877380c38a38aab396d9f 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -96,8 +96,10 @@ public class PurpurWorldConfig { diff --git a/patches/server/0044-End-gateway-should-check-if-entity-can-use-portal.patch b/patches/server/0041-End-gateway-should-check-if-entity-can-use-portal.patch similarity index 100% rename from patches/server/0044-End-gateway-should-check-if-entity-can-use-portal.patch rename to patches/server/0041-End-gateway-should-check-if-entity-can-use-portal.patch diff --git a/patches/server/0045-Skip-events-if-there-s-no-listeners.patch b/patches/server/0042-Skip-events-if-there-s-no-listeners.patch similarity index 88% rename from patches/server/0045-Skip-events-if-there-s-no-listeners.patch rename to patches/server/0042-Skip-events-if-there-s-no-listeners.patch index f0df55dd0..768487bbd 100644 --- a/patches/server/0045-Skip-events-if-there-s-no-listeners.patch +++ b/patches/server/0042-Skip-events-if-there-s-no-listeners.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Skip events if there's no listeners diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 80c2c8d565f03ae0ea24fbdecdbe2bc5b9aa4b82..147fcbdd784f06fe23138b20aef82f92ba154998 100644 +index 3eec879bf3975636739b2491cc05b8177032d16d..a5829f0726fd92faae04f978c82b2f0736bcd50b 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java -@@ -456,6 +456,7 @@ public class Commands { +@@ -462,6 +462,7 @@ public class Commands { private void runSync(ServerPlayer player, Collection bukkit, RootCommandNode rootcommandnode) { // Paper end - Async command map building new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper @@ -16,7 +16,7 @@ index 80c2c8d565f03ae0ea24fbdecdbe2bc5b9aa4b82..147fcbdd784f06fe23138b20aef82f92 PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); -@@ -466,6 +467,7 @@ public class Commands { +@@ -472,6 +473,7 @@ public class Commands { } } // CraftBukkit end diff --git a/patches/server/0046-Add-permission-for-F3-N-debug.patch b/patches/server/0043-Add-permission-for-F3-N-debug.patch similarity index 83% rename from patches/server/0046-Add-permission-for-F3-N-debug.patch rename to patches/server/0043-Add-permission-for-F3-N-debug.patch index e994c7408..cbed37776 100644 --- a/patches/server/0046-Add-permission-for-F3-N-debug.patch +++ b/patches/server/0043-Add-permission-for-F3-N-debug.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add permission for F3+N debug diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 2cac536ebbc21a23a2219c630fe477bf9c00ce65..9cecf7d3e2f860f9de5dd13a352d8d7ed6f95266 100644 +index 94e55c34084a8bccac95b8e5d108760758e4d61a..c6adced2551977dff3000dce8f6c0b35c295e85e 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java -@@ -1164,6 +1164,7 @@ public abstract class PlayerList { +@@ -1156,6 +1156,7 @@ public abstract class PlayerList { } else { b0 = (byte) (24 + permissionLevel); } diff --git a/patches/server/0047-Configurable-TPS-Catchup.patch b/patches/server/0044-Configurable-TPS-Catchup.patch similarity index 93% rename from patches/server/0047-Configurable-TPS-Catchup.patch rename to patches/server/0044-Configurable-TPS-Catchup.patch index 9f0c01cb6..25a8d64ec 100644 --- a/patches/server/0047-Configurable-TPS-Catchup.patch +++ b/patches/server/0044-Configurable-TPS-Catchup.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Configurable TPS Catchup diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 287f5b64622cdc98cbe8248c89af27c97fdf8347..eda8479d26d5ccbb516adc6c483c1c8366375ddd 100644 +index e302593cd3cdba2128355be65ce3f2e40df9f660..09dca4c159e47432c6f2a463320456a1e7f1bae5 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1174,7 +1174,13 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop