diff --git a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt index 848a3d7..6d34eec 100644 --- a/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt +++ b/buildSrc/src/main/kotlin/org/plazmamc/alwaysuptodate/tasks/PurpurUpdateTask.kt @@ -88,6 +88,10 @@ abstract class PurpurUpdateTask : Task() { updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), purpur.resolve("gradle.properties").toFile()) updatePaperCommit(property.paperRepository.get(), property.paperBranch.get(), project.file("gradle.properties")) + val latestCommit = git("ls-remote", property.purpurRepository.get()).readText()?.lines() + ?.filterNot { "[a-z0-9]{40}\trefs/heads/${property.purpurBranch.get()}".toRegex().matches(it) }?.first()?.split("\t")?.first() + ?: throw AlwaysUpToDateException("Failed to get latest Purpur commit") + val purpurGradle = Gradle(purpur) val purpurPatches = purpur.resolve("patches").also { val puffefishPatches = pufferfish.resolve("patches").also { that -> that.toFile().deleteRecursively() } @@ -138,6 +142,8 @@ abstract class PurpurUpdateTask : Task() { copyPatch(this, target, "0002-Purpur-API-Changes.patch") } } + + project.file("gradle.properties").writeText(project.file("gradle.properties").readText().replace("purpurCommit = .*".toRegex(), "purpurCommit = $latestCommit")) } private fun copySource(dir: Path) { diff --git a/gradle.properties b/gradle.properties index 886b32e..9b15bed 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,9 +1,8 @@ version = 1.20.4-R0.1-SNAPSHOT mcVersion = 1.20.4 -paperCommit = 94807a1d2e74b26b1a3154974d4024daa4c95f51 -purpurCommit = c46cb7ef66675e00a48e20c40febed7ff914f35d -pufferfishCommit = bc89152d4cd4bb0f9644da2fe10774df4cc25661 +paperCommit = 27cabc19a02e054276b58bfe0a40fc0add14d25e +purpurCommit = 236b06a2a30dd4dc3850251d902b1a790c130366 org.gradle.caching = true org.gradle.parallel = true diff --git a/patches/api/0002-Purpur-API-Changes.patch b/patches/api/0002-Purpur-API-Changes.patch index 596e0af..dd16ba2 100644 --- a/patches/api/0002-Purpur-API-Changes.patch +++ b/patches/api/0002-Purpur-API-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: granny -Date: Thu, 18 Jan 2024 22:51:24 +0900 +Date: Mon, 22 Jan 2024 17:31:12 +0900 Subject: [PATCH] Purpur API Changes PurpurMC @@ -186,7 +186,7 @@ index a736d7bcdc5861a01b66ba36158db1c716339346..22fc165fd9c95f0f3ae1be7a0857e48c @Override diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index 48fab492609e0bae459d20cc2eae78b87e37ab75..109304f8064ab2fab57f9c0f1745e446e6748b3d 100644 +index 2d53675907f411046978b0a234c0b6f33c909973..2bb2b9ba757d18510e3f45304cfbb56c28113ed7 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java @@ -2842,4 +2842,127 @@ public final class Bukkit { @@ -954,7 +954,7 @@ index 138d2530de2410f4a9424dabd3e5ce0cd1c1dcd2..10a8d64ad2da0be2c14f34c3e7d1957c // Paper start /** diff --git a/src/main/java/org/bukkit/entity/Entity.java b/src/main/java/org/bukkit/entity/Entity.java -index 1d0fd7ff8449f815a7d980af0b378181ea8bf8d8..42b8de355855baecd0a435314909116c210d002d 100644 +index 6ace3581f8d0c2a1b7e2188d5b6af5c984b74a0e..7dac01adb01fc5f37b55cf239883a96a51b68de1 100644 --- a/src/main/java/org/bukkit/entity/Entity.java +++ b/src/main/java/org/bukkit/entity/Entity.java @@ -1107,4 +1107,55 @@ public interface Entity extends Metadatable, CommandSender, Nameable, Persistent @@ -1039,7 +1039,7 @@ index 655e37cb3a09610a3f3df805d6dcad17d722da62..09fd716c8fc9ea34a1cbf87bcbe22df0 + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/Item.java b/src/main/java/org/bukkit/entity/Item.java -index 58017fce436cdbda255f7172fbdadb726d4b113c..05600fc8bf2a61aca8094029bc4c208a710da952 100644 +index bcc6ba95bd21c7972865838c636a03f50b6c1f1a..c3fcd8dd7dbb1e1a18e17c014c1e641149ea5960 100644 --- a/src/main/java/org/bukkit/entity/Item.java +++ b/src/main/java/org/bukkit/entity/Item.java @@ -153,4 +153,62 @@ public interface Item extends Entity, io.papermc.paper.entity.Frictional { // Pa @@ -1106,7 +1106,7 @@ index 58017fce436cdbda255f7172fbdadb726d4b113c..05600fc8bf2a61aca8094029bc4c208a + // Purpur end } diff --git a/src/main/java/org/bukkit/entity/LivingEntity.java b/src/main/java/org/bukkit/entity/LivingEntity.java -index 47b0154928b3d36e2602da202df07defbcf82108..7498179f6df47008c4da6ad6d67b2ce16f49e7a6 100644 +index 0f0b965ce48d13a64b5546a0abcfb45c4f5f4722..76c8601c1563c28cfce00f461c99805187db5178 100644 --- a/src/main/java/org/bukkit/entity/LivingEntity.java +++ b/src/main/java/org/bukkit/entity/LivingEntity.java @@ -1276,4 +1276,41 @@ public interface LivingEntity extends Attributable, Damageable, ProjectileSource diff --git a/patches/api/0003-Build-system-changes.patch b/patches/api/0003-Use-Gradle-Version-Catalogs.patch similarity index 89% rename from patches/api/0003-Build-system-changes.patch rename to patches/api/0003-Use-Gradle-Version-Catalogs.patch index 1563af9..0f05940 100644 --- a/patches/api/0003-Build-system-changes.patch +++ b/patches/api/0003-Use-Gradle-Version-Catalogs.patch @@ -1,24 +1,24 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Sun, 14 Jan 2024 19:50:29 +0900 -Subject: [PATCH] Build system changes +Subject: [PATCH] Use Gradle Version Catalogs diff --git a/build.gradle.kts b/build.gradle.kts -index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1be7ca690 100644 +index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..033d510a10a630259e142b8a7bdfa57e7c22bb90 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -9,11 +9,13 @@ java { withJavadocJar() } -+/* // Plazma - Use libs.versions.toml ++/* // Plazma - Use Gradle Version Catalogs val annotationsVersion = "24.0.1" val bungeeCordChatVersion = "1.20-R0.1" val adventureVersion = "4.15.0" val slf4jVersion = "2.0.9" val log4jVersion = "2.17.1" -+ */ // Plazma - Use libs.versions.toml ++ */ // Plazma - Use Gradle Version Catalogs val apiAndDocs: Configuration by configurations.creating { attributes { attribute(Category.CATEGORY_ATTRIBUTE, objects.named(Category.DOCUMENTATION)) @@ -26,7 +26,7 @@ index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1 dependencies { // api dependencies are listed transitively to API consumers -+ /* // Plazma - Use libs.versions.toml ++ /* // Plazma - Use Gradle Version Catalogs api("com.google.guava:guava:32.1.2-jre") api("com.google.code.gson:gson:2.10.1") // Paper start - adventure @@ -35,7 +35,7 @@ index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1 api("org.joml:joml:1.10.5") // Paper start - api("com.googlecode.json-simple:json-simple:1.1.1") { -+ // Plazma start ++ // Plazma start - Use Gradle Version Catalogs + */ + implementation(common.bundles.asm) + @@ -60,10 +60,10 @@ index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1 + apiAndDocs(platform(common.adventure.bom)) + + api(api.jsonsimple) { -+ // Plazma end ++ // Plazma end - Use Gradle Version Catalogs isTransitive = false // includes junit } -+ /* // Plazma - Use libs.versions.toml ++ /* // Plazma - Use Gradle Version Catalogs api("it.unimi.dsi:fastutil:8.5.6") apiAndDocs(platform("net.kyori:adventure-bom:$adventureVersion")) apiAndDocs("net.kyori:adventure-api") @@ -71,7 +71,7 @@ index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1 testImplementation("org.hamcrest:hamcrest:2.2") testImplementation("org.mockito:mockito-core:5.5.0") testImplementation("org.ow2.asm:asm-tree:9.5") -+ */ // Plazma - Use libs.versions.toml ++ */ // Plazma - Use Gradle Version Catalogs } // Paper start @@ -82,7 +82,7 @@ index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1 - "https://guava.dev/releases/32.1.2-jre/api/docs/", - "https://javadoc.io/doc/org.yaml/snakeyaml/2.2/", - "https://javadoc.io/doc/org.jetbrains/annotations/$annotationsVersion/", // Paper - we don't want Java 5 annotations -+ // Plazma start - Use libs.versions.toml ++ // Plazma start - Use Gradle Version Catalogs + "https://guava.dev/releases/${api.guava.orNull?.version}/api/docs/", + "https://javadoc.io/doc/org.yaml/snakeyaml/${common.snakeyaml.orNull?.version}/", + "https://javadoc.io/doc/org.jetbrains/annotations/${api.annotations.orNull?.version}/", // Paper - we don't want Java 5 annotations @@ -113,7 +113,7 @@ index 0a33275fdf16bda47771bab9ddfeb2bf8616c2dc..dfc2fe81a776acc490189d96c195dea1 // Paper end - "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/1.7.3", // Paper + "https://javadoc.io/doc/org.apache.maven.resolver/maven-resolver-api/${common.maven.connector.orNull?.version}", // Paper -+ // Plazma end ++ // Plazma end - Use Gradle Version Catalogs ) options.tags("apiNote:a:API Note:") diff --git a/patches/api/0004-Plazma-Configurations.patch b/patches/api/0004-Plazma-Configurations.patch index 35ec470..f6b8ec5 100644 --- a/patches/api/0004-Plazma-Configurations.patch +++ b/patches/api/0004-Plazma-Configurations.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Plazma Configurations diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 529fb1beadefc79ce6bf5755d5223301b9933152..c78eb34b20ed1a7bf793cfd4594219923c33f66f 100644 +index 529fb1beadefc79ce6bf5755d5223301b9933152..682d520df3beacd65c7e792bac0d469e0083267f 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java @@ -2210,6 +2210,13 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi } // Purpur end -+ // Plazma start ++ // Plazma start - Plazma Configuration API + @NotNull + public org.bukkit.configuration.file.YamlConfiguration getPlazmaConfig() { + throw new UnsupportedOperationException("Not supported yet."); diff --git a/patches/api/0005-Optimize-spigot-event-bus.patch b/patches/api/0005-Optimize-spigot-event-bus.patch index 0d265db..9b37788 100644 --- a/patches/api/0005-Optimize-spigot-event-bus.patch +++ b/patches/api/0005-Optimize-spigot-event-bus.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Optimize-spigot-event-bus diff --git a/src/main/java/org/bukkit/event/Event.java b/src/main/java/org/bukkit/event/Event.java -index 8ec56cd6b8e0f5c5dd8c7c88b4671e18dcf109d0..45b8ee1945202cc673905aab5c90985c01cb205e 100644 +index 8ec56cd6b8e0f5c5dd8c7c88b4671e18dcf109d0..f1b3559bf9d2023ca59330c65e6e34714759dd9d 100644 --- a/src/main/java/org/bukkit/event/Event.java +++ b/src/main/java/org/bukkit/event/Event.java @@ -14,7 +14,7 @@ import org.jetbrains.annotations.NotNull; @@ -48,7 +48,7 @@ index 8ec56cd6b8e0f5c5dd8c7c88b4671e18dcf109d0..45b8ee1945202cc673905aab5c90985c + public final @NotNull net.kyori.adventure.util.TriState asynchronous() { + return this.async; + } -+ // Plazma end ++ // Plazma end - Optimize Spigot event bus + // Paper start /** diff --git a/patches/server/0001-Pufferfish-Server-Changes.patch b/patches/server/0001-Pufferfish-Server-Changes.patch index f225b9b..3249ffd 100644 --- a/patches/server/0001-Pufferfish-Server-Changes.patch +++ b/patches/server/0001-Pufferfish-Server-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: Kevin Raneri -Date: Thu, 18 Jan 2024 22:51:22 +0900 +Date: Mon, 22 Jan 2024 17:31:10 +0900 Subject: [PATCH] Pufferfish Server Changes Pufferfish @@ -20,7 +20,7 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . diff --git a/build.gradle.kts b/build.gradle.kts -index 444ff797c70b0e285d4272ea2ce3d72453c9bda5..fd785a79b1708aadd760f5b62d49d4d4e55e9938 100644 +index 376e8983fdfdbb6c3e5fd8ad0f6a05e655b622bf..658e9b4590a82d179907feea04e129fdba9a2f42 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -625,10 +625,10 @@ index 0000000000000000000000000000000000000000..020368da69b9a492155f6de6297f7473 +} diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java new file mode 100644 -index 0000000000000000000000000000000000000000..61f21c0bf6658326a15b735c22001b4028b98800 +index 0000000000000000000000000000000000000000..ad368b58005b6b0453b709c2ef0ea23bca53d34a --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -@@ -0,0 +1,315 @@ +@@ -0,0 +1,301 @@ +package gg.pufferfish.pufferfish; + +import gg.pufferfish.pufferfish.simd.SIMDDetection; @@ -819,20 +819,6 @@ index 0000000000000000000000000000000000000000..61f21c0bf6658326a15b735c22001b40 + "an attempt to maintain 20 TPS. This option (defaults to true per", + "spigot/paper) can cause mobs to move fast after a lag spike."); + } -+ -+ public static boolean enableAsyncWorldSaving; -+ public static boolean asyncWorldSavingInitialized; -+ private static void asyncWorldSaving() { -+ boolean temp = getBoolean("enable-async-world-saving", false, -+ "Save world changes asynchronously. This is disabled by default as it is not", -+ "100% confident that this will not cause world corruption issues."); -+ -+ // This prevents us from changing the value during a reload. -+ if (!asyncWorldSavingInitialized) { -+ asyncWorldSavingInitialized = true; -+ enableAsyncWorldSaving = temp; -+ } -+ } + + public static boolean enableSuffocationOptimization; + private static void suffocationOptimization() { @@ -935,13 +921,13 @@ index 0000000000000000000000000000000000000000..61f21c0bf6658326a15b735c22001b40 + "the ender dragon whenever a player places an end crystal."); + } + -+ public static boolean disableMethodProfiler; ++ public static boolean disableMethodProfiler; + public static boolean disableOutOfOrderChat; -+ private static void miscSettings() { ++ private static void miscSettings() { + disableMethodProfiler = getBoolean("misc.disable-method-profiler", true); + disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", false); -+ setComment("misc", "Settings for things that don't belong elsewhere"); -+ } ++ setComment("misc", "Settings for things that don't belong elsewhere"); ++ } + +} diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishLogger.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishLogger.java @@ -1498,20 +1484,20 @@ index 200ed770b57e1a9240abf0473968d4b85cbefe3c..0acc7cfc0fb0264dd76a58f7582e79d8 public static long getCoordinateKey(final ChunkPos pair) { diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java -index 85a8a687b1568a56e3e646b37ef78b562c1b8a82..69971b2c59e541ac4100b84c84e2972de1b44ca9 100644 +index ba12919c3f9aec34a9e64993b143ae92be5eb172..9efeab9078e2d08903e482718b840797e22ab1c2 100644 --- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java @@ -38,7 +38,7 @@ public class SignedMessageChain { throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.chain_broken"), false); // Paper - diff on change (if disconnects, need a new kick event cause) } else if (playerPublicKey.data().hasExpired()) { - throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey", org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY), false); // Paper - kick event causes + throw new SignedMessageChain.DecodeException(Component.translatable("chat.disabled.expiredProfileKey"), false, org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY); // Paper - kick event causes - } else if (body.timeStamp().isBefore(this.lastTimeStamp)) { + } else if (!gg.pufferfish.pufferfish.PufferfishConfig.disableOutOfOrderChat && body.timeStamp().isBefore(this.lastTimeStamp)) { // Pufferfish - throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.out_of_order_chat", org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT), true); // Paper - kick event causes + throw new SignedMessageChain.DecodeException(Component.translatable("multiplayer.disconnect.out_of_order_chat"), true, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes } else { this.lastTimeStamp = body.timeStamp(); diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 016b7628b289fb882f3ec15dd5b0cb4e0af72edc..1343649cd77a42dd502747581050b401840a6efe 100644 +index ec1197e498d0fa8d58466b8dffe46fb0683b530c..771a9c9f4c39fdfac26ee62db2a9cdcf15d9e1a6 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -314,6 +314,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop chunkConsumer) { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index b6e5a2fa247bdee2f681739a26630dff3fc6c51a..e385a62058204ba3b01ce594e7c180f9cc6cf664 100644 +index ae188ae314336d971303023c7b7b8ecf32bae253..79914528f6d255355284b04253218a7c4dec1ead 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -177,7 +177,8 @@ public class ServerEntity { +@@ -183,7 +183,8 @@ public class ServerEntity { long i1 = this.positionCodec.encodeZ(vec3d); boolean flag6 = k < -32768L || k > 32767L || l < -32768L || l > 32767L || i1 < -32768L || i1 > 32767L; @@ -1744,7 +1730,7 @@ index b6e5a2fa247bdee2f681739a26630dff3fc6c51a..e385a62058204ba3b01ce594e7c180f9 if ((!flag2 || !flag3) && !(this.entity instanceof AbstractArrow)) { if (flag2) { packet1 = new ClientboundMoveEntityPacket.Pos(this.entity.getId(), (short) ((int) k), (short) ((int) l), (short) ((int) i1), this.entity.onGround()); -@@ -191,6 +192,7 @@ public class ServerEntity { +@@ -197,6 +198,7 @@ public class ServerEntity { flag4 = true; flag5 = true; } @@ -1753,10 +1739,10 @@ index b6e5a2fa247bdee2f681739a26630dff3fc6c51a..e385a62058204ba3b01ce594e7c180f9 this.wasOnGround = this.entity.onGround(); this.teleportDelay = 0; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb4f76e885 100644 +index 7a327afc8c08dfb94e66595b015887c6d0018c37..e387de54c9786711272f0ec3f8d312e472a9c4ea 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -899,6 +899,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -894,6 +894,7 @@ public class ServerLevel extends Level implements WorldGenLevel { org.spigotmc.ActivationRange.activateEntities(this); // Spigot this.timings.entityTick.startTiming(); // Spigot this.entityTickList.forEach((entity) -> { @@ -1764,7 +1750,7 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); -@@ -918,7 +919,20 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -913,7 +914,20 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.push("tick"); @@ -1786,7 +1772,7 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb gameprofilerfiller.pop(); } } -@@ -983,9 +997,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -978,9 +992,11 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -1799,7 +1785,7 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); -@@ -996,7 +1012,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -991,7 +1007,7 @@ public class ServerLevel extends Level implements WorldGenLevel { gameprofilerfiller.push("thunder"); final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change @@ -1808,64 +1794,18 @@ index e0dae41eb94da08649cba607975798dc2ac328ad..f7215d0a67e9e024af0c040c796ebcbb blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper if (this.isRainingAt(blockposition)) { -@@ -1491,7 +1507,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - - try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { - if (doFull) { -- this.saveLevelData(); -+ this.saveLevelData(true); // Pufferfish - } - - this.timings.worldSaveChunks.startTiming(); // Paper -@@ -1527,7 +1543,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); - } - -- this.saveLevelData(); -+ this.saveLevelData(!close); // Pufferfish - if (progressListener != null) { - progressListener.progressStage(Component.translatable("menu.savingChunks")); - } -@@ -1550,12 +1566,12 @@ public class ServerLevel extends Level implements WorldGenLevel { - // CraftBukkit end - } - -- private void saveLevelData() { -+ private void saveLevelData(boolean async) { // Pufferfish - if (this.dragonFight != null) { - this.serverLevelData.setEndDragonFightData(this.dragonFight.saveData()); // CraftBukkit - } - -- this.getChunkSource().getDataStorage().save(); -+ this.getChunkSource().getDataStorage().save(async); // Pufferfish - } - - public List getEntities(EntityTypeTest filter, Predicate predicate) { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 8568de90c39838e1627f286c5c3ca4b0f19002cb..04b0eb391bb524dd7af14b862d89c0f2494a8206 100644 +index 5234d3dcb60d84f65621713b57bea034038af2a5..b5917417aaed74555917772650fe51485281c2ec 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1124,6 +1124,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1121,6 +1121,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleEditBook(ServerboundEditBookPacket packet) { + if (!gg.pufferfish.pufferfish.PufferfishConfig.enableBooks && !this.player.getBukkitEntity().hasPermission("pufferfish.usebooks")) return; // Pufferfish - // Paper start + // Paper start - Book size limits if (!this.cserver.isPrimaryThread()) { List pageList = packet.getPages(); -diff --git a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -index f2a7cb6ebed7a4b4019a09af2a025f624f6fe9c9..47636aad5fa20d1c28d3520beb0729df9b30cf6c 100644 ---- a/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -+++ b/src/main/java/net/minecraft/util/worldupdate/WorldUpgrader.java -@@ -224,7 +224,7 @@ public class WorldUpgrader { - } - } - -- this.overworldDataStorage.save(); -+ this.overworldDataStorage.save(false); // Pufferfish - i = Util.getMillis() - i; - WorldUpgrader.LOGGER.info("World optimizaton finished after {} ms", i); - this.finished = true; diff --git a/src/main/java/net/minecraft/world/CompoundContainer.java b/src/main/java/net/minecraft/world/CompoundContainer.java index 241fec02e6869c638d3a160819b32173a081467b..6a8f9e8f5bf108674c47018def28906e2d0a729c 100644 --- a/src/main/java/net/minecraft/world/CompoundContainer.java @@ -1979,10 +1919,10 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..20dd3a63b2f955b05a75eb240e33ae4c int LARGE_MAX_STACK_SIZE = 64; int DEFAULT_DISTANCE_LIMIT = 8; diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942997ba541 100644 +index 1a19f18b5d4c42ac07e7e4f305e140954dea481b..7a50a1fe485de232abb9d626e8001eee78a33b1b 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -309,7 +309,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -308,7 +308,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double yo; public double zo; private Vec3 position; @@ -1991,7 +1931,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 private ChunkPos chunkPosition; private Vec3 deltaMovement; private float yRot; -@@ -440,6 +440,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -439,6 +439,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.originWorld; } // Paper end @@ -2004,7 +1944,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 public float getBukkitYaw() { return this.yRot; } -@@ -808,6 +814,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -807,6 +813,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void tick() { @@ -2017,7 +1957,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 this.baseTick(); } -@@ -4410,16 +4422,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4407,16 +4419,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -2043,7 +1983,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4427,14 +4441,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4424,14 +4438,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -2111,7 +2051,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4456,9 +4517,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4453,9 +4514,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end } } @@ -2125,7 +2065,7 @@ index 14fbaef2215f7de4acb5303ad6f677b348f855d8..a8d8d261daed2ebbbea3f4f356434942 if (vec3d.length() > 0.0D) { if (k1 > 0) { diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 081937597a8984b52a1e92d4c6032c04c942116e..0ffd377dba738bd651b0c7f5ca0a0d61aaa1d82c 100644 +index e52f3da3b63cc3dba59d3e874a8420dd312b5e96..f772f7c4cd41ec52bea53d619b5b953971825df0 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -305,6 +305,8 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -2138,7 +2078,7 @@ index 081937597a8984b52a1e92d4c6032c04c942116e..0ffd377dba738bd651b0c7f5ca0a0d61 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 4cbb1f5d904191e59395df0177e76e94faae764c..9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58 100644 +index 5e2f6a1cdaf83468c0db6a2cc8fefb71e6ec51d8..370033cb058a20a83f80b8e2618e419bb3fd97cf 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -142,7 +142,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; @@ -2200,7 +2140,7 @@ index 4cbb1f5d904191e59395df0177e76e94faae764c..9b7e786d5ae6bdeeb96df6e9c4d1b24e if (this.isSpectator()) { return false; diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 0b5334004b9d0489e8465824870662b467ce321b..2f3dc569ff9cdead48aa831c96c027cc7255d609 100644 +index 3ebf777811cba0cc45cfae7587b277f06adeb045..4e3d48f6af493f2cded599f51ad5d2cd07e252f2 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -221,14 +221,16 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -2244,7 +2184,7 @@ index 0b5334004b9d0489e8465824870662b467ce321b..2f3dc569ff9cdead48aa831c96c027cc this.level().getProfiler().pop(); } 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 7204b973c3ad9239e82355513f6d538107102e48..3087f8359b098682a345399c85395de8a15b6eed 100644 +index 897d7632ecfea40890433474870dd7a5e534d8ab..683c9693754d1a87b7e8fccc757a0d0963351f60 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 @@ -23,9 +23,11 @@ public class AttributeMap { @@ -2310,19 +2250,19 @@ index b738ee2d3801fadfd09313f05ae24593e56b0ec6..1635818fc4b1788c0d397085239df6dd public boolean hasTasks() { for (WrappedGoal task : this.availableGoals) { diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -index 4bbc36404b396500df0d9db380cf223b5897662e..382e9d18b81bcbeb20cb3b828b66260f07a845e6 100644 +index 07519c817cc6de04a98198c43a0c2b02ba3141eb..ee66be6e5aa45ec8448b6d30785a6e71200b09e3 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/MoveToBlockGoal.java -@@ -119,6 +119,7 @@ public abstract class MoveToBlockGoal extends Goal { +@@ -120,6 +120,7 @@ public abstract class MoveToBlockGoal extends Goal { for(int m = 0; m <= l; m = m > 0 ? -m : 1 - m) { for(int n = m < l && m > -l ? l : 0; n <= l; n = n > 0 ? -n : 1 - n) { mutableBlockPos.setWithOffset(blockPos, m, k - 1, n); + if (!this.mob.level().hasChunkAt(mutableBlockPos)) continue; // Pufferfish - if this block isn't loaded, continue if (this.mob.isWithinRestriction(mutableBlockPos) && this.isValidTarget(this.mob.level(), mutableBlockPos)) { this.blockPos = mutableBlockPos; - setTargetPosition(mutableBlockPos.immutable()); // Paper + this.mob.movingTarget = mutableBlockPos == BlockPos.ZERO ? null : mutableBlockPos.immutable(); // Paper 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 c157309ac78e7af084d3acb6e8b2bcd469a39d5e..ac5e5676b194a2a99e5cf53eb89c1152cac963b8 100644 +index c8a80c1b2fedff22e8a877d466062375ffb2f0d7..3c4f4af85a3f2d4f9f52827164e63727b916c33a 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 @@ -75,9 +75,18 @@ public class TargetingConditions { @@ -2330,7 +2270,7 @@ index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..ac5e5676b194a2a99e5cf53eb89c1152 if (this.range > 0.0D) { - double d = this.testInvisible ? targetEntity.getVisibilityPercent(baseEntity) : 1.0D; -- double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper +- double e = Math.max((this.useFollowRange ? this.getFollowRange(baseEntity) : this.range) * d, 2.0D); // Paper - Fix MC-145656 + // Pufferfish start - check range before getting visibility + // d = invisibility percent, e = follow range adjusted for invisibility, f = distance double f = baseEntity.distanceToSqr(targetEntity.getX(), targetEntity.getY(), targetEntity.getZ()); @@ -2347,7 +2287,7 @@ index c157309ac78e7af084d3acb6e8b2bcd469a39d5e..ac5e5676b194a2a99e5cf53eb89c1152 return false; } 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 6b614818b14ecfc8fc82b523eeb7e21fdf9bf1ba..8820905ac733a8915cc1697259b2bef14d97e471 100644 +index 44fa2d4f90389f5526746bd94a2450c03340bd0b..4fba7c2f6ec363846a772ef2a63e9b3fc1037de5 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -241,13 +241,22 @@ public class Bat extends AmbientCreature { @@ -2391,7 +2331,7 @@ index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..d241ca4d0295f9fce39c11197bd435cf 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 387006271c246362b0df1bfcadca7b7096660003..9158c5a507904c46a8fe2fdad9a0b6ba3a9b2460 100644 +index b21e180641d17438997a80e5bcb0ec7998d24a2e..33c160994f70f71446d665e7487913437c9f9db4 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 @@ -275,9 +275,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder getTypeKey(); + @@ -2773,7 +2713,7 @@ index b05e11e6b091c7616df5a9bbef867b06cafe3dc3..2902c29cd7f0b99b84cff3664fc4ec15 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 - create paper world config; Async-Anti-Xray: Pass executor this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot -@@ -1318,13 +1320,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1317,13 +1319,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { try { tickConsumer.accept(entity); MinecraftServer.getServer().executeMidTickTasks(); // Paper - execute chunk tasks mid tick @@ -2789,7 +2729,7 @@ index b05e11e6b091c7616df5a9bbef867b06cafe3dc3..2902c29cd7f0b99b84cff3664fc4ec15 // Paper end } } -@@ -1798,6 +1800,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1797,6 +1799,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -2798,7 +2738,7 @@ index b05e11e6b091c7616df5a9bbef867b06cafe3dc3..2902c29cd7f0b99b84cff3664fc4ec15 } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index dc211c6aedc178ac50b7d05aab3662c422211cbd..3fb96de68b93e8d33bd5ab9137e5d4facc94d788 100644 +index ba67c55cde0120786e6705fed96fab4b611c1c75..2c300e3769acf534ee3bed91663374eca0acf5df 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -429,12 +429,12 @@ public final class NaturalSpawner { @@ -2868,7 +2808,7 @@ index 4f9187d9d640618c40a2fa528f36b845017b4777..efca73d4de33028cf9df944f36e51b7b } } diff --git a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java -index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f3040b26a 100644 +index 9b1243d96e0694c62fc9e82e9be540bce0d2b3ad..3514022d898a24052c917ebf55dcef3e757d6836 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/ChestBlockEntity.java @@ -31,7 +31,10 @@ import org.bukkit.entity.HumanEntity; @@ -2946,7 +2886,7 @@ index a71414397bd45ee7bcacfeef0041d80dfa25f114..d66806565770cb03a21794f99e5c4b0f @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java -index df1c1c27b7c0065f8179d59bdb9de01dde22befa..1ddae39df4e7cb36db412ebdec8ca9d2818450a9 100644 +index a61d7cd2b078fe511ff00344197b6ea11feebfb2..7041394d366e6145369d032a0a14f0478af4679f 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/HopperBlockEntity.java @@ -47,7 +47,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @@ -3060,7 +3000,7 @@ index a94300a457b25f0e33a8eeabba6dd5720ca9ab1e..b41635dd0569ff7df909df492d3e850a } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 27e8ee4507460b1cc72de692b41562b9f4f13929..1afac69b5bc7055d2adb07aea4755b87b246275c 100644 +index d85ed706703e50f76df8db414827ccd41a5985d9..177673cc19cd70f60bb489cb2e74b39fbb8f8d24 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -86,6 +86,18 @@ public class LevelChunk extends ChunkAccess { @@ -3092,7 +3032,7 @@ index 27e8ee4507460b1cc72de692b41562b9f4f13929..1afac69b5bc7055d2adb07aea4755b87 // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java -index 9da74764a91bea7822c0444b48623b23e038d3f2..37228dc74463dddcc55301489c41aa253017f2d4 100644 +index 1a473187c22c4158959a3aae33a6823229c5b7a7..1df090afcbf5ac43cd03c61b154b7902eb2f3bc1 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunkSection.java @@ -25,6 +25,7 @@ public class LevelChunkSection { @@ -3141,7 +3081,7 @@ index 4cdfc433df67afcd455422e9baf56f167dd712ae..57fcf3910f45ce371ac2e237b277b103 private void ensureActiveIsNotIterated() { // Paper - replace with better logic, do not delay removals diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af5f81d742 100644 +index 6d8ff6c06af5545634f255ed17dc1e489ece2548..6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java @@ -45,6 +45,8 @@ public abstract class FlowingFluid extends Fluid { @@ -3168,7 +3108,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af private final Map shapes = Maps.newIdentityHashMap(); public FlowingFluid() {} -@@ -252,6 +262,8 @@ public abstract class FlowingFluid extends Fluid { +@@ -251,6 +261,8 @@ public abstract class FlowingFluid extends Fluid { return false; } // Paper end - optimise collisions @@ -3177,7 +3117,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap; if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { -@@ -259,9 +271,16 @@ public abstract class FlowingFluid extends Fluid { +@@ -258,9 +270,16 @@ public abstract class FlowingFluid extends Fluid { } else { object2bytelinkedopenhashmap = null; } @@ -3194,7 +3134,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af if (object2bytelinkedopenhashmap != null) { block_a = new Block.BlockStatePairKey(state, fromState, face); byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block_a); -@@ -272,11 +291,22 @@ public abstract class FlowingFluid extends Fluid { +@@ -271,11 +290,22 @@ public abstract class FlowingFluid extends Fluid { } else { block_a = null; } @@ -3217,7 +3157,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af if (object2bytelinkedopenhashmap != null) { if (object2bytelinkedopenhashmap.size() == 200) { object2bytelinkedopenhashmap.removeLastByte(); -@@ -284,6 +314,11 @@ public abstract class FlowingFluid extends Fluid { +@@ -283,6 +313,11 @@ public abstract class FlowingFluid extends Fluid { object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0)); } @@ -3229,57 +3169,6 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..c55f51e6db55f9fa66f53eef0e7a56af return flag; } -diff --git a/src/main/java/net/minecraft/world/level/saveddata/SavedData.java b/src/main/java/net/minecraft/world/level/saveddata/SavedData.java -index 697df9a9f050c0130246ce2b08a859965bddf184..6df6a6bd89979bcd728e2f5bec948437d6ff9498 100644 ---- a/src/main/java/net/minecraft/world/level/saveddata/SavedData.java -+++ b/src/main/java/net/minecraft/world/level/saveddata/SavedData.java -@@ -29,17 +29,28 @@ public abstract class SavedData { - return this.dirty; - } - -- public void save(File file) { -+ public void save(File file) { save(file, false); } // Pufferfish -+ public void save(File file, boolean async) { // Pufferfish - if (this.isDirty()) { - CompoundTag compoundTag = new CompoundTag(); - compoundTag.put("data", this.save(new CompoundTag())); - NbtUtils.addCurrentDataVersion(compoundTag); - -+ // Pufferfish start -+ Runnable writeRunnable = () -> { - try { - NbtIo.writeCompressed(compoundTag, file.toPath()); - } catch (IOException var4) { - LOGGER.error("Could not save data {}", this, var4); - } -+ }; -+ -+ if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncWorldSaving && async) { -+ net.minecraft.Util.ioPool().execute(writeRunnable); -+ } else { -+ writeRunnable.run(); -+ } -+ // Pufferfish end - - this.setDirty(false); - } -diff --git a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java -index d051e8c1db6b5c42b8df0be54d9d48ba0e7b0077..6488a61bb05b0f2af23c77bc6df7c3014042ec5e 100644 ---- a/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java -+++ b/src/main/java/net/minecraft/world/level/storage/DimensionDataStorage.java -@@ -118,10 +118,10 @@ public class DimensionDataStorage { - return bl; - } - -- public void save() { -+ public void save(boolean async) { // Pufferfish - this.cache.forEach((id, state) -> { - if (state != null) { -- state.save(this.getDataFile(id)); -+ state.save(this.getDataFile(id), async); // Pufferfish - } - - }); diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java b/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java index e43d07ccdd36f0c9f5b8e9c74cf0d87e17eec66a..8e441f7c2b2d911a0c0111aaa231fc6adae08730 100644 --- a/src/main/java/net/minecraft/world/level/storage/loot/LootParams.java @@ -3384,7 +3273,7 @@ index ebe65474a4a05ff1637d7f37ebcfe690af59def5..42142c512b12e5b269c19f1e821c50e7 @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 9ef8f911632598fd589368cedde268c8abcad3b6..cfc41926305441cb36ed67a8cb7e327cd80ff301 100644 +index d5e473d621ba09f6cf84ba9ca0e870f5ff6e02f3..8962ced18e0dac6603df54ba7d99588fae24073c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper @@ -3407,7 +3296,7 @@ index 9ef8f911632598fd589368cedde268c8abcad3b6..cfc41926305441cb36ed67a8cb7e327c + } } } - // Paper end + // Paper end - Wait for Async Tasks during shutdown diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e213b081f29 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java @@ -3421,7 +3310,7 @@ index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e21 } } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index ec2396f0e5d62b10450eaa7239a8c5479638b3c3..c909efd2060dc95bd3ecb8c9fec36a1e69a642ff 100644 +index 509f8487a170f3dc84b091acf16df26e42391189..2338ba106c19c3e61d1a2088cc51d0744432666d 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -482,7 +482,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -3447,7 +3336,7 @@ index 774556a62eb240da42e84db4502e2ed43495be17..80553face9c70c2a3d897681e7761df8 if (stream != null) { diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 2d31752478636bd21bbff5b430e5acb76b5d91c2..651063863b451d24ffe39f0a4d8db296e58ff585 100644 +index fafc8b84d6b6368c70b8eedfdb4c3a9deace9c26..a69814d3a6214af734d670fe5545518a5f8a8dc5 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -38,6 +38,10 @@ import co.aikar.timings.MinecraftTimings; @@ -3463,7 +3352,7 @@ index 2d31752478636bd21bbff5b430e5acb76b5d91c2..651063863b451d24ffe39f0a4d8db296 { @@ -222,6 +226,25 @@ public class ActivationRange } - // Paper end - configurable marker ticking + // Paper end - Configurable marker ticking ActivationRange.activateEntity(entity); + + // Pufferfish start diff --git a/patches/server/0002-Purpur-Server-Changes.patch b/patches/server/0002-Purpur-Server-Changes.patch index 039c552..5255e92 100644 --- a/patches/server/0002-Purpur-Server-Changes.patch +++ b/patches/server/0002-Purpur-Server-Changes.patch @@ -1,6 +1,6 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: granny -Date: Thu, 18 Jan 2024 22:51:23 +0900 +Date: Mon, 22 Jan 2024 17:31:12 +0900 Subject: [PATCH] Purpur Server Changes PurpurMC @@ -25,7 +25,7 @@ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/build.gradle.kts b/build.gradle.kts -index fd785a79b1708aadd760f5b62d49d4d4e55e9938..5b8a28969451b12c4fc66976afd052ffa5805932 100644 +index 658e9b4590a82d179907feea04e129fdba9a2f42..0c92d10f334f82d196e065c0811d0c1f48887377 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,12 +13,12 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -351,7 +351,7 @@ index 066b9e4c4f0e7773548eda045cdd1ca8445221d2..92eaba96135ccddb7d682dab7e82cde9 setListData(vector); } diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -index 61f21c0bf6658326a15b735c22001b4028b98800..43397712cb13df5be3081c05eaa1a57c57f12c60 100644 +index ad368b58005b6b0453b709c2ef0ea23bca53d34a..ebbd115686de7a87dd422e8d2d92abcf953358a7 100644 --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java @@ -28,6 +28,7 @@ public class PufferfishConfig { @@ -371,7 +371,7 @@ index 61f21c0bf6658326a15b735c22001b4028b98800..43397712cb13df5be3081c05eaa1a57c if (configFile.exists()) { try { -@@ -246,7 +247,7 @@ public class PufferfishConfig { +@@ -232,7 +233,7 @@ public class PufferfishConfig { public static int activationDistanceMod; private static void dynamicActivationOfBrains() throws IOException { @@ -380,7 +380,7 @@ index 61f21c0bf6658326a15b735c22001b4028b98800..43397712cb13df5be3081c05eaa1a57c startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, "This value determines how far away an entity has to be", "from the player to start being effected by DEAR."); -@@ -290,7 +291,7 @@ public class PufferfishConfig { +@@ -276,7 +277,7 @@ public class PufferfishConfig { public static boolean throttleInactiveGoalSelectorTick; private static void inactiveGoalSelectorThrottle() { @@ -702,7 +702,7 @@ index e047dee632022abfe05865d1e71838be8d5d053a..888e31a0454888c36cb27602a28619f1 stringbuilder.append(CrashReport.getErrorComment()); stringbuilder.append("\n\n"); diff --git a/src/main/java/net/minecraft/commands/CommandSourceStack.java b/src/main/java/net/minecraft/commands/CommandSourceStack.java -index ec4152f7372ddad216039a489fb5d72f963b4f18..7b20d0bfc54f93f0538275d89ae84d0f186db5a5 100644 +index 623403c56d79e29421f340e97c05488efaf1893d..b335158b2e89ff849ec12c9e419c03bd722bebe0 100644 --- a/src/main/java/net/minecraft/commands/CommandSourceStack.java +++ b/src/main/java/net/minecraft/commands/CommandSourceStack.java @@ -230,6 +230,19 @@ public class CommandSourceStack implements ExecutionCommandSource bukkit, RootCommandNode rootcommandnode) { - // Paper end - Async command map building - new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper + // Paper end - Perf: Async command map building + new com.destroystokyo.paper.event.brigadier.AsyncPlayerSendCommandsEvent(player.getBukkitEntity(), (RootCommandNode) rootcommandnode, false).callEvent(); // Paper - Brigadier API + if (PlayerCommandSendEvent.getHandlerList().getRegisteredListeners().length > 0) { // Purpur - skip all this crap if there's nothing listening PlayerCommandSendEvent event = new PlayerCommandSendEvent(player.getBukkitEntity(), new LinkedHashSet<>(bukkit)); event.getPlayer().getServer().getPluginManager().callEvent(event); @@ -933,12 +933,12 @@ index 821dc4aeaf48460000682604fba51b340b9738e7..3aa2ce6a2a3d3cdfc372a60419a09f49 } diff --git a/src/main/java/net/minecraft/core/BlockPos.java b/src/main/java/net/minecraft/core/BlockPos.java -index c47aa87db42dea74a2e07ffe6015257fa337da23..fb672028548fbc3c026c3823024249e4e804be01 100644 +index e17fa30966dea2836fb791becd032fc7d5cc2611..dd06323731533fb9b1b25a56844a4e39e8a1c4ea 100644 --- a/src/main/java/net/minecraft/core/BlockPos.java +++ b/src/main/java/net/minecraft/core/BlockPos.java @@ -48,6 +48,12 @@ public class BlockPos extends Vec3i { private static final int X_OFFSET = 38; - // Paper end + // Paper end - Optimize Bit Operations by inlining + // Purpur start + public BlockPos(net.minecraft.world.entity.Entity entity) { @@ -950,7 +950,7 @@ index c47aa87db42dea74a2e07ffe6015257fa337da23..fb672028548fbc3c026c3823024249e4 super(x, y, z); } diff --git a/src/main/java/net/minecraft/core/Direction.java b/src/main/java/net/minecraft/core/Direction.java -index 392406722b0a040c1d41fdc1154d75d39f6e9c86..b805e57d5a67d77d226cd8154e970050e2e8ef4a 100644 +index 2a9fc1f1dfc0c5894c1e74dad5a79ae9b02ac74f..f27fe4370cb027df4fce239eccde28bd8dcd301c 100644 --- a/src/main/java/net/minecraft/core/Direction.java +++ b/src/main/java/net/minecraft/core/Direction.java @@ -253,6 +253,12 @@ public enum Direction implements StringRepresentable { @@ -980,7 +980,7 @@ index 392406722b0a040c1d41fdc1154d75d39f6e9c86..b805e57d5a67d77d226cd8154e970050 throw new IllegalStateException("Unable to get CCW facing of " + this); } diff --git a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java -index 8e13c661a06aa2f7b5f558d39fb9e989a8145904..316fc3f81a1aee1cf67e14422d0d0557b3019b78 100644 +index 1fb809486ee56efd3d0ef3fa02503ba9be459f68..0e2d15d23799a11e592010da98cdc151e427dd4e 100644 --- a/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java +++ b/src/main/java/net/minecraft/core/dispenser/DispenseItemBehavior.java @@ -1194,6 +1194,23 @@ public interface DispenseItemBehavior { @@ -1021,17 +1021,17 @@ index 8d65cdb013706a932c2c73231108b2810b99e1c7..5b1938fc849db743e65cd7eed0f83ba0 // Paper end - Add drops to shear events continue; diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 2ae08b21c63490bbf8cd870f9585d82ed131f815..b7a6c7e737e7aba0324a5c3c61bbfbcc3b39ac43 100644 +index e18406b4172499b0cb116a45cd5a968ae3e3fdce..57d0fbca001da7cace3eeb69526e28e8a2ef5ac5 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -569,11 +569,20 @@ public class Connection extends SimpleChannelInboundHandler> { - private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - private static int joinAttemptsThisTick; // Paper - private static int currTick; // Paper + private static final int MAX_PER_TICK = io.papermc.paper.configuration.GlobalConfiguration.get().misc.maxJoinsPerTick; // Paper - Buffer joins to world + private static int joinAttemptsThisTick; // Paper - Buffer joins to world + private static int currTick; // Paper - Buffer joins to world + private static int tickSecond; // Purpur public void tick() { this.flushQueue(); - // Paper start + // Paper start - Buffer joins to world if (Connection.currTick != net.minecraft.server.MinecraftServer.currentTick) { Connection.currTick = net.minecraft.server.MinecraftServer.currentTick; + // Purpur start @@ -1044,7 +1044,7 @@ index 2ae08b21c63490bbf8cd870f9585d82ed131f815..b7a6c7e737e7aba0324a5c3c61bbfbcc + // Purpur end Connection.joinAttemptsThisTick = 0; } - // Paper end + // Paper end - Buffer joins to world diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java index b863249ff7e13cf4939c8961601f0564c62fd661..bdcfd80f937c34956911373905d66424bbff8e1d 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java @@ -1103,7 +1103,7 @@ index 9ec6145fe04ec64bbee8ec6a837719caebdbc6f5..358d610ad020cada1bb83e393deeeaae public ClientboundSetTimePacket(long time, long timeOfDay, boolean doDaylightCycle) { this.gameTime = time; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 1343649cd77a42dd502747581050b401840a6efe..6f94f01da0a2294f6fdc564653dde1fdbf508153 100644 +index 771a9c9f4c39fdfac26ee62db2a9cdcf15d9e1a6..16b5f59dd3658bb9fc5be629aa4e1bc0ce356243 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -294,6 +294,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop 0; // Purpur - Iterator iterator = this.getAllLevels().iterator(); // Paper - move down + Iterator iterator = this.getAllLevels().iterator(); // Paper - Throw exception on world create while being ticked; move down while (iterator.hasNext()) { ServerLevel worldserver = (ServerLevel) iterator.next(); @@ -1700,29 +1727,30 @@ 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 - Perf: Optimize Hoppers - worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper + worldserver.hasEntityMoveEvent = io.papermc.paper.event.entity.EntityMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Paper - Add EntityMoveEvent + worldserver.hasRidableMoveEvent = org.purpurmc.purpur.event.entity.RidableMoveEvent.getHandlerList().getRegisteredListeners().length > 0; // Purpur - this.profiler.push(() -> { @@ -1474,7 +1474,7 @@ index 1343649cd77a42dd502747581050b401840a6efe..6f94f01da0a2294f6fdc564653dde1fd + //this.profiler.pop(); // Purpur worldserver.explosionDensityCache.clear(); // Paper - Optimize explosions } - this.isIteratingOverLevels = false; // Paper + this.isIteratingOverLevels = false; // Paper - Throw exception on world create while being ticked - this.profiler.popPush("connection"); - MinecraftTimings.connectionTimer.startTiming(); // Spigot // Paper @@ -1741,7 +1741,7 @@ index 37d9c354af887c474094b1a364782007a5f2035d..ec86231077f6a1e03068507555539c5b ++i; } else if (targets.size() == 1) { diff --git a/src/main/java/net/minecraft/server/commands/GameModeCommand.java b/src/main/java/net/minecraft/server/commands/GameModeCommand.java -index 5cb15e2209d7b315904a1fc6d650ce1e75584271..7e21db60f3ace2a19686d6ea04b994ec3a793ec8 100644 +index f7c9127346261d83413ca03a1cdaa84975ae17d6..0cb50229df7df79ad3185a5695707392301653d9 100644 --- a/src/main/java/net/minecraft/server/commands/GameModeCommand.java +++ b/src/main/java/net/minecraft/server/commands/GameModeCommand.java @@ -45,6 +45,18 @@ public class GameModeCommand { @@ -1776,7 +1776,7 @@ index 1b459a8ee8a6bc039e742d65796bc76660a1c765..599172b994d75484f7c7e0ce6d3d3d77 itemstack1.setCount(1); entityitem = entityplayer.drop(itemstack1, false, false, false); // CraftBukkit - SPIGOT-2942: Add boolean to call event diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 80e1dcef1eeb33f553c7d771a00d463e99e3f147..7cc19060c24ad191b7dca779a18fbfbb65763189 100644 +index c5f92c80d7ca1e1c7f5b9304a5a1173ebfd9c269..043a48d8c90e2e008b06fb5a643378a0fa948aaa 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -99,6 +99,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -1788,7 +1788,7 @@ index 80e1dcef1eeb33f553c7d771a00d463e99e3f147..7cc19060c24ad191b7dca779a18fbfbb /* jline.console.ConsoleReader bufferedreader = DedicatedServer.this.reader; @@ -219,8 +220,18 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - thread.start(); // Paper - start console thread after MinecraftServer.console & PaperConfig are initialized + thread.start(); // Paper - Enhance console tab completions for brigadier commands; start console thread after MinecraftServer.console & PaperConfig are initialized io.papermc.paper.command.PaperCommands.registerCommands(this); // Paper - setup /paper command com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics + // Purpur start @@ -1852,7 +1852,7 @@ index 80e1dcef1eeb33f553c7d771a00d463e99e3f147..7cc19060c24ad191b7dca779a18fbfbb public void handleConsoleInputs() { - MinecraftTimings.serverCommandTimer.startTiming(); // Spigot + //MinecraftTimings.serverCommandTimer.startTiming(); // Spigot // Purpur - // Paper start - use proper queue + // Paper start - Perf: use proper queue ConsoleInput servercommand; while ((servercommand = this.serverCommandQueue.poll()) != null) { @@ -504,7 +541,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -1865,7 +1865,7 @@ index 80e1dcef1eeb33f553c7d771a00d463e99e3f147..7cc19060c24ad191b7dca779a18fbfbb @Override diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index 1643186bcb2caf5d29fd551afd35830726dbb80a..d53e0b67d847dfec2f4b118b5ca3f0ed1dc29ad6 100644 +index c58d03898edc49b4451c82d4ccdb86980bc1a40a..33e876787234033c4d39ccab691ba61a778828a5 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -57,6 +57,7 @@ public class DedicatedServerProperties extends Settings list = Lists.newArrayList(); List list1 = this.level.players(); ObjectIterator objectiterator = this.entityMap.values().iterator(); @@ -2084,7 +2084,7 @@ index e4a6110a00c9ae78aafa13668e2ec2ea5f394b37..172c7b94830c13835e48d68a039bd66e ChunkMap.TrackedEntity playerchunkmap_entitytracker; -@@ -1212,17 +1212,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1208,17 +1208,17 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider playerchunkmap_entitytracker.serverEntity.sendChanges(); } } @@ -2106,7 +2106,7 @@ index e4a6110a00c9ae78aafa13668e2ec2ea5f394b37..172c7b94830c13835e48d68a039bd66e } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae4b2c1d26 100644 +index ad8e79c72841ff80f8af3580d2cdb89c13f6d688..a5067485fb6683e3255681a9c5a6df86c90ce0fa 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -73,7 +73,7 @@ public class ServerChunkCache extends ChunkSource { @@ -2121,7 +2121,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae @@ -277,16 +277,16 @@ public class ServerChunkCache extends ChunkSource { return ifLoaded; } - // Paper end + // Paper end - Perf: Optimise getChunkAt calls for loaded chunks - ProfilerFiller gameprofilerfiller = this.level.getProfiler(); + //ProfilerFiller gameprofilerfiller = this.level.getProfiler(); // Purpur @@ -2141,7 +2141,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae @@ -296,10 +296,10 @@ public class ServerChunkCache extends ChunkSource { io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.pushChunkWait(this.level, x1, z1); // Paper - rewrite chunk system // Paper end - com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - sync load info + com.destroystokyo.paper.io.SyncLoadFinder.logSyncLoad(this.level, x1, z1); // Paper - Add debug for sync chunk loads - this.level.timings.syncChunkLoad.startTiming(); // Paper + //this.level.timings.syncChunkLoad.startTiming(); // Paper // Purpur chunkproviderserver_b.managedBlock(completablefuture::isDone); @@ -2162,7 +2162,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae + //} // Paper - Timings // Purpur } - // Paper start - duplicate save, but call incremental + // Paper start - Incremental chunk and player saving; duplicate save, but call incremental public void saveIncrementally() { this.runDistanceManagerUpdates(); - try (co.aikar.timings.Timing timed = level.timings.chunkSaveData.startTiming()) { // Paper - Timings @@ -2171,9 +2171,9 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae - } // Paper - Timings + //} // Paper - Timings // Purpur } - // Paper end + // Paper end - Incremental chunk and player saving -@@ -475,37 +475,37 @@ public class ServerChunkCache extends ChunkSource { +@@ -482,37 +482,37 @@ public class ServerChunkCache extends ChunkSource { // CraftBukkit start - modelled on below public void purgeUnload() { if (true) return; // Paper - tickets will be removed later, this behavior isn't really well accounted for by the chunk system @@ -2224,7 +2224,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae this.clearCache(); } -@@ -515,19 +515,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -522,19 +522,19 @@ public class ServerChunkCache extends ChunkSource { this.lastInhabitedUpdate = i; if (!this.level.isDebug()) { @@ -2248,12 +2248,12 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae + // gameprofilerfiller.popPush("naturalSpawnCount"); // Purpur + //this.level.timings.countNaturalMobs.startTiming(); // Paper - timings // Purpur int k = this.distanceManager.getNaturalSpawnChunkCount(); - // Paper start - per player mob spawning + // Paper start - Optional per player mob spawns int naturalSpawnChunkCount = k; -@@ -557,10 +557,10 @@ public class ServerChunkCache extends ChunkSource { +@@ -564,10 +564,10 @@ public class ServerChunkCache extends ChunkSource { // Pufferfish end } - // Paper end + // Paper end - Optional per player mob spawns - this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings + // this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings // Purpur @@ -2263,7 +2263,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit // Paper start - optimise chunk tick iteration -@@ -666,19 +666,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -673,19 +673,19 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -2289,7 +2289,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae // Paper start - optimise chunk tick iteration if (!this.chunkMap.needsChangeBroadcasting.isEmpty()) { it.unimi.dsi.fastutil.objects.ReferenceOpenHashSet copy = this.chunkMap.needsChangeBroadcasting.clone(); -@@ -692,12 +692,12 @@ public class ServerChunkCache extends ChunkSource { +@@ -699,12 +699,12 @@ public class ServerChunkCache extends ChunkSource { } } // Paper end - optimise chunk tick iteration @@ -2306,7 +2306,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae // Pufferfish start - optimize mob spawning if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { for (ServerPlayer player : this.level.players) { -@@ -901,7 +901,7 @@ public class ServerChunkCache extends ChunkSource { +@@ -908,7 +908,7 @@ public class ServerChunkCache extends ChunkSource { @Override protected void doRunTask(Runnable task) { @@ -2316,7 +2316,7 @@ index 5cf74fe0214191d42e74fc104eba150a95894e0f..c3c47857515a7f75d69c718f352d8bae } diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index e385a62058204ba3b01ce594e7c180f9cc6cf664..92ca330bee2f58bde93c8da12a8f5c14e29de540 100644 +index 79914528f6d255355284b04253218a7c4dec1ead..2568b4ad72a7b99484aaa048257a3b5465b63b9d 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -73,7 +73,7 @@ public class ServerEntity { @@ -2329,7 +2329,7 @@ index e385a62058204ba3b01ce594e7c180f9cc6cf664..92ca330bee2f58bde93c8da12a8f5c14 public ServerEntity(ServerLevel worldserver, Entity entity, int i, boolean flag, Consumer> consumer, Set trackedPlayers) { this.trackedPlayers = trackedPlayers; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29ef1da3a01 100644 +index e387de54c9786711272f0ec3f8d312e472a9c4ea..65a60983be85707883bd330e79a8c1f03428f2c9 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -215,6 +215,8 @@ public class ServerLevel extends Level implements WorldGenLevel { @@ -2343,13 +2343,13 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e @@ -224,6 +226,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public boolean hasPhysicsEvent = true; // Paper - public boolean hasEntityMoveEvent = false; // Paper + public boolean hasEntityMoveEvent; // Paper - Add EntityMoveEvent private final alternate.current.wire.WireHandler wireHandler = new alternate.current.wire.WireHandler(this); // Paper - optimize redstone (Alternate Current) + public boolean hasRidableMoveEvent = false; // Purpur - public static Throwable getAddToWorldStackTrace(Entity entity) { - final Throwable thr = new Throwable(entity + " Added to world at " + new java.util.Date()); - io.papermc.paper.util.StacktraceDeobfuscator.INSTANCE.deobfuscateThrowable(thr); -@@ -712,7 +715,24 @@ public class ServerLevel extends Level implements WorldGenLevel { + + @Override public LevelChunk getChunkIfLoaded(int x, int z) { // Paper - this was added in world too but keeping here for NMS ABI + return this.chunkSource.getChunkAtIfLoadedImmediately(x, z); // Paper - Use getChunkIfLoadedImmediately +@@ -707,7 +710,24 @@ public class ServerLevel extends Level implements WorldGenLevel { this.dragonParts = new Int2ObjectOpenHashMap(); this.tickTime = flag1; this.server = minecraftserver; @@ -2375,7 +2375,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e this.serverLevelData = iworlddataserver; ChunkGenerator chunkgenerator = worlddimension.generator(); // CraftBukkit start -@@ -774,6 +794,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -769,6 +789,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.chunkTaskScheduler = new io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler(this, io.papermc.paper.chunk.system.scheduling.ChunkTaskScheduler.workerThreads); // Paper - rewrite chunk system this.entityLookup = new io.papermc.paper.chunk.system.entity.EntityLookup(this, new EntityCallbacks()); // Paper - rewrite chunk system @@ -2383,7 +2383,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e } // Paper start -@@ -808,23 +829,23 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -803,23 +824,23 @@ public class ServerLevel extends Level implements WorldGenLevel { } public void tick(BooleanSupplier shouldKeepTicking) { @@ -2411,7 +2411,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e // CraftBukkit start j = this.levelData.getDayTime() + 24000L; TimeSkipEvent event = new TimeSkipEvent(this.getWorld(), TimeSkipEvent.SkipReason.NIGHT_SKIP, (j - j % 24000L) - this.getDayTime()); -@@ -849,38 +870,38 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -844,38 +865,38 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickTime(); } @@ -2466,7 +2466,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e boolean flag1 = true || !this.players.isEmpty() || !this.getForcedChunks().isEmpty(); // CraftBukkit - this prevents entity cleanup, other issues on servers with no players if (flag1) { -@@ -888,25 +909,25 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -883,25 +904,25 @@ public class ServerLevel extends Level implements WorldGenLevel { } if (flag1 || this.emptyTime++ < 300) { @@ -2499,7 +2499,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e if (true || this.chunkSource.chunkMap.getDistanceManager().inEntityTickingRange(entity.chunkPosition().toLong())) { // Paper - now always true if in the ticking list Entity entity1 = entity.getVehicle(); -@@ -918,7 +939,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -913,7 +934,7 @@ public class ServerLevel extends Level implements WorldGenLevel { entity.stopRiding(); } @@ -2508,7 +2508,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e // Pufferfish start - copied from this.guardEntityTick try { this.tickNonPassenger(entity); // Pufferfish - changed -@@ -933,20 +954,19 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -928,20 +949,19 @@ public class ServerLevel extends Level implements WorldGenLevel { // Paper end } // Pufferfish end @@ -2534,7 +2534,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e } @Override -@@ -964,6 +984,13 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -959,6 +979,13 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setGameTime(i); this.serverLevelData.getScheduledEvents().tick(this.server, i); if (this.levelData.getGameRules().getBoolean(GameRules.RULE_DAYLIGHT)) { @@ -2548,7 +2548,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e this.setDayTime(this.levelData.getDayTime() + 1L); } -@@ -972,7 +999,21 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -967,7 +994,21 @@ public class ServerLevel extends Level implements WorldGenLevel { public void setDayTime(long timeOfDay) { this.serverLevelData.setDayTime(timeOfDay); @@ -2570,7 +2570,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e public void tickCustomSpawners(boolean spawnMonsters, boolean spawnAnimals) { Iterator iterator = this.customSpawners.iterator(); -@@ -997,7 +1038,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -992,7 +1033,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -2579,7 +2579,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e // Paper end private int currentIceAndSnowTick = 0; protected void resetIceAndSnowTick() { this.currentIceAndSnowTick = this.randomTickRandom.nextInt(16); } // Pufferfish -@@ -1007,9 +1048,9 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1002,9 +1043,9 @@ public class ServerLevel extends Level implements WorldGenLevel { boolean flag = this.isRaining(); int j = chunkcoordintpair.getMinBlockX(); int k = chunkcoordintpair.getMinBlockZ(); @@ -2591,7 +2591,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e final BlockPos.MutableBlockPos blockposition = this.chunkTickMutablePosition; // Paper - use mutable to reduce allocation rate, final to force compile fail on change if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && /*this.random.nextInt(this.spigotConfig.thunderChance) == 0 &&*/ chunk.shouldDoLightning(this.random)) { // Spigot // Paper - disable thunder // Pufferfish - replace random with shouldDoLightning -@@ -1020,10 +1061,18 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1015,10 +1056,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) { @@ -2612,7 +2612,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e entityhorseskeleton.setAge(0); entityhorseskeleton.setPos((double) blockposition.getX(), (double) blockposition.getY(), (double) blockposition.getZ()); this.addFreshEntity(entityhorseskeleton, org.bukkit.event.entity.CreatureSpawnEvent.SpawnReason.LIGHTNING); // CraftBukkit -@@ -1040,7 +1089,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1035,7 +1084,7 @@ public class ServerLevel extends Level implements WorldGenLevel { } } @@ -2621,7 +2621,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e if (!this.paperConfig().environment.disableIceAndSnow) { // Paper for (int l = 0; l < randomTickSpeed; ++l) { -@@ -1053,8 +1102,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1048,8 +1097,8 @@ public class ServerLevel extends Level implements WorldGenLevel { } } // Paper @@ -2632,7 +2632,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e if (randomTickSpeed > 0) { // Paper start - optimize random block ticking LevelChunkSection[] sections = chunk.getSections(); -@@ -1088,8 +1137,8 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1083,8 +1132,8 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper end - optimise random block ticking @@ -2643,7 +2643,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e } @VisibleForTesting -@@ -1147,7 +1196,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1142,7 +1191,7 @@ public class ServerLevel extends Level implements WorldGenLevel { return holder.is(PoiTypes.LIGHTNING_ROD); }, (blockposition1) -> { return blockposition1.getY() == this.getHeight(Heightmap.Types.WORLD_SURFACE, blockposition1.getX(), blockposition1.getZ()) - 1; @@ -2652,7 +2652,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e return optional.map((blockposition1) -> { return blockposition1.above(1); -@@ -1196,11 +1245,27 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1191,11 +1240,27 @@ public class ServerLevel extends Level implements WorldGenLevel { if (this.canSleepThroughNights()) { if (!this.getServer().isSingleplayer() || this.getServer().isPublished()) { int i = this.getGameRules().getInt(GameRules.RULE_PLAYERS_SLEEPING_PERCENTAGE); @@ -2681,23 +2681,23 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e ichatmutablecomponent = Component.translatable("sleep.players_sleeping", this.sleepStatus.amountSleeping(), this.sleepStatus.sleepersNeeded(i)); } -@@ -1340,6 +1405,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1335,6 +1400,7 @@ public class ServerLevel extends Level implements WorldGenLevel { @VisibleForTesting public void resetWeatherCycle() { // CraftBukkit start + if (this.purpurConfig.rainStopsAfterSleep) // Purpur - this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - when passing the night + this.serverLevelData.setRaining(false, org.bukkit.event.weather.WeatherChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // If we stop due to everyone sleeping we should reset the weather duration to some other random value. // Not that everyone ever manages to get the whole server to sleep at the same time.... -@@ -1347,6 +1413,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1342,6 +1408,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.serverLevelData.setRainTime(0); } // CraftBukkit end + if (this.purpurConfig.thunderStopsAfterSleep) // Purpur - this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - when passing the night + this.serverLevelData.setThundering(false, org.bukkit.event.weather.ThunderChangeEvent.Cause.SLEEP); // Paper - Add cause to Weather/ThunderChangeEvents // CraftBukkit start // If we stop due to everyone sleeping we should reset the weather duration to some other random value. -@@ -1414,24 +1481,24 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1409,24 +1476,24 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot end // Paper start- timings final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(entity); @@ -2730,7 +2730,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e Iterator iterator = entity.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1454,17 +1521,17 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1449,17 +1516,17 @@ public class ServerLevel extends Level implements WorldGenLevel { if (passenger instanceof Player || this.entityTickList.contains(passenger)) { // Paper - EAR 2 final boolean isActive = org.spigotmc.ActivationRange.checkIfActive(passenger); @@ -2754,7 +2754,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e // Paper start - EAR 2 if (isActive) { passenger.rideTick(); -@@ -1476,7 +1543,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1471,7 +1538,7 @@ public class ServerLevel extends Level implements WorldGenLevel { vehicle.positionRider(passenger); } // Paper end - EAR 2 @@ -2763,7 +2763,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e Iterator iterator = passenger.getPassengers().iterator(); while (iterator.hasNext()) { -@@ -1485,7 +1552,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1480,7 +1547,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.tickPassenger(passenger, entity2); } @@ -2772,14 +2772,14 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e } } else { passenger.stopRiding(); -@@ -1505,14 +1572,14 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1500,14 +1567,14 @@ public class ServerLevel extends Level implements WorldGenLevel { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(getWorld())); } - try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { + //try (co.aikar.timings.Timing ignored = this.timings.worldSave.startTiming()) { // Purpur if (doFull) { - this.saveLevelData(true); // Pufferfish + this.saveLevelData(true); // Paper - Write SavedData IO async } - this.timings.worldSaveChunks.startTiming(); // Paper @@ -2790,16 +2790,16 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e // Copied from save() // CraftBukkit start - moved from MinecraftServer.saveChunks -@@ -1524,7 +1591,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1519,7 +1586,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.convertable.saveDataTag(this.server.registryAccess(), this.serverLevelData, this.server.getPlayerList().getSingleplayerData()); } // CraftBukkit end - } + //} // Purpur } - // Paper end + // Paper end - Incremental chunk and player saving -@@ -1538,7 +1605,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1533,7 +1600,7 @@ public class ServerLevel extends Level implements WorldGenLevel { if (!savingDisabled) { org.bukkit.Bukkit.getPluginManager().callEvent(new org.bukkit.event.world.WorldSaveEvent(this.getWorld())); // CraftBukkit @@ -2808,7 +2808,7 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e if (progressListener != null) { progressListener.progressStartNoAbort(Component.translatable("menu.savingLevel")); } -@@ -1548,11 +1615,11 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1543,11 +1610,11 @@ public class ServerLevel extends Level implements WorldGenLevel { progressListener.progressStage(Component.translatable("menu.savingChunks")); } @@ -2823,23 +2823,23 @@ index f7215d0a67e9e024af0c040c796ebcbb4f76e885..1309c9e63095a0484ee0fa119a41c29e // Paper - rewrite chunk system - entity saving moved into ChunkHolder } else if (close) { chunkproviderserver.close(false); } // Paper - rewrite chunk system -@@ -2861,7 +2928,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -2841,7 +2908,7 @@ public class ServerLevel extends Level implements WorldGenLevel { // Spigot Start if (entity.getBukkitEntity() instanceof org.bukkit.inventory.InventoryHolder && (!(entity instanceof ServerPlayer) || entity.getRemovalReason() != Entity.RemovalReason.KILLED)) { // SPIGOT-6876: closeInventory clears death message - // Paper start + // Paper start - Fix merchant inventory not closing on entity removal - if (entity.getBukkitEntity() instanceof org.bukkit.inventory.Merchant merchant && merchant.getTrader() != null) { + if (!entity.level().purpurConfig.playerVoidTrading && entity.getBukkitEntity() instanceof org.bukkit.inventory.Merchant merchant && merchant.getTrader() != null) { // Purpur merchant.getTrader().closeInventory(org.bukkit.event.inventory.InventoryCloseEvent.Reason.UNLOADED); } - // Paper end + // Paper end - Fix merchant inventory not closing on entity removal diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0a1977905de97522cf3311f59a2cdc6c0a5f98f9..d5a5406284bf764c9f7a31a4ad85bbcda18f4df8 100644 +index 38df47d282713522b3c5784a562ff09e3151fb27..1bc71111393255dc2af6734241d29238f659b007 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -281,6 +281,10 @@ public class ServerPlayer extends Player { public com.destroystokyo.paper.event.entity.PlayerNaturallySpawnCreaturesEvent playerNaturallySpawnedEvent; // Paper - public @Nullable String clientBrandName = null; // Paper - Brand name - 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 @Nullable String clientBrandName = null; // Paper - Brand support + public org.bukkit.event.player.PlayerQuitEvent.QuitReason quitReason = null; // Paper - Add API for quit reason; there are a lot of changes to do if we change all methods leading to the event + public boolean purpurClient = false; // Purpur + private boolean tpsBar = false; // Purpur + private boolean compassBar = false; // Purpur @@ -3130,11 +3130,11 @@ index 0a1977905de97522cf3311f59a2cdc6c0a5f98f9..d5a5406284bf764c9f7a31a4ad85bbcd + // Purpur end } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java -index 3c567a9ea921a6ae36f4dc5e16a8394ab62460a8..5e18507e6d799e51f555ffc0a5f14cb76959023d 100644 +index 93906a31ddf99cf51541994d7a5c2e4131b697fa..096884909a21472806592356abf272bb3ddeedf0 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayerGameMode.java @@ -397,6 +397,7 @@ public class ServerPlayerGameMode { - } else {capturedBlockEntity = true;} // Paper end + } else {capturedBlockEntity = true;} // Paper - Send block entities after destroy prediction return false; } + if (this.player.level().purpurConfig.slabHalfBreak && this.player.isShiftKeyDown() && iblockdata.getBlock() instanceof net.minecraft.world.level.block.SlabBlock && ((net.minecraft.world.level.block.SlabBlock) iblockdata.getBlock()).halfBreak(iblockdata, pos, this.player)) return true; // Purpur @@ -3178,19 +3178,19 @@ index 3c567a9ea921a6ae36f4dc5e16a8394ab62460a8..5e18507e6d799e51f555ffc0a5f14cb7 + // Purpur end } diff --git a/src/main/java/net/minecraft/server/level/WorldGenRegion.java b/src/main/java/net/minecraft/server/level/WorldGenRegion.java -index 277c8e429481ca9763ddac9e700735d25aba78e9..3632957dfd39dc5dcb288fb86c0cadc37f1b4d27 100644 +index 5ece375eaf6bcc61864997a389bb5e24625e4505..aee4ab6c7ea09006bec4a1c6df0005718c6d86bd 100644 --- a/src/main/java/net/minecraft/server/level/WorldGenRegion.java +++ b/src/main/java/net/minecraft/server/level/WorldGenRegion.java @@ -318,6 +318,7 @@ public class WorldGenRegion implements WorldGenLevel { return true; } else { - // Paper start + // Paper start - Buffer OOB setBlock calls + if (!org.purpurmc.purpur.PurpurConfig.loggerSuppressSetBlockFarChunk) // Purpur if (!hasSetFarWarned) { 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/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index d28d0ef6105ddeb562ddf31ae9088739856941fc..da499e0b21eba40d24d95047e3a9220567d4bae7 100644 +index f5f2d65d2e02b0d79352585d9d4ef588ab59dce7..fa5107deb090a779ddc2fdd0fd6de05e1fcf85b9 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java @@ -51,11 +51,13 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack @@ -3244,7 +3244,7 @@ index d28d0ef6105ddeb562ddf31ae9088739856941fc..da499e0b21eba40d24d95047e3a92205 protected void keepConnectionAlive() { - this.server.getProfiler().push("keepAlive"); + //this.server.getProfiler().push("keepAlive"); // Purpur - // Paper Start - give clients a longer time to respond to pings as per pre 1.12.2 timings + // Paper start - give clients a longer time to respond to pings as per pre 1.12.2 timings // This should effectively place the keepalive handling back to "as it was" before 1.12.2 long currentTime = Util.getMillis(); long elapsedTime = currentTime - this.keepAliveTime; @@ -3277,7 +3277,7 @@ index d28d0ef6105ddeb562ddf31ae9088739856941fc..da499e0b21eba40d24d95047e3a92205 public void suspendFlushing() { diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6aa97c54f2 100644 +index b5917417aaed74555917772650fe51485281c2ec..d7ff08767fe6b14f18386651666c42903a52ec1c 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java @@ -325,6 +325,20 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @@ -3304,7 +3304,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a @@ -392,6 +406,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. + 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 + // Purpur start + this.player.setAfk(true); + if (!this.player.level().purpurConfig.idleTimeoutKick || (!Boolean.parseBoolean(System.getenv("PURPUR_FORCE_IDLE_KICK")) && kickPermissionCache.getUnchecked(this.player.getBukkitEntity()))) { @@ -3314,7 +3314,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a this.player.resetLastActionTime(); // CraftBukkit - SPIGOT-854 this.disconnect(Component.translatable("multiplayer.disconnect.idling"), org.bukkit.event.player.PlayerKickEvent.Cause.IDLING); // Paper - kick event cause } -@@ -642,6 +662,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -639,6 +659,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -3323,7 +3323,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -715,6 +737,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -712,6 +734,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (packet.getId() == this.awaitingTeleport) { if (this.awaitingPositionFromClient == null) { this.disconnect(Component.translatable("multiplayer.disconnect.invalid_player_movement"), org.bukkit.event.player.PlayerKickEvent.Cause.INVALID_PLAYER_MOVEMENT); // Paper - kick event cause @@ -3331,7 +3331,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a return; } -@@ -1132,10 +1155,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1129,10 +1152,15 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl int maxBookPageSize = io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.pageMax; double multiplier = Math.max(0.3D, Math.min(1D, io.papermc.paper.configuration.GlobalConfiguration.get().itemValidation.bookSize.totalMultiplier)); long byteAllowed = maxBookPageSize; @@ -3347,7 +3347,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1159,6 +1187,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1156,6 +1184,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (byteTotal > byteAllowed) { ServerGamePacketListenerImpl.LOGGER.warn(this.player.getScoreboardName() + " tried to send too large of a book. Book Size: " + byteTotal + " - Allowed: "+ byteAllowed + " - Pages: " + pageList.size()); @@ -3355,7 +3355,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a server.scheduleOnMain(() -> this.disconnect("Book too large!", org.bukkit.event.player.PlayerKickEvent.Cause.ILLEGAL_ACTION)); // Paper - kick event cause return; } -@@ -1212,13 +1241,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1209,13 +1238,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl itemstack1.setTag(nbttagcompound.copy()); } @@ -3375,7 +3375,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a this.updateBookPages(pages, (s) -> { return Component.Serializer.toJson(Component.literal(s)); -@@ -1230,10 +1262,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1227,10 +1259,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl private void updateBookPages(List list, UnaryOperator unaryoperator, ItemStack itemstack, int slot, ItemStack handItem) { // CraftBukkit ListTag nbttaglist = new ListTag(); @@ -3391,7 +3391,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a Objects.requireNonNull(nbttaglist); stream.forEach(nbttaglist::add); -@@ -1243,11 +1278,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1240,11 +1275,11 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl for (int j = list.size(); i < j; ++i) { FilteredText filteredtext = (FilteredText) list.get(i); @@ -3405,7 +3405,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a } } -@@ -1260,6 +1295,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1257,6 +1292,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.getInventory().setItem(slot, CraftEventFactory.handleEditBookEvent(this.player, slot, handItem, itemstack)); // CraftBukkit // Paper - Don't ignore result (see other callsite for handleEditBookEvent) } @@ -3422,7 +3422,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a @Override public void handleEntityTagQuery(ServerboundEntityTagQuery packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); -@@ -1309,8 +1354,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1306,8 +1351,16 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl @Override public void handleMovePlayer(ServerboundMovePlayerPacket packet) { PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); @@ -3440,7 +3440,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a } else { ServerLevel worldserver = this.player.serverLevel(); -@@ -1496,7 +1549,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1491,7 +1544,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl if (!event.isAllowed()) { flag2 = true; // Paper - diff on change, this should be moved wrongly if (event.getLogWarning()) @@ -3449,7 +3449,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a } // Paper end - Add fail move event } -@@ -1566,6 +1619,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1561,6 +1614,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.lastYaw = to.getYaw(); this.lastPitch = to.getPitch(); @@ -3458,7 +3458,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a Location oldTo = to.clone(); PlayerMoveEvent event = new PlayerMoveEvent(player, from, to); this.cserver.getPluginManager().callEvent(event); -@@ -1601,6 +1656,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1596,6 +1651,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.player.resetFallDistance(); } @@ -3472,7 +3472,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a this.player.checkMovementStatistics(this.player.getX() - d3, this.player.getY() - d4, this.player.getZ() - d5); this.lastGoodX = this.player.getX(); this.lastGoodY = this.player.getY(); -@@ -1652,6 +1714,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1647,6 +1709,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl return false; } // Paper end - optimise out extra getCubes @@ -3486,7 +3486,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a private boolean isPlayerCollidingWithAnythingNew(LevelReader world, AABB box, double newX, double newY, double newZ) { AABB axisalignedbb1 = this.player.getBoundingBox().move(newX - this.player.getX(), newY - this.player.getY(), newZ - this.player.getZ()); Iterable iterable = world.getCollisions(this.player, axisalignedbb1.deflate(9.999999747378752E-6D)); -@@ -1662,7 +1731,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1657,7 +1726,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl do { if (!iterator.hasNext()) { @@ -3495,7 +3495,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a } voxelshape1 = (VoxelShape) iterator.next(); -@@ -1997,6 +2066,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1992,6 +2061,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl boolean cancelled; if (movingobjectposition == null || movingobjectposition.getType() != HitResult.Type.BLOCK) { @@ -3503,7 +3503,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a org.bukkit.event.player.PlayerInteractEvent event = CraftEventFactory.callPlayerInteractEvent(this.player, Action.RIGHT_CLICK_AIR, itemstack, enumhand); cancelled = event.useItemInHand() == Event.Result.DENY; } else { -@@ -2401,7 +2471,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2396,7 +2466,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl public void handleCommand(String s) { // Paper - private -> public org.spigotmc.AsyncCatcher.catchOp("Command Dispatched Async: " + s); // Paper - Add async catcher @@ -3512,7 +3512,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a if ( org.spigotmc.SpigotConfig.logCommands ) // Spigot this.LOGGER.info(this.player.getScoreboardName() + " issued server command: " + s); -@@ -2411,7 +2481,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2406,7 +2476,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl this.cserver.getPluginManager().callEvent(event); if (event.isCancelled()) { @@ -3521,7 +3521,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a return; } -@@ -2424,7 +2494,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2419,7 +2489,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl java.util.logging.Logger.getLogger(ServerGamePacketListenerImpl.class.getName()).log(java.util.logging.Level.SEVERE, null, ex); return; } finally { @@ -3530,7 +3530,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a } } // CraftBukkit end -@@ -2711,6 +2781,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2706,6 +2776,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl AABB axisalignedbb = entity.getBoundingBox(); if (axisalignedbb.distanceToSqr(this.player.getEyePosition()) < ServerGamePacketListenerImpl.MAX_INTERACTION_DISTANCE) { @@ -3538,7 +3538,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a packet.dispatch(new ServerboundInteractPacket.Handler() { private void performInteraction(InteractionHand enumhand, ServerGamePacketListenerImpl.EntityInteraction playerconnection_a, PlayerInteractEntityEvent event) { // CraftBukkit ItemStack itemstack = ServerGamePacketListenerImpl.this.player.getItemInHand(enumhand); -@@ -2724,6 +2795,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -2719,6 +2790,8 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl ServerGamePacketListenerImpl.this.cserver.getPluginManager().callEvent(event); @@ -3547,7 +3547,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a // Entity in bucket - SPIGOT-4048 and SPIGOT-6859a if ((entity instanceof Bucketable && entity instanceof LivingEntity && origItem != null && origItem.asItem() == Items.WATER_BUCKET) && (event.isCancelled() || ServerGamePacketListenerImpl.this.player.getInventory().getSelected() == null || ServerGamePacketListenerImpl.this.player.getInventory().getSelected().getItem() != origItem)) { entity.getEntityData().resendPossiblyDesyncedEntity(player); // Paper - The entire mob gets deleted, so resend it. -@@ -3309,6 +3382,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -3304,6 +3377,12 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } } } @@ -3561,7 +3561,7 @@ index 04b0eb391bb524dd7af14b862d89c0f2494a8206..0b37acd48517d28efec716b93c33da6a boolean flag1 = packet.getSlotNum() >= 1 && packet.getSlotNum() <= 45; boolean flag2 = itemstack.isEmpty() || itemstack.getDamageValue() >= 0 && itemstack.getCount() <= 64 && !itemstack.isEmpty(); diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index b9117be53b8b8b37af54621f54480f275546f0fd..cbcb16a6ccab1681dea22407f859f86dc1b9fe22 100644 +index 399786839bb9dbf96d2ecd654f999cb944cf2822..62b7d2508463ef1a84d538f80e55a5f76b965126 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -270,7 +270,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -3606,7 +3606,7 @@ index 9ddbfcf80d9a381dace78a62880f85a4d767e0eb..7383c7d3820dce06108eaafd236a7c6c } diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index ed11fec21b0c3a60fe8c14e699eb3a3823044d66..92717b7aa7ac94a2b1d11b5ba46522057903f981 100644 +index 1c89b95ac40120ee970da0f06fd7fff36eb55e61..e2f58fe299694db1b8975a502b42c832ef23ffb9 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -486,6 +486,7 @@ public abstract class PlayerList { @@ -3620,7 +3620,7 @@ index ed11fec21b0c3a60fe8c14e699eb3a3823044d66..92717b7aa7ac94a2b1d11b5ba4652205 @@ -599,6 +600,7 @@ public abstract class PlayerList { } public net.kyori.adventure.text.Component remove(ServerPlayer entityplayer, net.kyori.adventure.text.Component leaveMessage) { - // Paper end + // Paper end - Fix kick event leave message not being sent + org.purpurmc.purpur.task.BossBarTask.removeFromAll(entityplayer.getBukkitEntity()); // Purpur ServerLevel worldserver = entityplayer.serverLevel(); @@ -3666,7 +3666,7 @@ index ed11fec21b0c3a60fe8c14e699eb3a3823044d66..92717b7aa7ac94a2b1d11b5ba4652205 @@ -1175,6 +1192,27 @@ public abstract class PlayerList { player.getBukkitEntity().recalculatePermissions(); // CraftBukkit this.server.getCommands().sendCommands(player); - } // Paper + } // Paper - Add sendOpLevel API + + // Purpur start + if (org.purpurmc.purpur.PurpurConfig.enderChestSixRows && org.purpurmc.purpur.PurpurConfig.enderChestPermissionRows) { @@ -3702,7 +3702,7 @@ index ed11fec21b0c3a60fe8c14e699eb3a3823044d66..92717b7aa7ac94a2b1d11b5ba4652205 for (int i = 0; i < this.players.size(); ++i) { @@ -1247,7 +1285,7 @@ public abstract class PlayerList { } - // Paper end + // Paper end - Incremental chunk and player saving } - MinecraftTimings.savePlayers.stopTiming(); // Paper + //MinecraftTimings.savePlayers.stopTiming(); // Paper // Purpur @@ -3974,7 +3974,7 @@ index 9c99b2e365aacb8309f29acb9025faccd2c676b3..6e8d9be28c5908fb12c44c0ecb0e0218 } } diff --git a/src/main/java/net/minecraft/world/damagesource/DamageSource.java b/src/main/java/net/minecraft/world/damagesource/DamageSource.java -index 25a5a3b949a0eb632611355e74ccd4865be108ca..c8860f20956a2819da001e93938249452bf7cb49 100644 +index fc6903b20a6e084729306fc960a6fc80e094f76c..5b121a3cc6b9790fa80074181dc4cb9c14946f4b 100644 --- a/src/main/java/net/minecraft/world/damagesource/DamageSource.java +++ b/src/main/java/net/minecraft/world/damagesource/DamageSource.java @@ -54,6 +54,10 @@ public class DamageSource { @@ -4246,7 +4246,7 @@ index 1f9e0c139988c4c44a26552881647d36965aa4fa..b8d612d22aca74a08b53393c0723a2ae @Override diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c7f53f750 100644 +index 7a50a1fe485de232abb9d626e8001eee78a33b1b..f10933fc78cbb0ead042c1870d93d0447f640896 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java @@ -159,7 +159,7 @@ import org.bukkit.plugin.PluginManager; @@ -4257,8 +4257,8 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c + public static javax.script.ScriptEngine scriptEngine = new javax.script.ScriptEngineManager().getEngineByName("rhino"); // Purpur // CraftBukkit start private static final int CURRENT_LEVEL = 2; - public boolean preserveMotion = true; // Paper - keep initial motion on first setPositionRotation -@@ -337,7 +337,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + public boolean preserveMotion = true; // Paper - Fix Entity Teleportation and cancel velocity if teleported; keep initial motion on first setPositionRotation +@@ -336,7 +336,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public double xOld; public double yOld; public double zOld; @@ -4267,7 +4267,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c public boolean noPhysics; public final RandomSource random; public int tickCount; -@@ -379,7 +379,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -378,7 +378,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private final Set tags; private final double[] pistonDeltas; private long pistonDeltasGameTime; @@ -4276,7 +4276,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c private float eyeHeight; public boolean isInPowderSnow; public boolean wasInPowderSnow; -@@ -424,6 +424,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -423,6 +423,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S private UUID originWorld; public boolean freezeLocked = false; // Paper - Freeze Tick Lock API public boolean fixedPose = false; // Paper - Expand Pose API @@ -4284,7 +4284,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c public void setOrigin(@javax.annotation.Nonnull Location location) { this.origin = location.toVector(); -@@ -499,6 +500,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -498,6 +499,25 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } @@ -4310,7 +4310,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c public final boolean hardCollides() { return this.hardCollides; } -@@ -581,7 +601,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -580,7 +600,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.bb = Entity.INITIAL_AABB; this.stuckSpeedMultiplier = Vec3.ZERO; this.nextStep = 1.0F; @@ -4319,16 +4319,16 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c this.remainingFireTicks = -this.getFireImmuneTicks(); this.fluidHeight = new Object2DoubleArrayMap(2); this.fluidOnEyes = new HashSet(); -@@ -833,7 +853,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -832,7 +852,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end public void baseTick() { - this.level().getProfiler().push("entityBaseTick"); + //this.level().getProfiler().push("entityBaseTick"); // Purpur - if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Update last hurt when ticking + if (firstTick && this instanceof net.minecraft.world.entity.NeutralMob neutralMob) neutralMob.tickInitialPersistentAnger(level); // Paper - Prevent entity loading causing async lookups this.feetBlockState = null; if (this.isPassenger() && this.getVehicle().isRemoved()) { -@@ -894,7 +914,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -893,7 +913,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.firstTick = false; @@ -4337,7 +4337,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } public void setSharedFlagOnFire(boolean onFire) { -@@ -903,10 +923,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -902,10 +922,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void checkBelowWorld() { // Paper start - Configurable nether ceiling damage @@ -4350,7 +4350,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c this.onBelowWorld(); } -@@ -1113,7 +1134,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1112,7 +1133,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } } @@ -4359,7 +4359,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c if (this.stuckSpeedMultiplier.lengthSqr() > 1.0E-7D) { movement = movement.multiply(this.stuckSpeedMultiplier); this.stuckSpeedMultiplier = Vec3.ZERO; -@@ -1122,7 +1143,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1121,7 +1142,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // Paper start - ignore movement changes while inactive. if (isTemporarilyActive && !(this instanceof ItemEntity || this instanceof net.minecraft.world.entity.vehicle.AbstractMinecart) && movement == getDeltaMovement() && movementType == MoverType.SELF) { setDeltaMovement(Vec3.ZERO); @@ -4368,7 +4368,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c return; } // Paper end -@@ -1143,8 +1164,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1142,8 +1163,8 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setPos(this.getX() + vec3d1.x, this.getY() + vec3d1.y, this.getZ() + vec3d1.z); } @@ -4379,7 +4379,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c boolean flag = !Mth.equal(movement.x, vec3d1.x); boolean flag1 = !Mth.equal(movement.z, vec3d1.z); -@@ -1163,7 +1184,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1162,7 +1183,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.checkFallDamage(vec3d1.y, this.onGround(), iblockdata, blockposition); if (this.isRemoved()) { @@ -4388,7 +4388,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } else { if (this.horizontalCollision) { Vec3 vec3d2 = this.getDeltaMovement(); -@@ -1301,7 +1322,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1300,7 +1321,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.setRemainingFireTicks(-this.getFireImmuneTicks()); } @@ -4397,7 +4397,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } } // Paper start - detailed watchdog information -@@ -1799,7 +1820,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1798,7 +1819,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean fireImmune() { @@ -4406,7 +4406,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } public boolean causeFallDamage(float fallDistance, float damageMultiplier, DamageSource damageSource) { -@@ -1872,7 +1893,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -1871,7 +1892,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return this.isInWater() || flag; } @@ -4415,7 +4415,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c Entity entity = this.getVehicle(); if (entity instanceof Boat) { -@@ -2491,6 +2512,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2490,6 +2511,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S nbttagcompound.putBoolean("Paper.FreezeLock", true); } // Paper end @@ -4427,7 +4427,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c return nbttagcompound; } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Saving entity NBT"); -@@ -2638,6 +2664,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2637,6 +2663,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S freezeLocked = nbt.getBoolean("Paper.FreezeLock"); } // Paper end @@ -4439,7 +4439,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } catch (Throwable throwable) { CrashReport crashreport = CrashReport.forThrowable(throwable, "Loading entity NBT"); -@@ -3013,6 +3044,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3012,6 +3043,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.passengers = ImmutableList.copyOf(list); } @@ -4453,7 +4453,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c this.gameEvent(GameEvent.ENTITY_MOUNT, passenger); } } -@@ -3052,6 +3090,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3051,6 +3089,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return false; } // CraftBukkit end @@ -4468,7 +4468,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c if (this.passengers.size() == 1 && this.passengers.get(0) == entity) { this.passengers = ImmutableList.of(); } else { -@@ -3131,12 +3177,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3130,12 +3176,15 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return Vec3.directionFromRotation(this.getRotationVector()); } @@ -4485,25 +4485,25 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } this.isInsidePortal = true; -@@ -3154,7 +3203,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3153,7 +3202,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S ServerLevel worldserver1 = minecraftserver.getLevel(resourcekey); if (true && !this.isPassenger() && this.portalTime++ >= i) { // CraftBukkit - this.level().getProfiler().push("portal"); + //this.level().getProfiler().push("portal"); // Purpur this.portalTime = i; - // Paper start + // Paper start - Add EntityPortalReadyEvent io.papermc.paper.event.entity.EntityPortalReadyEvent event = new io.papermc.paper.event.entity.EntityPortalReadyEvent(this.getBukkitEntity(), worldserver1 == null ? null : worldserver1.getWorld(), org.bukkit.PortalType.NETHER); -@@ -3172,7 +3221,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3171,7 +3220,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } - } // Paper + } // Paper - Add EntityPortalReadyEvent // CraftBukkit end - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur } this.isInsidePortal = false; -@@ -3187,7 +3236,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3186,7 +3235,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.processPortalCooldown(); @@ -4512,7 +4512,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } } -@@ -3377,7 +3426,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3376,7 +3425,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public int getMaxAirSupply() { @@ -4521,9 +4521,9 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c } public int getAirSupply() { -@@ -3647,14 +3696,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3646,14 +3695,14 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } - // Paper end + // Paper end - Fix item duplication and teleport issues if (this.level() instanceof ServerLevel && !this.isRemoved()) { - this.level().getProfiler().push("changeDimension"); + //this.level().getProfiler().push("changeDimension"); // Purpur @@ -4538,16 +4538,16 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c PortalInfo shapedetectorshape = (location == null) ? this.findDimensionEntryPoint(worldserver) : new PortalInfo(new Vec3(location.x(), location.y(), location.z()), Vec3.ZERO, this.yRot, this.xRot, worldserver, null); // CraftBukkit if (shapedetectorshape == null) { -@@ -3693,7 +3742,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3692,7 +3741,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.unRide(); // CraftBukkit end - this.level().getProfiler().popPush("reloading"); + //this.level().getProfiler().popPush("reloading"); // Purpur - // Paper start - Change lead drop timing to prevent dupe + // Paper start - Fix item duplication and teleport issues if (this instanceof Mob) { ((Mob) this).dropLeash(true, true); // Paper drop lead -@@ -3720,10 +3769,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3719,10 +3768,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } this.removeAfterChangingDimensions(); @@ -4560,16 +4560,16 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c return entity; } } else { -@@ -3843,7 +3892,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -3840,7 +3889,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean canChangeDimensions() { -- return !this.isPassenger() && !this.isVehicle() && isAlive() && valid; // Paper -+ return !this.isPassenger() && !this.isVehicle() && isAlive() && valid && (level().purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Paper // Purpur +- return !this.isPassenger() && !this.isVehicle() && isAlive() && valid; // Paper - Fix item duplication and teleport issues ++ return !this.isPassenger() && !this.isVehicle() && isAlive() && valid && (level().purpurConfig.entitiesCanUsePortals || this instanceof ServerPlayer); // Paper - Fix item duplication and teleport issues // Purpur } public float getBlockExplosionResistance(Explosion explosion, BlockGetter world, BlockPos pos, BlockState blockState, FluidState fluidState, float max) { -@@ -4141,6 +4190,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4138,6 +4187,20 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return SlotAccess.NULL; } @@ -4590,7 +4590,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c @Override public void sendSystemMessage(Component message) {} -@@ -4421,6 +4484,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4418,6 +4481,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.yRotO = this.getYRot(); } @@ -4603,10 +4603,10 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { if (false && this.touchingUnloadedChunk()) { // Pufferfish - cost of a lookup here is the same cost as below, so skip return false; -@@ -4986,4 +5055,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4978,4 +5047,44 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S return ((net.minecraft.server.level.ServerChunkCache) level.getChunkSource()).isPositionTicking(this); } - // Paper end + // Paper end - Expose entity id counter + // Purpur start + @Nullable + private Player rider = null; @@ -4649,7 +4649,7 @@ index a8d8d261daed2ebbbea3f4f356434942997ba541..93e558e1cfcdee33abf6f1c57e4cf47c + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/EntitySelector.java b/src/main/java/net/minecraft/world/entity/EntitySelector.java -index dbbce471c35849ea7d7ad07e9db9b7d8d85690df..5eb63d857fea0f1c4dc1e6e4c7af8ea653dc7963 100644 +index b350d41a724048af06f9aa9bbef039d3d719c3a8..4f25d52e70752d56c0c03d437651638ac57fa576 100644 --- a/src/main/java/net/minecraft/world/entity/EntitySelector.java +++ b/src/main/java/net/minecraft/world/entity/EntitySelector.java @@ -40,6 +40,7 @@ public final class EntitySelector { @@ -4661,7 +4661,7 @@ index dbbce471c35849ea7d7ad07e9db9b7d8d85690df..5eb63d857fea0f1c4dc1e6e4c7af8ea6 private EntitySelector() {} // Paper start diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 0ffd377dba738bd651b0c7f5ca0a0d61aaa1d82c..bf4338521cfb3527164f83baf0c6c7065215771d 100644 +index f772f7c4cd41ec52bea53d619b5b953971825df0..658c6d27b828e5a1d4538136a74fc49a69b471c0 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -313,13 +313,24 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -4805,7 +4805,7 @@ index 1bb8b6e91c44cd13411d96d749fa64835c75a267..b18cbe85330e26de6f6cbfcc3d51a741 protected ParticleOptions getInkParticle() { return ParticleTypes.GLOW_SQUID_INK; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..3b1c09f8afe1a008df4b75b605a796bfb1bf3899 100644 +index 370033cb058a20a83f80b8e2618e419bb3fd97cf..d914eab93a1a282ce149e361015abd94269fa0be 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -217,9 +217,9 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -5090,11 +5090,11 @@ index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..3b1c09f8afe1a008df4b75b605a796bf @@ -2728,7 +2792,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } - protected long lastJumpTime = 0L; // Paper + protected long lastJumpTime = 0L; // Paper - Prevent excessive velocity through repeated crits - protected void jumpFromGround() { + public void jumpFromGround() { // Purpur - protected -> public Vec3 vec3d = this.getDeltaMovement(); - // Paper start + // Paper start - Prevent excessive velocity through repeated crits long time = System.nanoTime(); @@ -2880,6 +2944,7 @@ public abstract class LivingEntity extends Entity implements Attackable { @@ -5190,7 +5190,7 @@ index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..3b1c09f8afe1a008df4b75b605a796bf this.pushEntities(); - this.level().getProfiler().pop(); + //this.level().getProfiler().pop(); // Purpur - // Paper start + // Paper start - Add EntityMoveEvent - if (((ServerLevel) this.level()).hasEntityMoveEvent && !(this instanceof net.minecraft.world.entity.player.Player)) { - if (this.xo != this.getX() || this.yo != this.getY() || this.zo != this.getZ() || this.yRotO != this.getYRot() || this.xRotO != this.getXRot()) { + // Purpur start @@ -5220,7 +5220,7 @@ index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..3b1c09f8afe1a008df4b75b605a796bf + } + // Purpur end } - // Paper end + // Paper end - Add EntityMoveEvent if (!this.level().isClientSide && this.isSensitiveToWater() && this.isInWaterRainOrBubble()) { this.hurt(this.damageSources().drown(), 1.0F); } @@ -5268,7 +5268,7 @@ index 9b7e786d5ae6bdeeb96df6e9c4d1b24e1e856e58..3b1c09f8afe1a008df4b75b605a796bf }); } diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 2f3dc569ff9cdead48aa831c96c027cc7255d609..4c0d710d20e074ad4a0fdd1cd4c0c3d3383b68a5 100644 +index 4e3d48f6af493f2cded599f51ad5d2cd07e252f2..faff4cbeaacf0beaae1ec488f6f233326f415975 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -66,6 +66,7 @@ import net.minecraft.world.item.ProjectileWeaponItem; @@ -5479,7 +5479,7 @@ index 2f3dc569ff9cdead48aa831c96c027cc7255d609..4c0d710d20e074ad4a0fdd1cd4c0c3d3 } else if (this.getLeashHolder() == player) { + if (hand == InteractionHand.OFF_HAND && (level().purpurConfig.villagerCanBeLeashed || level().purpurConfig.wanderingTraderCanBeLeashed) && this instanceof net.minecraft.world.entity.npc.AbstractVillager) return InteractionResult.CONSUME; // Purpur // CraftBukkit start - fire PlayerUnleashEntityEvent - // Paper start - drop leash variable + // Paper start - Expand EntityUnleashEvent org.bukkit.event.player.PlayerUnleashEntityEvent event = CraftEventFactory.callPlayerUnleashEntityEvent(this, player, hand, !player.getAbilities().instabuild); @@ -1390,7 +1426,7 @@ public abstract class Mob extends LivingEntity implements Targeting { protected void onOffspringSpawnedFromEgg(Player player, Mob child) {} @@ -5588,7 +5588,7 @@ index 2ee48ac3b665db2b02bcb1a30ec972d43a3725b0..59e8f5431ce5026209e1428b5fa5b548 } // Paper end - custom shear drops 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 3087f8359b098682a345399c85395de8a15b6eed..6b0855cffb901dbc7dcc5fd44506275206bc9a2d 100644 +index 683c9693754d1a87b7e8fccc757a0d0963351f60..c47af2c9d023aba454343bab0b43268013c8bd08 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 { @@ -5731,7 +5731,7 @@ index f0703302e7dbbda88de8c648d20d87c55ed9b1e0..a913ebabaa5f443afa987b972355a8f8 } } diff --git a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java -index 57ef7fbba3028c28231abf7b7ae78aa019323536..651c156dc8a5aad04d461add02e22147af657d07 100644 +index 1e71cde7cb7654f1c21ae5e27e2fad7b58f593eb..4f3a1c2bfaec6787c8fc62c7df13c512dfc2cb7a 100644 --- a/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java +++ b/src/main/java/net/minecraft/world/entity/ai/behavior/Behavior.java @@ -58,9 +58,9 @@ public abstract class Behavior implements BehaviorContro @@ -6154,7 +6154,7 @@ index 0d9b194781d152e842c9a4b8d6f23d307b2e4452..00cf59524477ec79d4354cc403fc3e75 @Override diff --git a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java -index b37415d45dda8e658c8995a4519e552dc378bb41..0e36e3e672de4c806e2d534b437489a3a349a722 100644 +index a9922074b6aa6a9898615385bb11d2a758662970..9ffbe784a0d45b494f29ab1555841b4be9f58128 100644 --- a/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java +++ b/src/main/java/net/minecraft/world/entity/ai/navigation/PathNavigation.java @@ -172,12 +172,12 @@ public abstract class PathNavigation { @@ -6233,7 +6233,7 @@ index fcdb9bde8e1605e30dde3e580491522d4b62cdc0..7094701d213c73ba47ace806962244c1 } 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 ac5e5676b194a2a99e5cf53eb89c1152cac963b8..872454743f6dedc27519a13566559195c47cc9f8 100644 +index 3c4f4af85a3f2d4f9f52827164e63727b916c33a..aa4dec55c1d4cd9796587ea3a3343131a4d2f0a4 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 { @@ -6248,7 +6248,7 @@ index ac5e5676b194a2a99e5cf53eb89c1152cac963b8..872454743f6dedc27519a13566559195 if (baseEntity == null) { if (this.isCombat && (!targetEntity.canBeSeenAsEnemy() || targetEntity.level().getDifficulty() == Difficulty.PEACEFUL)) { 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 8820905ac733a8915cc1697259b2bef14d97e471..bae3c516b0d13358603576d87a18602a0522a9ff 100644 +index 4fba7c2f6ec363846a772ef2a63e9b3fc1037de5..735445456bbfab8a64df488fed30f0be28d50159 100644 --- a/src/main/java/net/minecraft/world/entity/ambient/Bat.java +++ b/src/main/java/net/minecraft/world/entity/ambient/Bat.java @@ -19,6 +19,7 @@ import net.minecraft.world.entity.EntityDimensions; @@ -6504,7 +6504,7 @@ index 081d1e38b7b1f286e138b0981aaa760e58761215..a64ab2058d4e3439bf6ee418f3192b83 entityanimal.resetLove(); worldserver.broadcastEntityEvent(this, (byte) 18); diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index a87a34b0c4c8e5d0cf079025c230b1434c919b54..bdb78cc701543cfe91a6bafd1786fe2ea0bf1ddc 100644 +index f9521a6e115f0c975a7885b024c99eae300b63bf..997ab942be9f742804041b07d607e7dd6473ba96 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -43,6 +43,7 @@ import net.minecraft.world.entity.EntityType; @@ -6520,7 +6520,7 @@ index a87a34b0c4c8e5d0cf079025c230b1434c919b54..bdb78cc701543cfe91a6bafd1786fe2e super(type, world); this.remainingCooldownBeforeLocatingNewFlower = Mth.nextInt(this.random, 20, 60); + final org.purpurmc.purpur.controller.FlyingMoveControllerWASD flyingController = new org.purpurmc.purpur.controller.FlyingMoveControllerWASD(this, 0.25F, 1.0F, false); // Purpur - // Paper start - apply gravity to bees when they get stuck in the void, fixes MC-167279 + // Paper start - Fix MC-167279 class BeeFlyingMoveControl extends FlyingMoveControl { public BeeFlyingMoveControl(final Mob entity, final int maxPitchChange, final boolean noGravity) { @@ -155,22 +157,69 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -6547,7 +6547,7 @@ index a87a34b0c4c8e5d0cf079025c230b1434c919b54..bdb78cc701543cfe91a6bafd1786fe2e + // Purpur end } this.moveControl = new BeeFlyingMoveControl(this, 20, true); - // Paper end + // Paper end - Fix MC-167279 this.lookControl = new Bee.BeeLookControl(this); this.setPathfindingMalus(BlockPathTypes.DANGER_FIRE, -1.0F); - this.setPathfindingMalus(BlockPathTypes.WATER, -1.0F); @@ -6699,7 +6699,7 @@ index a87a34b0c4c8e5d0cf079025c230b1434c919b54..bdb78cc701543cfe91a6bafd1786fe2e } 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 de51ce9875e12961e6e549e87d76f492d2f19787..6e5b4a50b8d2dddbd7f099426b4866b35bcb798a 100644 +index f760ce7d9df79ef58f8963de3e901cba3e12fcaa..6af5e1dfcfd739e0bc857f648c189151d5a795c8 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Cat.java +++ b/src/main/java/net/minecraft/world/entity/animal/Cat.java @@ -98,6 +98,51 @@ public class Cat extends TamableAnimal implements VariantHolder { @@ -7115,7 +7115,7 @@ index 3cdd9f379c7e2d46ea47c9ef55b121c93ec0bb4a..6d00b3cd4a9cb0fc8a9e9c27f37429a2 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java -index e555fd8ca61e1ce7a52ecd475cc3ea11dedcab08..ed2769d8049bb304c1ee3b8e162046855951a624 100644 +index 178e1e75fcd0e60a1dd2729a894df08cf4129526..3c1fb1c83fc318fc5ad62b02d9204079ff4eeeca 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Dolphin.java +++ b/src/main/java/net/minecraft/world/entity/animal/Dolphin.java @@ -82,19 +82,104 @@ public class Dolphin extends WaterAnimal { @@ -7277,7 +7277,7 @@ index e555fd8ca61e1ce7a52ecd475cc3ea11dedcab08..ed2769d8049bb304c1ee3b8e16204685 } 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 3d771b137dc29579614aa4c15d12bd456cdc608a..0f631ba08d255ce5a1e28f51b591a4d9ae1a68fe 100644 +index 287e52dc844c2a64dac74dad117b775f46631157..c763fae0ac4e914305b3d3754aee3d8d2ab93faf 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Fox.java +++ b/src/main/java/net/minecraft/world/entity/animal/Fox.java @@ -36,6 +36,7 @@ import net.minecraft.util.RandomSource; @@ -7482,7 +7482,7 @@ index 3d771b137dc29579614aa4c15d12bd456cdc608a..0f631ba08d255ce5a1e28f51b591a4d9 if (iblockdata.is(Blocks.SWEET_BERRY_BUSH)) { diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index f383928fc5b331ddf128bdcb6a23010d8fe088d3..64aba511e615983988cdb6a0fd45b7d9d4f2f16d 100644 +index 6cfe0d6c46caa122db107c607d27a2bdcd82f7a8..442eb602f5c82550a87e218e2013171b718abd62 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -60,14 +60,59 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -7768,7 +7768,7 @@ index 4300fab61765dd224fab084d118aae7294fc9de6..3c5f25300d1c7800144a459cc8bf5983 } 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 ead5060ae2840a0519c5bf8b4b84aa12cc41b02a..db04b2919b811cddf4b92dafe621bb54cfe8516d 100644 +index be554dbaa9900207753e4f67f0ba402333e21338..588048ad83486adc7e798fba6dbbfe9f4926d7b0 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java @@ -114,6 +114,53 @@ public class Panda extends Animal { @@ -7902,7 +7902,7 @@ index ead5060ae2840a0519c5bf8b4b84aa12cc41b02a..db04b2919b811cddf4b92dafe621bb54 } } 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 4c34edc55fa0e136ccf49a3aef001f413274dfac..351b580611bf4b92d7addcc402c3276f7cb4e639 100644 +index f3f48225c2a1e4bd3d0091d1b4b7e4e150850ed2..670cf5a74554b0b420706db2fbce3a8e5dca147b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Parrot.java +++ b/src/main/java/net/minecraft/world/entity/animal/Parrot.java @@ -131,12 +131,88 @@ public class Parrot extends ShoulderRidingEntity implements VariantHolder= j && pos.getY() <= i && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); + return ((reason == MobSpawnType.SPAWNER && world.getMinecraftWorld().purpurConfig.spawnerFixMC238526) || (pos.getY() >= j && pos.getY() <= i)) && world.getFluidState(pos.below()).is(FluidTags.WATER) && world.getBlockState(pos.above()).is(Blocks.WATER); // Purpur } } 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 eecb7511582e5e316b71fa4a4734881424be5ca7..5d49ed7ddf44a3d549b178ae548664194967776b 100644 +index 2d20b2c1f58beb1ad8c9012d8124e476899e6be6..a90055fe8819a32180754b6060a0f88e81d1a3b6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -10,6 +10,7 @@ import net.minecraft.network.syncher.EntityDataAccessor; @@ -9378,7 +9378,7 @@ index d241ca4d0295f9fce39c11197bd435cfac7f6e54..c783ce59ea766e6c46a3313628b961f2 private boolean allayConsidersItemEqual(ItemStack stack, ItemStack stack2) { diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index 9158c5a507904c46a8fe2fdad9a0b6ba3a9b2460..e4d529825e681bbc656113b1fd44894338e23d21 100644 +index 33c160994f70f71446d665e7487913437c9f9db4..472b76d6ec721fa46857097589aa879f237e3e0d 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java @@ -98,6 +98,43 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder 0 && this.level().getEntitiesOfClass(EndCrystal.class, getBoundingBox()).size() > this.level().purpurConfig.endCrystalCramming) this.hurt(this.damageSources().cramming(), 6.0F); // Purpur } -+ // Purpur start + } +@@ -124,16 +147,18 @@ public class EndCrystal extends Entity { + // CraftBukkit end + this.remove(Entity.RemovalReason.KILLED); + if (!source.is(DamageTypeTags.IS_EXPLOSION)) { ++ if (shouldExplode()) {// Purpur + DamageSource damagesource1 = source.getEntity() != null ? this.damageSources().explosion(this, source.getEntity()) : null; + + // CraftBukkit start +- ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, 6.0F, false); ++ ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, getExplosionPower(), hasExplosionFire()); // Purpur + if (event.isCancelled()) { + this.unsetRemoved(); + return false; + } +- this.level().explode(this, damagesource1, (ExplosionDamageCalculator) null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.BLOCK); ++ this.level().explode(this, damagesource1, (ExplosionDamageCalculator) null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), getExplosionEffect()); // Purpur + // CraftBukkit end ++ } else this.unsetRemoved(); // Purpur + } + + this.onDestroyedBy(source); +@@ -158,6 +183,49 @@ public class EndCrystal extends Entity { + } + } + ++ // Purpur start + if (level().purpurConfig.phantomAttackedByCrystalRadius <= 0 || --idleCooldown > 0) { + return; // on cooldown + } @@ -10513,40 +10539,18 @@ index ffc5b68c4246a7111845230a75552bb15875a209..440add62fcfa62d483409e1aecfc9159 + phantomBeamTicks = 0; + phantomDamageCooldown = 0; + idleCooldown = 60; - } + // Purpur end + } - @Override - protected void addAdditionalSaveData(CompoundTag nbt) { -@@ -124,16 +190,18 @@ public class EndCrystal extends Entity { - // CraftBukkit end - this.remove(Entity.RemovalReason.KILLED); - if (!source.is(DamageTypeTags.IS_EXPLOSION)) { -+ if (shouldExplode()) {// Purpur - DamageSource damagesource1 = source.getEntity() != null ? this.damageSources().explosion(this, source.getEntity()) : null; - - // CraftBukkit start -- ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, 6.0F, false); -+ ExplosionPrimeEvent event = CraftEventFactory.callExplosionPrimeEvent(this, getExplosionPower(), hasExplosionFire()); // Purpur - if (event.isCancelled()) { - this.unsetRemoved(); - return false; - } -- this.level().explode(this, damagesource1, (ExplosionDamageCalculator) null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), Level.ExplosionInteraction.BLOCK); -+ this.level().explode(this, damagesource1, (ExplosionDamageCalculator) null, this.getX(), this.getY(), this.getZ(), event.getRadius(), event.getFire(), getExplosionEffect()); // Purpur - // CraftBukkit end -+ } else this.unsetRemoved(); // Purpur - } - - this.onDestroyedBy(source); + public void setBeamTarget(@Nullable BlockPos beamTarget) { diff --git a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java -index a59c2d1e84c522a9b86cb86491fb987f6f70dcd0..6fc405d31120a8c2b1326f6bfa73813d9da5d5de 100644 +index dd9800094b132954f0677eb6610fe27db4cec711..0050e314162f912449e0c01995ca1ad594cfc6f5 100644 --- a/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java +++ b/src/main/java/net/minecraft/world/entity/boss/enderdragon/EnderDragon.java @@ -107,6 +107,7 @@ public class EnderDragon extends Mob implements Enemy { @Nullable private BlockPos podium; - // Paper end + // Paper end - Allow changing the EnderDragon podium + private boolean hadRider; // Purpur public EnderDragon(EntityType entitytypes, Level world) { @@ -10730,7 +10734,7 @@ index a59c2d1e84c522a9b86cb86491fb987f6f70dcd0..6fc405d31120a8c2b1326f6bfa73813d } 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 1f7f6e5995c00725bf66723c75620ec416e24f87..d75f6032734ec76b498d32c952b15cb015f32674 100644 +index ea8883b0661e894a466eca24bfc247ac37f40a81..a8314521dd5d17fcf3ff1de4f6fc85804112d87c 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,20 +84,59 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -11004,18 +11008,18 @@ index 1f7f6e5995c00725bf66723c75620ec416e24f87..d75f6032734ec76b498d32c952b15cb0 } 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 a9c1f99ba2461333bd154ac16e812031f234f7a6..526943db39a61c6b281d44a1159ebbd8452b5798 100644 +index 94a30a0c1266bf919d1dc4ca2b19489edd54a7fa..04261213860c7122a63d2ac6a57781a5b0e62b39 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ArmorStand.java @@ -99,10 +99,12 @@ public class ArmorStand extends LivingEntity { private boolean noTickPoseDirty = false; private boolean noTickEquipmentDirty = false; - // Paper end + // Paper end - Allow ArmorStands not to tick + public boolean canMovementTick = true; // Purpur public ArmorStand(EntityType type, Level world) { super(type, world); - if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - armour stand ticking + if (world != null) this.canTick = world.paperConfig().entities.armorStands.tick; // Paper - Allow ArmorStands not to tick + if (world != null) this.canMovementTick = world.purpurConfig.armorstandMovement; // Purpur this.handItems = NonNullList.withSize(2, ItemStack.EMPTY); this.armorItems = NonNullList.withSize(4, ItemStack.EMPTY); @@ -11042,7 +11046,7 @@ index a9c1f99ba2461333bd154ac16e812031f234f7a6..526943db39a61c6b281d44a1159ebbd8 @Override public void tick() { + maxUpStep = level().purpurConfig.armorstandStepHeight; - // Paper start + // Paper start - Allow ArmorStands not to tick if (!this.canTick) { if (this.noTickPoseDirty) { @@ -1004,4 +1008,18 @@ public class ArmorStand extends LivingEntity { @@ -11065,7 +11069,7 @@ index a9c1f99ba2461333bd154ac16e812031f234f7a6..526943db39a61c6b281d44a1159ebbd8 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java -index c5ec729470aa2b17c6963605cd10b8f53bae5e59..fa94ffe6edf023dc16507d886e9d54ea58af0eec 100644 +index 80303f9466b8c7097151be313afc9a383693d18a..e5b7598a5613a8281a991e42af5b950bcc2995ca 100644 --- a/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java +++ b/src/main/java/net/minecraft/world/entity/decoration/ItemFrame.java @@ -268,7 +268,13 @@ public class ItemFrame extends HangingEntity { @@ -11112,7 +11116,7 @@ index d9016807bc21c38a5c38170e1335c79b39355bcb..62cdc36a21c0203ed98d2946a1efdf54 } diff --git a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java -index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..8e9ab1335626493b8d74f71f643565c0e65af94c 100644 +index 21a4669b01e9c57100224e20500bc23f8e101434..c5cbbd92875c1872e8c9ed1e6ebdc27ba946c46d 100644 --- a/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/FallingBlockEntity.java @@ -133,7 +133,7 @@ public class FallingBlockEntity extends Entity { @@ -11134,12 +11138,12 @@ index 45c07733f03b5c11f6d8e820f65dc950c70d9a67..8e9ab1335626493b8d74f71f643565c0 } // Paper end - fix sand duping diff --git a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java -index c34c698d389da29c9cfaa56cb8023e30416a14ba..7844ee584b917485ce5e490ad040c2c1d732eb1d 100644 +index 635f93b4205bd11a8080fbc1db53aa2430aacb77..f4bf401f53e420a6b0635a616dce386d0ab56be7 100644 --- a/src/main/java/net/minecraft/world/entity/item/ItemEntity.java +++ b/src/main/java/net/minecraft/world/entity/item/ItemEntity.java @@ -58,6 +58,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public boolean canMobPickup = true; // Paper - private int despawnRate = -1; // Paper + private int despawnRate = -1; // Paper - Alternative item-despawn-rate public net.kyori.adventure.util.TriState frictionState = net.kyori.adventure.util.TriState.NOT_SET; // Paper - Friction API + // Purpur start + public boolean immuneToCactus = false; @@ -11171,7 +11175,7 @@ index c34c698d389da29c9cfaa56cb8023e30416a14ba..7844ee584b917485ce5e490ad040c2c1 @@ -567,6 +582,12 @@ public class ItemEntity extends Entity implements TraceableEntity { public void setItem(ItemStack stack) { this.getEntityData().set(ItemEntity.DATA_ITEM, stack); - this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper + this.despawnRate = this.level().paperConfig().entities.spawning.altItemDespawnRate.enabled ? this.level().paperConfig().entities.spawning.altItemDespawnRate.items.getOrDefault(stack.getItem(), this.level().spigotConfig.itemDespawnRate) : this.level().spigotConfig.itemDespawnRate; // Paper - Alternative item-despawn-rate + // Purpur start + if (level().purpurConfig.itemImmuneToCactus.contains(stack.getItem())) immuneToCactus = true; + if (level().purpurConfig.itemImmuneToExplosion.contains(stack.getItem())) immuneToExplosion = true; @@ -11182,7 +11186,7 @@ index c34c698d389da29c9cfaa56cb8023e30416a14ba..7844ee584b917485ce5e490ad040c2c1 @Override diff --git a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java -index c3e47426382296d650fa00ce0bc1a82bf23c7877..dfc3e9d2611ce418ac6f6cc5a23bb74415007713 100644 +index 2274541c9386e4f1bbae489a1f123d502ccbf9cc..9b21aa209b549356b88321c7582f682e85cfe0d6 100644 --- a/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java +++ b/src/main/java/net/minecraft/world/entity/item/PrimedTnt.java @@ -207,4 +207,29 @@ public class PrimedTnt extends Entity implements TraceableEntity { @@ -11216,7 +11220,7 @@ index c3e47426382296d650fa00ce0bc1a82bf23c7877..dfc3e9d2611ce418ac6f6cc5a23bb744 + // Purpur end - Shears can defuse TNT } 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 a383c0c8b5c89ef1eef7d18edc3a09f749fdd310..68f45498405f5fd9a6f5525b9a59518a8b506aa8 100644 +index 586e3e92ccc275446df6dbbff9bf010a37a9aa8f..a00646bc8a9caefe56e48b7682e8fb0c464b81fa 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -66,16 +66,19 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -11242,16 +11246,16 @@ index a383c0c8b5c89ef1eef7d18edc3a09f749fdd310..68f45498405f5fd9a6f5525b9a59518a @@ -99,35 +102,14 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo } - // Paper start + // Paper start - shouldBurnInDay API - private boolean shouldBurnInDay = true; + // private boolean shouldBurnInDay = true; // Purpur - moved to LivingEntity - keep methods for ABI compatibility public boolean shouldBurnInDay() { return shouldBurnInDay; } public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } - // Paper end + // Paper end - shouldBurnInDay API @Override public void aiStep() { -- boolean flag = shouldBurnInDay && this.isSunBurnTick(); // Paper - Configurable Burning +- boolean flag = shouldBurnInDay && this.isSunBurnTick(); // Paper - shouldBurnInDay API - - if (flag) { - ItemStack itemstack = this.getItemBySlot(EquipmentSlot.HEAD); @@ -11279,7 +11283,7 @@ index a383c0c8b5c89ef1eef7d18edc3a09f749fdd310..68f45498405f5fd9a6f5525b9a59518a @@ -161,11 +143,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); - this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper + this.setCanPickUpLoot(this.level().paperConfig().entities.behavior.mobsCanAlwaysPickUpLoot.skeletons || randomsource.nextFloat() < 0.55F * difficulty.getSpecialMultiplier()); // Paper - Add world settings for mobs picking up loot if (this.getItemBySlot(EquipmentSlot.HEAD).isEmpty()) { - LocalDate localdate = LocalDate.now(); - int i = localdate.get(ChronoField.DAY_OF_MONTH); @@ -11309,12 +11313,12 @@ index a383c0c8b5c89ef1eef7d18edc3a09f749fdd310..68f45498405f5fd9a6f5525b9a59518a if (event.isCancelled()) { @@ -236,7 +213,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo this.reassessWeaponGoal(); - // Paper start + // Paper start - shouldBurnInDay API if (nbt.contains("Paper.ShouldBurnInDay")) { - this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); + // this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); // Purpur - implemented in LivingEntity } - // Paper end + // Paper end - shouldBurnInDay API } @@ -245,7 +222,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @Override @@ -11323,7 +11327,7 @@ index a383c0c8b5c89ef1eef7d18edc3a09f749fdd310..68f45498405f5fd9a6f5525b9a59518a - nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); + // nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Purpur - implemented in LivingEntity } - // Paper end + // Paper end - shouldBurnInDay API diff --git a/src/main/java/net/minecraft/world/entity/monster/Blaze.java b/src/main/java/net/minecraft/world/entity/monster/Blaze.java index 17aa7676ab624440651850bbe5689f8a6c9dbeed..a8b58469fd8a1ed4ec0ce443cf05557903527bd7 100644 @@ -11470,7 +11474,7 @@ index 70d25bb45ad603095a1f5812cc396dfc5f16a1e1..c9bd400473166999479f5eef1edad529 public boolean doHurtTarget(Entity target) { if (super.doHurtTarget(target)) { diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 52eb3f6a73fa99d12d5fc75bab03e47a605c653a..64f6b5f44db4fd90e789032e3833da60cfcfbef1 100644 +index 51ab33d805028fb739ff9fa1a22a010e70777c1e..c01f641a58de999ab0772efc24900308aad8f04a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -59,21 +59,99 @@ public class Creeper extends Monster implements PowerableMob { @@ -11647,9 +11651,9 @@ index 52eb3f6a73fa99d12d5fc75bab03e47a605c653a..64f6b5f44db4fd90e789032e3833da60 + if (!event.isIgnited()) setSwellDir(-1); // Purpur } } - // Paper end + // Paper end - CreeperIgniteEvent diff --git a/src/main/java/net/minecraft/world/entity/monster/Drowned.java b/src/main/java/net/minecraft/world/entity/monster/Drowned.java -index 485d14d71fb26e6e0d00a43da040bf63d696b66a..034bb2d1292dde6276885c3ea71d886c3894311c 100644 +index 01897af1e6253b987734a24c052daf2ce1314092..7600e747d91ae888eb801cfafcb09bffb76c8e62 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Drowned.java +++ b/src/main/java/net/minecraft/world/entity/monster/Drowned.java @@ -29,6 +29,7 @@ import net.minecraft.world.entity.ai.goal.MoveToBlockGoal; @@ -11727,9 +11731,9 @@ index 485d14d71fb26e6e0d00a43da040bf63d696b66a..034bb2d1292dde6276885c3ea71d886c this.goalSelector.addGoal(7, new RandomStrollGoal(this, 1.0D)); this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[]{Drowned.class})).setAlertOthers(ZombifiedPiglin.class)); this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::okTarget)); -- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper +- if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false)); // Paper - Check drowned for villager aggression config + // Purpur start -+ if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Spigot ++ if (this.level().spigotConfig.zombieAggressiveTowardsVillager) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Paper - Check drowned for villager aggression config + @Override + public boolean canUse() { + return (level().purpurConfig.zombieAggressiveTowardsVillagerWhenLagging || !level().getServer().server.isLagging()) && super.canUse(); @@ -11791,7 +11795,7 @@ index 485d14d71fb26e6e0d00a43da040bf63d696b66a..034bb2d1292dde6276885c3ea71d886c } 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 efc1d49c5bfea7d1674b8a9de2c8b617657eda0f..df8d1b34078031001c50325b8cf5bfa9a5c361fd 100644 +index 6d4810626980ce46e02042a5660f615c58d0d5fd..93e51be1ad77a5ae57e4bd92ba1b4535d9ea37d8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java +++ b/src/main/java/net/minecraft/world/entity/monster/ElderGuardian.java @@ -36,6 +36,33 @@ public class ElderGuardian extends Guardian { @@ -11829,7 +11833,7 @@ index efc1d49c5bfea7d1674b8a9de2c8b617657eda0f..df8d1b34078031001c50325b8cf5bfa9 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 ebbd0031da656c4b12debbf76a347da2865d50d1..a5fcc85334474b29c3575bccbaeceaadc06eea5c 100644 +index ad46881a5cba388e6ceb4e0134aa377e28d5f267..f0c3ab07e97ff79ca3d04260e10d069fe6c432d4 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -95,12 +95,40 @@ public class EnderMan extends Monster implements NeutralMob { @@ -11887,7 +11891,7 @@ index ebbd0031da656c4b12debbf76a347da2865d50d1..a5fcc85334474b29c3575bccbaeceaad } @@ -247,7 +276,7 @@ public class EnderMan extends Monster implements NeutralMob { - // Paper end + // Paper end - EndermanAttackPlayerEvent ItemStack itemstack = (ItemStack) player.getInventory().armor.get(3); - if (itemstack.is(Blocks.CARVED_PUMPKIN.asItem())) { @@ -12541,7 +12545,7 @@ index 72b8290bebe8ed9bc3c464b30cfe5d2d664310f5..06a5106a94a44c1d21537410d801cdd9 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java -index 63fce7e3d9f59f36e29bc827a46396d73143bb8b..f9cddf46d1dbcabc738842ba039daa76bb6f3eb5 100644 +index fb84b35e34063075e69e00e430bc00e7c3b9d62c..a8b3431c67442c5440b063426a1adc423f5c0658 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Illusioner.java +++ b/src/main/java/net/minecraft/world/entity/monster/Illusioner.java @@ -59,10 +59,45 @@ public class Illusioner extends SpellcasterIllager implements RangedAttackMob { @@ -12676,7 +12680,7 @@ index 2858ea5562d06c11e5c7337a2b123f9be7a3f62e..1ad97267394d3717b1871336193cdc91 @Override diff --git a/src/main/java/net/minecraft/world/entity/monster/Monster.java b/src/main/java/net/minecraft/world/entity/monster/Monster.java -index 127a344f35e194fc7b1a0783c75291fab929fe19..d90d8539815d92143c994108efdfcc18bcb3b158 100644 +index fbca4d6bc84e8be359b989ef089469838f896910..1be6f724fa6447fe733c8374ac295c6d4db6eb87 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Monster.java +++ b/src/main/java/net/minecraft/world/entity/monster/Monster.java @@ -89,6 +89,14 @@ public abstract class Monster extends PathfinderMob implements Enemy { @@ -12695,7 +12699,7 @@ index 127a344f35e194fc7b1a0783c75291fab929fe19..d90d8539815d92143c994108efdfcc18 return false; } else { 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 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f238c294d 100644 +index 187037c43ebb5b245ffa4b50163d443490668744..44a24707530ca46a6a42e8a4d9049e75f65aa66b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Phantom.java +++ b/src/main/java/net/minecraft/world/entity/monster/Phantom.java @@ -50,6 +50,8 @@ public class Phantom extends FlyingMob implements Enemy { @@ -12864,7 +12868,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f @Override public void aiStep() { -- if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - Configurable Burning +- if (this.isAlive() && shouldBurnInDay && this.isSunBurnTick()) { // Paper - shouldBurnInDay API - this.setSecondsOnFire(8); - } - @@ -12903,12 +12907,13 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f // Paper end } -@@ -263,8 +379,14 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -262,8 +378,15 @@ public class Phantom extends FlyingMob implements Enemy { + return spawningEntity; } public void setSpawningEntity(java.util.UUID entity) { this.spawningEntity = entity; } - - private boolean shouldBurnInDay = true; - public boolean shouldBurnInDay() { return shouldBurnInDay; } ++ + // private boolean shouldBurnInDay = true; // Purpur - moved to LivingEntity - keep methods for ABI compatibility + // Purpur start + public boolean shouldBurnInDay() { @@ -12920,7 +12925,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f public void setShouldBurnInDay(boolean shouldBurnInDay) { this.shouldBurnInDay = shouldBurnInDay; } // Paper end private static enum AttackPhase { -@@ -274,7 +396,125 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -273,7 +396,125 @@ public class Phantom extends FlyingMob implements Enemy { private AttackPhase() {} } @@ -13047,7 +13052,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f private float speed = 0.1F; -@@ -282,8 +522,19 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -281,8 +522,19 @@ public class Phantom extends FlyingMob implements Enemy { super(entity); } @@ -13068,7 +13073,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f if (Phantom.this.horizontalCollision) { Phantom.this.setYRot(Phantom.this.getYRot() + 180.0F); this.speed = 0.1F; -@@ -329,14 +580,20 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -328,14 +580,20 @@ public class Phantom extends FlyingMob implements Enemy { } } @@ -13091,7 +13096,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f } private class PhantomBodyRotationControl extends BodyRotationControl { -@@ -423,6 +680,12 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -422,6 +680,12 @@ public class Phantom extends FlyingMob implements Enemy { return false; } else if (!entityliving.isAlive()) { return false; @@ -13104,7 +13109,7 @@ index 5b4719dd7c3b8f93c898779f45239568f6a5fe43..355445b7f8972cb789d33f59d03c382f } else { if (entityliving instanceof Player) { Player entityhuman = (Player) entityliving; -@@ -568,6 +831,7 @@ public class Phantom extends FlyingMob implements Enemy { +@@ -567,6 +831,7 @@ public class Phantom extends FlyingMob implements Enemy { this.nextScanTick = reducedTickDelay(60); List list = Phantom.this.level().getNearbyPlayers(this.attackTargeting, Phantom.this, Phantom.this.getBoundingBox().inflate(16.0D, 64.0D, 16.0D)); @@ -13167,7 +13172,7 @@ index cec545c3baa6599d47b9cf1a4b97de8771062a22..06d52d8b61abc4dbbdc953bfed2e688b 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 0c11d9bef8f0129c541e30ad057612e881703b24..c9c21c87e3bd1c404fbef6768761bcb5d97d98b9 100644 +index 151acc43c96b4545ce92d3d559d8e1591874b4b5..2d834e57253f666f04f8e0b47c8b8a45458c0a75 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Ravager.java +++ b/src/main/java/net/minecraft/world/entity/monster/Ravager.java @@ -71,14 +71,54 @@ public class Ravager extends Raider { @@ -13451,7 +13456,7 @@ index 2c60a3765d22909e73b660492410ab8456304b68..dbc27afbccb027963ae3f035c268835a BlockPos blockposition = BlockPos.containing(this.mob.getX(), this.mob.getY() + 0.5D, this.mob.getZ()).relative(this.selectedDirection); BlockState iblockdata = this.mob.level().getBlockState(blockposition); diff --git a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java -index 8b818a7cb835512c4bd2ea9641d4bfd904150332..f4a47ac2c86cc95178922cce7320ba1ef5121b57 100644 +index 92974452d8f63fde8524cfac305ee2ef5212f840..6df5d100f21f26d88b3a36768bc9220f64d47cb8 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Skeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/Skeleton.java @@ -14,6 +14,16 @@ import net.minecraft.world.item.Items; @@ -13579,7 +13584,7 @@ index 8b818a7cb835512c4bd2ea9641d4bfd904150332..f4a47ac2c86cc95178922cce7320ba1e + // Purpur end } diff --git a/src/main/java/net/minecraft/world/entity/monster/Slime.java b/src/main/java/net/minecraft/world/entity/monster/Slime.java -index cd964e5cded6a74cb9dcf27b4134f944764062cd..8b6f8fca8402c177c399824c6bf0bdef2c24ec55 100644 +index 2e59a32aa8afe45641a319b1a6c347ee944398a8..b18fc603f11cf946baf390b8621139c880a1979a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Slime.java +++ b/src/main/java/net/minecraft/world/entity/monster/Slime.java @@ -61,6 +61,7 @@ public class Slime extends Mob implements Enemy { @@ -13762,7 +13767,7 @@ index cd964e5cded6a74cb9dcf27b4134f944764062cd..8b6f8fca8402c177c399824c6bf0bdef } 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 8094c133f9e934c98eee09738220bacd87a0a364..7d72188bfa921280dc5a1aff09ee3838821d17b6 100644 +index 0c68ed759421d6bce4435399f1b4980510081cac..ad643331e0ea388dc28329828d2cb005d176eb9f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -53,14 +53,48 @@ public class Spider extends Monster { @@ -14080,7 +14085,7 @@ index 30ea3f64234fd1fda8dada3c7fb12be0730322a8..44fe951f0297c0efa5169c8972c05eaf 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 ad41bbbf5395ed18c2c9e1e692c7661a6e0cb98c..ffe956f200dd0b4148043d0d7f2eac007a9f22b1 100644 +index a6af5ac9d09834940d3dd4c80b16450b90484edb..ee9d5933f74584452a1b27a392e7d36dac5b9bc9 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,48 @@ public class Vindicator extends AbstractIllager { @@ -14146,7 +14151,7 @@ index ad41bbbf5395ed18c2c9e1e692c7661a6e0cb98c..ffe956f200dd0b4148043d0d7f2eac00 } 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 580dff41d746d9591f718081d9dfe4ac77e7eeaa..1f19be94995d02596306fa49e19582b3deb1924a 100644 +index 02386e7eabc6669296ce35158fa35a3c88c6b563..97a6dfe7bb29dcb04a4ec3f082755be90e121548 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Witch.java +++ b/src/main/java/net/minecraft/world/entity/monster/Witch.java @@ -59,6 +59,38 @@ public class Witch extends Raider implements RangedAttackMob { @@ -14202,7 +14207,7 @@ index 580dff41d746d9591f718081d9dfe4ac77e7eeaa..1f19be94995d02596306fa49e19582b3 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 3dcd43279ce1295b37c3504ecbdaac5275df2b80..b5462ca1e67c87eeb447b8c4536c4bba897be186 100644 +index 20a65c11ededcd7170704b70118da6200151fbab..e97cb4e166c2e9ac6d93ed5b15350758326e7e74 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,38 @@ public class WitherSkeleton extends AbstractSkeleton { @@ -14310,19 +14315,19 @@ index b79c86272f12c4b1173ea494cbe09e1ecdc23533..1d36459ee10da702d65b4a6d139a05fd } 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 753defa8f8b48d004a2a53b2fc322fd9c083d95e..f6dd5fd56926215830ccebbd46098d4bc08e17e4 100644 +index 3fa43be16cc8d35622c269db37875b4bd0a09405..a161f8316dc38148a60ad3a661eb2d50a34ec068 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -96,22 +96,69 @@ public class Zombie extends Monster { private int inWaterTime; public int conversionTime; private int lastTick = MinecraftServer.currentTick; // CraftBukkit - add field -- private boolean shouldBurnInDay = true; // Paper -+ // private boolean shouldBurnInDay = true; // Paper // Purpur - implemented in LivingEntity +- private boolean shouldBurnInDay = true; // Paper - Add more Zombie API ++ // private boolean shouldBurnInDay = true; // Paper - Add more Zombie API // Purpur - implemented in LivingEntity public Zombie(EntityType type, Level world) { super(type, world); - this.breakDoorGoal = new BreakDoorGoal(this, com.google.common.base.Predicates.in(world.paperConfig().entities.behavior.doorBreakingDifficulty.getOrDefault(type, world.paperConfig().entities.behavior.doorBreakingDifficulty.get(EntityType.ZOMBIE)))); // Paper + this.breakDoorGoal = new BreakDoorGoal(this, com.google.common.base.Predicates.in(world.paperConfig().entities.behavior.doorBreakingDifficulty.getOrDefault(type, world.paperConfig().entities.behavior.doorBreakingDifficulty.get(EntityType.ZOMBIE)))); // Paper - Configurable door breaking difficulty + this.setShouldBurnInDay(true); // Purpur } @@ -14377,7 +14382,7 @@ index 753defa8f8b48d004a2a53b2fc322fd9c083d95e..f6dd5fd56926215830ccebbd46098d4b @Override protected void registerGoals() { + this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - if (this.level().paperConfig().entities.behavior.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper + if (this.level().paperConfig().entities.behavior.zombiesTargetTurtleEggs) this.goalSelector.addGoal(4, new Zombie.ZombieAttackTurtleEggGoal(this, 1.0D, 3)); // Paper - Add zombie targets turtle egg config this.goalSelector.addGoal(8, new LookAtPlayerGoal(this, Player.class, 8.0F)); this.goalSelector.addGoal(8, new RandomLookAroundGoal(this)); + this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur @@ -14443,25 +14448,25 @@ index 753defa8f8b48d004a2a53b2fc322fd9c083d95e..f6dd5fd56926215830ccebbd46098d4b + public boolean shouldBurnInDay() { return isSunSensitive(); } // Purpur - for ABI compatibility public boolean isSunSensitive() { - return this.shouldBurnInDay; // Paper - use api value instead + return this.shouldBurnInDay; // Paper - Add more Zombie API } @@ -433,7 +470,7 @@ public class Zombie extends Monster { nbt.putBoolean("CanBreakDoors", this.canBreakDoors()); nbt.putInt("InWaterTime", this.isInWater() ? this.inWaterTime : -1); nbt.putInt("DrownedConversionTime", this.isUnderWaterConverting() ? this.conversionTime : -1); -- nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper -+ // nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper // Purpur - implemented in LivingEntity +- nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API ++ // nbt.putBoolean("Paper.ShouldBurnInDay", this.shouldBurnInDay); // Paper - Add more Zombie API // Purpur - implemented in LivingEntity } @Override @@ -447,7 +484,7 @@ public class Zombie extends Monster { } - // Paper start + // Paper start - Add more Zombie API if (nbt.contains("Paper.ShouldBurnInDay")) { - this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); + // this.shouldBurnInDay = nbt.getBoolean("Paper.ShouldBurnInDay"); // Purpur - implemented in LivingEntity } - // Paper end + // Paper end - Add more Zombie API @@ -520,19 +557,20 @@ public class Zombie extends Monster { if (object instanceof Zombie.ZombieGroupData) { @@ -14600,7 +14605,7 @@ index 7de9d012e7416eaa0189b513a0972c846e93c4b6..712f77d4ddad04c7cd89d51c6d0c79c2 return InteractionResult.SUCCESS; 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 1afe8a8694c1fd0bf43ce3c0c36a83fda9aec141..df8c7a45eb49a8c667030eb67d6d49dcbaef4fcf 100644 +index fbabbd0808304f5d0d12f987d00c9e43a89fb1c9..feba8a264bae656244f60296d0511a8046297f73 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -64,6 +64,53 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { @@ -14712,7 +14717,7 @@ index 0b8992a9aea781470ab3b1880cf041972a20089d..94431d5c789a9f558c16c0d1fc8f1f74 } 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 e703320717ff620a19ff76d1c10066117c9895d5..9d6c4f13c4a444c6c815c6c4f2114142f166b9bb 100644 +index 9921b160fb21f72fbd28fe81ea66fbc3dc05f83f..5c160d6aa4e3d51c1161f82e92e5e8c1e809a574 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 @@ -69,6 +69,43 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -14774,7 +14779,7 @@ index e703320717ff620a19ff76d1c10066117c9895d5..9d6c4f13c4a444c6c815c6c4f2114142 if (this.isConverting()) { ++this.timeInOverworld; 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 cfdc1650783d6855e0d4f33ec68aab48dbee09f0..8e829d522a6012f409161ad5a9a06721a942d7e4 100644 +index 83d83e3f84bb6bd58761671c6cd4c8683545ff4c..1422c0f4ff6a3e61f229574cd7b50971bdbd8451 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,38 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -14840,7 +14845,7 @@ index cfdc1650783d6855e0d4f33ec68aab48dbee09f0..8e829d522a6012f409161ad5a9a06721 protected boolean canReplaceCurrentItem(ItemStack stack) { diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java -index 372d084609216d5437b92ee60810a9efbb0b6f31..a5a7ea0ddad31e3633647f823df86ddbb5fbbcc5 100644 +index fc93dc1c402c29dba7751c0f873a1e87d6abc358..1bdc64184cc801719b243c15633fe3770f12a2f0 100644 --- a/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java +++ b/src/main/java/net/minecraft/world/entity/monster/piglin/PiglinAi.java @@ -598,20 +598,33 @@ public class PiglinAi { @@ -14945,7 +14950,7 @@ index d02ee11066fc4f07ccb110b09b86d895ff90d4f2..856e6e02c9424a6c06e310262cb4f5bd PiglinBruteAi.maybePlayActivitySound(this); super.customServerAiStep(); 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 58a7e61e02b7d72326ed4d57ee514adb63b3873c..22263f219ce9e9f014abb76c43297c528acb36eb 100644 +index 0a151c679b0dc943598180942d6d4b3886211688..bf7ef72a7d92db8f11789a69583270644de0dac7 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 @@ -123,8 +123,32 @@ public class Warden extends Monster implements VibrationSystem { @@ -15018,7 +15023,7 @@ index 58a7e61e02b7d72326ed4d57ee514adb63b3873c..22263f219ce9e9f014abb76c43297c52 public static void applyDarknessAround(ServerLevel world, Vec3 pos, @Nullable Entity entity, int range) { diff --git a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java -index 5a591c439c5cef6b7e7e6f836ab813cb4f29b08c..44bb73e6846fc5f536b6efd5db7c5f1560ffecae 100644 +index 4e6c2f6b2e54a4c126e9a026b9cad05ce835ad66..69553b5b3c56998e4ae40876b1458929b335ad5d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java +++ b/src/main/java/net/minecraft/world/entity/npc/AbstractVillager.java @@ -42,6 +42,7 @@ import org.bukkit.event.entity.VillagerAcquireTradeEvent; @@ -15076,7 +15081,7 @@ index 5f407535298a31a34cfe114dd863fd6a9b977707..29c7e33fe961020e5a0007287fe9b663 } 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 1e6d61673b0e3252129c04edcfa1d7d436e8ecbe..27ebfda79d9c4463f157b99c2c56e256839b3a31 100644 +index a1769d423141e2a27d7d5ac7f2b7d36c600f1b2d..c137f8f1a2566690f2b2e82b16e7186eaa711f38 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -141,6 +141,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -15304,7 +15309,7 @@ index ac70c2c03241e73943bd517a8c69dd05e0873634..0318663a824d2a9515f867a075d148c3 public static final VillagerProfession FISHERMAN = register("fisherman", PoiTypes.FISHERMAN, SoundEvents.VILLAGER_WORK_FISHERMAN); public static final VillagerProfession FLETCHER = register("fletcher", PoiTypes.FLETCHER, SoundEvents.VILLAGER_WORK_FLETCHER); diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java -index 833563e237462ccfc1b730b8f5fb35340d0db854..237247cb91248eb2d05e967e95cb8ad0a8a63080 100644 +index 1c89f20debfad9807c90a21cc336d5790294ebce..3f78ab74cd7706ad16f6d5a989803691c9842f9f 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTrader.java @@ -70,6 +70,43 @@ public class WanderingTrader extends net.minecraft.world.entity.npc.AbstractVill @@ -15382,7 +15387,7 @@ index 833563e237462ccfc1b730b8f5fb35340d0db854..237247cb91248eb2d05e967e95cb8ad0 this.openTradingScreen(player, this.getDisplayName(), 1); } diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index 8385eb1d60f377da94e3178ab506feefb43563fd..a5443f92786427c42092aec8350e7ab37704db7a 100644 +index d7bddedb19c10f62fd1f7d3128453ad706ed16be..752b38d45d59d8b3cd492246e5aa4f378a78734d 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java @@ -159,7 +159,17 @@ public class WanderingTraderSpawner implements CustomSpawner { @@ -15405,7 +15410,7 @@ index 8385eb1d60f377da94e3178ab506feefb43563fd..a5443f92786427c42092aec8350e7ab3 if (NaturalSpawner.isSpawnPositionOk(SpawnPlacements.Type.ON_GROUND, world, blockposition2, EntityType.WANDERING_TRADER)) { blockposition1 = blockposition2; diff --git a/src/main/java/net/minecraft/world/entity/player/Player.java b/src/main/java/net/minecraft/world/entity/player/Player.java -index 2668c3b6f752d5d8bc45f4e6e52c20cc6a36a957..9ef9d005036ecbe271b08fa5e4465f328da19815 100644 +index 7e77383368388f6e56159892cd483513b068e402..319e866fea993830f97714ed0d449de58e8d0e07 100644 --- a/src/main/java/net/minecraft/world/entity/player/Player.java +++ b/src/main/java/net/minecraft/world/entity/player/Player.java @@ -183,17 +183,40 @@ public abstract class Player extends LivingEntity { @@ -15555,11 +15560,11 @@ index 2668c3b6f752d5d8bc45f4e6e52c20cc6a36a957..9ef9d005036ecbe271b08fa5e4465f32 public static boolean isValidUsername(String name) { + if (true) return org.purpurmc.purpur.PurpurConfig.usernameValidCharactersPattern.matcher(name).matches(); // Purpur - // Paper start + // Paper start - username validation overriding if (name == null || name.isEmpty() || name.length() > 16) { return false; diff --git a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java -index 505fe5496044f090ce6f7d541b8c3e13c567b16d..1c51ad780cae3c0c2a917f229ac370b75fe62c24 100644 +index 5a2144417783f859729fc93281edd9d577c59ca2..56c150d037964e82d9aa3fac2008dc1e14cced8c 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -74,6 +74,7 @@ public abstract class AbstractArrow extends Projectile { @@ -15638,7 +15643,7 @@ index 0bbe853f7df93f9dcd2b21d762939f8b6be069aa..7db9844083703944f59e112c6dc5e1a5 public void tick() { super.tick(); diff --git a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java -index f0a6251cc8f612b898231e505c47fd5b2bbb4973..8e13b5d3e89e49994ad9763be7e4f35dd58a9c5e 100644 +index 2d09d39a5971615a40b33baa0991c3e432f3ca18..f0c72be4a0dacad52ded87fa051b8505c1b79eae 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -334,7 +334,7 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -15780,7 +15785,7 @@ index 78dd3365dc4d1265fc2102f740d75a384f5df5c5..aa5ce9625bf23885a55521cbb4d994b6 public boolean isPickable() { return false; diff --git a/src/main/java/net/minecraft/world/entity/raid/Raider.java b/src/main/java/net/minecraft/world/entity/raid/Raider.java -index cdbc925ef61b8b439415f0a89368227890bcecb2..300411e88cdaef7e0ce280edbd5f18fa8d004a33 100644 +index 226fb5c88dd43c8008c5237299ef80db9e847af7..2da00acac01e333c23f7d155594011dceeb50f64 100644 --- a/src/main/java/net/minecraft/world/entity/raid/Raider.java +++ b/src/main/java/net/minecraft/world/entity/raid/Raider.java @@ -319,7 +319,7 @@ public abstract class Raider extends PatrollingMonster { @@ -15837,7 +15842,7 @@ index 31831811ce16265e9828fa34d9e67d8ac195d723..a1f74718240da3dfb0fc53f337ec3bf1 if (!this.raidMap.containsKey(raid.getId())) { this.raidMap.put(raid.getId(), raid); 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 dc421a0a6430583f1f0154e1dd689b80253f6e3d..9984ac31e911473a94d90aae1cdd46e16ac0182b 100644 +index d514ec1e4cbdc579c3a61533998437903afdc8b6..eb5bd5cfd131042e366872bf599a315d83dc732b 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java @@ -105,12 +105,14 @@ public abstract class AbstractMinecart extends VehicleEntity { @@ -15941,7 +15946,7 @@ index dc421a0a6430583f1f0154e1dd689b80253f6e3d..9984ac31e911473a94d90aae1cdd46e1 Vec3 vec3d5 = this.getDeltaMovement(); double d21 = vec3d5.x; diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index c041c0b81be41cfd128c2f5ba56a5329d50b2efc..7e9c88efd2a1edea673d1ef81635c2891a04d30e 100644 +index db6aa75d642f4a7258f197933671907faf79c8f2..81e0930acccd014e977b88d22e10346627f0edb0 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java @@ -521,6 +521,7 @@ public class Boat extends VehicleEntity implements VariantHolder { @@ -16038,7 +16043,7 @@ index b16d9e2eaa589f19c563ee70b1a56d67dbcdecb0..71beab673f04cd051c46ea37f8c84731 public static final FoodProperties BAKED_POTATO = (new FoodProperties.Builder()).nutrition(5).saturationMod(0.6F).build(); public static final FoodProperties BEEF = (new FoodProperties.Builder()).nutrition(3).saturationMod(0.3F).meat().build(); diff --git a/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java b/src/main/java/net/minecraft/world/inventory/AbstractContainerMenu.java -index 47a3c18401e2df4c89908691348f2411d3ef6fda..5ca5b5e5925d330f2962a9a1024b5dd675f0003a 100644 +index 48f634a7521d31c1e9dfd3cfc83139d428dbd37a..fa185a8145843edf44fc0aeedb6c36b2b13263ae 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 { @@ -16069,7 +16074,7 @@ index 1af7e1548f0648890a1ef2fc0ff4e4c3a56c947c..decea1697c075e7549ccc7501c8e5935 } else if (this.isFuel(itemstack1)) { if (!this.moveItemStackTo(itemstack1, 1, 2, false)) { diff --git a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java -index f00638e9d7baf8b803dd610f2bf6250da34efab3..27d76e0c4809d333c548379bf78ec2db083b027e 100644 +index cab3e0ba471c93764b5949ad68a0f2cce4d00099..2913d69fcff4b6df68586146b7323cea33eba74b 100644 --- a/src/main/java/net/minecraft/world/inventory/AnvilMenu.java +++ b/src/main/java/net/minecraft/world/inventory/AnvilMenu.java @@ -23,6 +23,13 @@ import org.slf4j.Logger; @@ -16349,7 +16354,7 @@ index 343f44db579839eb61376f876b5eff2e615dc2e5..849b6a30d412d10f1e2e6e88f2d8d990 }); } diff --git a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java -index 4acad717bfec91e4abcdd59900e6872838d0712c..46c4468b846085d92f773142ecbee0fe258ff319 100644 +index 23462de504932bd351b8dfacde514fe361343912..af99ce32872e079beb6ac1caf3a8ac4c3cae4648 100644 --- a/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java +++ b/src/main/java/net/minecraft/world/inventory/GrindstoneMenu.java @@ -95,9 +95,11 @@ public class GrindstoneMenu extends AbstractContainerMenu { @@ -16437,7 +16442,7 @@ index 9af1da3858d6cf79b8bfaf99dde1370ccc50d023..1acb41fab25bdbc4109913b111dbe3b0 @Override diff --git a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java -index e5a7f36843d621e6c714ef2e1cb8e2e3551924ef..2071c21783cc5e3f542018de3b0a7a1c579147da 100644 +index 62e1b7096fa659778b737b3d520389e73138dc5d..3756de835ea87e3a4fb87cbf77365ffd87957ea9 100644 --- a/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java +++ b/src/main/java/net/minecraft/world/inventory/ItemCombinerMenu.java @@ -178,7 +178,9 @@ public abstract class ItemCombinerMenu extends AbstractContainerMenu { @@ -16582,7 +16587,7 @@ index 2e75fd06e9e379eb95ebfe55086ffc327706ab2f..2918b1aca8fae6a319881a631dc727b6 return optional3; } else { diff --git a/src/main/java/net/minecraft/world/item/BlockItem.java b/src/main/java/net/minecraft/world/item/BlockItem.java -index 6404323f01833569e46c4ae45ceb21eb297c0c7f..891cc06311fd135d2ac4a46d9cb3368ea2c041dd 100644 +index 8d2c0accadaf0c5d28e7db6e62a05f6c619cf02f..f33fcd7bca6f315c4b4cf1f5063f4772790ad20d 100644 --- a/src/main/java/net/minecraft/world/item/BlockItem.java +++ b/src/main/java/net/minecraft/world/item/BlockItem.java @@ -152,7 +152,24 @@ public class BlockItem extends Item { @@ -16680,7 +16685,7 @@ index 08d597db1a5345a343777a01427655e6bf2c926b..d45a2f49c82d00801578c34e5f5277fc } else { user.startUsingItem(hand); diff --git a/src/main/java/net/minecraft/world/item/BucketItem.java b/src/main/java/net/minecraft/world/item/BucketItem.java -index aa0f09a18ea781e027ea70928b30d3e93061120f..5cb8f1e13f4889792395d6b498c0ade22a33b446 100644 +index 6371f326fc86cfc53e39bf8ed13b646f7705fbbc..3dec0c5fc8dece5341634eaf8e94fe1964bf4038 100644 --- a/src/main/java/net/minecraft/world/item/BucketItem.java +++ b/src/main/java/net/minecraft/world/item/BucketItem.java @@ -195,7 +195,7 @@ public class BucketItem extends Item implements DispensibleContainerItem { @@ -16702,7 +16707,7 @@ index aa0f09a18ea781e027ea70928b30d3e93061120f..5cb8f1e13f4889792395d6b498c0ade2 return true; diff --git a/src/main/java/net/minecraft/world/item/CrossbowItem.java b/src/main/java/net/minecraft/world/item/CrossbowItem.java -index eede02c3f125d230af537bb67bebed9b88f7d1b4..2c51a73ebfd05af21b0f5d731fc9f1df77fed1a1 100644 +index 06689ee8799079510a1a4e7b68029b9629e318fb..62f291abef664d8bccd682db9de8d0ae6fe2b9bd 100644 --- a/src/main/java/net/minecraft/world/item/CrossbowItem.java +++ b/src/main/java/net/minecraft/world/item/CrossbowItem.java @@ -64,7 +64,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { @@ -16715,11 +16720,11 @@ index eede02c3f125d230af537bb67bebed9b88f7d1b4..2c51a73ebfd05af21b0f5d731fc9f1df return InteractionResultHolder.consume(itemstack); } else if (!user.getProjectile(itemstack).isEmpty()) { @@ -114,7 +114,7 @@ public class CrossbowItem extends ProjectileWeaponItem implements Vanishable { - // Paper end + // Paper end - Add EntityLoadCrossbowEvent int i = EnchantmentHelper.getItemEnchantmentLevel(Enchantments.MULTISHOT, crossbow); int j = i == 0 ? 1 : 3; -- boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - add consume -+ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, crossbow) > 0); // Paper - add consume // Purpur +- boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild; // Paper - Add EntityLoadCrossbowEvent ++ boolean flag = !consume || shooter instanceof Player && ((Player) shooter).getAbilities().instabuild || (org.purpurmc.purpur.PurpurConfig.allowCrossbowInfinity && EnchantmentHelper.getItemEnchantmentLevel(Enchantments.INFINITY_ARROWS, crossbow) > 0); // Paper - Add EntityLoadCrossbowEvent // Purpur ItemStack itemstack1 = shooter.getProjectile(crossbow); ItemStack itemstack2 = itemstack1.copy(); @@ -16763,7 +16768,7 @@ index 88e1c2431d51d8cdc3d555b711e506648225d289..ac8735cc9d127fc1f867b40d4000c033 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/item/EggItem.java b/src/main/java/net/minecraft/world/item/EggItem.java -index 58cb992c5defec2f092755cbde661ff10f38bf9d..52f48681407d23f0925f4c9c072d5f0a2a6b1778 100644 +index a3bd507793994e9cc87a956871a8afbb8ca9460d..ef2197a23aef0a4215fae09bd4618e449e14c64e 100644 --- a/src/main/java/net/minecraft/world/item/EggItem.java +++ b/src/main/java/net/minecraft/world/item/EggItem.java @@ -24,7 +24,7 @@ public class EggItem extends Item { @@ -16772,7 +16777,7 @@ index 58cb992c5defec2f092755cbde661ff10f38bf9d..52f48681407d23f0925f4c9c072d5f0a entityegg.setItem(itemstack); - entityegg.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F); + entityegg.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, (float) world.purpurConfig.eggProjectileOffset); // Purpur - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityegg.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entityegg)) { diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java @@ -16789,7 +16794,7 @@ index faa3f62d22266a3c32d6c95c3ffebd4aa3880739..0cf62b1f64afa56c319392eafe0d444b } else { BlockPos blockposition1 = blockposition.above(); final BlockPos aboveBlockPosition = blockposition1; // Paper - OBFHELPER diff --git a/src/main/java/net/minecraft/world/item/EnderpearlItem.java b/src/main/java/net/minecraft/world/item/EnderpearlItem.java -index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..6b27d98d06b163243bb0e1bb979aad03f48d7770 100644 +index 8c8cf8705107c95d9a4eab28b5845ae13c4ffb3c..8031e38c66468676b3b4a7443d6678eec6b1e8a4 100644 --- a/src/main/java/net/minecraft/world/item/EnderpearlItem.java +++ b/src/main/java/net/minecraft/world/item/EnderpearlItem.java @@ -24,7 +24,7 @@ public class EnderpearlItem extends Item { @@ -16798,8 +16803,8 @@ index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..6b27d98d06b163243bb0e1bb979aad03 entityenderpearl.setItem(itemstack); - entityenderpearl.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F); + entityenderpearl.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, (float) world.purpurConfig.enderPearlProjectileOffset); // Purpur - // Paper start - com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity()); + // Paper start - PlayerLaunchProjectileEvent + com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entityenderpearl.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entityenderpearl)) { @@ -36,7 +36,7 @@ public class EnderpearlItem extends Item { @@ -16808,10 +16813,10 @@ index 749ab72edc0d2e9c6f1161415ab8d59d3d6ca976..6b27d98d06b163243bb0e1bb979aad03 - user.getCooldowns().addCooldown(this, 20); + user.getCooldowns().addCooldown(this, user.getAbilities().instabuild ? world.purpurConfig.enderPearlCooldownCreative : world.purpurConfig.enderPearlCooldown); // Purpur } else { - // Paper end + // Paper end - PlayerLaunchProjectileEvent if (user instanceof net.minecraft.server.level.ServerPlayer) { diff --git a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java -index 82b0bda3e35ec2157a477e1a17b2b46baadc97d9..0fc45b1048a1c4e0dc2bd1ae0437eecbe113cf96 100644 +index 0821c06a4c66edc8fcee09fc192335a588d2944b..56d7c05c93bc074f6caba51b1741f25d6f0861cd 100644 --- a/src/main/java/net/minecraft/world/item/FireworkRocketItem.java +++ b/src/main/java/net/minecraft/world/item/FireworkRocketItem.java @@ -15,6 +15,7 @@ import net.minecraft.util.ByIdMap; @@ -16907,7 +16912,7 @@ index 180aec596110309aade13d2080f8824d152b07cb..552c31c0f3746dd35388395036e70a92 return InteractionResult.PASS; } diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index 5caf48c84b8dd46903dbdacaa3a5e13272374e0e..cbfd535d62acdde7789fa88332f4a607c381d450 100644 +index ed27a963223bfe18310ad5adabf461b5e307ef9c..361e0d5ec35219c2706c7344efc25ee6d50a2460 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -453,6 +453,7 @@ public final class ItemStack { @@ -16953,7 +16958,7 @@ index 5caf48c84b8dd46903dbdacaa3a5e13272374e0e..cbfd535d62acdde7789fa88332f4a607 for (int l = 0; j > 0 && l < amount; ++l) { @@ -686,6 +698,12 @@ public final class ItemStack { - if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - pass LivingEntity for EntityItemDamageEvent + if (this.hurt(amount, entity.getRandom(), entity /*instanceof ServerPlayer ? (ServerPlayer) entity : null*/)) { // Paper - Add EntityDamageItemEvent breakCallback.accept(entity); Item item = this.getItem(); + // Purpur start @@ -17024,7 +17029,7 @@ index f692149d91b525bda6dc79d489d7496ea24037e8..cf68dca4096556b0c2594c76fcf11341 } } diff --git a/src/main/java/net/minecraft/world/item/MapItem.java b/src/main/java/net/minecraft/world/item/MapItem.java -index 797415866a7f182d804f6b8e57ceb07a6ac2a20a..6cfd169c2c32b644d70907358c2d4a2087c00a68 100644 +index d8dd99ec8bf7444c5a3c426db3a9c13e334dc0ff..8d3c1897044f9a2bbe1911e1a72dc9a00fb246df 100644 --- a/src/main/java/net/minecraft/world/item/MapItem.java +++ b/src/main/java/net/minecraft/world/item/MapItem.java @@ -235,6 +235,7 @@ public class MapItem extends ComplexItem { @@ -17083,7 +17088,7 @@ index 3aa73cd44aa8c86b78c35bc1788e4f83018c49ed..66a8b28275619079e3bcbcc460146976 } } diff --git a/src/main/java/net/minecraft/world/item/NameTagItem.java b/src/main/java/net/minecraft/world/item/NameTagItem.java -index 2941c16ef486345b57ab2dfcd26f0272285d3b5a..7cc6812bf6f2ba015f65fd1fc1eaac02dd0f53e2 100644 +index d12b3fb8b5e28ba4524d163878be978b1b42d019..f570ad65b746b596479c987f2fdf37d1ae94ab47 100644 --- a/src/main/java/net/minecraft/world/item/NameTagItem.java +++ b/src/main/java/net/minecraft/world/item/NameTagItem.java @@ -20,6 +20,7 @@ public class NameTagItem extends Item { @@ -17093,7 +17098,7 @@ index 2941c16ef486345b57ab2dfcd26f0272285d3b5a..7cc6812bf6f2ba015f65fd1fc1eaac02 + if (user.level().purpurConfig.armorstandFixNametags && entity instanceof net.minecraft.world.entity.decoration.ArmorStand) entity.setCustomNameVisible(true); // Purpur if (event.isPersistent() && newEntityLiving instanceof Mob) { ((Mob) newEntityLiving).setPersistenceRequired(); - // Paper end + // Paper end - Add PlayerNameEntityEvent diff --git a/src/main/java/net/minecraft/world/item/ShovelItem.java b/src/main/java/net/minecraft/world/item/ShovelItem.java index 21212462e6b415e96536a27b2c009d1562f18946..193bcb12152347f5f02ce18b01ba918e5e838f30 100644 --- a/src/main/java/net/minecraft/world/item/ShovelItem.java @@ -17124,7 +17129,7 @@ index 21212462e6b415e96536a27b2c009d1562f18946..193bcb12152347f5f02ce18b01ba918e return InteractionResult.PASS; } diff --git a/src/main/java/net/minecraft/world/item/SnowballItem.java b/src/main/java/net/minecraft/world/item/SnowballItem.java -index ef3f90a5bcdd7b9815a4053cff166f9d2552f55d..e7e5e1cc92f56e3daba8fa09c59188febec5e8f2 100644 +index bc8186a5bc3a98b35fad570729dd4ba52efab238..caab0c1e2bc5696080750797cbf1c93f57799f7d 100644 --- a/src/main/java/net/minecraft/world/item/SnowballItem.java +++ b/src/main/java/net/minecraft/world/item/SnowballItem.java @@ -25,7 +25,7 @@ public class SnowballItem extends Item { @@ -17133,11 +17138,11 @@ index ef3f90a5bcdd7b9815a4053cff166f9d2552f55d..e7e5e1cc92f56e3daba8fa09c59188fe entitysnowball.setItem(itemstack); - entitysnowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, 1.0F); + entitysnowball.shootFromRotation(user, user.getXRot(), user.getYRot(), 0.0F, 1.5F, (float) world.purpurConfig.snowballProjectileOffset); // Purpur - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemstack), (org.bukkit.entity.Projectile) entitysnowball.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(entitysnowball)) { diff --git a/src/main/java/net/minecraft/world/item/SpawnEggItem.java b/src/main/java/net/minecraft/world/item/SpawnEggItem.java -index 4f10f801dc126e9135432939b6663770c0e7a0bc..8f89a1c7e6214f549490ecf75afbdd72b897b120 100644 +index 3bfbf7daa190b03f978b9fc72233c18c383b6659..32996934bb47f4b7b2aa65dfd8739d8f67c740ef 100644 --- a/src/main/java/net/minecraft/world/item/SpawnEggItem.java +++ b/src/main/java/net/minecraft/world/item/SpawnEggItem.java @@ -68,6 +68,16 @@ public class SpawnEggItem extends Item { @@ -17158,7 +17163,7 @@ index 4f10f801dc126e9135432939b6663770c0e7a0bc..8f89a1c7e6214f549490ecf75afbdd72 world.sendBlockUpdated(blockposition, iblockdata, iblockdata, 3); world.gameEvent((Entity) context.getPlayer(), GameEvent.BLOCK_CHANGE, blockposition); diff --git a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java -index de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc..bcf63ccb6e679cb97d658780b2663aafa3568bcb 100644 +index f47f793c62a919fb65c081ddb82d597a978d3b20..3bbb44ae3da68afbd6012df68dee277a7dbf98c0 100644 --- a/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java +++ b/src/main/java/net/minecraft/world/item/ThrowablePotionItem.java @@ -18,7 +18,7 @@ public class ThrowablePotionItem extends PotionItem { @@ -17167,11 +17172,11 @@ index de5bdceb4c8578fb972a2fd5ee0dfdae509e46dc..bcf63ccb6e679cb97d658780b2663aaf thrownPotion.setItem(itemStack); - thrownPotion.shootFromRotation(user, user.getXRot(), user.getYRot(), -20.0F, 0.5F, 1.0F); + thrownPotion.shootFromRotation(user, user.getXRot(), user.getYRot(), -20.0F, 0.5F, (float) world.purpurConfig.throwablePotionProjectileOffset); // Purpur - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) user.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(itemStack), (org.bukkit.entity.Projectile) thrownPotion.getBukkitEntity()); if (event.callEvent() && world.addFreshEntity(thrownPotion)) { diff --git a/src/main/java/net/minecraft/world/item/TridentItem.java b/src/main/java/net/minecraft/world/item/TridentItem.java -index 5fab851b319847035fb1eefd0ab999de3ccc2cd8..ec5daeef857fdad6c7659130fb42f52cf6eb491f 100644 +index fa876ddf54780728e7f3ecfe02aa8a16b8ef6f8d..dcd6f241271beecf9601e34547225d7921958c20 100644 --- a/src/main/java/net/minecraft/world/item/TridentItem.java +++ b/src/main/java/net/minecraft/world/item/TridentItem.java @@ -77,11 +77,19 @@ public class TridentItem extends Item implements Vanishable { @@ -17193,7 +17198,7 @@ index 5fab851b319847035fb1eefd0ab999de3ccc2cd8..ec5daeef857fdad6c7659130fb42f52c + // Purpur end + // CraftBukkit start - // Paper start + // Paper start - PlayerLaunchProjectileEvent com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent event = new com.destroystokyo.paper.event.player.PlayerLaunchProjectileEvent((org.bukkit.entity.Player) entityhuman.getBukkitEntity(), org.bukkit.craftbukkit.inventory.CraftItemStack.asCraftMirror(stack), (org.bukkit.entity.Projectile) entitythrowntrident.getBukkitEntity()); @@ -131,6 +139,14 @@ public class TridentItem extends Item implements Vanishable { f2 *= f6 / f5; @@ -17350,25 +17355,25 @@ index 7f1ffc0ac402fcf0ec086986e959ecc9f78dde03..1351d52374d1c2367932e5ecd5f46379 public int getMinCost(int level) { return 15 + (level - 1) * 9; diff --git a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java -index 4f7457578ab3118d10e0d5dfc23d79c9b20c2f44..e03ce53b93d1b9366f2a7f14f341750a163ae0db 100644 +index 02feea12c998f37098b72becf6bfaf6b27d155de..9c89a85d934955c9388cfe1361f13e70e699d279 100644 --- a/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java +++ b/src/main/java/net/minecraft/world/item/trading/MerchantOffer.java @@ -149,7 +149,12 @@ public class MerchantOffer { } public void updateDemand() { -- this.demand = Math.max(0, this.demand + this.uses - (this.maxUses - this.uses)); // Paper +- this.demand = Math.max(0, this.demand + this.uses - (this.maxUses - this.uses)); // Paper - Fix MC-163962 + // Purpur start + this.updateDemand(0); + } + public void updateDemand(int minimumDemand) { -+ this.demand = Math.max(minimumDemand, this.demand + this.uses - (this.maxUses - this.uses)); ++ this.demand = Math.max(minimumDemand, this.demand + this.uses - (this.maxUses - this.uses)); // Paper - Fix MC-163962 + // Purpur end } public ItemStack assemble() { diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index 3aa4cb526f04a171ace0b95d18ecebc9a002470a..ac6bdf21d5ff8ba563f8c9187f6a8dcc823587aa 100644 +index 21b5765a12c5e4998870601e9665bd066a4ea471..28e8403f1f91effd7eb5a50855f823f8adc90b6b 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -57,6 +57,7 @@ public abstract class BaseSpawner { @@ -17393,7 +17398,7 @@ index ff0b7b9e4ae3aa0c170d05bc51fd7ff26e7531ee..53d4000593d4c79de8e8ab04bfd614b7 if (range < 0.0D || d < range * range) { return true; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 210b6d71207b99e66ba014b176b2c1445053b1d1..1223e678395e84859449a11e9e403454ddae0b15 100644 +index 1fa02130dcb65b3109fde0cb612b538b1c4cd4cb..2174456bbba763fd5581a55e9c5fab3cf4a145c1 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -97,7 +97,7 @@ public class Explosion { @@ -17453,10 +17458,10 @@ index 210b6d71207b99e66ba014b176b2c1445053b1d1..1223e678395e84859449a11e9e403454 if (this.fire) { diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2d86883fd 100644 +index 4f568184557d21b44569a9a16456962ee983101b..f638224f8ae018030fa00962cd3c75fc31ab2488 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -179,6 +179,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -178,6 +178,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { // Paper end - add paper world config public final com.destroystokyo.paper.antixray.ChunkPacketBlockController chunkPacketBlockController; // Paper - Anti-Xray @@ -17464,7 +17469,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 public final co.aikar.timings.WorldTimingsHandler timings; // Paper public static BlockPos lastPhysicsProblem; // Spigot private org.spigotmc.TickLimiter entityLimiter; -@@ -196,6 +197,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -195,6 +196,49 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } // Paper end - fix and optimise world upgrading @@ -17514,8 +17519,8 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 public CraftWorld getWorld() { return this.world; } -@@ -212,12 +256,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { - // Paper end +@@ -211,12 +255,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + // Paper end - Use getChunkIfLoadedImmediately public abstract ResourceKey getTypeKey(); - @@ -17531,7 +17536,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); -@@ -1269,18 +1315,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1268,18 +1314,18 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } protected void tickBlockEntities() { @@ -17555,7 +17560,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 // Spigot start // Iterator iterator = this.blockEntityTickers.iterator(); boolean flag = this.tickRateManager().runsNormally(); -@@ -1309,10 +1355,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1308,10 +1354,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } this.blockEntityTickers.removeAll(toRemove); @@ -17568,7 +17573,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 this.spigotConfig.currentPrimedTnt = 0; // Spigot } -@@ -1522,7 +1568,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1521,7 +1567,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @Override public List getEntities(@Nullable Entity except, AABB box, Predicate predicate) { @@ -17577,7 +17582,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 List list = Lists.newArrayList(); ((ServerLevel)this).getEntityLookup().getEntities(except, box, list, predicate); // Paper - optimise this call return list; -@@ -1541,7 +1587,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1540,7 +1586,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public void getEntities(EntityTypeTest filter, AABB box, Predicate predicate, List result, int limit) { @@ -17586,7 +17591,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 // Paper start - optimise this call //TODO use limit if (filter instanceof net.minecraft.world.entity.EntityType entityTypeTest) { -@@ -1800,7 +1846,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1799,7 +1845,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { @@ -17595,7 +17600,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 return (ProfilerFiller) this.profiler.get(); } -@@ -1912,4 +1958,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1911,4 +1957,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } } // Paper end - notify observers even if grow failed @@ -17611,7 +17616,7 @@ index 2902c29cd7f0b99b84cff3664fc4ec15a383e41b..b58402221840a9e72b30a31d884b0fb2 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 3fb96de68b93e8d33bd5ab9137e5d4facc94d788..22e12f0028187cf6c92aa0bf1f67764daae6f151 100644 +index 2c300e3769acf534ee3bed91663374eca0acf5df..e53972bcce1d939bf1f53b1cf2a0100e84706423 100644 --- a/src/main/java/net/minecraft/world/level/NaturalSpawner.java +++ b/src/main/java/net/minecraft/world/level/NaturalSpawner.java @@ -132,8 +132,8 @@ public final class NaturalSpawner { @@ -17635,7 +17640,7 @@ index 3fb96de68b93e8d33bd5ab9137e5d4facc94d788..22e12f0028187cf6c92aa0bf1f67764d + //world.getProfiler().pop(); // Purpur } - // Paper start + // Paper start - Add mobcaps commands @@ -258,7 +258,7 @@ public final class NaturalSpawner { blockposition_mutableblockposition.set(l, i, i1); double d0 = (double) l + 0.5D; @@ -17742,7 +17747,7 @@ index 2a65c7b859b1126dbac9819a01ca2652e20498a9..3192edee23b899107b17e354ddfb3159 return true; } else { diff --git a/src/main/java/net/minecraft/world/level/block/BedBlock.java b/src/main/java/net/minecraft/world/level/block/BedBlock.java -index 2c1d03237d5b24b93807c7e97d969ace13d6a917..59fb467c3338edc7caf5103ad7c6becfc6311aa6 100644 +index 8677dc684bd2e0bb3cf5f77b659ce02b79627e76..59438af88fd7e83cc9a878d43084f954f030607d 100644 --- a/src/main/java/net/minecraft/world/level/block/BedBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BedBlock.java @@ -106,7 +106,7 @@ public class BedBlock extends HorizontalDirectionalBlock implements EntityBlock @@ -17773,7 +17778,7 @@ index 2c1d03237d5b24b93807c7e97d969ace13d6a917..59fb467c3338edc7caf5103ad7c6becf @Override diff --git a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java -index 8e4a6a1188b2ce2825dc5750505212c72efb5c7b..c7f78ccb228d261984ac360f2ca6ae9478786184 100644 +index 0d92bd6f1e4f3470a62f573add3490220e60ef7a..2e89b22de852f43f2694be52043799f07f14800b 100644 --- a/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java +++ b/src/main/java/net/minecraft/world/level/block/BigDripleafBlock.java @@ -243,7 +243,7 @@ public class BigDripleafBlock extends HorizontalDirectionalBlock implements Bone @@ -17786,7 +17791,7 @@ index 8e4a6a1188b2ce2825dc5750505212c72efb5c7b..c7f78ccb228d261984ac360f2ca6ae94 if (i != -1) { world.scheduleTick(blockposition, (Block) this, i); diff --git a/src/main/java/net/minecraft/world/level/block/Block.java b/src/main/java/net/minecraft/world/level/block/Block.java -index 3f2fdf73e2e520838c7b59fe994e67ab2d1a4d6b..4543aa29d73bcff5d2e1e4b4f8bfaf53444d6322 100644 +index 73d6f881a7d4d8ff96040d34ac502e5b0937d577..d807bba62ff10aa3c491fc8e47dfa131ae19298e 100644 --- a/src/main/java/net/minecraft/world/level/block/Block.java +++ b/src/main/java/net/minecraft/world/level/block/Block.java @@ -63,6 +63,13 @@ import net.minecraft.world.phys.shapes.Shapes; @@ -17969,7 +17974,7 @@ index bed3d9c781c7d3ca260027b4737970889a54689c..db1941ed32d141327a8b11e54b3ff990 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/CactusBlock.java b/src/main/java/net/minecraft/world/level/block/CactusBlock.java -index a9629a102c4fa4e5720e63fcf4590e9231426c62..a476f9a1eaa99b557962947149b6ee6ea3288d6e 100644 +index 88ca50038b483fe5c207ef5c2bf3ea87540e147e..6e00deca805e13c1904c8cbd47e58938be89d2fe 100644 --- a/src/main/java/net/minecraft/world/level/block/CactusBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CactusBlock.java @@ -23,7 +23,7 @@ import net.minecraft.world.phys.shapes.CollisionContext; @@ -18026,7 +18031,7 @@ index a9629a102c4fa4e5720e63fcf4590e9231426c62..a476f9a1eaa99b557962947149b6ee6e + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/CampfireBlock.java b/src/main/java/net/minecraft/world/level/block/CampfireBlock.java -index 7302d07c6ff69608e75ac52fdb19f2ec1d105129..35e2f279d358201384ff74fd767df18f6fda432b 100644 +index 20dbfeb68ac33ee8ba8214edcca0d7f7ce1be58e..7496da8b914fbf540bfb1c5800ddda1d6ec66f4e 100644 --- a/src/main/java/net/minecraft/world/level/block/CampfireBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CampfireBlock.java @@ -138,7 +138,7 @@ public class CampfireBlock extends BaseEntityBlock implements SimpleWaterloggedB @@ -18078,7 +18083,7 @@ index cdd7ab3fe589d089c0c03508721f46f6c136fc8a..6f148028c0fe503e9f6b327596d0954c entity.moveTo((double) pos.getX() + 0.5D, (double) pos.getY() + 0.05D, (double) pos.getZ() + 0.5D, 0.0F, 0.0F); // CraftBukkit start diff --git a/src/main/java/net/minecraft/world/level/block/CauldronBlock.java b/src/main/java/net/minecraft/world/level/block/CauldronBlock.java -index a821a981adbebdcf22997731b9bbea3d033cd2b1..028419d45c098baf5eab5d6e7a73189cb3e86622 100644 +index 47b6b83842201620bd6620f5acf11bb14334e35d..b4d2499ae39fd3f14b2600a9663ea8a823bdfbe4 100644 --- a/src/main/java/net/minecraft/world/level/block/CauldronBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CauldronBlock.java @@ -36,7 +36,7 @@ public class CauldronBlock extends AbstractCauldronBlock { @@ -18091,10 +18096,10 @@ index a821a981adbebdcf22997731b9bbea3d033cd2b1..028419d45c098baf5eab5d6e7a73189c @Override diff --git a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java -index 54916c80720f219bf747250a2ff9a875f180c7a2..cae6d33728a39de9db908e1e24fdc3ad987d0542 100644 +index 1ec8c2d24ec8468d20f322d67143b9454ff266eb..558f243ee0923af9a8cb9e1bb6f4a0e5c8341fe4 100644 --- a/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CaveVinesBlock.java -@@ -94,4 +94,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements Bonemealabl +@@ -95,4 +95,11 @@ public class CaveVinesBlock extends GrowingPlantHeadBlock implements Bonemealabl public void performBonemeal(ServerLevel world, RandomSource random, BlockPos pos, BlockState state) { world.setBlock(pos, state.setValue(BERRIES, Boolean.valueOf(true)), 2); } @@ -18216,13 +18221,13 @@ index 8fd8285e07de4a0457da507501e49a807542f3b1..e580c5a141bebdc45893b5abde01e633 int i = aenumdirection.length; diff --git a/src/main/java/net/minecraft/world/level/block/CropBlock.java b/src/main/java/net/minecraft/world/level/block/CropBlock.java -index 9550ce8588c6aa3ba4cbbbb86912eae2b452eb01..2dbfc522990964b2ae5a9e5f84426e0749f92563 100644 +index 5b96d1ae4bd8546311e986bc312b1f85883a67f4..2077cb5dcf2352c9d5b502744aeb9a66df256939 100644 --- a/src/main/java/net/minecraft/world/level/block/CropBlock.java +++ b/src/main/java/net/minecraft/world/level/block/CropBlock.java @@ -179,7 +179,7 @@ public class CropBlock extends BushBlock implements BonemealableBlock { @Override public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent - if (entity instanceof Ravager && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING))) { // CraftBukkit + if (entity instanceof Ravager && world.purpurConfig.ravagerGriefableBlocks.contains(world.getBlockState(pos).getBlock()) && CraftEventFactory.callEntityChangeBlockEvent(entity, pos, Blocks.AIR.defaultBlockState(), (!world.purpurConfig.ravagerBypassMobGriefing && !world.getGameRules().getBoolean(GameRules.RULE_MOBGRIEFING)))) { // CraftBukkit // Purpur world.destroyBlock(pos, true, entity); @@ -18322,12 +18327,12 @@ index 790cf30c2bfd4e2530ff563dfcf05e25554248b3..ba69e9b37ce9f2d8b439d471e6de770d + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java -index c82ebcac07033d887af499f81520982fbe5ed4f1..0b45bc1db5f57a4381c470a563aa81ac0d3a1be7 100644 +index a0c1db8cfebaa0344012cc0af18d6231cdcdcbb8..f277a4a21b15627c45061e51c8f6c0812a176a10 100644 --- a/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/EndPortalBlock.java @@ -54,6 +54,14 @@ public class EndPortalBlock extends BaseEntityBlock { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (world instanceof ServerLevel && entity.canChangeDimensions() && Shapes.joinIsNotEmpty(Shapes.create(entity.getBoundingBox().move((double) (-pos.getX()), (double) (-pos.getY()), (double) (-pos.getZ()))), state.getShape(world, pos), BooleanOp.AND)) { + // Purpur start + if (entity.isPassenger() || entity.isVehicle()) { @@ -18403,7 +18408,7 @@ index ddca14f1224327a738415fb8b37398d8df0aa9c8..fe3236295790b9e250486835176cae81 }, CONTAINER_TITLE)); player.awardStat(Stats.OPEN_ENDERCHEST); diff --git a/src/main/java/net/minecraft/world/level/block/FarmBlock.java b/src/main/java/net/minecraft/world/level/block/FarmBlock.java -index 59bbdead2ebd8965d222540c7243dde051bbcc4b..c4eca9db159d6a581d863558ebc3008d51d25cfb 100644 +index 47eb8bf604a63259c0200cada1403dc005a6cbac..221d06a5707398ed7523229e80b2a3f965b98ae2 100644 --- a/src/main/java/net/minecraft/world/level/block/FarmBlock.java +++ b/src/main/java/net/minecraft/world/level/block/FarmBlock.java @@ -110,7 +110,7 @@ public class FarmBlock extends Block { @@ -18444,11 +18449,11 @@ index 59bbdead2ebd8965d222540c7243dde051bbcc4b..c4eca9db159d6a581d863558ebc3008d - return false; + return ((ServerLevel) world).purpurConfig.farmlandGetsMoistFromBelow && world.getFluidState(pos.relative(Direction.DOWN)).is(FluidTags.WATER); // Purpur; + // Paper end - Perf: remove abstract block iteration } - @Override diff --git a/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java b/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java -index 4ebdc4918131a15a1c91b45e8ceb1392bca20a81..2537f99baca6213618865d60f84e96b8a4849307 100644 +index 30300ef3ec839dfa944c992ab50db4d3859bb02e..0d64b19dbbca9d563d90cabf0e2d32f76bfc0c62 100644 --- a/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java +++ b/src/main/java/net/minecraft/world/level/block/GrowingPlantHeadBlock.java @@ -34,12 +34,12 @@ public abstract class GrowingPlantHeadBlock extends GrowingPlantBlock implements @@ -18525,12 +18530,12 @@ index ef364aa171a48482a45bc18cfe730ec20c3f7be6..74971d90506aa253d5ee821b5390fb25 } } diff --git a/src/main/java/net/minecraft/world/level/block/IceBlock.java b/src/main/java/net/minecraft/world/level/block/IceBlock.java -index 19f6e36daed6af02dca3bb88bb81000268264438..24d771e4196a4ed7d93ddefdc34879b82b129469 100644 +index 9c8c1df5187daefb1c8098b4d4a0976c71a7bbfd..cf4c1097d54c84b309ab02e9892d1b9e39d57490 100644 --- a/src/main/java/net/minecraft/world/level/block/IceBlock.java +++ b/src/main/java/net/minecraft/world/level/block/IceBlock.java @@ -41,7 +41,7 @@ public class IceBlock extends HalfTransparentBlock { public void afterDestroy(Level world, BlockPos pos, ItemStack tool) { - // Paper end + // Paper end - Improve Block#breakNaturally API if (EnchantmentHelper.getItemEnchantmentLevel(Enchantments.SILK_TOUCH, tool) == 0) { - if (world.dimensionType().ultraWarm()) { + if (world.isNether() || (world.isTheEnd() && !org.purpurmc.purpur.PurpurConfig.allowWaterPlacementInTheEnd)) { // Purpur @@ -18563,7 +18568,7 @@ index 4dbacee1930bc3955ce431e1d32353588b47afc9..a53c6ab63fd10ac94292836120152f54 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java -index 2bd097203f1e92d3fc343f91dc37220e09dd5066..016fe816819ab9022fd03c50427b62abbcd18b3c 100644 +index 9b3dcf1a4d4cece92a629506d341f6bfe79d13d0..0ed39daf88a98f7fa887fb45d4f7c0348a607551 100644 --- a/src/main/java/net/minecraft/world/level/block/LiquidBlock.java +++ b/src/main/java/net/minecraft/world/level/block/LiquidBlock.java @@ -139,7 +139,7 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -18572,7 +18577,7 @@ index 2bd097203f1e92d3fc343f91dc37220e09dd5066..016fe816819ab9022fd03c50427b62ab public void onPlace(BlockState state, Level world, BlockPos pos, BlockState oldState, boolean notify) { - if (this.shouldSpreadLiquid(world, pos, state)) { + if (world.purpurConfig.tickFluids && this.shouldSpreadLiquid(world, pos, state)) { // Purpur - world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper + world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper - Configurable speed for water flowing over lava } @@ -167,7 +167,7 @@ public class LiquidBlock extends Block implements BucketPickup { @@ -18590,7 +18595,7 @@ index 2bd097203f1e92d3fc343f91dc37220e09dd5066..016fe816819ab9022fd03c50427b62ab public void neighborChanged(BlockState state, Level world, BlockPos pos, Block sourceBlock, BlockPos sourcePos, boolean notify) { - if (this.shouldSpreadLiquid(world, pos, state)) { + if (world.purpurConfig.tickFluids && this.shouldSpreadLiquid(world, pos, state)) { // Purpur - world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper + world.scheduleTick(pos, state.getFluidState().getType(), this.getFlowSpeed(world, pos)); // Paper - Configurable speed for water flowing over lava } diff --git a/src/main/java/net/minecraft/world/level/block/MagmaBlock.java b/src/main/java/net/minecraft/world/level/block/MagmaBlock.java @@ -18607,7 +18612,7 @@ index 10f5ffacc72a5e0116e2599ca83ee57a5b1ce0eb..31e6468f639de3ed0b25c3bc4ee09333 entity.hurt(world.damageSources().hotFloor(), 1.0F); org.bukkit.craftbukkit.event.CraftEventFactory.blockDamage = null; // CraftBukkit diff --git a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java -index ee998d06804e344ea9d5b84ef0074b84aaba04c2..673dd5cc5c83eb606aa5684b8ae14b82e0346a35 100644 +index 1b5cc5d6aa0b4313da980ce175c54145852d0db0..f7b724696151b73343feac1ce406fca9377f2508 100644 --- a/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NetherPortalBlock.java @@ -60,7 +60,7 @@ public class NetherPortalBlock extends Block { @@ -18621,7 +18626,7 @@ index ee998d06804e344ea9d5b84ef0074b84aaba04c2..673dd5cc5c83eb606aa5684b8ae14b82 } @@ -92,6 +92,14 @@ public class NetherPortalBlock extends Block { public void entityInside(BlockState state, Level world, BlockPos pos, Entity entity) { - if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper + if (!new io.papermc.paper.event.entity.EntityInsideBlockEvent(entity.getBukkitEntity(), org.bukkit.craftbukkit.block.CraftBlock.at(world, pos)).callEvent()) { return; } // Paper - Add EntityInsideBlockEvent if (entity.canChangeDimensions()) { + // Purpur start + if (entity.isPassenger() || entity.isVehicle()) { @@ -18681,7 +18686,7 @@ index 0fc333f240d6918e841a9221be42973839408802..13eb4dffd60ea7902d620f484df5e3f2 + // Purpur end } diff --git a/src/main/java/net/minecraft/world/level/block/NoteBlock.java b/src/main/java/net/minecraft/world/level/block/NoteBlock.java -index ff16075fbfe664c73a46bc4b002450867974114e..604053c7b5b2b7f2f1666baa3e0ce5acf3b37e46 100644 +index a541dc3a6e373b30fff0abf5305e77854c190f10..ac88cb949808752a340637ffcb9d7256b7d09478 100644 --- a/src/main/java/net/minecraft/world/level/block/NoteBlock.java +++ b/src/main/java/net/minecraft/world/level/block/NoteBlock.java @@ -94,7 +94,7 @@ public class NoteBlock extends Block { @@ -18706,7 +18711,7 @@ index 713352b68f82d4c4a19a712d5207de0f99456713..d056e80c98973e9ba64adc5a8554acc8 } diff --git a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java -index bd22d3fdecbc992b11073a74d854b7d1b43c3f6a..0a3b97f18abcc9b385c9efd5a30f3e2ce5e4bd59 100644 +index e310abaca79615caaa75d92183a57242734266a3..05718dcb69ea3632914b4183bfc38964c4813e55 100644 --- a/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PointedDripstoneBlock.java @@ -195,7 +195,7 @@ public class PointedDripstoneBlock extends Block implements Fallable, SimpleWate @@ -18735,7 +18740,7 @@ index bd22d3fdecbc992b11073a74d854b7d1b43c3f6a..0a3b97f18abcc9b385c9efd5a30f3e2c if (dripChance < f1) { diff --git a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java -index f579911b06b66e94e6311d970e93cca33fa089c6..2c63579226409a1823d2e8990e7ffc4250b83afb 100644 +index 0dfcac8cfcbb09fe04486bff60119f7985714454..2dbf71e421156093c8bc387941eae991f5e6c957 100644 --- a/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java +++ b/src/main/java/net/minecraft/world/level/block/PowderSnowBlock.java @@ -80,7 +80,7 @@ public class PowderSnowBlock extends Block implements BucketPickup { @@ -18761,7 +18766,7 @@ index b84c48902ef24fdae17578a304e6c93dc20c5dce..e03125281767845564c48c98c3e6b6bb } else { int j = pos.getX(); diff --git a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java -index ec7b5e089c2911c7833e3fd7db4018ca2e0d4e85..1734e2e9ac1e3e609cf58cfd8532433fc9559284 100644 +index 088262f306755a9cb785c7a0cf0a9c66ed0965a8..a3621a126a286a2789d069382940e8aa24c4caf2 100644 --- a/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java +++ b/src/main/java/net/minecraft/world/level/block/RespawnAnchorBlock.java @@ -148,7 +148,7 @@ public class RespawnAnchorBlock extends Block { @@ -18907,7 +18912,7 @@ index e8b1c44da90f60cde20cda65aba2aa1e30f89d25..1ac38424a44aa2225b9bd3fa0fbbe61b int i = 15 + worldserver.random.nextInt(15) + worldserver.random.nextInt(15); diff --git a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java -index c4667bea0708d12e228ec2a4c84fcee7e48ca08c..9e4146ecd36ff2698ee951660ed88290c80fd8f7 100644 +index 8f3cca228f8ec1ea9379fa43af4baa7b18012dd2..7e87b4299979c9e46abb582da7a8e54a36e8dfc5 100644 --- a/src/main/java/net/minecraft/world/level/block/SpongeBlock.java +++ b/src/main/java/net/minecraft/world/level/block/SpongeBlock.java @@ -58,7 +58,7 @@ public class SpongeBlock extends Block { @@ -19099,7 +19104,7 @@ index fb180f0bcd20e51d41cfc924029c0b23d3d26258..688d161cd6725f494366c23668ebd6ff if (!world.addFreshEntity(entitywither, SpawnReason.BUILD_WITHER)) { return; diff --git a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java -index 5eaab97a0c3b93a44a45e2ed11033fe01c0c95c2..af66c7eec6291b0bc9575f59c8210cd7f697232a 100644 +index d04fc84eef11adb5ea64077f48794b6ed7fb3ada..1d179e9485df78657ce67ab7ca4c4b1bcaf6c4ea 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/AbstractFurnaceBlockEntity.java @@ -44,6 +44,7 @@ import net.minecraft.world.level.Level; @@ -19111,7 +19116,7 @@ index 5eaab97a0c3b93a44a45e2ed11033fe01c0c95c2..af66c7eec6291b0bc9575f59c8210cd7 // CraftBukkit start import org.bukkit.craftbukkit.block.CraftBlock; @@ -208,6 +209,22 @@ public abstract class AbstractFurnaceBlockEntity extends BaseContainerBlockEntit - // Paper end + // Paper end - cache burn durations } + // Purpur start @@ -19222,7 +19227,7 @@ index 416aa989ebb18a8741cc9d605a1180ab830f6643..e38a0adf5463c48311ad08b8d2e5b5c2 @Override diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java -index 5a1da6316ff56ea94a1ba1b68ce51bdffcee9736..14482d8e275dcc61be506da6085186b49e03d222 100644 +index 3ccc0a8d2091d45100198f2853c17edf62c27728..4f4568c4ed1c3d6551467a18200f8eafb0a54351 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeaconBlockEntity.java @@ -88,6 +88,16 @@ public class BeaconBlockEntity extends BlockEntity implements MenuProvider, Name @@ -19266,11 +19271,11 @@ index 5a1da6316ff56ea94a1ba1b68ce51bdffcee9736..14482d8e275dcc61be506da6085186b4 - if (blockEntity.levels > 0 && !blockEntity.beamSections.isEmpty()) { + if (blockEntity.levels > 0 && (!blockEntity.beamSections.isEmpty() || (world.purpurConfig.beaconAllowEffectsWithTintedGlass && isTintedGlass))) { - BeaconBlockEntity.applyEffects(world, pos, blockEntity.levels, blockEntity.primaryPower, blockEntity.secondaryPower, blockEntity); // Paper + BeaconBlockEntity.applyEffects(world, pos, blockEntity.levels, blockEntity.primaryPower, blockEntity.secondaryPower, blockEntity); // Paper - Custom beacon ranges BeaconBlockEntity.playSound(world, pos, SoundEvents.BEACON_AMBIENT); } diff --git a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java -index dfd364ac4b7551a13c4c6c100b5e62c0dfb10595..f5bcfece7bba52234964da646370bc271043a631 100644 +index 56b328c64bea0ffd51930d8ba15fb87a36e6d8a1..f9b4ac5acaf809e1eb9d10d87dd0e17c63d1e3c5 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BeehiveBlockEntity.java @@ -43,7 +43,7 @@ public class BeehiveBlockEntity extends BlockEntity { @@ -19337,10 +19342,10 @@ index dfd364ac4b7551a13c4c6c100b5e62c0dfb10595..f5bcfece7bba52234964da646370bc27 - final CompoundTag entityData; + public final CompoundTag entityData; // Purpur - make public int ticksInHive; - int exitTickCounter; // Paper - separate counter for checking if bee should exit to reduce exit attempts + int exitTickCounter; // Paper - Fix bees aging inside hives; separate counter for checking if bee should exit to reduce exit attempts final int minOccupationTicks; diff --git a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java -index a6f47fa9f6065ed669414996b447e2daf34b3495..0af2444ff86bdd0350d2c50543c917635d03995c 100644 +index 4ce7a7947fa727e64556148f923508ce76c128c4..4c94d219ff77ee9afaf6eb2e00b0715d550d213f 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/BlockEntity.java @@ -6,6 +6,8 @@ import net.minecraft.CrashReportCategory; @@ -19406,10 +19411,10 @@ index a6f47fa9f6065ed669414996b447e2daf34b3495..0af2444ff86bdd0350d2c50543c91763 return new CompoundTag(); } -@@ -263,4 +296,24 @@ public abstract class BlockEntity { +@@ -262,4 +295,24 @@ public abstract class BlockEntity { + return tag; } - // Paper end - + // Paper end - Sanitize sent data + // Purpur start + private String persistentDisplayName = null; + private ListTag persistentLore = null; @@ -19547,7 +19552,7 @@ index 65e1381bb2d10bd212463feb602c60f8fdb9ade1..b7370e64fd0d50e8725d7d5afc30af2e + // Purpur } diff --git a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java -index 9bc1e7f03106cc35ac79bc9d7cced2bc5871b36c..074e7ae55c9e291c24cd9b5fd6d6740bf964376a 100644 +index 979a8f472f866130a3abb10f535df757eaa50c20..dbe5d7394ef9db7195cb3d8f8f77ce47e9fbf323 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/SignBlockEntity.java @@ -200,16 +200,31 @@ public class SignBlockEntity extends BlockEntity implements CommandSource { // C @@ -19614,7 +19619,7 @@ index 9bc1e7f03106cc35ac79bc9d7cced2bc5871b36c..074e7ae55c9e291c24cd9b5fd6d6740b public CompoundTag getUpdateTag() { return this.saveWithoutMetadata(); diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index b7a0d8ffd1823a1d1edee6baaa62c15f69e6af3d..21cbe88178fe2a63900209b9907646a983a209f9 100644 +index d0e8842a2c4f7dbd0d6ac3694b2a6a5395d8a542..c3d25a26883f7cbe7106c2f3415af0b18f534ee2 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -177,6 +177,15 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { @@ -19665,7 +19670,7 @@ index 744d91546d1a810f60a43c15ed74b4158f341a4a..354538daefa603f6df5a139b6bff87db } 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 7a29d43d06de9138c8db5d3f4af29d6b5dc60efc..2d4f11b173040a6fc9055890064ccd31e67d0f3a 100644 +index 97a9fbbe6d8435e88e5fe716770e4034ab0db7a7..5607f3ed88270bee4c8f0901b561ff03ca96d500 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 @@ -85,7 +85,7 @@ public abstract class BlockBehaviour implements FeatureElement { @@ -19687,7 +19692,7 @@ index 7a29d43d06de9138c8db5d3f4af29d6b5dc60efc..2d4f11b173040a6fc9055890064ccd31 protected ResourceLocation drops; diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index 1afac69b5bc7055d2adb07aea4755b87b246275c..c37aa33134b8602caae5ecff00439ad5e0005d18 100644 +index 177673cc19cd70f60bb489cb2e74b39fbb8f8d24..f782fee9243129d0990777dcd2d74735ceb5e64e 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -122,7 +122,7 @@ public class LevelChunk extends ChunkAccess { @@ -19765,19 +19770,19 @@ index 1afac69b5bc7055d2adb07aea4755b87b246275c..c37aa33134b8602caae5ecff00439ad5 } } diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java -index 060e064625969610539dbf969ce773b877a7c579..32cd9df202704cdfb8fa06aaf0e738d483054feb 100644 +index 23dc37ff1f92951817864963bf93220d5aae91bb..af563ffb67c43b50555951fe1b5e4320d429a7f1 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/EntityStorage.java @@ -112,6 +112,7 @@ public class EntityStorage implements EntityPersistentStorage { ListTag listTag = new ListTag(); - final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper + final java.util.Map, Integer> savedEntityCounts = new java.util.HashMap<>(); // Paper - Entity load/save limit per chunk entities.forEach((entity) -> { // diff here: use entities parameter + if (!entity.canSaveToDisk()) return; // Purpur - // Paper start + // Paper start - Entity load/save limit per chunk final EntityType entityType = entity.getType(); final int saveLimit = level.paperConfig().chunks.entityPerChunkSaveLimit.getOrDefault(entityType, -1); diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index 7d7d37334321c844958ce09e77547dd61dcba6c8..e731fd6f196116f4995dc6de8ad06b1985abe22b 100644 +index ed80960777b18faca2d6a99783e53daf5fa19e09..0847aef56d8608cb1403485f231f30b2527f35ab 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -49,7 +49,7 @@ public class PhantomSpawner implements CustomSpawner { @@ -19790,7 +19795,7 @@ index 7d7d37334321c844958ce09e77547dd61dcba6c8..e731fd6f196116f4995dc6de8ad06b19 } else { int i = 0; @@ -61,10 +61,10 @@ public class PhantomSpawner implements CustomSpawner { - if (!entityplayer.isSpectator() && (!world.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !entityplayer.isCreative())) { // Paper + if (!entityplayer.isSpectator() && (!world.paperConfig().entities.behavior.phantomsDoNotSpawnOnCreativePlayers || !entityplayer.isCreative())) { // Paper - Add phantom creative and insomniac controls BlockPos blockposition = entityplayer.blockPosition(); - if (!world.dimensionType().hasSkyLight() || blockposition.getY() >= world.getSeaLevel() && world.canSeeSky(blockposition)) { @@ -19810,12 +19815,12 @@ index 7d7d37334321c844958ce09e77547dd61dcba6c8..e731fd6f196116f4995dc6de8ad06b19 + int k = world.purpurConfig.phantomSpawnMinPerAttempt + world.random.nextInt((world.purpurConfig.phantomSpawnMaxPerAttempt < 0 ? difficultydamagescaler.getDifficulty().getId() : world.purpurConfig.phantomSpawnMaxPerAttempt - world.purpurConfig.phantomSpawnMinPerAttempt) + 1); // Purpur for (int l = 0; l < k; ++l) { - // Paper start + // Paper start - PhantomPreSpawnEvent diff --git a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -index c55f51e6db55f9fa66f53eef0e7a56af5f81d742..74688f4672936cd2ac629b9f2f404163df6730e9 100644 +index 6411aa4ff6bd4cabb25c426fa8f4a7eedb969c03..0fe597d32a0e15ea67b32925c1a62e8c143ff81d 100644 --- a/src/main/java/net/minecraft/world/level/material/FlowingFluid.java +++ b/src/main/java/net/minecraft/world/level/material/FlowingFluid.java -@@ -228,7 +228,7 @@ public abstract class FlowingFluid extends Fluid { +@@ -227,7 +227,7 @@ public abstract class FlowingFluid extends Fluid { } } @@ -19824,7 +19829,7 @@ index c55f51e6db55f9fa66f53eef0e7a56af5f81d742..74688f4672936cd2ac629b9f2f404163 BlockState iblockdata2 = world.getBlockState(pos.below()); FluidState fluid1 = iblockdata2.getFluidState(); -@@ -337,6 +337,12 @@ public abstract class FlowingFluid extends Fluid { +@@ -336,6 +336,12 @@ public abstract class FlowingFluid extends Fluid { protected abstract boolean canConvertToSource(Level world); @@ -19865,7 +19870,7 @@ index 3bb4a9a1a6249e8ba2de237f801210e7f4fd5825..2d492d849ff73a738dfbcb16507feb89 protected boolean canConvertToSource(Level world) { return world.getGameRules().getBoolean(GameRules.RULE_LAVA_SOURCE_CONVERSION); diff --git a/src/main/java/net/minecraft/world/level/material/WaterFluid.java b/src/main/java/net/minecraft/world/level/material/WaterFluid.java -index d8c26b02188a6d443c6ec73bd5fa2fa8197a5e59..a358c93be160df7daddc0b015f2606f8d545f243 100644 +index cde93efaecd42b9081405638af3ba91cb5e184c9..c664fd77dd865037293a3e86699fd1fa6b703882 100644 --- a/src/main/java/net/minecraft/world/level/material/WaterFluid.java +++ b/src/main/java/net/minecraft/world/level/material/WaterFluid.java @@ -64,6 +64,13 @@ public abstract class WaterFluid extends FlowingFluid { @@ -19879,16 +19884,16 @@ index d8c26b02188a6d443c6ec73bd5fa2fa8197a5e59..a358c93be160df7daddc0b015f2606f8 + } + // Purpur end + - // Paper start + // Paper start - Add BlockBreakBlockEvent @Override protected void beforeDestroyingBlock(LevelAccessor world, BlockPos pos, BlockState state, BlockPos source) { diff --git a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java -index d23481453717f715124156b5d83f6448f720d049..a8af51a25b0f99c3a64d9150fdfcd6b818aa7581 100644 +index eb18494bd7257fa5eb00dea16cf4d5667b796f2b..f039d6109ee6f55542adc8f30476ba9a9e4974bf 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java @@ -53,8 +53,8 @@ public class PathFinder { @Nullable - // Paper start - optimize collection + // Paper start - Perf: remove streams and optimize collection private Path findPath(ProfilerFiller profiler, Node startNode, List> positions, float followRange, int distance, float rangeMultiplier) { - profiler.push("find_path"); - profiler.markForCharting(MetricCategory.PATH_FINDING); @@ -19898,7 +19903,7 @@ index d23481453717f715124156b5d83f6448f720d049..a8af51a25b0f99c3a64d9150fdfcd6b8 startNode.g = 0.0F; startNode.h = this.getBestH(startNode, positions); // Paper - optimize collection diff --git a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java -index 2aca9b193db5dadc4fb90b8d7548277b698924aa..29ec2f9a35dd73e8a6adf2e4edcfe543270520d8 100644 +index 1e96bac6f22b1fddd22fc239126ff2f823c2abd0..387da8ab98f8886ba670238fe2866972894150e9 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/WalkNodeEvaluator.java @@ -241,7 +241,7 @@ public class WalkNodeEvaluator extends NodeEvaluator { @@ -19929,7 +19934,7 @@ index 2aca9b193db5dadc4fb90b8d7548277b698924aa..29ec2f9a35dd73e8a6adf2e4edcfe543 return BlockPathTypes.STICKY_HONEY; } else if (blockState.is(Blocks.COCOA)) { diff --git a/src/main/java/net/minecraft/world/level/portal/PortalShape.java b/src/main/java/net/minecraft/world/level/portal/PortalShape.java -index 590cd053a1b1c2a489772a2879998725fe0d783c..ba3f79cc1f7e672f0a9d32d262122ec6eba22b97 100644 +index 39321dd4e60be218cb839a89f6cdf32702b72939..913f598e9c75d39adb8f557ff5c184b7450e06ad 100644 --- a/src/main/java/net/minecraft/world/level/portal/PortalShape.java +++ b/src/main/java/net/minecraft/world/level/portal/PortalShape.java @@ -34,7 +34,7 @@ public class PortalShape { @@ -19942,7 +19947,7 @@ index 590cd053a1b1c2a489772a2879998725fe0d783c..ba3f79cc1f7e672f0a9d32d262122ec6 private static final float SAFE_TRAVEL_MAX_ENTITY_XY = 4.0F; private static final double SAFE_TRAVEL_MAX_VERTICAL_DELTA = 1.0D; diff --git a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java -index e4c4948e076cd64686dfd16ae0568fafc1437140..804c342783baccdc12e8ca49a362770e31596f6a 100644 +index 45269115e63cfc3bd7dc740a5694e2cc7c35bcb1..e1498d496aa01c433b6fa198608e33916eadecf3 100644 --- a/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java +++ b/src/main/java/net/minecraft/world/level/saveddata/maps/MapItemSavedData.java @@ -67,6 +67,7 @@ public class MapItemSavedData extends SavedData { @@ -20238,7 +20243,7 @@ index 2bbc39c257965ad91ee360cdfcd3538a0f041c7e..91fbc0cfc84045e32a4ee16fba8164de + // Purpur end - OfflinePlayer API } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cfc41926305441cb36ed67a8cb7e327cd80ff301..fd754fc9ff313421d221eea8d21fbde98be24914 100644 +index 8962ced18e0dac6603df54ba7d99588fae24073c..679f7874931bf068da800a8e8aa68285971b6996 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -264,7 +264,7 @@ import javax.annotation.Nullable; // Paper @@ -20396,7 +20401,7 @@ index cfc41926305441cb36ed67a8cb7e327cd80ff301..fd754fc9ff313421d221eea8d21fbde9 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java -index f785e7b366175a32c834e1ebb56166a6fdcca3da..ae01fa8872c138afbd2d3f2b036392c3f47845c1 100644 +index 7f74f80d11784987a438e6aabfac6fcfb5d9a968..45897c60bde16500a72efd9c926d815689af4b1c 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftWorld.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftWorld.java @@ -2415,6 +2415,48 @@ public class CraftWorld extends CraftRegionAccessor implements World { @@ -20449,7 +20454,7 @@ index f785e7b366175a32c834e1ebb56166a6fdcca3da..ae01fa8872c138afbd2d3f2b036392c3 public PersistentDataContainer getPersistentDataContainer() { return this.persistentDataContainer; diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index ef8bbef6e4143b9432ee2ae2fb79e2aa2a9b84df..c7f8f85ad6cb76413275ebe64385a3ec7051257e 100644 +index 62d9737a8d36d4863ffd7853ba290ef83c759687..3511c7361e2287bb47a74aa3426234b0054c405d 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -174,6 +174,20 @@ public class Main { @@ -20595,7 +20600,7 @@ index 4e56018b64d11f76c8da43fd8f85c6de72204e36..9607675e6c5bff2183c4420d11fc63ee @Override diff --git a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java -index 4daf2c54c7127e8e091ffc49362f288594956143..f782e8dd9d3456f345859dffd69e5830d576ccd1 100644 +index 92465b2a9f1483be76004c9f80a1fe15913b3b8b..593e7fc97559e18df13bece888616d03bd534971 100644 --- a/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java +++ b/src/main/java/org/bukkit/craftbukkit/enchantments/CraftEnchantment.java @@ -80,6 +80,8 @@ public class CraftEnchantment extends Enchantment { @@ -20627,7 +20632,7 @@ index d657fd2c507a5b215aeab0a5f3e9c2ee892a27c8..985e9ec21c60a1f47973bd5fc53b96a6 // Paper start @Override diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java -index 1c3e1153d08b59d29b3613fc3b50a4780aa7a3ac..315c9be5841d55910500fcc225b5e42f271cf2cb 100644 +index f16ac1d640fc97f348c244d4ea86e3278b30ae19..6a24595db93c834955df3a5566705b1c5066acc6 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftEntity.java @@ -83,6 +83,21 @@ public abstract class CraftEntity implements org.bukkit.entity.Entity { @@ -20692,7 +20697,7 @@ index 1c3e1153d08b59d29b3613fc3b50a4780aa7a3ac..315c9be5841d55910500fcc225b5e42f + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java -index 827fe201a7b74f485abb46b127a28bf0cb479c3b..00f64a0ce2d32bf8b9a627495c043297e013633c 100644 +index acbb64010cd59668aa1bcb52ff1220789cadb1d3..6c2e91b986099027d83aba85f14ae69cbc358348 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftHumanEntity.java @@ -266,6 +266,7 @@ public class CraftHumanEntity extends CraftLivingEntity implements HumanEntity { @@ -20726,7 +20731,7 @@ index 63cae1a2e95d8da17c45c4404a8dd0ca6a413c39..966587c2788b5c93be83259ddc962a89 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java -index 81498941748d646ebe6495f4a7ce6953532144c6..ba33fb0b049a670851004022da18fe744dca27eb 100644 +index 832def3c518be8d6d81e71f6022566e6179e2d17..480adbfdd084a6291ee0108e5350ea418e08ff6f 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftItem.java @@ -151,4 +151,51 @@ public class CraftItem extends CraftEntity implements Item { @@ -20782,7 +20787,7 @@ index 81498941748d646ebe6495f4a7ce6953532144c6..ba33fb0b049a670851004022da18fe74 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java -index 1f1ef68a9a449a4a90c284f34a397ab4b6d905f6..a2d1c22e778aa4c3c44c3a1a604c1656cc86f0da 100644 +index 4afc1c9d2a7638e84a55fe30932dc36db465c31a..cab9c8ccdd7c5b76962fae2929d1484eb1cb3d0b 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftLivingEntity.java @@ -452,7 +452,7 @@ public class CraftLivingEntity extends CraftEntity implements LivingEntity { @@ -20858,7 +20863,7 @@ index 0ad16ee7b33582d214dab41eeee378d52c8e38ed..16bd1294c219f15ada653ef810bc2d74 + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 99830dfacc0d4ff78f43f970b2d1486710c83ef3..f21e29d173b89d072c8422b80ae0132f67e74f6c 100644 +index b8d3398b349d9294de6b8a8594b054d3c84dbe0a..27f4ef85818f1735371a7aedd8ce311d65a3b406 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -524,10 +524,15 @@ public class CraftPlayer extends CraftHumanEntity implements Player { @@ -21071,7 +21076,7 @@ index 38b6d2c377800134de592a780b737b45c8096a11..449acd9dc983be1cd51208bc8f8d843d + // 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 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a689ff0f3f 100644 +index b9e90f589749dfc9324c4aa2062c505fbd4447bc..118483d7342117c4bc172db89df9fab391f30378 100644 --- a/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/event/CraftEventFactory.java @@ -591,6 +591,15 @@ public class CraftEventFactory { @@ -21090,7 +21095,7 @@ index 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a6 return event; } -@@ -1070,6 +1079,7 @@ public class CraftEventFactory { +@@ -1068,6 +1077,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 @@ -21098,7 +21103,7 @@ index 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a6 } event.setCancelled(cancelled); -@@ -1184,6 +1194,7 @@ public class CraftEventFactory { +@@ -1182,6 +1192,7 @@ public class CraftEventFactory { } else { entity.lastDamageCancelled = true; // SPIGOT-5339, SPIGOT-6252, SPIGOT-6777: Keep track if the event was canceled } @@ -21106,7 +21111,7 @@ index 55c26840957f69860816c917c16f59d02074b388..b3d8e795683ab186295902aba7d476a6 return event; } -@@ -1247,6 +1258,7 @@ public class CraftEventFactory { +@@ -1245,6 +1256,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 @@ -21193,10 +21198,10 @@ index 9ee14589d63bbfc0880f2eee5e924fe946ee0035..0a5841fa26698e60bdeadbb58b9343fe + // Purpur end } diff --git a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -index 090ba0b85fe72419c419cc72b5584ec391c0cfa1..e46018774aa99453f6fbb5dbb19513469d808700 100644 +index 71aac5d4cf29cea9daa378fc8ac584750de4d1ca..0496871db7437322d3932ca3d3504d84af832d90 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftItemFactory.java -@@ -597,4 +597,17 @@ public final class CraftItemFactory implements ItemFactory { +@@ -596,4 +596,17 @@ public final class CraftItemFactory implements ItemFactory { return CraftItemStack.asCraftMirror(enchanted); } // Paper end - enchantWithLevels API @@ -21410,7 +21415,7 @@ index b3e1adeb932da9b3bed16acd94e2f16da48a7c72..d3ec817e95628f1fc8be4a29c9a0f13c // Paper end - add timings for scoreboard search } diff --git a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java -index c909efd2060dc95bd3ecb8c9fec36a1e69a642ff..6eeebfaf577263316f3562a8f968310acd616763 100644 +index 2338ba106c19c3e61d1a2088cc51d0744432666d..2331190c476a2bfe3797aa61a4a792a9cc42ff59 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java +++ b/src/main/java/org/bukkit/craftbukkit/util/CraftMagicNumbers.java @@ -482,7 +482,7 @@ public final class CraftMagicNumbers implements UnsafeValues { @@ -27692,7 +27697,7 @@ index 0000000000000000000000000000000000000000..b7586f494528f30eb0da82420d3bcf5b + } +} diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 651063863b451d24ffe39f0a4d8db296e58ff585..9357539c71e3a8408b1f055527ffd192b5f9f1d9 100644 +index a69814d3a6214af734d670fe5545518a5f8a8dc5..9113c8ebff5e71f859a19f024969582052c57546 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -15,6 +15,7 @@ import net.minecraft.world.entity.ambient.AmbientCreature; diff --git a/patches/server/0003-Build-system-changes.patch b/patches/server/0003-Build-system-changes.patch index d54c989..51d0af6 100644 --- a/patches/server/0003-Build-system-changes.patch +++ b/patches/server/0003-Build-system-changes.patch @@ -5,32 +5,23 @@ Subject: [PATCH] Build system changes diff --git a/build.gradle.kts b/build.gradle.kts -index 5b8a28969451b12c4fc66976afd052ffa5805932..340dd814ad710f48c642be280d0bddbbcd5b9aab 100644 +index 0c92d10f334f82d196e065c0811d0c1f48887377..9118c9ee41eac40662c352ebd71941ddee31d9a0 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -19,21 +19,43 @@ dependencies { +@@ -19,6 +19,8 @@ dependencies { exclude("io.papermc.paper", "paper-api") } // Purpur end -+ // Plazma start - Use libs.versions.toml - // Paper start ++ // Plazma start - Use Gradle version catalogs + /* + // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") - implementation("net.kyori:adventure-text-serializer-ansi:4.14.0") // Keep in sync with adventureVersion from Paper-API build file - implementation("net.kyori:ansi:1.0.3") // Manually bump beyond above transitive dep -+ */ - /* - Required to add the missing Log4j2Plugins.dat file from log4j-core - which has been removed by Mojang. Without it, log4j has to classload - all its classes to check if they are plugins. - Scanning takes about 1-2 seconds so adding this speeds up the server start. +@@ -32,8 +34,28 @@ dependencies { */ -- implementation("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - implementation -- log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - Needed to generate meta for our Log4j plugins -- runtimeOnly(log4jPlugins.output) -+ //implementation("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - implementation -+ //log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - Needed to generate meta for our Log4j plugins + implementation("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - implementation + log4jPlugins.annotationProcessorConfigurationName("org.apache.logging.log4j:log4j-core:2.19.0") // Paper - Needed to generate meta for our Log4j plugins ++ */ + log4jPlugins.annotationProcessorConfigurationName(common.log4j.core) + + implementation(common.log4j.core) @@ -41,13 +32,13 @@ index 5b8a28969451b12c4fc66976afd052ffa5805932..340dd814ad710f48c642be280d0bddbb + implementation(common.adventure.serializer.ansi) + implementation(server.ansi) + implementation(server.bundles.implementation) -+ - alsoShade(log4jPlugins.output) + + runtimeOnly(common.bundles.maven) + runtimeOnly(common.maven.provider) + runtimeOnly(server.bundles.runtime) -+ runtimeOnly(log4jPlugins.output) + runtimeOnly(log4jPlugins.output) ++ + alsoShade(log4jPlugins.output) + + testImplementation(common.bundles.test) + testImplementation(server.classgraph) @@ -65,7 +56,7 @@ index 5b8a28969451b12c4fc66976afd052ffa5805932..340dd814ad710f48c642be280d0bddbb + implementation(server.velocity) { isTransitive = false } - // Paper end + // Paper end - Use Velocity cipher + /* runtimeOnly("org.apache.maven:maven-resolver-provider:3.9.6") @@ -83,8 +74,8 @@ index 5b8a28969451b12c4fc66976afd052ffa5805932..340dd814ad710f48c642be280d0bddbb - implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur - implementation("org.mozilla:rhino-engine:1.7.14") // Purpur -+ //implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur -+ //implementation("org.mozilla:rhino-engine:1.7.14") // Purpur ++ // implementation("org.mozilla:rhino-runtime:1.7.14") // Purpur ++ // implementation("org.mozilla:rhino-engine:1.7.14") // Purpur implementation("dev.omega24:upnp4j:1.0") // Purpur + /* @@ -93,7 +84,7 @@ index 5b8a28969451b12c4fc66976afd052ffa5805932..340dd814ad710f48c642be280d0bddbb testImplementation("org.hamcrest:hamcrest:2.2") testImplementation("org.mockito:mockito-core:5.5.0") + */ -+ // Plazma end ++ // Plazma end - Use Gradle version catalogs } val craftbukkitPackageVersion = "1_20_R3" // Paper diff --git a/patches/server/0005-Rebrand.patch b/patches/server/0005-Rebrand.patch index 8424ed6..e0fcd21 100644 --- a/patches/server/0005-Rebrand.patch +++ b/patches/server/0005-Rebrand.patch @@ -1,11 +1,11 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: AlphaKR93 +From: AlphaKR93 Date: Wed, 21 Dec 2022 19:31:24 +0900 Subject: [PATCH] Rebrand diff --git a/build.gradle.kts b/build.gradle.kts -index 340dd814ad710f48c642be280d0bddbbcd5b9aab..c844854d45c07f2c8d7b1819fa7aa6ca56a56f85 100644 +index 9118c9ee41eac40662c352ebd71941ddee31d9a0..3edbcb7a68b1969687c27725be98b69537fb64c2 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -14,7 +14,7 @@ val alsoShade: Configuration by configurations.creating @@ -13,7 +13,7 @@ index 340dd814ad710f48c642be280d0bddbbcd5b9aab..c844854d45c07f2c8d7b1819fa7aa6ca dependencies { // Purpur start - implementation(project(":purpur-api")) -+ implementation(project(":plazma-api")) // Plazma ++ implementation(project(":plazma-api")) // Plazma - Setup Gradle Project implementation("io.papermc.paper:paper-mojangapi:${project.version}") { exclude("io.papermc.paper", "paper-api") } @@ -22,12 +22,12 @@ index 340dd814ad710f48c642be280d0bddbbcd5b9aab..c844854d45c07f2c8d7b1819fa7aa6ca "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", - "Implementation-Version" to "git-Purpur-$implementationVersion", // Pufferfish // Purpur -+ "Implementation-Version" to "git-Plazma-$implementationVersion", // Pufferfish // Purpur // Plazma ++ "Implementation-Version" to "git-Plazma-$implementationVersion", // Pufferfish // Purpur // Plazma - Setup Gradle Project "Implementation-Vendor" to date, // Paper "Specification-Title" to "Bukkit", "Specification-Version" to project.version, diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..7d80d2cf5d607d6051e99e4b08bc1b76098a79da 100644 +index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..0b3d87d2d43148e6370e7a03e0bb6074891ac800 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 { @@ -35,7 +35,7 @@ index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..7d80d2cf5d607d6051e99e4b08bc1b76 // Only start Metrics, if it's enabled in the config if (config.getBoolean("enabled", true)) { - Metrics metrics = new Metrics("Purpur", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur -+ Metrics metrics = new Metrics("Plazma", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur // Plazma ++ Metrics metrics = new Metrics("Plazma", serverUUID, logFailedRequests, Bukkit.getLogger()); // Pufferfish // Purpur // Plazma - Branding metrics.addCustomChart(new Metrics.SimplePie("minecraft_version", () -> { String minecraftVersion = Bukkit.getVersion(); @@ -44,12 +44,12 @@ index 8cde30544e14f8fc2dac32966ae3c21f8cf3a551..7d80d2cf5d607d6051e99e4b08bc1b76 metrics.addCustomChart(new Metrics.SingleLineChart("players", () -> Bukkit.getOnlinePlayers().size())); 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.SimplePie("plazma_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur // Plazma ++ metrics.addCustomChart(new Metrics.SimplePie("plazma_version", () -> (org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() != null) ? org.bukkit.craftbukkit.Main.class.getPackage().getImplementationVersion() : "unknown")); // Purpur // Plazma // Plazma - Branding metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..fec95437c1ad602f64c4d4d02c276199f27babbd 100644 +index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..b698ce7d9fcccf535398aec731f8dba27f1ffa9b 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -20,7 +20,7 @@ import java.util.stream.StreamSupport; @@ -57,7 +57,7 @@ index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..fec95437c1ad602f64c4d4d02c276199 private static final java.util.regex.Pattern VER_PATTERN = java.util.regex.Pattern.compile("^([0-9\\.]*)\\-.*R"); // R is an anchor, will always give '-R' at end // Purpur start - private static final String DOWNLOAD_PAGE = "https://purpurmc.org/downloads"; -+ private static final String DOWNLOAD_PAGE = "https://github.com/PlazmaMC/Plazma/releases"; // Plazma ++ private static final String DOWNLOAD_PAGE = "https://github.com/PlazmaMC/Plazma/releases"; // Plazma // Plazma - Branding private static int distance = -2; public int distance() { return distance; } // Purpur end private static @Nullable String mcVer; @@ -67,8 +67,8 @@ index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..fec95437c1ad602f64c4d4d02c276199 public Component getVersionMessage(@Nonnull String serverVersion) { - String[] parts = serverVersion.substring("git-Purpur-".length()).split("[-\\s]"); // Purpur - final Component updateMessage = getUpdateStatusMessage("PurpurMC/Purpur", "ver/" + getMinecraftVersion(), parts[0]); // Purpur -+ String[] parts = serverVersion.substring("git-Plazma-".length()).split("[-\\s]"); // Purpur // Plazma -+ final Component updateMessage = getUpdateStatusMessage("PlazmaMC/Plazma", "ver/" + getMinecraftVersion(), parts[0]); // Purpur // Plazma ++ String[] parts = serverVersion.substring("git-Plazma-".length()).split("[-\\s]"); // Purpur // Plazma // Plazma - Branding ++ final Component updateMessage = getUpdateStatusMessage("PlazmaMC/Plazma", "ver/" + getMinecraftVersion(), parts[0]); // Purpur // Plazma // Plazma - Branding final Component history = getHistory(); return history != null ? Component.join(net.kyori.adventure.text.JoinConfiguration.separator(Component.newline()), history, updateMessage) : updateMessage; // Purpur @@ -77,7 +77,7 @@ index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..fec95437c1ad602f64c4d4d02c276199 mcVer = result.substring(0, result.length() - 2); // strip 'R' anchor and trailing '-' } else { - org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Purpur!"); // Purpur -+ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Plazma!"); // Purpur // Plazma ++ org.bukkit.Bukkit.getLogger().warning("Unable to match version to pattern! Report to Plazma!"); // Purpur // Plazma // Plazma - Branding org.bukkit.Bukkit.getLogger().warning("Pattern: " + VER_PATTERN.toString()); org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } @@ -97,7 +97,7 @@ index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..fec95437c1ad602f64c4d4d02c276199 + */ + versionInfo = versionInfo.replace("\"", ""); // Plazma + distance = fetchDistanceFromGitHub(repo, branch, versionInfo); // Plazma -+ // Plazma end ++ // Plazma end - Disable CI Checking switch (distance) { case -1: @@ -118,7 +118,7 @@ index 462a6eed350fd660ddaf25d567bb6e97b77d0b2b..fec95437c1ad602f64c4d4d02c276199 // Contributed by Techcable in GH-65 private static int fetchDistanceFromGitHub(@Nonnull String repo, @Nonnull String branch, @Nonnull String hash) { diff --git a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java -index 3cb56595822799926a8141e60a42f5d1edfc6de5..19d1d136fc28d6c114f6bc44c6450d2df51c3cb9 100644 +index 3cb56595822799926a8141e60a42f5d1edfc6de5..3e32c28e1d4c157a2f00dbc6d6e9d71cb3b8f6b7 100644 --- a/src/main/java/com/destroystokyo/paper/console/PaperConsole.java +++ b/src/main/java/com/destroystokyo/paper/console/PaperConsole.java @@ -17,7 +17,7 @@ public final class PaperConsole extends SimpleTerminalConsole { @@ -126,12 +126,12 @@ index 3cb56595822799926a8141e60a42f5d1edfc6de5..19d1d136fc28d6c114f6bc44c6450d2d protected LineReader buildReader(LineReaderBuilder builder) { builder - .appName("Purpur") // Purpur -+ .appName("Plazma") // Purpur // Plazma ++ .appName("Plazma") // Purpur // Plazma - Branding .variable(LineReader.HISTORY_FILE, java.nio.file.Paths.get(".console_history")) .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 888e31a0454888c36cb27602a28619f1f6dbf2c0..e3b131d054079fe9bde6ef79ac29ca0dae0033a3 100644 +index 888e31a0454888c36cb27602a28619f1f6dbf2c0..315ac3baecf1e29fd49c4c52e2d914d9a726540f 100644 --- a/src/main/java/net/minecraft/CrashReport.java +++ b/src/main/java/net/minecraft/CrashReport.java @@ -37,7 +37,7 @@ public class CrashReport { @@ -139,7 +139,7 @@ index 888e31a0454888c36cb27602a28619f1f6dbf2c0..e3b131d054079fe9bde6ef79ac29ca0d this.title = message; this.exception = cause; - this.systemReport.setDetail("CraftBukkit Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit -+ this.systemReport.setDetail("Plazma Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit // Plazma ++ this.systemReport.setDetail("Plazma Information", new org.bukkit.craftbukkit.CraftCrashReport()); // CraftBukkit // Plazma - Branding } public String getTitle() { @@ -148,12 +148,12 @@ index 888e31a0454888c36cb27602a28619f1f6dbf2c0..e3b131d054079fe9bde6ef79ac29ca0d // Purpur start stringbuilder.append("// "); - stringbuilder.append("// DO NOT REPORT THIS TO PAPER! REPORT TO PURPUR INSTEAD!"); -+ stringbuilder.append("// DO NOT REPORT THIS TO PAPER OR PURPUR! REPORT TO PLAZMA INSTEAD!"); // Plazma ++ stringbuilder.append("// DO NOT REPORT THIS TO PAPER OR PURPUR! REPORT TO PLAZMA INSTEAD!"); // Plazma - Branding // Purpur end stringbuilder.append("// "); stringbuilder.append(CrashReport.getErrorComment()); diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 2568272a10c0d92bc49c0c244b10791db7bfae2b..ff4b438c9e6fa951890e9b22beaa174acab76487 100644 +index 61840cfd64caba6595dfc99c91c76a195638d4ee..b94f711b8bd56d159745b59f8b842d192a9d0293 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -105,6 +105,18 @@ public class Main { @@ -176,7 +176,7 @@ index 2568272a10c0d92bc49c0c244b10791db7bfae2b..ff4b438c9e6fa951890e9b22beaa174a if (Boolean.getBoolean("Paper.isRunDev")) { net.minecraft.server.packs.VanillaPackResourcesBuilder.developmentConfig = builder -> { diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6f94f01da0a2294f6fdc564653dde1fdbf508153..bcea2c7b88dc066f70bbc6740f3b9ebcb364efab 100644 +index 16b5f59dd3658bb9fc5be629aa4e1bc0ce356243..b0e3af53bda197d4b8f19c0d400511ac398aebbe 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -959,7 +959,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop +From: AlphaKR93 Date: Fri, 10 Mar 2023 22:08:56 +0900 Subject: [PATCH] Rebrand Logo diff --git a/patches/server/0007-Plazma-Configurations.patch b/patches/server/0007-Plazma-Configurations.patch index 0a6984b..98a698c 100644 --- a/patches/server/0007-Plazma-Configurations.patch +++ b/patches/server/0007-Plazma-Configurations.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Plazma Configurations diff --git a/src/main/java/io/papermc/paper/configuration/Configurations.java b/src/main/java/io/papermc/paper/configuration/Configurations.java -index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002c9afb89b 100644 +index c01b4393439838976965823298f12e4762e72eff..c8fa51dcfaf1990cce322b25525b6fced24c59cf 100644 --- a/src/main/java/io/papermc/paper/configuration/Configurations.java +++ b/src/main/java/io/papermc/paper/configuration/Configurations.java @@ -41,6 +41,16 @@ public abstract class Configurations { protected final String globalConfigFileName; protected final String defaultWorldConfigFileName; protected final String worldConfigFileName; -+ // Plazma start ++ // Plazma start - Configurable Plazma + @org.jetbrains.annotations.VisibleForTesting + public static final java.util.function.Supplier SPIGOT_WORLD_DEFAULTS = com.google.common.base.Suppliers.memoize(() -> new org.spigotmc.SpigotWorldConfig(org.apache.commons.lang.RandomStringUtils.randomAlphabetic(255)) { + @Override // override to ensure "verbose" is false @@ -21,7 +21,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 + } + }); + protected static final ContextKey> SPIGOT_WORLD_CONFIG_CONTEXT_KEY = new ContextKey<>(new TypeToken<>() {}, "spigot world config"); -+ // Plazma end ++ // Plazma end - Configurable Plazma public Configurations( final Path globalFolder, @@ -29,7 +29,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 .addConstraint(Constraints.Min.class, Number.class, new Constraints.Min.Factory()); } -+ // Plazma start ++ // Plazma start - Configurable Plazma protected YamlConfigurationLoader.Builder createLoaderBuilder() { - return ConfigurationLoaders.naturallySorted(); + return ConfigurationLoaders.naturallySorted().defaultOptions(Configurations::defaultOptions); @@ -51,7 +51,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 + protected static ObjectMapper.Factory.Builder defaultGlobalFactoryBuilder(ObjectMapper.Factory.Builder builder) { + return builder.addDiscoverer(io.papermc.paper.configuration.mapping.InnerClassFieldDiscoverer.globalConfig()); + } -+ // Plazma end ++ // Plazma end - Configurable Plazma protected abstract int globalConfigVersion(); @@ -59,7 +59,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 protected ObjectMapper.Factory.Builder createGlobalObjectMapperFactoryBuilder() { - return this.createObjectMapper(); -+ return defaultGlobalFactoryBuilder(this.createObjectMapper()); // Plazma ++ return defaultGlobalFactoryBuilder(this.createObjectMapper()); // Plazma - Configurable Plazma } @MustBeInvokedByOverriders @@ -76,7 +76,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 return ContextMap.builder() .put(WORLD_NAME, WORLD_DEFAULTS) .put(WORLD_KEY, WORLD_DEFAULTS_KEY) -+ .put(SPIGOT_WORLD_CONFIG_CONTEXT_KEY, SPIGOT_WORLD_DEFAULTS) // Plazma ++ .put(SPIGOT_WORLD_CONFIG_CONTEXT_KEY, SPIGOT_WORLD_DEFAULTS) // Plazma - Configurable Plazma .put(REGISTRY_ACCESS, registryAccess); } @@ -85,11 +85,11 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 protected ObjectMapper.Factory.Builder createWorldObjectMapperFactoryBuilder(final ContextMap contextMap) { - return this.createObjectMapper(); -+ // Plazma start ++ // Plazma start - Configurable Plazma + return this.createObjectMapper() + .addNodeResolver(new io.papermc.paper.configuration.legacy.RequiresSpigotInitialization.Factory(contextMap.require(SPIGOT_WORLD_CONFIG_CONTEXT_KEY).get())) + .addNodeResolver(new NestedSetting.Factory()); -+ // Plazma end ++ // Plazma end - Configurable Plazma } @MustBeInvokedByOverriders @@ -98,7 +98,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 final Path worldConfigFile = dir.resolve(this.worldConfigFileName); if (Files.notExists(worldConfigFile)) { - PaperConfigurations.createDirectoriesSymlinkAware(dir); -+ createDirectoriesSymlinkAware(dir); ++ createDirectoriesSymlinkAware(dir); // Plazma - Configurable Plazma Files.createFile(worldConfigFile); // create empty file as template newFile = true; } @@ -106,7 +106,7 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 return level.convertable.levelDirectory.path().resolve(this.worldConfigFileName); } -+ // Plazma start ++ // Plazma start - Configurable Plazma + @Deprecated + public org.bukkit.configuration.file.YamlConfiguration createLegacyObject(final net.minecraft.server.MinecraftServer server) { + org.bukkit.configuration.file.YamlConfiguration global = org.bukkit.configuration.file.YamlConfiguration.loadConfiguration(this.globalFolder.resolve(this.globalConfigFileName).toFile()); @@ -137,20 +137,20 @@ index c01b4393439838976965823298f12e4762e72eff..78590919c333f632f602b1c916b12002 + .put(REGISTRY_ACCESS, registryAccess) + .build(); + } -+ // Plazma end ++ // Plazma end - Configurable Plazma + public static class ContextMap { private static final Object VOID = new Object(); diff --git a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java -index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d796556933981f 100644 +index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..a2502999965e88e30202894e7bc82b153d43bfbd 100644 --- a/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java +++ b/src/main/java/io/papermc/paper/configuration/PaperConfigurations.java @@ -131,6 +131,7 @@ public class PaperConfigurations extends Configurations SPIGOT_WORLD_DEFAULTS = Suppliers.memoize(() -> new SpigotWorldConfig(RandomStringUtils.randomAlphabetic(255)) { @Override // override to ensure "verbose" is false @@ -158,7 +158,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 } }); public static final ContextKey> SPIGOT_WORLD_CONFIG_CONTEXT_KEY = new ContextKey<>(new TypeToken>() {}, "spigot world config"); -+ */ // Plazma ++ */ // Plazma - Configurable Plazma public PaperConfigurations(final Path globalFolder) { @@ -166,7 +166,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 return WorldConfiguration.CURRENT_VERSION; } -+ /* // Plazma ++ /* // Plazma - Configurable Plazma @Override protected YamlConfigurationLoader.Builder createLoaderBuilder() { return super.createLoaderBuilder() @@ -174,7 +174,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 private static ObjectMapper.Factory.Builder defaultGlobalFactoryBuilder(ObjectMapper.Factory.Builder builder) { return builder.addDiscoverer(InnerClassFieldDiscoverer.globalConfig()); } -+ */ // Plazma ++ */ // Plazma - Configurable Plazma @Override protected YamlConfigurationLoader.Builder createGlobalLoaderBuilder() { @@ -182,21 +182,21 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 return configuration; } -+ /* // Plazma ++ /* // Plazma - Configurable Plazma @Override protected ContextMap.Builder createDefaultContextMap(final RegistryAccess registryAccess) { return super.createDefaultContextMap(registryAccess) .put(SPIGOT_WORLD_CONFIG_CONTEXT_KEY, SPIGOT_WORLD_DEFAULTS); } -+ */ // Plazma ++ */ // Plazma - Configurable Plazma @Override protected ObjectMapper.Factory.Builder createWorldObjectMapperFactoryBuilder(final ContextMap contextMap) { return super.createWorldObjectMapperFactoryBuilder(contextMap) - .addNodeResolver(new RequiresSpigotInitialization.Factory(contextMap.require(SPIGOT_WORLD_CONFIG_CONTEXT_KEY).get())) - .addNodeResolver(new NestedSetting.Factory()) -+ //.addNodeResolver(new RequiresSpigotInitialization.Factory(contextMap.require(SPIGOT_WORLD_CONFIG_CONTEXT_KEY).get())) // Plazma -+ //.addNodeResolver(new NestedSetting.Factory()) // Plazma ++ //.addNodeResolver(new RequiresSpigotInitialization.Factory(contextMap.require(SPIGOT_WORLD_CONFIG_CONTEXT_KEY).get())) // Plazma - Configurable Plazma ++ //.addNodeResolver(new NestedSetting.Factory()) // Plazma - Configurable Plazma .addDiscoverer(InnerClassFieldDiscoverer.worldConfig(createWorldConfigInstance(contextMap))); } @@ -204,12 +204,12 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 } } -+ /* // Plazma ++ /* // Plazma - Configurable Plazma @Override protected boolean isConfigType(final Type type) { return ConfigurationPart.class.isAssignableFrom(erase(type)); } -+ */ // Plazma ++ */ // Plazma - Configurable Plazma public void reloadConfigs(MinecraftServer server) { try { @@ -217,7 +217,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 } } -+ /* // Plazma ++ /* // Plazma - Configurable Plazma private static ContextMap createWorldContextMap(ServerLevel level) { return createWorldContextMap(level.convertable.levelDirectory.path(), level.serverLevelData.getLevelName(), level.dimension().location(), level.spigotConfig, level.registryAccess()); } @@ -225,7 +225,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 .put(REGISTRY_ACCESS, registryAccess) .build(); } -+ */ // Plazma ++ */ // Plazma - Configurable Plazma public static PaperConfigurations setup(final Path legacyConfig, final Path configDir, final Path worldFolder, final File spigotConfig) throws Exception { final Path legacy = Files.isSymbolicLink(legacyConfig) ? Files.readSymbolicLink(legacyConfig) : legacyConfig; @@ -233,7 +233,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 return Files.exists(legacyConfig) && Files.isRegularFile(legacyConfig); } -+ /* // Plazma ++ /* // Plazma - Configurable Plazma @Deprecated public YamlConfiguration createLegacyObject(final MinecraftServer server) { YamlConfiguration global = YamlConfiguration.loadConfiguration(this.globalFolder.resolve(this.globalConfigFileName).toFile()); @@ -241,7 +241,7 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 } return global; } -+ */ // Plazma ++ */ // Plazma - Configurable Plazma @Deprecated public static YamlConfiguration loadLegacyConfigFile(File configFile) throws Exception { @@ -249,24 +249,24 @@ index fa1c0aee8c3a4d0868482cf5c703bbfd08e09874..da05e8a339857daa96b062ee64d79655 return BasicConfigurationNode.root(options); } -+ /* // Plazma ++ /* // Plazma - Configurable Plazma // Symlinks are not correctly checked in createDirectories static void createDirectoriesSymlinkAware(Path path) throws IOException { if (!Files.isDirectory(path)) { Files.createDirectories(path); } } -+ */ // Plazma ++ */ // Plazma - Configurable Plazma } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index bcea2c7b88dc066f70bbc6740f3b9ebcb364efab..b0c8943b3ad6c2d29b46ce387d349f91acc899f1 100644 +index b0e3af53bda197d4b8f19c0d400511ac398aebbe..a837ac3d163457a150f01fc3083eaee23b0ae53c 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java @@ -307,6 +307,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor -+ super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor ++ super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor // Plazma - Configurable Plazma this.pvpMode = minecraftserver.isPvpAllowed(); this.convertable = convertable_conversionsession; this.uuid = WorldUUID.getUUID(convertable_conversionsession.levelDirectory.path().toFile()); diff --git a/src/main/java/net/minecraft/world/item/ItemStack.java b/src/main/java/net/minecraft/world/item/ItemStack.java -index cbfd535d62acdde7789fa88332f4a607c381d450..0cb61ab6f8511fee3bfe8822e17fa05606af894c 100644 +index 361e0d5ec35219c2706c7344efc25ee6d50a2460..d96495237467adb38263c8925e7253c5387405c7 100644 --- a/src/main/java/net/minecraft/world/item/ItemStack.java +++ b/src/main/java/net/minecraft/world/item/ItemStack.java @@ -270,7 +270,7 @@ public final class ItemStack { @@ -374,49 +375,49 @@ index cbfd535d62acdde7789fa88332f4a607c381d450..0cb61ab6f8511fee3bfe8822e17fa056 CompoundTag savedStack = new CompoundTag(); this.save(savedStack); - savedStack = (CompoundTag) MinecraftServer.getServer().fixerUpper.update(References.ITEM_STACK, new Dynamic(NbtOps.INSTANCE, savedStack), version, CraftMagicNumbers.INSTANCE.getDataVersion()).getValue(); -+ savedStack = (CompoundTag) MinecraftServer.getServer().getFixerUpper().update(References.ITEM_STACK, new Dynamic(NbtOps.INSTANCE, savedStack), version, CraftMagicNumbers.INSTANCE.getDataVersion()).getValue(); // Plazma - Fix test ++ savedStack = (CompoundTag) MinecraftServer.getServer().getFixerUpper().update(References.ITEM_STACK, new Dynamic(NbtOps.INSTANCE, savedStack), version, CraftMagicNumbers.INSTANCE.getDataVersion()).getValue(); // Plazma - Configurable Plazma this.load(savedStack); } } diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index b58402221840a9e72b30a31d884b0fb2d86883fd..cde722d3e381d214e2835b7dc5877e9add0a5eda 100644 +index f638224f8ae018030fa00962cd3c75fc31ab2488..a4d6b11a2d74f57bce7ad9797cd9ce32769d2de5 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -177,7 +177,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -176,7 +176,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return this.paperConfig; } // Paper end - add paper world config - -+ // Plazma start ++ // Plazma start - Configurable Plazma + private final org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig; + public org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig() { + return this.plazmaConfig; + } -+ // Plazma end ++ // Plazma end - Configurable Plazma 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 -@@ -259,9 +264,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -258,9 +263,10 @@ public abstract class Level implements LevelAccessor, AutoCloseable { //protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter // Purpur - dont break ABI - 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 - create paper world config; Async-Anti-Xray: Pass executor -+ 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.function.Function plazmaWorldConfigurationCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor // Plazma ++ 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.function.Function plazmaWorldConfigurationCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor // Plazma - Configurable Plazma this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config -+ this.plazmaConfig = plazmaWorldConfigurationCreator.apply(this.spigotConfig); // Plazma ++ this.plazmaConfig = plazmaWorldConfigurationCreator.apply(this.spigotConfig); // Plazma - Configurable Plazma this.purpurConfig = new org.purpurmc.purpur.PurpurWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName(), env); // Purpur this.playerBreedingCooldowns = this.getNewBreedingCooldownCache(); // Purpur this.generator = gen; diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 7f28d8852176281a4e43c1af4085314eb4a47031..2ddc14cb855997bee88998b73c542b119be4ceda 100644 +index fed4ac63da94674b6f5d59ca9065a84a29ca0e3f..0a933294eafc179ec4c8a1145bfdd2be590853b3 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1051,6 +1051,7 @@ public final class CraftServer implements Server { org.spigotmc.SpigotConfig.init((File) this.console.options.valueOf("spigot-settings")); // Spigot this.console.paperConfigurations.reloadConfigs(this.console); -+ this.console.plazmaConfigurations.reloadConfigurations(this.console); // Plazma ++ this.console.plazmaConfigurations.reloadConfigurations(this.console); // Plazma - Configurable Plazma org.purpurmc.purpur.PurpurConfig.init((File) console.options.valueOf("purpur-settings")); // Purpur for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty @@ -424,32 +425,32 @@ index 7f28d8852176281a4e43c1af4085314eb4a47031..2ddc14cb855997bee88998b73c542b11 } // Purpur end -+ // Plazma start ++ // Plazma start - Configurable Plazma + @Override @org.jetbrains.annotations.NotNull + public YamlConfiguration getPlazmaConfig() { + return CraftServer.this.console.plazmaConfigurations.createLegacyObject(CraftServer.this.console); + } -+ // Plazma end ++ // Plazma end - Configurable Plazma + @Override 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 e2a5b6349cfb0d7742cb5fb5e8d8e38cecf33f83..ca42f8e3c8819629788b62c3bc034b432bbb1271 100644 +index c0c48d8498e4b38178f73ac6a08dad64fc5a005b..268a2f3d4a04e9630190555d3ef211af23ca41cb 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -195,6 +195,14 @@ public class Main { - .defaultsTo("Plazma Server") // Plazma - Rebranding + .defaultsTo("Plazma Server") // Plazma - Branding .describedAs("Name"); // Paper end + -+ // Plazma start ++ // Plazma start - Configurable Plazma + acceptsAll(asList("plazma-dir", "plazma-settings-directory"), "Directory for Plazma settings") -+ .withRequiredArg() -+ .ofType(File.class) -+ .defaultsTo(new File(org.plazmamc.plazma.configurations.PlazmaConfigurations.CONFIG_DIR)) -+ .describedAs("Configuration Directory"); -+ // Plazma end ++ .withRequiredArg() ++ .ofType(File.class) ++ .defaultsTo(new File(org.plazmamc.plazma.configurations.PlazmaConfigurations.CONFIG_DIR)) ++ .describedAs("Configuration Directory"); ++ // Plazma end - Configurable Plazma } }; @@ -1064,39 +1065,31 @@ index 0000000000000000000000000000000000000000..842fb520a2d638aaa5bd0a7198190dbe + +} diff --git a/src/test/java/org/bukkit/support/AbstractTestingBase.java b/src/test/java/org/bukkit/support/AbstractTestingBase.java -index 381c1d681a982e28f1909bd954d21827549f7bcc..9feec76c21a61057e1aa274bd1243ee2741d8dbe 100644 +index 381c1d681a982e28f1909bd954d21827549f7bcc..ed88464eef3eea8b8d7432e869cdf8100d8c54dc 100644 --- a/src/test/java/org/bukkit/support/AbstractTestingBase.java +++ b/src/test/java/org/bukkit/support/AbstractTestingBase.java @@ -63,6 +63,7 @@ public abstract class AbstractTestingBase { DummyServer.setup(); io.papermc.paper.configuration.GlobalConfigTestingBase.setupGlobalConfigForTest(); // Paper -+ org.plazmamc.plazma.configurations.GlobalConfigurationTestingBase.setupGlobalConfigForTest(); // Plazma ++ org.plazmamc.plazma.configurations.GlobalConfigurationTestingBase.setupGlobalConfigForTest(); // Plazma - Configurable Plazma CraftRegistry.setMinecraftRegistry(REGISTRY_CUSTOM); diff --git a/src/test/java/org/bukkit/support/DummyServer.java b/src/test/java/org/bukkit/support/DummyServer.java -index c20d5ed12efed109f3702a994188ac4af66c8b9a..dd5c15f4969f15a5eeef1fa068be5643197504be 100644 +index c20d5ed12efed109f3702a994188ac4af66c8b9a..e2842b967b12ca0d56f21f8dfc4af39846b5cf24 100644 --- a/src/test/java/org/bukkit/support/DummyServer.java +++ b/src/test/java/org/bukkit/support/DummyServer.java -@@ -2,6 +2,7 @@ package org.bukkit.support; - - import static org.mockito.Mockito.*; - import java.util.logging.Logger; -+import net.minecraft.server.MinecraftServer; - import org.bukkit.Bukkit; - import org.bukkit.Material; - import org.bukkit.Server; -@@ -47,6 +48,13 @@ public final class DummyServer { +@@ -47,6 +47,13 @@ public final class DummyServer { when(instance.getTag(anyString(), any(org.bukkit.NamespacedKey.class), any())).thenAnswer(ignored -> new io.papermc.paper.util.EmptyTag()); // paper end - testing additions -+ // Plazma start - Fix tests ++ // Plazma start - Configurable Plazma + net.minecraft.server.MinecraftServer handle = mock(withSettings().stubOnly()); + when(handle.random()).thenReturn(net.minecraft.util.RandomSource.create()); + when(handle.getFixerUpper()).thenReturn(net.minecraft.util.datafix.DataFixers.getDataFixer()); -+ MinecraftServer.setServer(handle); -+ // Plazma end ++ net.minecraft.server.MinecraftServer.setServer(handle); ++ // Plazma end - Configurable Plazma + Bukkit.setServer(instance); } catch (Throwable t) { diff --git a/patches/server/0009-Always-agree-EULA-on-development-mode.patch b/patches/server/0009-Always-agree-EULA-on-development-mode.patch index 519cfb9..fcb587b 100644 --- a/patches/server/0009-Always-agree-EULA-on-development-mode.patch +++ b/patches/server/0009-Always-agree-EULA-on-development-mode.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Always agree EULA on development mode diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index ff4b438c9e6fa951890e9b22beaa174acab76487..81390751af65f0055bae807a976aa473cea917ac 100644 +index b94f711b8bd56d159745b59f8b842d192a9d0293..0f7ce26f2db698814dfd766dadca5bfa53a63eb6 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -175,6 +175,7 @@ public class Main { // Spigot Start boolean eulaAgreed = Boolean.getBoolean( "com.mojang.eula.agree" ); -+ eulaAgreed = eulaAgreed || Boolean.getBoolean("Paper.isRunDev"); // Plazma ++ eulaAgreed = eulaAgreed || Boolean.getBoolean("Paper.isRunDev"); // Plazma - Always agree EULA on development mode if ( eulaAgreed ) { System.err.println( "You have used the Spigot command line EULA agreement flag." ); diff --git a/patches/server/0010-Add-more-metrics.patch b/patches/server/0010-Add-more-metrics.patch index c278c40..60bfc1f 100644 --- a/patches/server/0010-Add-more-metrics.patch +++ b/patches/server/0010-Add-more-metrics.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Add more metrics diff --git a/src/main/java/com/destroystokyo/paper/Metrics.java b/src/main/java/com/destroystokyo/paper/Metrics.java -index 7d80d2cf5d607d6051e99e4b08bc1b76098a79da..f006c867ad0765e0f52a629729ab131acec5c2fc 100644 +index 0b3d87d2d43148e6370e7a03e0bb6074891ac800..dce6445e02a16a87df3b0e81ed9076fe558da48b 100644 --- a/src/main/java/com/destroystokyo/paper/Metrics.java +++ b/src/main/java/com/destroystokyo/paper/Metrics.java @@ -636,16 +636,52 @@ public class Metrics { return map; })); -+ // Plazma start ++ // Plazma start - Add more metrics information + metrics.addCustomChart(new DrilldownPie("datapacks", () -> { + int datapacks = Bukkit.getDatapackManager().getEnabledPacks().size(); + Map entry = Collections.singletonMap(String.valueOf(datapacks), 1); @@ -51,7 +51,7 @@ index 7d80d2cf5d607d6051e99e4b08bc1b76098a79da..f006c867ad0765e0f52a629729ab131a + else if (disabled <= 100) return Collections.singletonMap("50-100 \uD83D\uDE2D", entry); // :cry: + else return Collections.singletonMap("101+ \uD83D\uDC80", entry); // :skull: + })); -+ // Plazma end ++ // Plazma end - Add more metrics information + metrics.addCustomChart(new Metrics.DrilldownPie("legacy_plugins", () -> { Map> map = new HashMap<>(); diff --git a/patches/server/0011-Optimize-default-configurations.patch b/patches/server/0011-Optimize-default-configurations.patch index 884d542..43fc032 100644 --- a/patches/server/0011-Optimize-default-configurations.patch +++ b/patches/server/0011-Optimize-default-configurations.patch @@ -9,7 +9,7 @@ Subject: [PATCH] Optimize default configurations - YouHaveTrouble/minecraft-exploits-and-how-to-fix-them diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -index 43397712cb13df5be3081c05eaa1a57c57f12c60..580ab3eb7664d5c51611a4b9635aa3c4872c8861 100644 +index ebbd115686de7a87dd422e8d2d92abcf953358a7..65de112fedeed8623186a778d791a6cdc4d284f6 100644 --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java @@ -64,7 +64,7 @@ public class PufferfishConfig { @@ -17,11 +17,11 @@ index 43397712cb13df5be3081c05eaa1a57c57f12c60..580ab3eb7664d5c51611a4b9635aa3c4 setComment("info", "Pufferfish Configuration", - "Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", -+ //"Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", // Plazma - Nope ++ //"Check out Pufferfish Host for maximum performance server hosting: https://pufferfish.host", // Plazma - Sponsorblock "Join our Discord for support: https://discord.gg/reZw4vQV9H", "Download new builds at https://ci.pufferfish.host/job/Pufferfish"); -@@ -233,7 +233,7 @@ public class PufferfishConfig { +@@ -219,7 +219,7 @@ public class PufferfishConfig { public static int maxProjectileLoadsPerTick; public static int maxProjectileLoadsPerProjectile; private static void projectileLoading() { @@ -30,7 +30,7 @@ index 43397712cb13df5be3081c05eaa1a57c57f12c60..580ab3eb7664d5c51611a4b9635aa3c4 maxProjectileLoadsPerProjectile = getInt("projectile.max-loads-per-projectile", 10, "Controls how many chunks a projectile", "can load in its lifetime before it gets", "automatically removed."); setComment("projectile", "Optimizes projectile settings"); -@@ -247,7 +247,7 @@ public class PufferfishConfig { +@@ -233,7 +233,7 @@ public class PufferfishConfig { public static int activationDistanceMod; private static void dynamicActivationOfBrains() throws IOException { @@ -39,7 +39,7 @@ index 43397712cb13df5be3081c05eaa1a57c57f12c60..580ab3eb7664d5c51611a4b9635aa3c4 startDistance = getInt("dab.start-distance", "activation-range.start-distance", 12, "This value determines how far away an entity has to be", "from the player to start being effected by DEAR."); -@@ -255,7 +255,7 @@ public class PufferfishConfig { +@@ -241,7 +241,7 @@ public class PufferfishConfig { maximumActivationPrio = getInt("dab.max-tick-freq", "activation-range.max-tick-freq", 20, "This value defines how often in ticks, the furthest entity", "will get their pathfinders and behaviors ticked. 20 = 1s"); @@ -48,7 +48,7 @@ index 43397712cb13df5be3081c05eaa1a57c57f12c60..580ab3eb7664d5c51611a4b9635aa3c4 "This value defines how much distance modifies an entity's", "tick frequency. freq = (distanceToPlayer^2) / (2^value)", "If you want further away entities to tick less often, use 7.", -@@ -275,8 +275,18 @@ public class PufferfishConfig { +@@ -261,8 +261,18 @@ public class PufferfishConfig { public static Map projectileTimeouts; private static void projectileTimeouts() { // Set some defaults @@ -338,7 +338,7 @@ index 24763d3d270c29c95e0b3e85111145234f660a62..80ddc627e02e3c749e6b074afa93d357 } diff --git a/src/main/java/net/minecraft/server/Main.java b/src/main/java/net/minecraft/server/Main.java -index 81390751af65f0055bae807a976aa473cea917ac..29636e4adc2f3ce4cd9dc6f33420f3d9a9bdfc08 100644 +index 0f7ce26f2db698814dfd766dadca5bfa53a63eb6..e12dd19afff4a8249fc7c5aa5e12215f8fc30c14 100644 --- a/src/main/java/net/minecraft/server/Main.java +++ b/src/main/java/net/minecraft/server/Main.java @@ -160,7 +160,7 @@ public class Main { @@ -351,7 +351,7 @@ index 81390751af65f0055bae807a976aa473cea917ac..29636e4adc2f3ce4cd9dc6f33420f3d9 File commandFile = (File) optionset.valueOf("commands-settings"); diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java -index d9d8f24331772c05c461f1b9ce5f8f23353610ca..3d068c49106a52fd5485800dcc5c2e116411e29c 100644 +index e8ed7b12f09da333182d1826814e8c72918ddae8..4961fba3af3ef082e91de5aafe75a65dd3c9dd99 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServerProperties.java @@ -130,14 +130,14 @@ public class DedicatedServerProperties extends Settings { return Mth.clamp(integer, 1, 29999984); }, 29999984); -- this.syncChunkWrites = this.get("sync-chunk-writes", true) && Boolean.getBoolean("Paper.enable-sync-chunk-writes"); // Paper - hide behind flag -+ this.syncChunkWrites = this.get("sync-chunk-writes", Boolean.getBoolean("Paper.enable-sync-chunk-writes")); // Paper - hide behind flag // Plazma - Optimize default configurations +- this.syncChunkWrites = this.get("sync-chunk-writes", true) && Boolean.getBoolean("Paper.enable-sync-chunk-writes"); // Paper - Hide sync chunk writes behind flag ++ this.syncChunkWrites = this.get("sync-chunk-writes", false) && Boolean.getBoolean("Paper.enable-sync-chunk-writes"); // Paper - Hide sync chunk writes behind flag // Plazma - Show disabled by default this.enableJmxMonitoring = this.get("enable-jmx-monitoring", false); this.enableStatus = this.get("enable-status", true); this.hideOnlinePlayers = this.get("hide-online-players", false); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 2ddc14cb855997bee88998b73c542b119be4ceda..efdecbdb437f3ba03c11b0050a9bc1fff802531e 100644 +index 0a933294eafc179ec4c8a1145bfdd2be590853b3..c129cf5753a54891dc7379711298f826d16428d9 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -424,7 +424,7 @@ public final class CraftServer implements Server { @@ -407,7 +407,7 @@ index a858b7ddef7f6877c0b92f4150e0dd37bea121aa..eab5ea835a524482f8cc043c7be190a8 } diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 48893da814280aaeba95c1a9e2de9c39df455f93..3d5c0cf532d347602a08565b459697b0868f1a1c 100644 +index c65f68359edfc01bca2c9fd98812d69346631746..bdc0377822ee29abd941b2ac47adaa9b5a4a3770 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -49,6 +49,7 @@ public class PurpurConfig { diff --git a/patches/server/0012-Tweak-console-logging.patch b/patches/server/0012-Tweak-console-logging.patch index 25ee9bc..aee192b 100644 --- a/patches/server/0012-Tweak-console-logging.patch +++ b/patches/server/0012-Tweak-console-logging.patch @@ -4,21 +4,8 @@ Date: Sun, 5 Nov 2023 10:40:49 +0900 Subject: [PATCH] Tweak console logging -diff --git a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -index e4fd372a1d585887287253a02531cd192929377b..6624fb97404c3032d60167e3fb108dcfcd066784 100644 ---- a/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -+++ b/src/main/java/io/papermc/paper/adventure/ChatProcessor.java -@@ -355,7 +355,7 @@ public final class ChatProcessor { - - private void sendToServer(final ChatType.Bound chatType, final @Nullable Function msgFunction) { - final PlayerChatMessage toConsoleMessage = msgFunction == null ? ChatProcessor.this.message : ChatProcessor.this.message.withUnsignedContent(msgFunction.apply(ChatProcessor.this.server.console)); -- ChatProcessor.this.server.logChatMessage(toConsoleMessage.decoratedContent(), chatType, ChatProcessor.this.server.getPlayerList().verifyChatTrusted(toConsoleMessage) ? null : "Not Secure"); -+ ChatProcessor.this.server.logChatMessage(toConsoleMessage.decoratedContent(), chatType, (!org.plazmamc.plazma.configurations.GlobalConfiguration.get().consoleLogs.notSecurePrefix || ChatProcessor.this.server.getPlayerList().verifyChatTrusted(toConsoleMessage)) ? null : "Not Secure"); // Plazma - Tweak console logging - } - } - diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 8fc6b2e4be405d6738fedb91ffee5cbfe4fca67d..5c897d11e6ae17d8feaeedc7edf7ede02571a207 100644 +index d2ea4c6470706138a1e6cebb8c591abb14c96a18..84cf2b2e289af0a43c9cc64a9c7e045ffaf9c62b 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -180,16 +180,6 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -33,24 +20,16 @@ index 8fc6b2e4be405d6738fedb91ffee5cbfe4fca67d..5c897d11e6ae17d8feaeedc7edf7ede0 - DedicatedServer.LOGGER.warn("FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/"); - DedicatedServer.LOGGER.warn("****************************"); - } -- // Paper end +- // Paper end - detect running as root - DedicatedServer.LOGGER.info("Loading properties"); DedicatedServerProperties dedicatedserverproperties = this.settings.getProperties(); -@@ -319,6 +309,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; - String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; - // Paper end -+ if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().consoleLogs.offlineWarnings) // Plazma - Tweak console logging - if (!this.usesAuthentication()) { - DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); - DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); -@@ -335,6 +326,17 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); - } - -+ // Plazma - Moved down - Tweak console logging +@@ -212,6 +202,17 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + this.plazmaConfigurations.initializeGlobalConfiguration(this.registryAccess()); // Plazma - Configurable Plazma + this.plazmaConfigurations.initializeWorldDefaultsConfiguration(this.registryAccess()); // Plazma - Configurable Plazma + // Paper end - initialize global and world-defaults configuration ++ // Plazma - Tweak console logging; Moved down + // Paper start - detect running as root + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().consoleLogs.rootUserWarnings && io.papermc.paper.util.ServerEnvironment.userIsRootOrAdmin()) { + DedicatedServer.LOGGER.warn("****************************"); @@ -59,13 +38,30 @@ index 8fc6b2e4be405d6738fedb91ffee5cbfe4fca67d..5c897d11e6ae17d8feaeedc7edf7ede0 + DedicatedServer.LOGGER.warn("FOR MORE INFORMATION, SEE https://madelinemiller.dev/blog/root-minecraft-server/"); + DedicatedServer.LOGGER.warn("****************************"); + } -+ // Paper end -+ // Plazma end ++ // Paper end - detect running as root ++ // Plazma end - Tweak console logging + // Paper start - fix converting txt to json file; convert old users earlier after PlayerList creation but before file load/save + if (this.convertOldUsers()) { + this.getProfileCache().save(false); // Paper +@@ -319,6 +320,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; + String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; + // Paper end - Add Velocity IP Forwarding Support ++ if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().consoleLogs.offlineWarnings && !(io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.onlineMode)) // Plazma - Tweak console logging + if (!this.usesAuthentication()) { + DedicatedServer.LOGGER.warn("**** SERVER IS RUNNING IN OFFLINE/INSECURE MODE!"); + DedicatedServer.LOGGER.warn("The server will make no attempt to authenticate usernames. Beware."); +@@ -332,7 +334,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + DedicatedServer.LOGGER.warn("While this makes the game possible to play without internet access, it also opens up the ability for hackers to connect with any username they choose."); + } + // Spigot end +- DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file."); ++ DedicatedServer.LOGGER.warn("To change this, set \"online-mode\" to \"true\" in the server.properties file or set \"console-logs.offline-warnings\" to \"false\" in the config/plazma-global.yml file."); // Plazma - Tweak console logging + } + - if (!OldUsersConverter.serverReadyAfterUserconversion(this)) { - return false; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 92717b7aa7ac94a2b1d11b5ba46522057903f981..80dc93b8c96d78a4080c0636b8cd7c470a1e3922 100644 +index e2f58fe299694db1b8975a502b42c832ef23ffb9..3803a04804fc11553c85507a257939552ce4890f 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1468,6 +1468,7 @@ public abstract class PlayerList { diff --git a/patches/server/0013-Add-missing-purpur-configuration-options.patch b/patches/server/0013-Add-missing-purpur-configuration-options.patch index fb0070a..9ad65d0 100644 --- a/patches/server/0013-Add-missing-purpur-configuration-options.patch +++ b/patches/server/0013-Add-missing-purpur-configuration-options.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add missing purpur configuration options 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 c783ce59ea766e6c46a3313628b961f27e01ee8b..3f36eedeae4b94ca684c57f4ec8d2d1ab5c51aae 100644 +index c783ce59ea766e6c46a3313628b961f27e01ee8b..8adcffc1e6434e06ca52d119a7326a1272897307 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 @@ -150,6 +150,23 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -13,7 +13,7 @@ index c783ce59ea766e6c46a3313628b961f27e01ee8b..3f36eedeae4b94ca684c57f4ec8d2d1a this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur } + -+ // Plazma start ++ // Plazma start - Add missing purpur configuration options + @Override + public boolean isSensitiveToWater() { + return level().purpurConfig.allayTakeDamageFromWater; @@ -28,12 +28,12 @@ index c783ce59ea766e6c46a3313628b961f27e01ee8b..3f36eedeae4b94ca684c57f4ec8d2d1a + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(level().purpurConfig.allayMaxHealth); + } -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options // Purpur end @Override 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 b46942c5fafe216039426531a4dbb19bda02c084..17f967569e3fafffa156580da91f03252f70749d 100644 +index fb50a3f3665cca4bb2e586fbd73c580a5d691f69..61d4a78bde54dd90fc7a207f88709be25593c9f4 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 @@ -95,6 +95,18 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -41,7 +41,7 @@ index b46942c5fafe216039426531a4dbb19bda02c084..17f967569e3fafffa156580da91f0325 return this.level().purpurConfig.camelBreedingTicks; } + -+ // Plazma start ++ // Plazma start - Add missing purpur configuration options + @Override + public boolean isSensitiveToWater() { + return level().purpurConfig.camelTakeDamageFromWater; @@ -51,12 +51,12 @@ index b46942c5fafe216039426531a4dbb19bda02c084..17f967569e3fafffa156580da91f0325 + public boolean isAlwaysExperienceDropper() { + return level().purpurConfig.camelAlwaysDropExp; + } -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options // Purpur end @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java -index d6340d0a1308bafd3ba176562bf08dcadec02b34..de5b3f19eea5f63732905fc1f2c95b05c720d134 100644 +index d6340d0a1308bafd3ba176562bf08dcadec02b34..e079f0994c81561510e5d223d2203e349daf07e1 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Frog.java @@ -136,6 +136,23 @@ public class Frog extends Animal implements VariantHolder { @@ -64,7 +64,7 @@ index d6340d0a1308bafd3ba176562bf08dcadec02b34..de5b3f19eea5f63732905fc1f2c95b05 return (getRider() != null && isControllable()) ? level().purpurConfig.frogRidableJumpHeight * this.getBlockJumpFactor() : super.getJumpPower(); } + -+ // Plazma start ++ // Plazma start - Add missing purpur configuration options + @Override + public boolean isSensitiveToWater() { + return level().purpurConfig.frogTakeDamageFromWater; @@ -79,12 +79,12 @@ index d6340d0a1308bafd3ba176562bf08dcadec02b34..de5b3f19eea5f63732905fc1f2c95b05 + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(level().purpurConfig.frogMaxHealth); + } -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options // Purpur end public int getPurpurBreedTime() { 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 14135dac80dec4224715e21cef6556d22e569026..268b36763cdc1c7f001f6561f0812f6102f9b2c3 100644 +index 14135dac80dec4224715e21cef6556d22e569026..60db005620f01cf5f3bc912993c79585c2f5d65a 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 @@ -87,6 +87,23 @@ public class Tadpole extends AbstractFish { @@ -92,7 +92,7 @@ index 14135dac80dec4224715e21cef6556d22e569026..268b36763cdc1c7f001f6561f0812f61 this.goalSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur } + -+ // Plazma start ++ // Plazma start - Add missing purpur configuration options + @Override + public boolean isSensitiveToWater() { + return level().purpurConfig.tadpoleTakeDamageFromWater; @@ -107,12 +107,12 @@ index 14135dac80dec4224715e21cef6556d22e569026..268b36763cdc1c7f001f6561f0812f61 + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(level().purpurConfig.tadpoleMaxHealth); + } -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options // Purpur end @Override diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index dcb10e2ea1e0c7d0479adae5bc2ff57ece172aad..795c93352dfa69fad0e034a8377eceb6dc1e81da 100644 +index 5e7d76dcdc170b809ab82f6e2259c9b4d3d741be..24e351b40745d15e065f4c3cd904596c6daf4cfb 100644 --- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -106,6 +106,18 @@ public class Sniffer extends Animal { @@ -120,7 +120,7 @@ index dcb10e2ea1e0c7d0479adae5bc2ff57ece172aad..795c93352dfa69fad0e034a8377eceb6 return level().purpurConfig.snifferControllable; } + -+ // Plazma start ++ // Plazma start - Add missing purpur configuration options + @Override + public boolean isSensitiveToWater() { + return level().purpurConfig.snifferTakeDamageFromWater; @@ -130,12 +130,12 @@ index dcb10e2ea1e0c7d0479adae5bc2ff57ece172aad..795c93352dfa69fad0e034a8377eceb6 + public boolean isAlwaysExperienceDropper() { + return level().purpurConfig.snifferAlwaysDropExp; + } -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options // Purpur end @Override 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 22263f219ce9e9f014abb76c43297c528acb36eb..2b25c6a85858fe2ad7f0e02f544332c2bfaf9e63 100644 +index bf7ef72a7d92db8f11789a69583270644de0dac7..1f476a4fd148ac9a4c9ad5d12de46a16e4116239 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 @@ -147,6 +147,23 @@ public class Warden extends Monster implements VibrationSystem { @@ -143,7 +143,7 @@ index 22263f219ce9e9f014abb76c43297c528acb36eb..2b25c6a85858fe2ad7f0e02f544332c2 this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur } + -+ // Plazma start ++ // Plazma start - Add missing purpur configuration options + @Override + public boolean isSensitiveToWater() { + return level().purpurConfig.wardenTakeDamageFromWater; @@ -158,12 +158,12 @@ index 22263f219ce9e9f014abb76c43297c528acb36eb..2b25c6a85858fe2ad7f0e02f544332c2 + public void initAttributes() { + this.getAttribute(Attributes.MAX_HEALTH).setBaseValue(level().purpurConfig.wardenMaxHealth); + } -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options // Purpur end @Override diff --git a/src/main/java/net/minecraft/world/entity/vehicle/ChestBoat.java b/src/main/java/net/minecraft/world/entity/vehicle/ChestBoat.java -index bc3fe45d12ffc2069a03d1587b7623d31130565a..fd574aed480b980a231a017bab262acb7c1870b6 100644 +index bc3fe45d12ffc2069a03d1587b7623d31130565a..e11a04e037a18aab942a16ed455b7d3475c7e073 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/ChestBoat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/ChestBoat.java @@ -41,7 +41,7 @@ public class ChestBoat extends Boat implements HasCustomInventoryScreen, Contain @@ -171,7 +171,7 @@ index bc3fe45d12ffc2069a03d1587b7623d31130565a..fd574aed480b980a231a017bab262acb public ChestBoat(EntityType type, Level world) { super(type, world); - this.itemStacks = NonNullList.withSize(27, ItemStack.EMPTY); -+ this.itemStacks = NonNullList.withSize(org.purpurmc.purpur.PurpurConfig.chestBoatRows * 9, ItemStack.EMPTY); // Plazma ++ this.itemStacks = NonNullList.withSize(org.purpurmc.purpur.PurpurConfig.chestBoatRows * 9, ItemStack.EMPTY); // Plazma - Add missing purpur configuration options } public ChestBoat(Level world, double d0, double d1, double d2) { @@ -180,19 +180,19 @@ index bc3fe45d12ffc2069a03d1587b7623d31130565a..fd574aed480b980a231a017bab262acb @Override public int getContainerSize() { - return 27; -+ return org.purpurmc.purpur.PurpurConfig.chestBoatRows * 9; // Plazma ++ return org.purpurmc.purpur.PurpurConfig.chestBoatRows * 9; // Plazma - Add missing purpur configuration options } @Override diff --git a/src/main/java/org/purpurmc/purpur/PurpurConfig.java b/src/main/java/org/purpurmc/purpur/PurpurConfig.java -index 3d5c0cf532d347602a08565b459697b0868f1a1c..9b192ba1ef30a9b295de4971463ba31b2bdc681b 100644 +index bdc0377822ee29abd941b2ac47adaa9b5a4a3770..8d7bc4bb2bc28e962e300232eb5c6f41ce8c7351 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurConfig.java @@ -329,6 +329,7 @@ public class PurpurConfig { } public static int barrelRows = 3; -+ public static int chestBoatRows = 3; // Plazma ++ public static int chestBoatRows = 3; // Plazma - Add missing purpur configuration options public static boolean enderChestSixRows = false; public static boolean enderChestPermissionRows = false; public static boolean cryingObsidianValidForPortalFrame = false; @@ -200,12 +200,12 @@ index 3d5c0cf532d347602a08565b459697b0868f1a1c..9b192ba1ef30a9b295de4971463ba31b case 1 -> 9; default -> 27; }); -+ chestBoatRows = getInt("settings.blocks.chest_boat.rows", chestBoatRows); // Plazma ++ chestBoatRows = getInt("settings.blocks.chest_boat.rows", chestBoatRows); // Plazma - Add missing purpur configuration options enderChestSixRows = getBoolean("settings.blocks.ender_chest.six-rows", enderChestSixRows); org.bukkit.event.inventory.InventoryType.ENDER_CHEST.setDefaultSize(enderChestSixRows ? 54 : 27); enderChestPermissionRows = getBoolean("settings.blocks.ender_chest.use-permissions-for-rows", enderChestPermissionRows); diff --git a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java -index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a2270fd95a49 100644 +index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..39540b37592c7a9d2200b77aeff12887d7fee7fe 100644 --- a/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java +++ b/src/main/java/org/purpurmc/purpur/PurpurWorldConfig.java @@ -1180,7 +1180,15 @@ public class PurpurWorldConfig { @@ -220,7 +220,7 @@ index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a227 + allayMaxHealth = getDouble("mobs.allay.max-health", allayMaxHealth); + allayTakeDamageFromWater = getBoolean("mobs.allay.take-damage-from-water", allayTakeDamageFromWater); + allayAlwaysDropExp = getBoolean("mobs.allay.always-drop-exp", allayAlwaysDropExp); -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options allayRidable = getBoolean("mobs.allay.ridable", allayRidable); allayRidableInWater = getBoolean("mobs.allay.ridable-in-water", allayRidableInWater); allayControllable = getBoolean("mobs.allay.controllable", allayControllable); @@ -236,7 +236,7 @@ index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a227 + //camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); + camelTakeDamageFromWater = getBoolean("mobs.camel.takes-damage-from-water", camelTakeDamageFromWater); + camelAlwaysDropExp = getBoolean("mobs.camel.always-drop-exp", camelAlwaysDropExp); -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options camelRidableInWater = getBoolean("mobs.camel.ridable-in-water", camelRidableInWater); camelMaxHealthMin = getDouble("mobs.camel.attributes.max_health.min", camelMaxHealthMin); camelMaxHealthMax = getDouble("mobs.camel.attributes.max_health.max", camelMaxHealthMax); @@ -252,7 +252,7 @@ index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a227 + frogMaxHealth = getDouble("mobs.frog.attributes.max_health", frogMaxHealth); + frogTakeDamageFromWater = getBoolean("mobs.frog.takes-damage-from-water", frogTakeDamageFromWater); + frogAlwaysDropExp = getBoolean("mobs.frog.always-drop-exp", frogAlwaysDropExp); -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options frogRidable = getBoolean("mobs.frog.ridable", frogRidable); frogRidableInWater = getBoolean("mobs.frog.ridable-in-water", frogRidableInWater); frogControllable = getBoolean("mobs.frog.controllable", frogControllable); @@ -266,7 +266,7 @@ index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a227 private void snifferSettings() { + snifferTakeDamageFromWater = getBoolean("mobs.sniffer.takes-damage-from-water", snifferTakeDamageFromWater); + snifferAlwaysDropExp = getBoolean("mobs.sniffer.always-drop-exp", snifferAlwaysDropExp); -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options snifferRidable = getBoolean("mobs.sniffer.ridable", snifferRidable); snifferRidableInWater = getBoolean("mobs.sniffer.ridable-in-water", snifferRidableInWater); snifferControllable = getBoolean("mobs.sniffer.controllable", snifferControllable); @@ -282,7 +282,7 @@ index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a227 + tadpoleMaxHealth = getDouble("mobs.tadpole.attributes.max_health", tadpoleMaxHealth); + tadpoleTakeDamageFromWater = getBoolean("mobs.tadpole.takes-damage-from-water", tadpoleTakeDamageFromWater); + tadpoleAlwaysDropExp = getBoolean("mobs.tadpole.always-drop-exp", tadpoleAlwaysDropExp); -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options tadpoleRidable = getBoolean("mobs.tadpole.ridable", tadpoleRidable); tadpoleRidableInWater = getBoolean("mobs.tadpole.ridable-in-water", tadpoleRidableInWater); tadpoleControllable = getBoolean("mobs.tadpole.controllable", tadpoleControllable); @@ -298,7 +298,7 @@ index fde8e2f6c58a2e36dab4cfbc2b1a13f3d7177195..81bb1f593f6f142e212fe6cff116a227 + wardenMaxHealth = getDouble("mobs.warden.attributes.max_health", wardenMaxHealth); + wardenTakeDamageFromWater = getBoolean("mobs.warden.takes-damage-from-water", wardenTakeDamageFromWater); + wardenAlwaysDropExp = getBoolean("mobs.warden.always-drop-exp", wardenAlwaysDropExp); -+ // Plazma end ++ // Plazma end - Add missing purpur configuration options wardenRidable = getBoolean("mobs.warden.ridable", wardenRidable); wardenRidableInWater = getBoolean("mobs.warden.ridable-in-water", wardenRidableInWater); wardenControllable = getBoolean("mobs.warden.controllable", wardenControllable); diff --git a/patches/server/0014-Add-some-missing-Pufferfish-configurations.patch b/patches/server/0014-Add-some-missing-Pufferfish-configurations.patch index 3dbe907..290d9ee 100644 --- a/patches/server/0014-Add-some-missing-Pufferfish-configurations.patch +++ b/patches/server/0014-Add-some-missing-Pufferfish-configurations.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Add some missing Pufferfish configurations 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 17f967569e3fafffa156580da91f03252f70749d..affe9dc4b8ea092c92b6708ab3a864b04bbc8c9a 100644 +index 61d4a78bde54dd90fc7a207f88709be25593c9f4..ef09fae1a46f4b37adfad059b0accb80845c8b7c 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 @@ -168,10 +168,12 @@ public class Camel extends AbstractHorse implements PlayerRideableJumping, Saddl @@ -22,7 +22,7 @@ index 17f967569e3fafffa156580da91f03252f70749d..affe9dc4b8ea092c92b6708ab3a864b0 //this.level().getProfiler().pop(); // Purpur //this.level().getProfiler().push("camelActivityUpdate"); // Purpur diff --git a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java -index 795c93352dfa69fad0e034a8377eceb6dc1e81da..e743b4891c1e56f82d40f798e456a701b0efbc73 100644 +index 24e351b40745d15e065f4c3cd904596c6daf4cfb..aa60c4a251de2877a9b4ea72899f07194ce15ed7 100644 --- a/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java +++ b/src/main/java/net/minecraft/world/entity/animal/sniffer/Sniffer.java @@ -527,9 +527,11 @@ public class Sniffer extends Animal { @@ -38,7 +38,7 @@ index 795c93352dfa69fad0e034a8377eceb6dc1e81da..e743b4891c1e56f82d40f798e456a701 //this.level().getProfiler().popPush("snifferActivityUpdate"); // Purpur SnifferAi.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 2b25c6a85858fe2ad7f0e02f544332c2bfaf9e63..0386aeaeee04b62cc30badb30dd6dcd34d6045b7 100644 +index 1f476a4fd148ac9a4c9ad5d12de46a16e4116239..707fd662c7f17986fffcabe774de176741456227 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 @@ -320,7 +320,7 @@ public class Warden extends Monster implements VibrationSystem { @@ -46,7 +46,7 @@ index 2b25c6a85858fe2ad7f0e02f544332c2bfaf9e63..0386aeaeee04b62cc30badb30dd6dcd3 //worldserver.getProfiler().push("wardenBrain"); // Purpur - if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish -+ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Plazma ++ if ((getRider() == null || !this.isControllable()) && this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish // Plazma - Add missing pufferfish configurations this.getBrain().tick(worldserver, this); //this.level().getProfiler().pop(); // Purpur super.customServerAiStep(); diff --git a/patches/server/0015-Completely-remove-Mojang-Profiler.patch b/patches/server/0015-Completely-remove-Mojang-Profiler.patch index 33f1ece..892355c 100644 --- a/patches/server/0015-Completely-remove-Mojang-Profiler.patch +++ b/patches/server/0015-Completely-remove-Mojang-Profiler.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Completely remove Mojang Profiler diff --git a/src/main/java/net/minecraft/commands/Commands.java b/src/main/java/net/minecraft/commands/Commands.java -index 35563a94879fe77f98d43d97cc6ba57b24906c23..1ecbd34e4066dd33047d2a0d081eb257e3409222 100644 +index cf1644a4b38224c467a074edd12e8d146a77fee0..7577f438f8d7161f8d8b0b91f48b899878edba4b 100644 --- a/src/main/java/net/minecraft/commands/Commands.java +++ b/src/main/java/net/minecraft/commands/Commands.java @@ -435,7 +435,7 @@ public class Commands { @@ -13,12 +13,12 @@ index 35563a94879fe77f98d43d97cc6ba57b24906c23..1ecbd34e4066dd33047d2a0d081eb257 try { - ExecutionContext executioncontext1 = new ExecutionContext<>(i, j, minecraftserver.getProfiler()); -+ ExecutionContext executioncontext1 = new ExecutionContext<>(i, j/*, minecraftserver.getProfiler()*/); // Plazma - Completely remove profiler ++ ExecutionContext executioncontext1 = new ExecutionContext<>(i, j); //, minecraftserver.getProfiler()); // Plazma - Completely remove Mojang Profiler try { Commands.CURRENT_EXECUTION_CONTEXT.set(executioncontext1); diff --git a/src/main/java/net/minecraft/commands/execution/ExecutionContext.java b/src/main/java/net/minecraft/commands/execution/ExecutionContext.java -index 38854a047c6da7e2551f206478d17628e765168d..2f72549549d4d79251baaf1339dbb482703ab2c9 100644 +index 38854a047c6da7e2551f206478d17628e765168d..c989f0ddca966cb522fca68734baa5cc5231272f 100644 --- a/src/main/java/net/minecraft/commands/execution/ExecutionContext.java +++ b/src/main/java/net/minecraft/commands/execution/ExecutionContext.java @@ -12,7 +12,7 @@ import net.minecraft.commands.ExecutionCommandSource; @@ -26,7 +26,7 @@ index 38854a047c6da7e2551f206478d17628e765168d..2f72549549d4d79251baaf1339dbb482 import net.minecraft.commands.execution.tasks.CallFunction; import net.minecraft.commands.functions.InstantiatedFunction; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import org.slf4j.Logger; public class ExecutionContext implements AutoCloseable { @@ -35,7 +35,7 @@ index 38854a047c6da7e2551f206478d17628e765168d..2f72549549d4d79251baaf1339dbb482 private final int commandLimit; private final int forkLimit; - private final ProfilerFiller profiler; -+ //private final ProfilerFiller profiler; // Plazma - Completely remove profiler ++ //private final ProfilerFiller profiler; // Plazma - Completely remove Mojang Profiler @Nullable private TraceCallbacks tracer; private int commandQuota; @@ -44,11 +44,11 @@ index 38854a047c6da7e2551f206478d17628e765168d..2f72549549d4d79251baaf1339dbb482 private int currentFrameDepth; - public ExecutionContext(int maxCommandChainLength, int maxCommandForkCount, ProfilerFiller profiler) { -+ public ExecutionContext(int maxCommandChainLength, int maxCommandForkCount/*, ProfilerFiller profiler*/) { // Plazma - Completely remove profiler ++ public ExecutionContext(int maxCommandChainLength, int maxCommandForkCount/*, ProfilerFiller profiler*/) { // Plazma - Completely remove Mojang Profiler this.commandLimit = maxCommandChainLength; this.forkLimit = maxCommandForkCount; - this.profiler = profiler; -+ //this.profiler = profiler; // Plazma - Completely remove profiler ++ //this.profiler = profiler; // Plazma - Completely remove Mojang Profiler this.commandQuota = maxCommandChainLength; } @@ -56,90 +56,99 @@ index 38854a047c6da7e2551f206478d17628e765168d..2f72549549d4d79251baaf1339dbb482 return this.tracer; } -+ /* // Plazma - Completely remove profiler ++ /* // Plazma - Completely remove Mojang Profiler public ProfilerFiller profiler() { return this.profiler; } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler public int forkLimit() { return this.forkLimit; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index b0c8943b3ad6c2d29b46ce387d349f91acc899f1..6b98e5140e946b4d728c281417cc37dc60413ba1 100644 +index a837ac3d163457a150f01fc3083eaee23b0ae53c..c25c6c55b5ef2f718acc7eda98837fc35e547783 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -113,16 +113,16 @@ import net.minecraft.util.Unit; +@@ -113,16 +113,18 @@ import net.minecraft.util.Unit; import net.minecraft.util.datafix.DataFixers; import net.minecraft.util.profiling.EmptyProfileResults; import net.minecraft.util.profiling.ProfileResults; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++// import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.util.profiling.ResultField; -import net.minecraft.util.profiling.SingleTickProfiler; -+//import net.minecraft.util.profiling.SingleTickProfiler; // Plazma - Completely remove profiler ++// import net.minecraft.util.profiling.SingleTickProfiler; // Plazma - Completely remove Mojang Profiler import net.minecraft.util.profiling.jfr.JvmProfiler; import net.minecraft.util.profiling.jfr.callback.ProfiledDuration; --import net.minecraft.util.profiling.metrics.profiling.ActiveMetricsRecorder; --import net.minecraft.util.profiling.metrics.profiling.InactiveMetricsRecorder; --import net.minecraft.util.profiling.metrics.profiling.MetricsRecorder; --import net.minecraft.util.profiling.metrics.profiling.ServerMetricsSamplersProvider; --import net.minecraft.util.profiling.metrics.storage.MetricsPersister; -+//import net.minecraft.util.profiling.metrics.profiling.ActiveMetricsRecorder; // Plazma - Completely remove profiler -+//import net.minecraft.util.profiling.metrics.profiling.InactiveMetricsRecorder; // Plazma - Completely remove profiler -+//import net.minecraft.util.profiling.metrics.profiling.MetricsRecorder; // Plazma - Completely remove profiler -+//import net.minecraft.util.profiling.metrics.profiling.ServerMetricsSamplersProvider; // Plazma - Completely remove profiler -+//import net.minecraft.util.profiling.metrics.storage.MetricsPersister; // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler + import net.minecraft.util.profiling.metrics.profiling.ActiveMetricsRecorder; + import net.minecraft.util.profiling.metrics.profiling.InactiveMetricsRecorder; + import net.minecraft.util.profiling.metrics.profiling.MetricsRecorder; + import net.minecraft.util.profiling.metrics.profiling.ServerMetricsSamplersProvider; + import net.minecraft.util.profiling.metrics.storage.MetricsPersister; ++ */ // Plazma - Completely remove Mojang Profiler import net.minecraft.util.thread.ReentrantBlockableEventLoop; import net.minecraft.world.Difficulty; import net.minecraft.world.RandomSequences; -@@ -217,11 +217,11 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop tickables = Lists.newArrayList(); -- private MetricsRecorder metricsRecorder; -- private ProfilerFiller profiler; -- private Consumer onMetricsRecordingStopped; -- private Consumer onMetricsRecordingFinished; -- private boolean willStartRecordingMetrics; -+ //private MetricsRecorder metricsRecorder; // Plazma - Completely remove profiler -+ //private ProfilerFiller profiler; // Plazma - Completely remove profiler -+ //private Consumer onMetricsRecordingStopped; // Plazma - Completely remove profiler -+ //private Consumer onMetricsRecordingFinished; // Plazma - Completely remove profiler -+ //private boolean willStartRecordingMetrics; // Plazma - Completely remove profiler ++ /* // Plazma - Completely remove Mojang Profiler + private MetricsRecorder metricsRecorder; + private ProfilerFiller profiler; + private Consumer onMetricsRecordingStopped; + private Consumer onMetricsRecordingFinished; + private boolean willStartRecordingMetrics; ++ */ // Plazma - Completely remove Mojang Profiler @Nullable private MinecraftServer.TimeProfiler debugCommandProfiler; private boolean debugCommandProfilerDelayStart; -@@ -2485,10 +2485,12 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop { -@@ -2740,6 +2743,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop resultConsumer, Consumer dumpConsumer) { +- /*this.onMetricsRecordingStopped = (methodprofilerresults) -> { // Purpur ++ /this.onMetricsRecordingStopped = (methodprofilerresults) -> { // Purpur // Plazma - Fix for IDE + this.stopRecordingMetrics(); + resultConsumer.accept(methodprofilerresults); + }; + this.onMetricsRecordingFinished = dumpConsumer; +- this.willStartRecordingMetrics = true;*/ // Purpur ++ this.willStartRecordingMetrics = true;/ // Purpur // Plazma - Fix for IDE + } + + public void stopRecordingMetrics() { +@@ -2771,6 +2778,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop prepared, ResourceManager manager, ProfilerFiller profiler) { -+ protected void apply(Map prepared, ResourceManager manager/*, ProfilerFiller profiler*/) { // Plazma - Completely remove profiler ++ protected void apply(Map prepared, ResourceManager manager/*, ProfilerFiller profiler*/) { // Plazma - Completely remove Mojang Profiler Builder builder = ImmutableMap.builder(); prepared.forEach((minecraftkey, jsonelement) -> { diff --git a/src/main/java/net/minecraft/server/ServerFunctionLibrary.java b/src/main/java/net/minecraft/server/ServerFunctionLibrary.java -index de2eb71bb6933f2bd06859bc2c56fd0ad15ab71a..0a4caef179e1cbb280381a495dea4e922e4aafe8 100644 +index de2eb71bb6933f2bd06859bc2c56fd0ad15ab71a..f65d6dc2b1596232707be402cf0377b5ab90cc01 100644 --- a/src/main/java/net/minecraft/server/ServerFunctionLibrary.java +++ b/src/main/java/net/minecraft/server/ServerFunctionLibrary.java @@ -25,7 +25,7 @@ import net.minecraft.server.packs.resources.PreparableReloadListener; @@ -169,7 +178,7 @@ index de2eb71bb6933f2bd06859bc2c56fd0ad15ab71a..0a4caef179e1cbb280381a495dea4e92 import net.minecraft.server.packs.resources.ResourceManager; import net.minecraft.tags.TagLoader; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.world.entity.Entity; import net.minecraft.world.phys.Vec2; import net.minecraft.world.phys.Vec3; @@ -178,12 +187,12 @@ index de2eb71bb6933f2bd06859bc2c56fd0ad15ab71a..0a4caef179e1cbb280381a495dea4e92 @Override - public CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor) { -+ public CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, /*ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler,*/ Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove profiler ++ public CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, /*ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler,*/ Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove Mojang Profiler CompletableFuture>> completableFuture = CompletableFuture.supplyAsync(() -> { return this.tagsLoader.load(manager); }, prepareExecutor); diff --git a/src/main/java/net/minecraft/server/ServerFunctionManager.java b/src/main/java/net/minecraft/server/ServerFunctionManager.java -index 5dd0dcb47211cec69189115bf4eab1dffc3ca8cf..6a4229a8a84dbdd915682177893b06bae81fd119 100644 +index 5dd0dcb47211cec69189115bf4eab1dffc3ca8cf..1b54ec6a39f40f3334b49348941290b5efa7f07b 100644 --- a/src/main/java/net/minecraft/server/ServerFunctionManager.java +++ b/src/main/java/net/minecraft/server/ServerFunctionManager.java @@ -16,7 +16,7 @@ import net.minecraft.commands.functions.CommandFunction; @@ -191,12 +200,12 @@ index 5dd0dcb47211cec69189115bf4eab1dffc3ca8cf..6a4229a8a84dbdd915682177893b06ba import net.minecraft.nbt.CompoundTag; import net.minecraft.resources.ResourceLocation; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import org.slf4j.Logger; public class ServerFunctionManager { diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 172c7b94830c13835e48d68a039bd66e7e7622b0..5a8b27dc3c82396123f681dbf466cab3527055bf 100644 +index 6e7e71c7962d43f2d4fbd218f2017557ddd53eb2..14813ee7f00b082707539b6754b703375adf3c61 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java @@ -68,7 +68,7 @@ import net.minecraft.server.level.progress.ChunkProgressListener; @@ -204,12 +213,12 @@ index 172c7b94830c13835e48d68a039bd66e7e7622b0..5a8b27dc3c82396123f681dbf466cab3 import net.minecraft.util.CsvOutput; import net.minecraft.util.Mth; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.util.thread.BlockableEventLoop; import net.minecraft.util.thread.ProcessorHandle; import net.minecraft.util.thread.ProcessorMailbox; diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index c3c47857515a7f75d69c718f352d8bae4b2c1d26..246345be61ce31baf9721002cc5a880b80fcec17 100644 +index a5067485fb6683e3255681a9c5a6df86c90ce0fa..837a15b271c8d3bb73ce2a821ffae8ea259e67c6 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java @@ -23,7 +23,7 @@ import net.minecraft.core.SectionPos; @@ -217,12 +226,12 @@ index c3c47857515a7f75d69c718f352d8bae4b2c1d26..246345be61ce31baf9721002cc5a880b import net.minecraft.server.level.progress.ChunkProgressListener; import net.minecraft.util.VisibleForDebug; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.util.thread.BlockableEventLoop; import net.minecraft.world.entity.Entity; import net.minecraft.world.entity.ai.village.poi.PoiManager; diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 9d5b6303fe1ecfe84c935b0811705dbefe6995d0..3902656486aa4fffc448a0f513b5e6564a20d3ad 100644 +index fdc5b9e2c5dd5b99f06b21ddb42a00c7238bc84d..4f1d092d9bb41c87aa2db9d5b2ffc98907515e53 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java @@ -78,7 +78,7 @@ import net.minecraft.util.Mth; @@ -230,16 +239,16 @@ index 9d5b6303fe1ecfe84c935b0811705dbefe6995d0..3902656486aa4fffc448a0f513b5e656 import net.minecraft.util.RandomSource; import net.minecraft.util.Unit; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.util.valueproviders.IntProvider; import net.minecraft.util.valueproviders.UniformInt; import net.minecraft.world.DifficultyInstance; -@@ -700,15 +700,15 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -695,15 +695,15 @@ public class ServerLevel extends Level implements WorldGenLevel { // Holder holder = worlddimension.type(); // CraftBukkit - decompile error // Objects.requireNonNull(minecraftserver); // CraftBukkit - decompile error -- super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor -+ super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), /*minecraftserver::getProfiler,*/ false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor // Plazma - Completely remove Mojang Profiler +- super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), minecraftserver::getProfiler, false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor // Plazma - Configurable Plazma ++ super(iworlddataserver, resourcekey, minecraftserver.registryAccess(), worlddimension.type(), /*minecraftserver::getProfiler,*/ false, flag, i, minecraftserver.getMaxChainedNeighborUpdates(), gen, biomeProvider, env, spigotConfig -> minecraftserver.paperConfigurations.createWorldConfig(io.papermc.paper.configuration.PaperConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), spigotConfig -> minecraftserver.plazmaConfigurations.createWorldConfig(org.plazmamc.plazma.configurations.PlazmaConfigurations.createWorldContextMap(convertable_conversionsession.levelDirectory.path(), iworlddataserver.getLevelName(), resourcekey.location(), spigotConfig, minecraftserver.registryAccess())), executor); // Paper - create paper world configs; Async-Anti-Xray: Pass executor // Plazma - Configurable Plazma // Plazma - Completely remove Mojang Profiler this.pvpMode = minecraftserver.isPvpAllowed(); this.convertable = convertable_conversionsession; this.uuid = WorldUUID.getUUID(convertable_conversionsession.levelDirectory.path().toFile()); @@ -248,13 +257,13 @@ index 9d5b6303fe1ecfe84c935b0811705dbefe6995d0..3902656486aa4fffc448a0f513b5e656 this.entityTickList = new EntityTickList(); - this.blockTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded, this.getProfilerSupplier()); - this.fluidTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded, this.getProfilerSupplier()); -+ this.blockTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded);//, this.getProfilerSupplier()); // Plazma - Completely remove profiler -+ this.fluidTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded);//, this.getProfilerSupplier()); // Plazma - Completely remove profiler ++ this.blockTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded); //, this.getProfilerSupplier()); // Plazma - Completely remove Mojang Profiler ++ this.fluidTicks = new LevelTicks<>(this::isPositionTickingWithEntitiesLoaded); //, this.getProfilerSupplier()); // Plazma - Completely remove Mojang Profiler this.navigatingMobs = new ObjectOpenHashSet(); this.blockEvents = new ObjectLinkedOpenHashSet(); this.blockEventsToReschedule = new ArrayList(64); diff --git a/src/main/java/net/minecraft/server/packs/resources/PreparableReloadListener.java b/src/main/java/net/minecraft/server/packs/resources/PreparableReloadListener.java -index 828196decc89e7e03f88c4a3208ee1ab2bb69242..c0088e0e566abb928c8dcd6f819d82cc1122589b 100644 +index 828196decc89e7e03f88c4a3208ee1ab2bb69242..daa0e38490d576ba143636d2a4c3e308461ad408 100644 --- a/src/main/java/net/minecraft/server/packs/resources/PreparableReloadListener.java +++ b/src/main/java/net/minecraft/server/packs/resources/PreparableReloadListener.java @@ -2,10 +2,10 @@ package net.minecraft.server.packs.resources; @@ -262,16 +271,16 @@ index 828196decc89e7e03f88c4a3208ee1ab2bb69242..c0088e0e566abb928c8dcd6f819d82cc import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler public interface PreparableReloadListener { - CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor); -+ CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor); // Plazma - Completely remove profiler ++ CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor); // Plazma - Completely remove Mojang Profiler default String getName() { return this.getClass().getSimpleName(); diff --git a/src/main/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java b/src/main/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java -index 7383c7d3820dce06108eaafd236a7c6c06a10a42..4e1f4e026cd7c566468a58b2ea232d5dee80b86f 100644 +index 7383c7d3820dce06108eaafd236a7c6c06a10a42..6324dafd01eafcf8663c1b739efbc064c8498782 100644 --- a/src/main/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java +++ b/src/main/java/net/minecraft/server/packs/resources/ResourceManagerReloadListener.java @@ -3,11 +3,11 @@ package net.minecraft.server.packs.resources; @@ -279,17 +288,17 @@ index 7383c7d3820dce06108eaafd236a7c6c06a10a42..4e1f4e026cd7c566468a58b2ea232d5d import java.util.concurrent.Executor; import net.minecraft.util.Unit; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler public interface ResourceManagerReloadListener extends PreparableReloadListener { @Override - default CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor) { -+ default CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove profiler ++ default CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove Mojang Profiler return synchronizer.wait(Unit.INSTANCE).thenRunAsync(() -> { //applyProfiler.startTick(); // Purpur //applyProfiler.push("listener"); // Purpur diff --git a/src/main/java/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java b/src/main/java/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java -index 9cc09f0415a09299102dbcf022326944368ea033..2e9e63f3ee6268cafa3b90666cf31019e7341dbb 100644 +index 9cc09f0415a09299102dbcf022326944368ea033..13b5b1b9ddea35d9b4bc69bba1e15deb5669c4e0 100644 --- a/src/main/java/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java +++ b/src/main/java/net/minecraft/server/packs/resources/SimpleJsonResourceReloadListener.java @@ -11,7 +11,7 @@ import java.util.Map; @@ -297,7 +306,7 @@ index 9cc09f0415a09299102dbcf022326944368ea033..2e9e63f3ee6268cafa3b90666cf31019 import net.minecraft.resources.ResourceLocation; import net.minecraft.util.GsonHelper; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import org.slf4j.Logger; public abstract class SimpleJsonResourceReloadListener extends SimplePreparableReloadListener> { @@ -311,7 +320,7 @@ index 9cc09f0415a09299102dbcf022326944368ea033..2e9e63f3ee6268cafa3b90666cf31019 scanDirectory(resourceManager, this.directory, this.gson, map); return map; diff --git a/src/main/java/net/minecraft/server/packs/resources/SimplePreparableReloadListener.java b/src/main/java/net/minecraft/server/packs/resources/SimplePreparableReloadListener.java -index 7ab57748b2f2aea1003d9b7e70e76c372aa1e432..7de117e0464a24da632d134870554fd11e1b87ca 100644 +index 7ab57748b2f2aea1003d9b7e70e76c372aa1e432..c5d72ce3a55110c9d53477adba5e56ea4108665a 100644 --- a/src/main/java/net/minecraft/server/packs/resources/SimplePreparableReloadListener.java +++ b/src/main/java/net/minecraft/server/packs/resources/SimplePreparableReloadListener.java @@ -2,19 +2,19 @@ package net.minecraft.server.packs.resources; @@ -319,26 +328,26 @@ index 7ab57748b2f2aea1003d9b7e70e76c372aa1e432..7de117e0464a24da632d134870554fd1 import java.util.concurrent.CompletableFuture; import java.util.concurrent.Executor; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler public abstract class SimplePreparableReloadListener implements PreparableReloadListener { @Override - public final CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor) { -+ public final CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove profiler ++ public final CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove Mojang Profiler return CompletableFuture.supplyAsync(() -> { - return this.prepare(manager, prepareProfiler); -+ return this.prepare(manager/*, prepareProfiler*/); // Plazma - Completely remove profiler ++ return this.prepare(manager/*, prepareProfiler*/); // Plazma - Completely remove Mojang Profiler }, prepareExecutor).thenCompose(synchronizer::wait).thenAcceptAsync((prepared) -> { - this.apply(prepared, manager, applyProfiler); -+ this.apply(prepared, manager/*, applyProfiler*/); // Plazma - Completely remove profiler ++ this.apply(prepared, manager/*, applyProfiler*/); // Plazma - Completely remove Mojang Profiler }, applyExecutor); } - protected abstract T prepare(ResourceManager manager, ProfilerFiller profiler); -+ protected abstract T prepare(ResourceManager manager/*, ProfilerFiller profiler*/); // Plazma - Completely remove profiler ++ protected abstract T prepare(ResourceManager manager/*, ProfilerFiller profiler*/); // Plazma - Completely remove Mojang Profiler - protected abstract void apply(T prepared, ResourceManager manager, ProfilerFiller profiler); -+ protected abstract void apply(T prepared, ResourceManager manager/*, ProfilerFiller profiler*/); // Plazma - Completely remove profiler ++ protected abstract void apply(T prepared, ResourceManager manager/*, ProfilerFiller profiler*/); // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/server/packs/resources/SimpleReloadInstance.java b/src/main/java/net/minecraft/server/packs/resources/SimpleReloadInstance.java index de2ecc7c69fb870f843f60596115866214267ee4..b9c89ce6d94aeb16fa6ea28d6b82aeea270790bf 100644 @@ -363,7 +372,7 @@ index de2ecc7c69fb870f843f60596115866214267ee4..b9c89ce6d94aeb16fa6ea28d6b82aeea } diff --git a/src/main/java/net/minecraft/tags/TagManager.java b/src/main/java/net/minecraft/tags/TagManager.java -index 60ed9413c32d91ce33583cc24998d08869d07a23..67c0d8f7294e18c7b2107b82219bc106608a21f0 100644 +index 60ed9413c32d91ce33583cc24998d08869d07a23..2919eaa15c64165c826b68dacc3e8c6905e7630a 100644 --- a/src/main/java/net/minecraft/tags/TagManager.java +++ b/src/main/java/net/minecraft/tags/TagManager.java @@ -14,7 +14,7 @@ import net.minecraft.resources.ResourceKey; @@ -371,7 +380,7 @@ index 60ed9413c32d91ce33583cc24998d08869d07a23..67c0d8f7294e18c7b2107b82219bc106 import net.minecraft.server.packs.resources.PreparableReloadListener; import net.minecraft.server.packs.resources.ResourceManager; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler public class TagManager implements PreparableReloadListener { private static final Map>, String> CUSTOM_REGISTRY_DIRECTORIES = Map.of(Registries.BLOCK, "tags/blocks", Registries.ENTITY_TYPE, "tags/entity_types", Registries.FLUID, "tags/fluids", Registries.GAME_EVENT, "tags/game_events", Registries.ITEM, "tags/items"); @@ -380,18 +389,18 @@ index 60ed9413c32d91ce33583cc24998d08869d07a23..67c0d8f7294e18c7b2107b82219bc106 @Override - public CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor) { -+ public CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove profiler ++ public CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager/*, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler*/, Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove Mojang Profiler List>> list = this.registryAccess.registries().map((registry) -> { return this.createLoader(manager, prepareExecutor, registry); }).toList(); diff --git a/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java b/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java -index c6c30d99399c5cde2b0ec2f320d81d952b422d78..9800974e23ffa29a264f733db4df08e944cb7fbd 100644 +index c6c30d99399c5cde2b0ec2f320d81d952b422d78..ff4f6f23086913b45a58407e31f2a5edc10e5bdd 100644 --- a/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java +++ b/src/main/java/net/minecraft/util/profiling/ActiveProfiler.java @@ -1,5 +1,6 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.google.common.collect.Lists; import com.google.common.collect.Maps; import com.mojang.logging.LogUtils; @@ -399,10 +408,10 @@ index c6c30d99399c5cde2b0ec2f320d81d952b422d78..9800974e23ffa29a264f733db4df08e9 import net.minecraft.util.profiling.metrics.MetricCategory; import org.apache.commons.lang3.tuple.Pair; import org.slf4j.Logger; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class ActiveProfiler implements ProfileCollector { -+interface ActiveProfiler { /*implements ProfileCollector { // Plazma - Completely remove profiler ++interface ActiveProfiler { /*implements ProfileCollector { // Plazma - Completely remove Mojang Profiler private static final long WARNING_TIME_NANOS = Duration.ofMillis(100L).toNanos(); private static final Logger LOGGER = LogUtils.getLogger(); private final List paths = Lists.newArrayList(); @@ -410,22 +419,22 @@ index c6c30d99399c5cde2b0ec2f320d81d952b422d78..9800974e23ffa29a264f733db4df08e9 return Object2LongMaps.unmodifiable(this.counters); } } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/ContinuousProfiler.java b/src/main/java/net/minecraft/util/profiling/ContinuousProfiler.java -index 4424bca7effa4fef26453afcd06d86e6a30d7b8f..01efc02c02750e8f046bddd6786c6bb076c2146e 100644 +index 4424bca7effa4fef26453afcd06d86e6a30d7b8f..76044b62cba0e2d1956b932eb8bdb99049ac79af 100644 --- a/src/main/java/net/minecraft/util/profiling/ContinuousProfiler.java +++ b/src/main/java/net/minecraft/util/profiling/ContinuousProfiler.java @@ -1,9 +1,11 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import java.util.function.IntSupplier; import java.util.function.LongSupplier; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class ContinuousProfiler { -+interface ContinuousProfiler { /* // Plazma - Completely remove profiler ++interface ContinuousProfiler { /* // Plazma - Completely remove Mojang Profiler private final LongSupplier realTime; private final IntSupplier tickCount; private ProfileCollector profiler = InactiveProfiler.INSTANCE; @@ -433,16 +442,16 @@ index 4424bca7effa4fef26453afcd06d86e6a30d7b8f..01efc02c02750e8f046bddd6786c6bb0 public ProfileResults getResults() { return this.profiler.getResults(); } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/FilledProfileResults.java b/src/main/java/net/minecraft/util/profiling/FilledProfileResults.java -index 253a5221bc0d99f0bcbab18ad0d15b99b0d8f5f6..4a6410bb32a26190cee6580458f22392e9cce516 100644 +index 253a5221bc0d99f0bcbab18ad0d15b99b0d8f5f6..92886cebd9dca26524b7d970fde4f2d31798a7f3 100644 --- a/src/main/java/net/minecraft/util/profiling/FilledProfileResults.java +++ b/src/main/java/net/minecraft/util/profiling/FilledProfileResults.java @@ -1,5 +1,6 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.google.common.base.Splitter; import com.google.common.collect.Lists; import com.google.common.collect.Maps; @@ -450,10 +459,10 @@ index 253a5221bc0d99f0bcbab18ad0d15b99b0d8f5f6..4a6410bb32a26190cee6580458f22392 import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.ObjectUtils; import org.slf4j.Logger; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class FilledProfileResults implements ProfileResults { -+final class FilledProfileResults { /* implements ProfileResults { // Plazma - Completely remove profiler ++final class FilledProfileResults { /* implements ProfileResults { // Plazma - Completely remove Mojang Profiler private static final Logger LOGGER = LogUtils.getLogger(); private static final ProfilerPathEntry EMPTY = new ProfilerPathEntry() { @Override @@ -461,26 +470,26 @@ index 253a5221bc0d99f0bcbab18ad0d15b99b0d8f5f6..4a6410bb32a26190cee6580458f22392 } } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/InactiveProfiler.java b/src/main/java/net/minecraft/util/profiling/InactiveProfiler.java -index 5d2d8018460c04f7314c872441a8b21bc296c1ea..fcfe21038a647e6ac404c8c248044871282ba386 100644 +index 5d2d8018460c04f7314c872441a8b21bc296c1ea..a4249befbdd2098fd391120542715ddd85e2fe9a 100644 --- a/src/main/java/net/minecraft/util/profiling/InactiveProfiler.java +++ b/src/main/java/net/minecraft/util/profiling/InactiveProfiler.java @@ -1,13 +1,15 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.google.common.collect.ImmutableSet; import java.util.Set; import java.util.function.Supplier; import javax.annotation.Nullable; import net.minecraft.util.profiling.metrics.MetricCategory; import org.apache.commons.lang3.tuple.Pair; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class InactiveProfiler implements ProfileCollector { -+interface InactiveProfiler { /* implements ProfileCollector { // Plazma - Completely remove profiler ++interface InactiveProfiler { /* implements ProfileCollector { // Plazma - Completely remove Mojang Profiler public static final InactiveProfiler INSTANCE = new InactiveProfiler(); private InactiveProfiler() { @@ -488,46 +497,46 @@ index 5d2d8018460c04f7314c872441a8b21bc296c1ea..fcfe21038a647e6ac404c8c248044871 public Set> getChartedPaths() { return ImmutableSet.of(); } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/ProfileCollector.java b/src/main/java/net/minecraft/util/profiling/ProfileCollector.java -index fe47a3ce6318ad74bd4d9b10dbf5ee06c94b6939..26d23cdaddaf734de498d427178370a386f1685b 100644 +index fe47a3ce6318ad74bd4d9b10dbf5ee06c94b6939..97864e2adcc7651435cf1cafca816dbf36ca397a 100644 --- a/src/main/java/net/minecraft/util/profiling/ProfileCollector.java +++ b/src/main/java/net/minecraft/util/profiling/ProfileCollector.java @@ -1,15 +1,18 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import java.util.Set; import javax.annotation.Nullable; import net.minecraft.util.profiling.metrics.MetricCategory; import org.apache.commons.lang3.tuple.Pair; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public interface ProfileCollector extends ProfilerFiller { -+interface ProfileCollector { /* extends ProfilerFiller { // Plazma - Completely remove profiler ++interface ProfileCollector { /* extends ProfilerFiller { // Plazma - Completely remove Mojang Profiler ProfileResults getResults(); @Nullable ActiveProfiler.PathEntry getEntry(String name); Set> getChartedPaths(); -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java b/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java -index 863343a87fe34d72f04af89d75268b477b2adc7a..95a7ab6b2977318796aba5af415043d07dc77cfa 100644 +index 863343a87fe34d72f04af89d75268b477b2adc7a..995ad7365636ac1845bf136cd98b31f21b7ba400 100644 --- a/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java +++ b/src/main/java/net/minecraft/util/profiling/ProfilerFiller.java @@ -1,9 +1,11 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import java.util.function.Supplier; import net.minecraft.util.profiling.metrics.MetricCategory; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public interface ProfilerFiller { -+interface ProfilerFiller { /* // Plazma - Completely remove profiler ++interface ProfilerFiller { /* // Plazma - Completely remove Mojang Profiler String ROOT = "root"; @io.papermc.paper.annotation.DoNotUse // Purpur @@ -535,20 +544,20 @@ index 863343a87fe34d72f04af89d75268b477b2adc7a..95a7ab6b2977318796aba5af415043d0 }; } } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/ProfilerPathEntry.java b/src/main/java/net/minecraft/util/profiling/ProfilerPathEntry.java -index c073262f663309e6f73e67b303927b3996ea0c16..79633d06a6d59e03061e2350c7b385a8c042a907 100644 +index c073262f663309e6f73e67b303927b3996ea0c16..cac51347b479837c92e4269ba93ef4b157d5fce0 100644 --- a/src/main/java/net/minecraft/util/profiling/ProfilerPathEntry.java +++ b/src/main/java/net/minecraft/util/profiling/ProfilerPathEntry.java @@ -1,8 +1,8 @@ package net.minecraft.util.profiling; -import it.unimi.dsi.fastutil.objects.Object2LongMap; -+//import it.unimi.dsi.fastutil.objects.Object2LongMap; // Plazma - Completely remove profiler ++//import it.unimi.dsi.fastutil.objects.Object2LongMap; // Plazma - Completely remove Mojang Profiler -public interface ProfilerPathEntry { -+interface ProfilerPathEntry { /* // Plazma - Completely remove profiler ++interface ProfilerPathEntry { /* // Plazma - Completely remove Mojang Profiler long getDuration(); long getMaxDuration(); @@ -556,26 +565,26 @@ index c073262f663309e6f73e67b303927b3996ea0c16..79633d06a6d59e03061e2350c7b385a8 long getCount(); Object2LongMap getCounters(); -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/SingleTickProfiler.java b/src/main/java/net/minecraft/util/profiling/SingleTickProfiler.java -index 38c9b686212c0f78eb702b1897d491e450267ca7..76003de077d464b2a6813661ff6bf376bcf01052 100644 +index 38c9b686212c0f78eb702b1897d491e450267ca7..b9f35d744a5aed7fe39df0586e8a3b5aa7540bf2 100644 --- a/src/main/java/net/minecraft/util/profiling/SingleTickProfiler.java +++ b/src/main/java/net/minecraft/util/profiling/SingleTickProfiler.java @@ -1,13 +1,15 @@ package net.minecraft.util.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.mojang.logging.LogUtils; import java.io.File; import java.util.function.LongSupplier; import javax.annotation.Nullable; import net.minecraft.Util; import org.slf4j.Logger; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class SingleTickProfiler { -+interface SingleTickProfiler { /* // Plazma - Completely remove profiler ++interface SingleTickProfiler { /* // Plazma - Completely remove Mojang Profiler private static final Logger LOGGER = LogUtils.getLogger(); private final LongSupplier realTime; private final long saveThreshold; @@ -583,34 +592,34 @@ index 38c9b686212c0f78eb702b1897d491e450267ca7..76003de077d464b2a6813661ff6bf376 public static ProfilerFiller decorateFiller(ProfilerFiller profiler, @Nullable SingleTickProfiler monitor) { return monitor != null ? ProfilerFiller.tee(monitor.startTick(), profiler) : profiler; } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/MetricsSamplerProvider.java b/src/main/java/net/minecraft/util/profiling/metrics/MetricsSamplerProvider.java -index 07f78c451e5330296c38f6b599d979610a03381f..86c513c5cdb7aa9fc6426f3e59d842f166a86a40 100644 +index 07f78c451e5330296c38f6b599d979610a03381f..c16b85bcc4c0b497b8eeb8d46c5774f5e9e2213e 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/MetricsSamplerProvider.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/MetricsSamplerProvider.java @@ -1,9 +1,11 @@ package net.minecraft.util.profiling.metrics; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import java.util.Set; import java.util.function.Supplier; import net.minecraft.util.profiling.ProfileCollector; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public interface MetricsSamplerProvider { - Set samplers(Supplier profilerSupplier); +interface MetricsSamplerProvider { -+ //Set samplers(Supplier profilerSupplier); // Plazma - Completely remove profiler ++ //Set samplers(Supplier profilerSupplier); // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/profiling/ActiveMetricsRecorder.java b/src/main/java/net/minecraft/util/profiling/metrics/profiling/ActiveMetricsRecorder.java -index 157e6562bc2fa0946ea6be825cd740d067b4e84f..e47c4f37bf4b1fd3d2a4e9932a4304ca42c32f8c 100644 +index 157e6562bc2fa0946ea6be825cd740d067b4e84f..cc0d5704d244d09c740c8eb99e5bb75a35809f64 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/profiling/ActiveMetricsRecorder.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/profiling/ActiveMetricsRecorder.java @@ -1,5 +1,6 @@ package net.minecraft.util.profiling.metrics.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; import it.unimi.dsi.fastutil.objects.Object2ObjectOpenHashMap; @@ -618,10 +627,10 @@ index 157e6562bc2fa0946ea6be825cd740d067b4e84f..e47c4f37bf4b1fd3d2a4e9932a4304ca import net.minecraft.util.profiling.metrics.MetricsSamplerProvider; import net.minecraft.util.profiling.metrics.storage.MetricsPersister; import net.minecraft.util.profiling.metrics.storage.RecordedDeviation; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class ActiveMetricsRecorder implements MetricsRecorder { -+interface ActiveMetricsRecorder { /*implements MetricsRecorder { // Plazma - Completely remove profiler ++interface ActiveMetricsRecorder { /*implements MetricsRecorder { // Plazma - Completely remove Mojang Profiler public static final int PROFILING_MAX_DURATION_SECONDS = 10; @Nullable private static Consumer globalOnReportFinished = null; @@ -629,22 +638,22 @@ index 157e6562bc2fa0946ea6be825cd740d067b4e84f..e47c4f37bf4b1fd3d2a4e9932a4304ca public static void registerGlobalCompletionCallback(Consumer consumer) { globalOnReportFinished = consumer; } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/profiling/InactiveMetricsRecorder.java b/src/main/java/net/minecraft/util/profiling/metrics/profiling/InactiveMetricsRecorder.java -index 12d7b7c86115b667bd8f940206985d9ed4b837d4..7b4f620ad3f30860941d997f5ca517ee8951899c 100644 +index 12d7b7c86115b667bd8f940206985d9ed4b837d4..70732d7f72660e30b4265ddb9c3172f27131ec56 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/profiling/InactiveMetricsRecorder.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/profiling/InactiveMetricsRecorder.java @@ -1,9 +1,11 @@ package net.minecraft.util.profiling.metrics.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import net.minecraft.util.profiling.InactiveProfiler; import net.minecraft.util.profiling.ProfilerFiller; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class InactiveMetricsRecorder implements MetricsRecorder { -+interface InactiveMetricsRecorder { /* implements MetricsRecorder { // Plazma - Completely remove profiler ++interface InactiveMetricsRecorder { /* implements MetricsRecorder { // Plazma - Completely remove Mojang Profiler public static final MetricsRecorder INSTANCE = new InactiveMetricsRecorder(); @Override @@ -652,20 +661,20 @@ index 12d7b7c86115b667bd8f940206985d9ed4b837d4..7b4f620ad3f30860941d997f5ca517ee @Override public void endTick() { } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/profiling/MetricsRecorder.java b/src/main/java/net/minecraft/util/profiling/metrics/profiling/MetricsRecorder.java -index 48e7211e01691a677c52cf1f5982b0c179eaf83b..f1f8519954759916fdd840265e87cfb491a396dc 100644 +index 48e7211e01691a677c52cf1f5982b0c179eaf83b..9279d9c67c803e580f5bfc595bddf7a24a686806 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/profiling/MetricsRecorder.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/profiling/MetricsRecorder.java @@ -1,8 +1,8 @@ package net.minecraft.util.profiling.metrics.profiling; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler -public interface MetricsRecorder { -+interface MetricsRecorder { /* // Plazma - Completely remove profiler ++interface MetricsRecorder { /* // Plazma - Completely remove Mojang Profiler void end(); void cancel(); @@ -673,16 +682,16 @@ index 48e7211e01691a677c52cf1f5982b0c179eaf83b..f1f8519954759916fdd840265e87cfb4 ProfilerFiller getProfiler(); void endTick(); -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/profiling/ProfilerSamplerAdapter.java b/src/main/java/net/minecraft/util/profiling/metrics/profiling/ProfilerSamplerAdapter.java -index 5bdfad52aa555c1720ca9eb8abc94d6e3f9be86c..d9e7e097a3336932abbb367cb94784131b79c422 100644 +index 5bdfad52aa555c1720ca9eb8abc94d6e3f9be86c..6c14448b30863919082d3661b94b84fdca640cdd 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/profiling/ProfilerSamplerAdapter.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/profiling/ProfilerSamplerAdapter.java @@ -1,5 +1,6 @@ package net.minecraft.util.profiling.metrics.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import it.unimi.dsi.fastutil.objects.ObjectOpenHashSet; import java.util.Set; import java.util.function.Supplier; @@ -690,10 +699,10 @@ index 5bdfad52aa555c1720ca9eb8abc94d6e3f9be86c..d9e7e097a3336932abbb367cb9478413 import net.minecraft.util.profiling.ProfileCollector; import net.minecraft.util.profiling.metrics.MetricCategory; import net.minecraft.util.profiling.metrics.MetricSampler; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class ProfilerSamplerAdapter { -+interface ProfilerSamplerAdapter { /* // Plazma - Completely remove profiler ++interface ProfilerSamplerAdapter { /* // Plazma - Completely remove Mojang Profiler private final Set previouslyFoundSamplerNames = new ObjectOpenHashSet<>(); public Set newSamplersFoundInProfiler(Supplier profilerSupplier) { @@ -701,16 +710,16 @@ index 5bdfad52aa555c1720ca9eb8abc94d6e3f9be86c..d9e7e097a3336932abbb367cb9478413 return pathEntry == null ? 0.0D : (double)pathEntry.getMaxDuration() / (double)TimeUtil.NANOSECONDS_PER_MILLISECOND; }); } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/profiling/ServerMetricsSamplersProvider.java b/src/main/java/net/minecraft/util/profiling/metrics/profiling/ServerMetricsSamplersProvider.java -index 42fc60456bc651345c5f6e13b975c7874532231e..e437ad3e9dbde84dbe53247e833a556e8fbf4e12 100644 +index 42fc60456bc651345c5f6e13b975c7874532231e..3108ddd081e51066acaa867e4d3680d1bc4683e6 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/profiling/ServerMetricsSamplersProvider.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/profiling/ServerMetricsSamplersProvider.java @@ -1,5 +1,6 @@ package net.minecraft.util.profiling.metrics.profiling; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.google.common.base.Stopwatch; import com.google.common.base.Ticker; import com.google.common.collect.ImmutableSet; @@ -718,10 +727,10 @@ index 42fc60456bc651345c5f6e13b975c7874532231e..e437ad3e9dbde84dbe53247e833a556e import org.slf4j.Logger; import oshi.SystemInfo; import oshi.hardware.CentralProcessor; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class ServerMetricsSamplersProvider implements MetricsSamplerProvider { -+interface ServerMetricsSamplersProvider { /* implements MetricsSamplerProvider { // Plazma - Completely remove profiler ++interface ServerMetricsSamplersProvider { /* implements MetricsSamplerProvider { // Plazma - Completely remove Mojang Profiler private static final Logger LOGGER = LogUtils.getLogger(); private final Set samplers = new ObjectOpenHashSet<>(); private final ProfilerSamplerAdapter samplerFactory = new ProfilerSamplerAdapter(); @@ -729,10 +738,10 @@ index 42fc60456bc651345c5f6e13b975c7874532231e..e437ad3e9dbde84dbe53247e833a556e return this.currentLoad[index] * 100.0D; } } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/storage/MetricsPersister.java b/src/main/java/net/minecraft/util/profiling/metrics/storage/MetricsPersister.java -index 2c2b8bf76ea213b111f3a76b0823146565dc3880..69d71f827943fd0245d7c928d63f791d5d69cdf4 100644 +index 2c2b8bf76ea213b111f3a76b0823146565dc3880..310ee93b974b8e88e7ac614d1003425ea6e171a3 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/storage/MetricsPersister.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/storage/MetricsPersister.java @@ -1,13 +1,14 @@ @@ -740,7 +749,7 @@ index 2c2b8bf76ea213b111f3a76b0823146565dc3880..69d71f827943fd0245d7c928d63f791d +import java.nio.file.Path; +import java.nio.file.Paths; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import com.mojang.logging.LogUtils; import java.io.IOException; import java.io.UncheckedIOException; @@ -756,12 +765,12 @@ index 2c2b8bf76ea213b111f3a76b0823146565dc3880..69d71f827943fd0245d7c928d63f791d import net.minecraft.util.profiling.metrics.MetricSampler; import org.apache.commons.io.IOUtils; import org.slf4j.Logger; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public class MetricsPersister { -+public interface MetricsPersister { // Plazma - Completely remove profiler ++public interface MetricsPersister { // Plazma - Completely remove Mojang Profiler public static final Path PROFILING_RESULTS_DIR = Paths.get("debug/profiling"); -+ /* // Plazma - Completely remove profiler ++ /* // Plazma - Completely remove Mojang Profiler public static final String METRICS_DIR_NAME = "metrics"; public static final String DEVIATIONS_DIR_NAME = "deviations"; public static final String PROFILING_RESULT_FILENAME = "profiling.txt"; @@ -769,22 +778,22 @@ index 2c2b8bf76ea213b111f3a76b0823146565dc3880..69d71f827943fd0245d7c928d63f791d private void saveProfilingTaskExecutionResult(ProfileResults result, Path directory) { result.saveResults(directory.resolve("profiling.txt")); } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/util/profiling/metrics/storage/RecordedDeviation.java b/src/main/java/net/minecraft/util/profiling/metrics/storage/RecordedDeviation.java -index f012d23b22b1a9d1acb6c020c66dc727f7fe9e1a..b029b178c327652a24dcee889db659fdce7d95a5 100644 +index f012d23b22b1a9d1acb6c020c66dc727f7fe9e1a..23cf0ff4c86c3d05668b1ed176364606a9a66056 100644 --- a/src/main/java/net/minecraft/util/profiling/metrics/storage/RecordedDeviation.java +++ b/src/main/java/net/minecraft/util/profiling/metrics/storage/RecordedDeviation.java @@ -1,9 +1,11 @@ package net.minecraft.util.profiling.metrics.storage; -+/* // Plazma - Completely remove profiler ++/* // Plazma - Completely remove Mojang Profiler import java.time.Instant; import net.minecraft.util.profiling.ProfileResults; -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler -public final class RecordedDeviation { -+interface RecordedDeviation { /* // Plazma - Completely remove profiler ++interface RecordedDeviation { /* // Plazma - Completely remove Mojang Profiler public final Instant timestamp; public final int tick; public final ProfileResults profilerResultAtTick; @@ -792,10 +801,10 @@ index f012d23b22b1a9d1acb6c020c66dc727f7fe9e1a..b029b178c327652a24dcee889db659fd this.tick = ticks; this.profilerResultAtTick = result; } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 4c0d710d20e074ad4a0fdd1cd4c0c3d3383b68a5..2d5568ac864a7f557bc5a21ad796206c25caf028 100644 +index faff4cbeaacf0beaae1ec488f6f233326f415975..db417cb1485212a17e9310bb818c661512f5e9db 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java @@ -148,8 +148,8 @@ public abstract class Mob extends LivingEntity implements Targeting { @@ -804,13 +813,13 @@ index 4c0d710d20e074ad4a0fdd1cd4c0c3d3383b68a5..2d5568ac864a7f557bc5a21ad796206c this.restrictRadius = -1.0F; - this.goalSelector = new GoalSelector(world.getProfilerSupplier()); - this.targetSelector = new GoalSelector(world.getProfilerSupplier()); -+ this.goalSelector = new GoalSelector(); //world.getProfilerSupplier()); // Plazma - Completely remove profiler -+ this.targetSelector = new GoalSelector(); //world.getProfilerSupplier()); // Plazma - Completely remove profiler ++ this.goalSelector = new GoalSelector(); //world.getProfilerSupplier()); // Plazma - Completely remove Mojang Profiler ++ this.targetSelector = new GoalSelector(); //world.getProfilerSupplier()); // Plazma - Completely remove Mojang Profiler this.lookControl = new org.purpurmc.purpur.controller.LookControllerWASD(this); // Purpur this.moveControl = new org.purpurmc.purpur.controller.MoveControllerWASD(this); // Purpur this.jumpControl = new JumpControl(this); diff --git a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java -index 02978315bc2b828cc603ce7478408f3f82c249c2..4f9b19c45afd6b26833ba892a90d3a9559d5d859 100644 +index 02978315bc2b828cc603ce7478408f3f82c249c2..a162b7e03934921d133b6d45cdeeb06df2fb83c0 100644 --- a/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java +++ b/src/main/java/net/minecraft/world/entity/ai/goal/GoalSelector.java @@ -11,7 +11,7 @@ import java.util.Set; @@ -818,7 +827,7 @@ index 02978315bc2b828cc603ce7478408f3f82c249c2..4f9b19c45afd6b26833ba892a90d3a95 import java.util.function.Supplier; import java.util.stream.Stream; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import org.slf4j.Logger; public class GoalSelector { @@ -827,7 +836,7 @@ index 02978315bc2b828cc603ce7478408f3f82c249c2..4f9b19c45afd6b26833ba892a90d3a95 private final Map lockedFlags = new EnumMap<>(Goal.Flag.class); private final Set availableGoals = Sets.newLinkedHashSet(); - private final Supplier profiler; -+ //private final Supplier profiler; // Plazma - Completely remove profiler ++ //private final Supplier profiler; // Plazma - Completely remove Mojang Profiler private final EnumSet disabledFlags = EnumSet.noneOf(Goal.Flag.class); // Paper unused, but dummy to prevent plugins from crashing as hard. Theyll need to support paper in a special case if this is super important, but really doesn't seem like it would be. private final com.destroystokyo.paper.util.set.OptimizedSmallEnumSet goalTypes = new com.destroystokyo.paper.util.set.OptimizedSmallEnumSet<>(Goal.Flag.class); // Paper - remove streams from pathfindergoalselector private int tickCount; @@ -835,16 +844,16 @@ index 02978315bc2b828cc603ce7478408f3f82c249c2..4f9b19c45afd6b26833ba892a90d3a95 private int curRate; private static final Goal.Flag[] GOAL_FLAG_VALUES = Goal.Flag.values(); // Paper - remove streams from pathfindergoalselector -+ /* // Plazma - Completely remove profiler ++ /* // Plazma - Completely remove Mojang Profiler public GoalSelector(Supplier profiler) { this.profiler = profiler; } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler public void addGoal(int priority, Goal goal) { this.availableGoals.add(new WrappedGoal(priority, goal)); diff --git a/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java b/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java -index d87124f5356180a37e581febc6141fdc5f1395a7..c577e275c0375747b89f56bc79710871e313f6b0 100644 +index d87124f5356180a37e581febc6141fdc5f1395a7..681e3fcd759a26578e054f88e8048e392312b84b 100644 --- a/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java +++ b/src/main/java/net/minecraft/world/item/crafting/RecipeManager.java @@ -37,7 +37,7 @@ import net.minecraft.resources.ResourceLocation; @@ -852,7 +861,7 @@ index d87124f5356180a37e581febc6141fdc5f1395a7..c577e275c0375747b89f56bc79710871 import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; import net.minecraft.util.GsonHelper; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler public class RecipeManager extends SimpleJsonResourceReloadListener { @@ -866,7 +875,7 @@ index d87124f5356180a37e581febc6141fdc5f1395a7..c577e275c0375747b89f56bc79710871 // CraftBukkit start - SPIGOT-5667 make sure all types are populated and mutable Map, Object2ObjectLinkedOpenHashMap>> map1 = Maps.newHashMap(); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index cde722d3e381d214e2835b7dc5877e9add0a5eda..7ce3756da66a7e6c42ac3220e660131f9fad2a76 100644 +index a4d6b11a2d74f57bce7ad9797cd9ce32769d2de5..c10bda36c8c9e5a6f5eb63471c54de8b1af20bac 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -41,7 +41,7 @@ import net.minecraft.sounds.SoundSource; @@ -874,7 +883,7 @@ index cde722d3e381d214e2835b7dc5877e9add0a5eda..7ce3756da66a7e6c42ac3220e660131f import net.minecraft.util.Mth; import net.minecraft.util.RandomSource; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++// import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.world.DifficultyInstance; import net.minecraft.world.TickRateManager; import net.minecraft.world.damagesource.DamageSource; @@ -883,46 +892,46 @@ index cde722d3e381d214e2835b7dc5877e9add0a5eda..7ce3756da66a7e6c42ac3220e660131f private final Holder dimensionTypeRegistration; public final WritableLevelData levelData; - private final Supplier profiler; -+ //private final Supplier profiler; // Plazma - Completely remove profiler ++ // private final Supplier profiler; // Plazma - Completely remove Mojang Profiler public final boolean isClientSide; private final WorldBorder worldBorder; private final BiomeManager biomeManager; -@@ -264,7 +264,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -263,7 +263,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { //protected final io.papermc.paper.util.math.ThreadUnsafeRandom randomTickRandom = new io.papermc.paper.util.math.ThreadUnsafeRandom(java.util.concurrent.ThreadLocalRandom.current().nextLong()); public net.minecraft.util.RandomSource getThreadUnsafeRandom() { return this.randomTickRandom; } // Pufferfish - move thread unsafe random initialization // Pufferfish - getter // Purpur - dont break ABI -- 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.function.Function plazmaWorldConfigurationCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor // Plazma -+ 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.function.Function plazmaWorldConfigurationCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor // Plazma // Plazma - Completely remove profiler +- 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.function.Function plazmaWorldConfigurationCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor // Plazma - Configurable Plazma ++ 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.function.Function plazmaWorldConfigurationCreator, java.util.concurrent.Executor executor) { // Paper - create paper world config; Async-Anti-Xray: Pass executor // Plazma - Configurable Plazma // Plazma - Completely remove Mojang Profiler this.spigotConfig = new org.spigotmc.SpigotWorldConfig(((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()); // Spigot this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config - this.plazmaConfig = plazmaWorldConfigurationCreator.apply(this.spigotConfig); // Plazma -@@ -281,7 +281,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + this.plazmaConfig = plazmaWorldConfigurationCreator.apply(this.spigotConfig); // Plazma - Configurable Plazma +@@ -280,7 +280,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } // CraftBukkit end - this.profiler = supplier; -+ //this.profiler = supplier; // Plazma - Completely remove profiler ++ //this.profiler = supplier; // Plazma - Completely remove Mojang Profiler this.levelData = worlddatamutable; this.dimensionTypeRegistration = holder; this.dimensionTypeId = (ResourceKey) holder.unwrapKey().orElseThrow(() -> { -@@ -1851,6 +1851,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1850,6 +1850,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return false; } -+ /* // Plazma - Completely remove profiler ++ /* // Plazma - Completely remove Mojang Profiler public ProfilerFiller getProfiler() { if (true || gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish // Purpur return (ProfilerFiller) this.profiler.get(); -@@ -1859,6 +1860,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1858,6 +1859,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public Supplier getProfilerSupplier() { return this.profiler; } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler @Override public BiomeManager getBiomeManager() { diff --git a/src/main/java/net/minecraft/world/level/PathNavigationRegion.java b/src/main/java/net/minecraft/world/level/PathNavigationRegion.java -index 0f1025495237aebe30132ace0832aa5718d6f9bb..0226280bbdb9d63831d93f980ee117da1eac08aa 100644 +index 0f1025495237aebe30132ace0832aa5718d6f9bb..cb12c0a7db86a1f3e1e34a9fbe0b67e5d5a64741 100644 --- a/src/main/java/net/minecraft/world/level/PathNavigationRegion.java +++ b/src/main/java/net/minecraft/world/level/PathNavigationRegion.java @@ -8,7 +8,7 @@ import net.minecraft.core.BlockPos; @@ -930,7 +939,7 @@ index 0f1025495237aebe30132ace0832aa5718d6f9bb..0226280bbdb9d63831d93f980ee117da import net.minecraft.core.SectionPos; import net.minecraft.core.registries.Registries; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.server.level.ServerLevel; import net.minecraft.world.entity.Entity; import net.minecraft.world.level.biome.Biome; @@ -938,14 +947,14 @@ index 0f1025495237aebe30132ace0832aa5718d6f9bb..0226280bbdb9d63831d93f980ee117da return this.level.getHeight(); } -+ /* // Plazma - Completely remove profiler ++ /* // Plazma - Completely remove Mojang Profiler public ProfilerFiller getProfiler() { return this.level.getProfiler(); } -+ */ // Plazma - Completely remove profiler ++ */ // Plazma - Completely remove Mojang Profiler } diff --git a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java -index c37aa33134b8602caae5ecff00439ad5e0005d18..f65ea0319ba4b715bcfc033ab0030b4302341953 100644 +index f782fee9243129d0990777dcd2d74735ceb5e64e..933dfc69b4befd6cd02df8fd41037e5325a4d55a 100644 --- a/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java +++ b/src/main/java/net/minecraft/world/level/chunk/LevelChunk.java @@ -25,7 +25,7 @@ import net.minecraft.network.FriendlyByteBuf; @@ -953,7 +962,7 @@ index c37aa33134b8602caae5ecff00439ad5e0005d18..f65ea0319ba4b715bcfc033ab0030b43 import net.minecraft.server.level.FullChunkStatus; import net.minecraft.server.level.ServerLevel; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.world.entity.Entity; import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.Level; @@ -962,12 +971,12 @@ index c37aa33134b8602caae5ecff00439ad5e0005d18..f65ea0319ba4b715bcfc033ab0030b43 if (LightEngine.hasDifferentLightProperties(this, blockposition, iblockdata1, iblockdata)) { - ProfilerFiller gameprofilerfiller = this.level.getProfiler(); -+ //ProfilerFiller gameprofilerfiller = this.level.getProfiler(); // Plazma - Completely remove profiler ++ //ProfilerFiller gameprofilerfiller = this.level.getProfiler(); // Plazma - Completely remove Mojang Profiler //gameprofilerfiller.push("updateSkyLightSources"); // Purpur // Paper - starlight - remove skyLightSources diff --git a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java -index a8af51a25b0f99c3a64d9150fdfcd6b818aa7581..4b894750b2de4dd8ecb766fdabccbdcd6a41a3e8 100644 +index f039d6109ee6f55542adc8f30476ba9a9e4974bf..c61d12cfc5e169df825d83cb946eb0be93d312db 100644 --- a/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java +++ b/src/main/java/net/minecraft/world/level/pathfinder/PathFinder.java @@ -12,8 +12,8 @@ import java.util.function.Function; @@ -976,31 +985,31 @@ index a8af51a25b0f99c3a64d9150fdfcd6b818aa7581..4b894750b2de4dd8ecb766fdabccbdcd import net.minecraft.core.BlockPos; -import net.minecraft.util.profiling.ProfilerFiller; -import net.minecraft.util.profiling.metrics.MetricCategory; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler -+//import net.minecraft.util.profiling.metrics.MetricCategory; // Plazma - Completely remove profiler ++// import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler ++// import net.minecraft.util.profiling.metrics.MetricCategory; // Plazma - Completely remove Mojang Profiler import net.minecraft.world.entity.Mob; import net.minecraft.world.level.PathNavigationRegion; @@ -44,7 +44,7 @@ public class PathFinder { map.add(new java.util.AbstractMap.SimpleEntry<>(this.nodeEvaluator.getGoal(pos.getX(), pos.getY(), pos.getZ()), pos)); } - // Paper end + // Paper end - Perf: remove streams and optimize collection - Path path = this.findPath(world.getProfiler(), node, map, followRange, distance, rangeMultiplier); -+ Path path = this.findPath(/*world.getProfiler(), */node, map, followRange, distance, rangeMultiplier); // Plazma - Completely remove profiler ++ Path path = this.findPath(/*world.getProfiler(),*/ node, map, followRange, distance, rangeMultiplier); // Plazma - Completely remove Mojang Profiler this.nodeEvaluator.done(); return path; } @@ -52,7 +52,7 @@ public class PathFinder { @Nullable - // Paper start - optimize collection + // Paper start - Perf: remove streams and optimize collection - private Path findPath(ProfilerFiller profiler, Node startNode, List> positions, float followRange, int distance, float rangeMultiplier) { -+ private Path findPath(/*ProfilerFiller profiler, */Node startNode, List> positions, float followRange, int distance, float rangeMultiplier) { // Plazma - Completely remove profiler ++ private Path findPath(/*ProfilerFiller profiler,*/ Node startNode, List> positions, float followRange, int distance, float rangeMultiplier) { // Plazma - Completely remove Mojang Profiler //profiler.push("find_path"); // Purpur //profiler.markForCharting(MetricCategory.PATH_FINDING); // Purpur // Set set = positions.keySet(); diff --git a/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java b/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java -index 3ddf6ab00de2456ebf504985b88994f970e3b5c4..77ce02c7edea5170d31c8911b5de5638f23d46af 100644 +index 3ddf6ab00de2456ebf504985b88994f970e3b5c4..61c36d6d2a4a958ca63adbd2b4f6805261b13909 100644 --- a/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java +++ b/src/main/java/net/minecraft/world/level/storage/loot/LootDataManager.java @@ -20,7 +20,7 @@ import net.minecraft.server.packs.resources.PreparableReloadListener; @@ -1008,7 +1017,7 @@ index 3ddf6ab00de2456ebf504985b88994f970e3b5c4..77ce02c7edea5170d31c8911b5de5638 import net.minecraft.server.packs.resources.SimpleJsonResourceReloadListener; import net.minecraft.util.ProblemReporter; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler // Plazma - Completely remove Mojang Profiler import net.minecraft.world.level.storage.loot.parameters.LootContextParamSets; import org.bukkit.craftbukkit.CraftLootTable; import org.bukkit.craftbukkit.util.CraftNamespacedKey; @@ -1017,12 +1026,12 @@ index 3ddf6ab00de2456ebf504985b88994f970e3b5c4..77ce02c7edea5170d31c8911b5de5638 @Override - public final CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler, Executor prepareExecutor, Executor applyExecutor) { -+ public final CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, /*ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler,*/ Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove profiler ++ public final CompletableFuture reload(PreparableReloadListener.PreparationBarrier synchronizer, ResourceManager manager, /*ProfilerFiller prepareProfiler, ProfilerFiller applyProfiler,*/ Executor prepareExecutor, Executor applyExecutor) { // Plazma - Completely remove Mojang Profiler Map, Map> map = new HashMap(); CompletableFuture[] acompletablefuture = (CompletableFuture[]) LootDataType.values().map((lootdatatype) -> { return LootDataManager.scheduleElementParse(lootdatatype, manager, prepareExecutor, map); diff --git a/src/main/java/net/minecraft/world/ticks/LevelTicks.java b/src/main/java/net/minecraft/world/ticks/LevelTicks.java -index 0043c0087896a6df6910b0500da37d84b287c901..17a5928afade7e477cda34365dc8c72c52a6b758 100644 +index 0043c0087896a6df6910b0500da37d84b287c901..af959513cdbccafd86e2d747aea3e1518ebc6792 100644 --- a/src/main/java/net/minecraft/world/ticks/LevelTicks.java +++ b/src/main/java/net/minecraft/world/ticks/LevelTicks.java @@ -23,7 +23,7 @@ import net.minecraft.Util; @@ -1030,7 +1039,7 @@ index 0043c0087896a6df6910b0500da37d84b287c901..17a5928afade7e477cda34365dc8c72c import net.minecraft.core.SectionPos; import net.minecraft.core.Vec3i; -import net.minecraft.util.profiling.ProfilerFiller; -+//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove profiler ++//import net.minecraft.util.profiling.ProfilerFiller; // Plazma - Completely remove Mojang Profiler import net.minecraft.world.level.ChunkPos; import net.minecraft.world.level.levelgen.structure.BoundingBox; @@ -1039,7 +1048,7 @@ index 0043c0087896a6df6910b0500da37d84b287c901..17a5928afade7e477cda34365dc8c72c }; private final LongPredicate tickCheck; - private final Supplier profiler; -+ //private final Supplier profiler; // Plazma - Completely remove profiler ++ //private final Supplier profiler; // Plazma - Completely remove Mojang Profiler private final Long2ObjectMap> allContainers = new Long2ObjectOpenHashMap<>(); private final Long2LongMap nextTickForContainer = Util.make(new Long2LongOpenHashMap(), (map) -> { map.defaultReturnValue(Long.MAX_VALUE); @@ -1048,10 +1057,10 @@ index 0043c0087896a6df6910b0500da37d84b287c901..17a5928afade7e477cda34365dc8c72c }; - public LevelTicks(LongPredicate tickingFutureReadyPredicate, Supplier profilerGetter) { -+ public LevelTicks(LongPredicate tickingFutureReadyPredicate/*, Supplier profilerGetter*/) { // Plazma - Completely remove profiler ++ public LevelTicks(LongPredicate tickingFutureReadyPredicate/*, Supplier profilerGetter*/) { // Plazma - Completely remove Mojang Profiler this.tickCheck = tickingFutureReadyPredicate; - this.profiler = profilerGetter; -+ //this.profiler = profilerGetter; // Plazma - Completely remove profiler ++ //this.profiler = profilerGetter; // Plazma - Completely remove Mojang Profiler } public void addContainer(ChunkPos pos, LevelChunkTicks scheduler) { @@ -1060,7 +1069,7 @@ index 0043c0087896a6df6910b0500da37d84b287c901..17a5928afade7e477cda34365dc8c72c //ProfilerFiller profilerFiller = this.profiler.get(); // Purpur //profilerFiller.push("collect"); // Purpur - this.collectTicks(time, maxTicks, null); // Purpur -+ this.collectTicks(time, maxTicks); // Purpur // Plazma - Completely remove profiler ++ this.collectTicks(time, maxTicks); // Purpur // Plazma - Completely remove Mojang Profiler //profilerFiller.popPush("run"); // Purpur //profilerFiller.incrementCounter("ticksToRun", this.toRunThisTick.size()); // Purpur this.runCollectedTicks(ticker); @@ -1069,7 +1078,7 @@ index 0043c0087896a6df6910b0500da37d84b287c901..17a5928afade7e477cda34365dc8c72c } - private void collectTicks(long time, int maxTicks, ProfilerFiller profiler) { -+ private void collectTicks(long time, int maxTicks/*, ProfilerFiller profiler*/) { // Plazma - Completely remove profiler ++ private void collectTicks(long time, int maxTicks/*, ProfilerFiller profiler*/) { // Plazma - Completely remove Mojang Profiler this.sortContainersToTick(time); //profiler.incrementCounter("containersToTick", this.containersToTick.size()); // Purpur this.drainContainers(time, maxTicks); diff --git a/patches/server/0017-Reduce-create-random-instance.patch b/patches/server/0017-Reduce-create-random-instance.patch index 9afe264..eaf9b26 100644 --- a/patches/server/0017-Reduce-create-random-instance.patch +++ b/patches/server/0017-Reduce-create-random-instance.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Reduce create random instance diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 6b98e5140e946b4d728c281417cc37dc60413ba1..bed08d24af02f6f9b4b50d630f4ab4b4fef69f70 100644 +index c25c6c55b5ef2f718acc7eda98837fc35e547783..83d98b630181890ad991bdd24112d3c7aa807d2b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -232,6 +232,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop> entries; - private final RandomSource random = RandomSource.create(); + private final RandomSource random = org.plazmamc.plazma.configurations.GlobalConfiguration.get().misc.reduceRandom ? net.minecraft.server.MinecraftServer.getServer().random() : RandomSource.create(); // Plazma - Reduce create random instance - private final boolean isUnsafe; // Paper + private final boolean isUnsafe; // Paper - Fix Concurrency issue in ShufflingList during worldgen public ShufflingList() { diff --git a/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java b/src/main/java/net/minecraft/world/entity/ai/sensing/Sensor.java @@ -104,7 +104,7 @@ index 7094701d213c73ba47ace806962244c10fdf4dda..590c26307374edd65a2e22de18d12f34 protected static final int TARGETING_RANGE = 16; private static final TargetingConditions TARGET_CONDITIONS = TargetingConditions.forNonCombat().range(16.0D); diff --git a/src/main/java/net/minecraft/world/entity/monster/warden/AngerManagement.java b/src/main/java/net/minecraft/world/entity/monster/warden/AngerManagement.java -index ece82743df21f0b776382821ad75dee96d0a0748..44db438185d1ffb1adea09ba5f1cf4515a113700 100644 +index 1017c294b48bf0bbf733e1f41d580d1e6c927834..31cea7c1b73fdf3e47849ebbed28120be164e712 100644 --- a/src/main/java/net/minecraft/world/entity/monster/warden/AngerManagement.java +++ b/src/main/java/net/minecraft/world/entity/monster/warden/AngerManagement.java @@ -32,7 +32,7 @@ public class AngerManagement { @@ -117,7 +117,7 @@ index ece82743df21f0b776382821ad75dee96d0a0748..44db438185d1ffb1adea09ba5f1cf451 private static final Codec> SUSPECT_ANGER_PAIR = RecordCodecBuilder.create((instance) -> { return instance.group(UUIDUtil.CODEC.fieldOf("uuid").forGetter(Pair::getFirst), ExtraCodecs.NON_NEGATIVE_INT.fieldOf("anger").forGetter(Pair::getSecond)).apply(instance, Pair::of); diff --git a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java -index a5443f92786427c42092aec8350e7ab37704db7a..0383c9e75a12c5832cf69daf14b8037365c43cfb 100644 +index 752b38d45d59d8b3cd492246e5aa4f378a78734d..38b534e4613641046ed3cd048f52dff0888acda2 100644 --- a/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java +++ b/src/main/java/net/minecraft/world/entity/npc/WanderingTraderSpawner.java @@ -32,7 +32,7 @@ public class WanderingTraderSpawner implements CustomSpawner { @@ -178,7 +178,7 @@ index 849b6a30d412d10f1e2e6e88f2d8d990e4a720e4..5534c8c65588724f2c6f178caacc2dda this.costs = new int[3]; this.enchantClue = new int[]{-1, -1, -1}; diff --git a/src/main/java/net/minecraft/world/level/Explosion.java b/src/main/java/net/minecraft/world/level/Explosion.java -index 1223e678395e84859449a11e9e403454ddae0b15..d05d0114cf4a8b81576d1a792cec08af58284f64 100644 +index 2174456bbba763fd5581a55e9c5fab3cf4a145c1..be927f557a575c3c46cdc4ebba5a47c97ccf30f7 100644 --- a/src/main/java/net/minecraft/world/level/Explosion.java +++ b/src/main/java/net/minecraft/world/level/Explosion.java @@ -92,7 +92,7 @@ public class Explosion { @@ -191,7 +191,7 @@ index 1223e678395e84859449a11e9e403454ddae0b15..d05d0114cf4a8b81576d1a792cec08af this.hitPlayers = Maps.newHashMap(); this.level = world; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 7ce3756da66a7e6c42ac3220e660131f9fad2a76..9475a6953117906da85041436131f8c7175314f2 100644 +index c10bda36c8c9e5a6f5eb63471c54de8b1af20bac..08d748a876184b1ac4419cfa2da12356bc62b531 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java @@ -127,16 +127,16 @@ public abstract class Level implements LevelAccessor, AutoCloseable { @@ -227,7 +227,7 @@ index b7370e64fd0d50e8725d7d5afc30af2e8bc8455d..9ec2a60c8240f7a3e4cd7944d070156d private int lapis = 0; // Purpur diff --git a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java -index 21cbe88178fe2a63900209b9907646a983a209f9..25f679fef6fb843b43b04c574f57eec260e21bdb 100644 +index c3d25a26883f7cbe7106c2f3415af0b18f534ee2..5cf35474d2f55c3a70f8f40e423f9388669ba40d 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/TheEndGatewayBlockEntity.java @@ -368,7 +368,7 @@ public class TheEndGatewayBlockEntity extends TheEndPortalBlockEntity { @@ -240,7 +240,7 @@ index 21cbe88178fe2a63900209b9907646a983a209f9..25f679fef6fb843b43b04c574f57eec2 @Override diff --git a/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java b/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java -index 5d3d9164a05efbecc59ace6175f449f34d8d3ccd..e03a844fc87447bf39fd6b439a6e01786170e352 100644 +index 798e22fb4d685b5845ebf687e8004e94f13a9751..189f425565c9c38b29031ae26de667422eb3b6bb 100644 --- a/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java +++ b/src/main/java/net/minecraft/world/level/chunk/ChunkGeneratorStructureState.java @@ -224,7 +224,7 @@ public class ChunkGeneratorStructureState { @@ -250,7 +250,7 @@ index 5d3d9164a05efbecc59ace6175f449f34d8d3ccd..e03a844fc87447bf39fd6b439a6e0178 - RandomSource randomsource = RandomSource.create(); + RandomSource randomsource = org.plazmamc.plazma.configurations.GlobalConfiguration.get().misc.reduceRandom ? net.minecraft.server.MinecraftServer.getServer().random() : RandomSource.create(); // Plazma - Reduce create random instace - // Paper start + // Paper start - Add missing structure set seed configs if (this.conf.strongholdSeed != null && structureSetEntry.is(net.minecraft.world.level.levelgen.structure.BuiltinStructureSets.STRONGHOLDS)) { diff --git a/src/main/java/net/minecraft/world/level/dimension/end/DragonRespawnAnimation.java b/src/main/java/net/minecraft/world/level/dimension/end/DragonRespawnAnimation.java index 18fce94f0d4b9d28e3afec61c7578f672973a71f..c98d65c146213bdf530916b8ec371e0b0b8f23e7 100644 @@ -266,7 +266,7 @@ index 18fce94f0d4b9d28e3afec61c7578f672973a71f..c98d65c146213bdf530916b8ec371e0b } else if (bl) { fight.setRespawnStage(SUMMONING_DRAGON); diff --git a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java -index 6046dc009c59ac3472eca6a8cfb759eacbfbc70a..bcd74011e2d611884393640515a3b1d66390dbdc 100644 +index 4d2ec3b14ed3b6c527745111950bbdf111129c41..49d671be728a80d0712aa0c612e52ab4532290b0 100644 --- a/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java +++ b/src/main/java/net/minecraft/world/level/dimension/end/EndDragonFight.java @@ -472,7 +472,7 @@ public class EndDragonFight { @@ -274,21 +274,21 @@ index 6046dc009c59ac3472eca6a8cfb759eacbfbc70a..bcd74011e2d611884393640515a3b1d6 return iregistry.getHolder(EndFeatures.END_GATEWAY_DELAYED); }).ifPresent((holder_c) -> { - ((ConfiguredFeature) holder_c.value()).place(this.level, this.level.getChunkSource().getGenerator(), RandomSource.create(), pos); -+ ((ConfiguredFeature) holder_c.value()).place(this.level, this.level.getChunkSource().getGenerator(), (this.level.plazmaConfig().misc.reduceRandom ? this.level.getRandom() : RandomSource.create()), pos); // Plazma - Reduce create random instace ++ holder_c.value().place(this.level, this.level.getChunkSource().getGenerator(), (this.level.plazmaConfig().misc.reduceRandom ? this.level.getRandom() : RandomSource.create()), pos); // Plazma - Reduce create random instace }); } @@ -490,7 +490,7 @@ public class EndDragonFight { this.portalLocation = this.portalLocation.atY(this.level.getMinBuildHeight() + 1); } - // Paper end + // Paper end - Prevent "softlocked" exit portal generation - if (worldgenendtrophy.place(FeatureConfiguration.NONE, this.level, this.level.getChunkSource().getGenerator(), RandomSource.create(), this.portalLocation)) { + if (worldgenendtrophy.place(FeatureConfiguration.NONE, this.level, this.level.getChunkSource().getGenerator(), (this.level.plazmaConfig().misc.reduceRandom ? this.level.getRandom() : RandomSource.create()), this.portalLocation)) { // Plazma - Reduce create random instace int i = Mth.positiveCeilDiv(4, 16); this.level.getChunkSource().chunkMap.waitForLightBeforeSending(new ChunkPos(this.portalLocation), i); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java -index 8694c0dd606ec4e0fd60be434f70860e7779a871..eb1033f645d55f7e7c36f9126254539add6c4582 100644 +index 1309fabd357eb9b8f90f882ec7ff3de9e60f187d..d300668899c3382a42e6a25dd084fb814b56f6bc 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftFirework.java @@ -14,11 +14,12 @@ import org.bukkit.inventory.meta.FireworkMeta; @@ -303,7 +303,7 @@ index 8694c0dd606ec4e0fd60be434f70860e7779a871..eb1033f645d55f7e7c36f9126254539a super(server, entity); + this.random = this.getHandle().level().plazmaConfig().misc.reduceRandom ? this.getHandle().level().getRandom() : net.minecraft.util.RandomSource.create(); // Plazma - Reduce create random instance - // Paper Start - Expose firework item directly + // Paper start - Expose firework item directly // ItemStack item = this.getHandle().getEntityData().get(FireworkRocketEntity.DATA_ID_FIREWORKS_ITEM); diff --git a/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java b/src/main/java/org/plazmamc/plazma/configurations/GlobalConfiguration.java index 51413e828500792cc493b836bb1460a394ff4f75..3047ff4e8949a741d8e14b7061c5f735d1eb96f8 100644 diff --git a/patches/server/0018-Apply-various-optimizations.patch b/patches/server/0018-Apply-various-optimizations.patch index 4480a85..2121132 100644 --- a/patches/server/0018-Apply-various-optimizations.patch +++ b/patches/server/0018-Apply-various-optimizations.patch @@ -7,26 +7,27 @@ Subject: [PATCH] Apply various optimizations Akarin - Swaps the predicate order of collision diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 93e558e1cfcdee33abf6f1c57e4cf47c7f53f750..0864624e060a32934208f80313cf08744509803d 100644 +index f10933fc78cbb0ead042c1870d93d0447f640896..8156e42e7e22cd64b981ee645c2b02e455f71ec4 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -2145,8 +2145,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2144,8 +2144,9 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S public void playerTouch(Player player) {} public void push(Entity entity) { -+ if (entity.noPhysics || this.noPhysics) return; // Plazma ++ if (entity.noPhysics || this.noPhysics) return; // Plazma - Swaps the predicate order of collision if (!this.isPassengerOfSameVehicle(entity)) { - if (!entity.noPhysics && !this.noPhysics) { -+ //if (!entity.noPhysics && !this.noPhysics) { // Plazma - moved up - if (this.level.paperConfig().collisions.onlyPlayersCollide && !(entity instanceof ServerPlayer || this instanceof ServerPlayer)) return; // Paper ++ //if (!entity.noPhysics && !this.noPhysics) { // Plazma - Swaps the predicate order of collision + if (this.level.paperConfig().collisions.onlyPlayersCollide && !(entity instanceof ServerPlayer || this instanceof ServerPlayer)) return; // Paper - Collision option for requiring a player participant double d0 = entity.getX() - this.getX(); double d1 = entity.getZ() - this.getZ(); -@@ -2175,7 +2176,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -2173,8 +2174,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + entity.push(d0, 0.0D, d1); } } - +- - } -+ //} // Plazma ++ //} // Plazma - Swaps the predicate order of collision } } diff --git a/patches/server/0020-Don-t-refresh-LootTable-for-non-player-interaction.patch b/patches/server/0020-Do-not-refresh-LootTable-for-non-player-interaction.patch similarity index 87% rename from patches/server/0020-Don-t-refresh-LootTable-for-non-player-interaction.patch rename to patches/server/0020-Do-not-refresh-LootTable-for-non-player-interaction.patch index 1edb461..df6d871 100644 --- a/patches/server/0020-Don-t-refresh-LootTable-for-non-player-interaction.patch +++ b/patches/server/0020-Do-not-refresh-LootTable-for-non-player-interaction.patch @@ -1,18 +1,18 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Sun, 5 Nov 2023 12:03:06 +0900 -Subject: [PATCH] Don't refresh LootTable for non player interaction +Subject: [PATCH] Do not refresh LootTable for non player interaction diff --git a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java -index b41635dd0569ff7df909df492d3e850aef7214be..48a385145a6c4cc4de69895c3e1415698f3e6770 100644 +index b41635dd0569ff7df909df492d3e850aef7214be..afc567b789ee003e1b10059db2864a423c682669 100644 --- a/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java +++ b/src/main/java/net/minecraft/world/level/block/entity/RandomizableContainerBlockEntity.java @@ -68,6 +68,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc @Override public void unpackLootTable(@org.jetbrains.annotations.Nullable final Player player) { -+ if (player == null && org.plazmamc.plazma.configurations.GlobalConfiguration.get().misc.refreshLootTableForNonPlayerInteraction) return; // Plazma ++ if (player == null && org.plazmamc.plazma.configurations.GlobalConfiguration.get().misc.refreshLootTableForNonPlayerInteraction) return; // Plazma - Do not refresh LootTable for non player interaction // Copied from super with changes, always check the original method net.minecraft.world.level.Level level = this.getLevel(); BlockPos blockPos = this.getBlockPos(); diff --git a/patches/server/0021-Don-t-load-chunks-to-spawn-phantom.patch b/patches/server/0021-Do-not-load-chunks-to-spawn-phantom.patch similarity index 89% rename from patches/server/0021-Don-t-load-chunks-to-spawn-phantom.patch rename to patches/server/0021-Do-not-load-chunks-to-spawn-phantom.patch index 32eeef3..b6ce3f9 100644 --- a/patches/server/0021-Don-t-load-chunks-to-spawn-phantom.patch +++ b/patches/server/0021-Do-not-load-chunks-to-spawn-phantom.patch @@ -1,18 +1,18 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Sun, 5 Nov 2023 12:07:06 +0900 -Subject: [PATCH] Don't load chunks to spawn phantom +Subject: [PATCH] Do not load chunks to spawn phantom diff --git a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java -index e731fd6f196116f4995dc6de8ad06b1985abe22b..688984291b590334ea703e175f773be6bdac4965 100644 +index 0847aef56d8608cb1403485f231f30b2527f35ab..fee30f686a5d1ee50a00c2073efd5b0a80e85179 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java +++ b/src/main/java/net/minecraft/world/level/levelgen/PhantomSpawner.java @@ -71,6 +71,7 @@ public class PhantomSpawner implements CustomSpawner { if (randomsource.nextInt(j) >= world.paperConfig().entities.behavior.playerInsomniaStartTicks) { // Paper - Ability to control player's insomnia and phantoms BlockPos blockposition1 = blockposition.above(20 + randomsource.nextInt(15)).east(-10 + randomsource.nextInt(21)).south(-10 + randomsource.nextInt(21)); -+ if (!world.plazmaConfig().entity.phantom.loadChunksToSpawn && !world.hasChunkAt(blockposition1)) continue; // Plazma ++ if (!world.plazmaConfig().entity.phantom.loadChunksToSpawn && !world.hasChunkAt(blockposition1)) continue; // Plazma - Do not load chunks to spawn phantom BlockState iblockdata = world.getBlockState(blockposition1); FluidState fluid = world.getFluidState(blockposition1); diff --git a/patches/server/0022-Add-option-to-disable-moved-to-quickly-check-for-spe.patch b/patches/server/0022-Add-option-to-disable-moved-to-quickly-check-for-spe.patch index 398b2a9..8e27a85 100644 --- a/patches/server/0022-Add-option-to-disable-moved-to-quickly-check-for-spe.patch +++ b/patches/server/0022-Add-option-to-disable-moved-to-quickly-check-for-spe.patch @@ -6,14 +6,14 @@ Subject: [PATCH] Add option to disable moved to quickly check for specific diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 0b37acd48517d28efec716b93c33da6aa97c54f2..f9b21e850251172851a434261a6e0b20efb46042 100644 +index d7ff08767fe6b14f18386651666c42903a52ec1c..3a30fee71f0874f352690ed57ddf1bad069f3db1 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -1463,6 +1463,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -1458,6 +1458,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl } - // Paper end + // Paper end - Prevent moving into unloaded chunks -+ if (!this.player.getBukkitEntity().hasPermission("plazma.bypass-moved-to-quickly-check") || !(org.plazmamc.plazma.configurations.GlobalConfiguration.get().player.checkSpectatorMovedToQuickly && this.player.isSpectator())) // Plazma ++ if (!this.player.getBukkitEntity().hasPermission("plazma.bypass-moved-to-quickly-check") || !(org.plazmamc.plazma.configurations.GlobalConfiguration.get().player.checkSpectatorMovedToQuickly && this.player.isSpectator())) // Plazma - Options to bypass moved to quickly check if (!this.player.isChangingDimension() && (!this.player.level().getGameRules().getBoolean(GameRules.RULE_DISABLE_ELYTRA_MOVEMENT_CHECK) || !this.player.isFallFlying())) { float f2 = this.player.isFallFlying() ? 300.0F : 100.0F; diff --git a/patches/server/0023-Implement-No-Chat-Reports.patch b/patches/server/0023-Implement-No-Chat-Reports.patch index a6c4445..9ae8783 100644 --- a/patches/server/0023-Implement-No-Chat-Reports.patch +++ b/patches/server/0023-Implement-No-Chat-Reports.patch @@ -3,10 +3,10 @@ From: AlphaKR93 Date: Thu, 28 Sep 2023 11:47:50 +0900 Subject: [PATCH] Implement No Chat Reports -Implemented: 62fbdef42dfbfec551d8324b7084c4ccf248bab7 +Implemented: 644bb6bb4a8012c75900c643d9863fe92c799e1d diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -index bdcfd80f937c34956911373905d66424bbff8e1d..47cbafc08e3d87c448c69ff797afaf0eb5d78f9d 100644 +index bdcfd80f937c34956911373905d66424bbff8e1d..6c575aeeef323c8eb0837eb9d9eea8fcff21da17 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java @@ -145,9 +145,13 @@ public class FriendlyByteBuf extends ByteBuf { @@ -22,12 +22,12 @@ index bdcfd80f937c34956911373905d66424bbff8e1d..47cbafc08e3d87c448c69ff797afaf0e + && org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.queryData()) + element.getAsJsonObject().addProperty("preventsChatReports", true); + this.writeUtf(GSON.toJson(element), maxLength); -+ // Plazma end ++ // Plazma end - Implement No Chat Reports } public void writeId(IdMap registry, T value) { diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java -index b8c1f3b9afddc87d56541c8af63cffecfcdd2653..4f0d6ac849dda74c9180fa03d97d389cc4554b46 100644 +index b8c1f3b9afddc87d56541c8af63cffecfcdd2653..4fe3de84fbbd16ecfe0b27922d5bfeaa9c89f61b 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatCommandPacket.java @@ -24,4 +24,13 @@ public record ServerboundChatCommandPacket(String command, Instant timeStamp, lo @@ -42,10 +42,10 @@ index b8c1f3b9afddc87d56541c8af63cffecfcdd2653..4f0d6ac849dda74c9180fa03d97d389c + return ArgumentSignatures.EMPTY; + return this.argumentSignatures; + } -+ // Plazma end ++ // Plazma end - Implement No Chat Reports } diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java -index d1d2fc0c57523c1abf1e8bfec913c78927c3dafc..b32e17ef1d7d65f2e3cf4fb5471d8182b3ba892f 100644 +index d1d2fc0c57523c1abf1e8bfec913c78927c3dafc..bd69821b153b692b508505264899bdfda4805f0f 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatPacket.java @@ -25,4 +25,12 @@ public record ServerboundChatPacket(String message, Instant timeStamp, long salt @@ -59,10 +59,10 @@ index d1d2fc0c57523c1abf1e8bfec913c78927c3dafc..b32e17ef1d7d65f2e3cf4fb5471d8182 + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.enabled) return null; + return this.signature; + } -+ // Plazma end ++ // Plazma end - Implement No Chat Reports } diff --git a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java -index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..4d9f73add791cef03cc7aeaf1598a73c2195809a 100644 +index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..587d89d67afe9108b5e810463fb3cb21f1b8accf 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ServerboundChatSessionUpdatePacket.java @@ -16,6 +16,15 @@ public record ServerboundChatSessionUpdatePacket(RemoteChatSession.Data chatSess @@ -77,12 +77,12 @@ index 9d6db4a378036559efab91c8b7dcf2a6b0c2cce6..4d9f73add791cef03cc7aeaf1598a73c + ); + return; + } -+ // Plazma end ++ // Plazma end - Implement No Chat Reports listener.handleChatSessionUpdate(this); } } diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 5c897d11e6ae17d8feaeedc7edf7ede02571a207..05dd190de9d45e245eb9f67ccec6b5c2e34ed6e0 100644 +index 84cf2b2e289af0a43c9cc64a9c7e045ffaf9c62b..3b7a0e6220e93157b171d227676147b0cb481d97 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java @@ -681,6 +681,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @@ -94,13 +94,14 @@ index 5c897d11e6ae17d8feaeedc7edf7ede02571a207..05dd190de9d45e245eb9f67ccec6b5c2 // Paper start - Add setting for proxy online mode status diff --git a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -index da499e0b21eba40d24d95047e3a9220567d4bae7..ef706612c7dd4ab703e442a488264244008b6227 100644 +index fa5107deb090a779ddc2fdd0fd6de05e1fcf85b9..901408f39509fab160180e13dcee6499542b49ca 100644 --- a/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerCommonPacketListenerImpl.java -@@ -271,10 +271,29 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack +@@ -271,10 +271,31 @@ public abstract class ServerCommonPacketListenerImpl implements ServerCommonPack } public void send(Packet packet) { ++ // Plazma start - Implement No Chat Reports + if (org.plazmamc.plazma.configurations.GlobalConfiguration.get().noChatReports.convertToSystemMessage() + && this instanceof ServerGamePacketListenerImpl impl + && packet instanceof net.minecraft.network.protocol.game.ClientboundPlayerChatPacket p) { @@ -111,6 +112,7 @@ index da499e0b21eba40d24d95047e3a9220567d4bae7..ef706612c7dd4ab703e442a488264244 + )); + return; + } ++ // Plazma end - Implement No Chat Reports this.send(packet, (PacketSendListener) null); } @@ -123,12 +125,12 @@ index da499e0b21eba40d24d95047e3a9220567d4bae7..ef706612c7dd4ab703e442a488264244 + impl.send(p); + return; + } -+ // Plazma end ++ // Plazma end - Implement No Chat Reports // CraftBukkit start if (packet == null || this.processedDisconnect) { // Spigot return; diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 80dc93b8c96d78a4080c0636b8cd7c470a1e3922..59afcfb957ea653e64b17385accf5c9449d33b2a 100644 +index 3803a04804fc11553c85507a257939552ce4890f..56ee7057defed5c9281aa557d20608c275fac9d6 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -1499,6 +1499,7 @@ public abstract class PlayerList { diff --git a/patches/server/0024-Ignore-useless-entity-packets.patch b/patches/server/0024-Ignore-useless-entity-packets.patch index 717effc..81bdcf2 100644 --- a/patches/server/0024-Ignore-useless-entity-packets.patch +++ b/patches/server/0024-Ignore-useless-entity-packets.patch @@ -3,25 +3,27 @@ From: AlphaKR93 Date: Wed, 27 Sep 2023 22:35:19 +0900 Subject: [PATCH] Ignore useless entity packets +[REFERENCE] +- PurpurMC/Purpur diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 92ca330bee2f58bde93c8da12a8f5c14e29de540..05342f5fbe5cd62e81e09d3d6743cf47331b54c2 100644 +index 2568b4ad72a7b99484aaa048257a3b5465b63b9d..59f6f8474f77f0cb332072dfe0b4d47464c1b78a 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -200,6 +200,8 @@ public class ServerEntity { +@@ -206,6 +206,8 @@ public class ServerEntity { flag4 = true; flag5 = true; } + -+ if (this.level.plazmaConfig().entity.ignoreUselessPackets && isUselessPacket(packet1)) packet1 = null; // Plazma ++ if (this.level.plazmaConfig().entity.ignoreUselessPackets && isUselessPacket(packet1)) packet1 = null; // Plazma - Ignore useless entity packets } if ((this.trackDelta || this.entity.hasImpulse || this.entity instanceof LivingEntity && ((LivingEntity) this.entity).isFallFlying()) && this.tickCount > 0) { -@@ -272,6 +274,19 @@ public class ServerEntity { +@@ -278,6 +280,19 @@ public class ServerEntity { }); } -+ // Plazma start ++ // Plazma start - Ignore useless entity packets + private boolean isUselessPacket(@Nullable Packet packet) { + if (!(packet instanceof ClientboundMoveEntityPacket p)) return false; + if (p instanceof ClientboundMoveEntityPacket.Pos) @@ -32,7 +34,7 @@ index 92ca330bee2f58bde93c8da12a8f5c14e29de540..05342f5fbe5cd62e81e09d3d6743cf47 + return p.getXa() == 0 && p.getYa() == 0 && p.getZa() == 0 && p.getxRot() == 0 && p.getyRot() == 0; + return false; + } -+ // Plazma end ++ // Plazma end - Ignore useless entity packets + public void removePairing(ServerPlayer player) { this.entity.stopSeenByPlayer(player); diff --git a/patches/server/0025-Improve-biome-temperature-cache.patch b/patches/server/0025-Improve-biome-temperature-cache.patch index 979ceb8..377ba6b 100644 --- a/patches/server/0025-Improve-biome-temperature-cache.patch +++ b/patches/server/0025-Improve-biome-temperature-cache.patch @@ -3,6 +3,8 @@ From: AlphaKR93 Date: Mon, 6 Nov 2023 10:39:01 +0900 Subject: [PATCH] Improve biome temperature cache +[REFERENCE] +- FxMorin/MemoryLeakFix diff --git a/src/main/java/net/minecraft/world/level/biome/Biome.java b/src/main/java/net/minecraft/world/level/biome/Biome.java index efca73d4de33028cf9df944f36e51b7b50f7a4c5..a4aee46177a771c492d46e6996fb2c6e5eed3921 100644 diff --git a/patches/server/0027-Configurable-cave-lava-sea-level.patch b/patches/server/0027-Configurable-cave-lava-sea-level.patch index 29d2c98..fbc1951 100644 --- a/patches/server/0027-Configurable-cave-lava-sea-level.patch +++ b/patches/server/0027-Configurable-cave-lava-sea-level.patch @@ -6,14 +6,14 @@ Subject: [PATCH] Configurable cave lava sea level This patch also fix MC-237017. diff --git a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java -index 58609a0911c4e32b6f80f050cd3d23f70ad75b1b..2db6c1b9530b4b082ef6f6ec17c542ba8ad7fa5f 100644 +index 98c7f695093acbcf9382a5f07a7a89e373709763..a85b1ebb4236f131b9be0104c4aa56f22e661441 100644 --- a/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java +++ b/src/main/java/net/minecraft/world/level/levelgen/NoiseBasedChunkGenerator.java @@ -72,6 +72,15 @@ public final class NoiseBasedChunkGenerator extends ChunkGenerator { } private static Aquifer.FluidPicker createFluidPicker(NoiseGeneratorSettings settings) { -+ // Plazma start ++ // Plazma start - Configurable cave lava sea level + if (true) { + org.plazmamc.plazma.configurations.GlobalConfiguration config = org.plazmamc.plazma.configurations.GlobalConfiguration.get(); + return (x, y, z) -> new Aquifer.FluidStatus( @@ -21,7 +21,7 @@ index 58609a0911c4e32b6f80f050cd3d23f70ad75b1b..2db6c1b9530b4b082ef6f6ec17c542ba + config.worldgen.caveLavaSeaLevel.customSeaLevel(settings) + ); + } -+ // Plazma end ++ // Plazma end - Configurable cave lava sea level Aquifer.FluidStatus aquifer_b = new Aquifer.FluidStatus(-54, Blocks.LAVA.defaultBlockState()); int i = settings.seaLevel(); Aquifer.FluidStatus aquifer_b1 = new Aquifer.FluidStatus(i, settings.defaultFluid()); diff --git a/patches/server/0028-Variable-entity-wakeup-duration.patch b/patches/server/0028-Variable-entity-wakeup-duration.patch index 9065f57..cc1bca1 100644 --- a/patches/server/0028-Variable-entity-wakeup-duration.patch +++ b/patches/server/0028-Variable-entity-wakeup-duration.patch @@ -30,7 +30,7 @@ index b036b54d551c892cc48d0a6816382bce5e38efd4..459cba838468b95547b2a515c497fcbb public Structure structure; diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 9357539c71e3a8408b1f055527ffd192b5f9f1d9..32add0d4aea7f5fe84aa16c969d5bbee550312b6 100644 +index 9113c8ebff5e71f859a19f024969582052c57546..ca8a8d1edb698b481ef48ae1d2cdddf652f6d249 100644 --- a/src/main/java/org/spigotmc/ActivationRange.java +++ b/src/main/java/org/spigotmc/ActivationRange.java @@ -68,29 +68,36 @@ public class ActivationRange @@ -42,35 +42,35 @@ index 9357539c71e3a8408b1f055527ffd192b5f9f1d9..32add0d4aea7f5fe84aa16c969d5bbee + if (deviation == 0) return duration; + return (int) Math.min(Integer.MAX_VALUE, Math.max(1, Math.round(duration * (1 + deviation * random.nextGaussian())))); + } -+ // Plazma end ++ // Plazma end - Variable entity wakeup duration private static int checkInactiveWakeup(Entity entity) { Level world = entity.level(); SpigotWorldConfig config = world.spigotConfig; -+ org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig = world.plazmaConfig(); // Plazma ++ org.plazmamc.plazma.configurations.WorldConfigurations plazmaConfig = world.plazmaConfig(); // Plazma - Variable entity wakeup duration long inactiveFor = MinecraftServer.currentTick - entity.activatedTick; if (entity.activationType == ActivationType.VILLAGER) { if (inactiveFor > config.wakeUpInactiveVillagersEvery && world.wakeupInactiveRemainingVillagers > 0) { world.wakeupInactiveRemainingVillagers--; - return config.wakeUpInactiveVillagersFor; -+ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveVillagersFor, plazmaConfig.entity.wakeUpDurationVariance.villager()); // Plazma ++ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveVillagersFor, plazmaConfig.entity.wakeUpDurationVariance.villager()); // Plazma - Variable entity wakeup duration } } else if (entity.activationType == ActivationType.ANIMAL) { if (inactiveFor > config.wakeUpInactiveAnimalsEvery && world.wakeupInactiveRemainingAnimals > 0) { world.wakeupInactiveRemainingAnimals--; - return config.wakeUpInactiveAnimalsFor; -+ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveAnimalsFor, plazmaConfig.entity.wakeUpDurationVariance.animal()); // Plazma ++ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveAnimalsFor, plazmaConfig.entity.wakeUpDurationVariance.animal()); // Plazma - Variable entity wakeup duration } } else if (entity.activationType == ActivationType.FLYING_MONSTER) { if (inactiveFor > config.wakeUpInactiveFlyingEvery && world.wakeupInactiveRemainingFlying > 0) { world.wakeupInactiveRemainingFlying--; - return config.wakeUpInactiveFlyingFor; -+ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveFlyingFor, plazmaConfig.entity.wakeUpDurationVariance.flying()); // Plazma ++ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveFlyingFor, plazmaConfig.entity.wakeUpDurationVariance.flying()); // Plazma - Variable entity wakeup duration } } else if (entity.activationType == ActivationType.MONSTER || entity.activationType == ActivationType.RAIDER) { if (inactiveFor > config.wakeUpInactiveMonstersEvery && world.wakeupInactiveRemainingMonsters > 0) { world.wakeupInactiveRemainingMonsters--; - return config.wakeUpInactiveMonstersFor; -+ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveMonstersFor, plazmaConfig.entity.wakeUpDurationVariance.monster()); // Plazma ++ return getWakeupDuration(world.getRandom(), config.wakeUpInactiveMonstersFor, plazmaConfig.entity.wakeUpDurationVariance.monster()); // Plazma - Variable entity wakeup duration } } return -1; diff --git a/patches/server/0029-Optimise-state-lookup-more.patch b/patches/server/0029-Optimise-state-lookup-more.patch index bad645e..dc8f708 100644 --- a/patches/server/0029-Optimise-state-lookup-more.patch +++ b/patches/server/0029-Optimise-state-lookup-more.patch @@ -17,7 +17,7 @@ index 57d0cd3ad6f972e986c72a57f1a6e36003f190c2..50d97c5ab33f33b81dbafd7cf42da5af public ZeroCollidingReferenceStateTable(final StateHolder state, final Map, Comparable> this_map) { diff --git a/src/main/java/net/minecraft/world/level/block/state/StateHolder.java b/src/main/java/net/minecraft/world/level/block/state/StateHolder.java -index 5f285d190186a2ff5a61d05070593e1d633dd79a..669c42f1598e2a06bb0b95aa0bc413911346f3ff 100644 +index 5f285d190186a2ff5a61d05070593e1d633dd79a..bcb0ba74f4162437d43199d365ff468222f59985 100644 --- a/src/main/java/net/minecraft/world/level/block/state/StateHolder.java +++ b/src/main/java/net/minecraft/world/level/block/state/StateHolder.java @@ -114,6 +114,12 @@ public abstract class StateHolder { @@ -29,7 +29,7 @@ index 5f285d190186a2ff5a61d05070593e1d633dd79a..669c42f1598e2a06bb0b95aa0bc41391 + if (ret == null) throw new IllegalArgumentException("Cannot set property " + property + " to " + value + " on " + this.owner + ", it is not an allowed value"); + return ret; + /* -+ // Plazma end ++ // Plazma end - Optimise state lookup more Comparable comparable = this.values.get(property); if (comparable != null && !comparable.equals(value)) { S object = this.neighbours.get(property, value); diff --git a/patches/server/0030-Suppress-errors-from-dirty-attributes.patch b/patches/server/0030-Suppress-errors-from-dirty-attributes.patch index 14e4000..f5ebcd7 100644 --- a/patches/server/0030-Suppress-errors-from-dirty-attributes.patch +++ b/patches/server/0030-Suppress-errors-from-dirty-attributes.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Suppress errors from dirty attributes diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 05342f5fbe5cd62e81e09d3d6743cf47331b54c2..f496e2f0e873e494fdf12ad6d2dd3bbc2fae9e56 100644 +index 59f6f8474f77f0cb332072dfe0b4d47464c1b78a..6808c73049ebe108c8229b3d2d92d9aeb246e3e5 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -395,7 +395,8 @@ public class ServerEntity { +@@ -401,7 +401,8 @@ public class ServerEntity { } if (this.entity instanceof LivingEntity) { @@ -18,7 +18,7 @@ index 05342f5fbe5cd62e81e09d3d6743cf47331b54c2..f496e2f0e873e494fdf12ad6d2dd3bbc if (!set.isEmpty()) { // CraftBukkit start - Send scaled max health -@@ -406,7 +407,7 @@ public class ServerEntity { +@@ -412,7 +413,7 @@ public class ServerEntity { this.broadcastAndSend(new ClientboundUpdateAttributesPacket(this.entity.getId(), set)); } diff --git a/patches/server/0033-Add-Entity-spawn-deadlock-timer.patch b/patches/server/0033-Add-entity-spawn-deadlock-timer.patch similarity index 82% rename from patches/server/0033-Add-Entity-spawn-deadlock-timer.patch rename to patches/server/0033-Add-entity-spawn-deadlock-timer.patch index e6bbf74..88e94bf 100644 --- a/patches/server/0033-Add-Entity-spawn-deadlock-timer.patch +++ b/patches/server/0033-Add-entity-spawn-deadlock-timer.patch @@ -1,21 +1,21 @@ From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 From: AlphaKR93 Date: Tue, 5 Dec 2023 13:29:28 +0900 -Subject: [PATCH] Add Entity spawn deadlock timer +Subject: [PATCH] Add entity spawn deadlock timer [REFERENCE] - AbsolemJackdaw/FixMySpawnR diff --git a/src/main/java/net/minecraft/world/level/BaseSpawner.java b/src/main/java/net/minecraft/world/level/BaseSpawner.java -index ac6bdf21d5ff8ba563f8c9187f6a8dcc823587aa..94d79eb70ffdeaa41dce4ec7873fb6888eff272e 100644 +index 28e8403f1f91effd7eb5a50855f823f8adc90b6b..1b9989387d94429538e724329737b304232756e6 100644 --- a/src/main/java/net/minecraft/world/level/BaseSpawner.java +++ b/src/main/java/net/minecraft/world/level/BaseSpawner.java @@ -48,6 +48,8 @@ public abstract class BaseSpawner { public int requiredPlayerRange = 16; public int spawnRange = 4; private int tickDelay = 0; // Paper -+ private int blockExistsTick = 0; // Plazma - Implement FixMySpawnR -+ private boolean blockLockedByTime = false; // Plazma - Implement FixMySpawnR ++ private int blockExistsTick = 0; // Plazma - Add entity spawn deadlock timer ++ private boolean blockLockedByTime = false; // Plazma - Add entity spawn deadlock timer public BaseSpawner() {} @@ -23,7 +23,7 @@ index ac6bdf21d5ff8ba563f8c9187f6a8dcc823587aa..94d79eb70ffdeaa41dce4ec7873fb688 } public void serverTick(ServerLevel world, BlockPos pos) { -+ // Plazma start - Implement FixMySpawnR ++ // Plazma start - Add entity spawn deadlock timer + if (world.plazmaConfig().entity.spawnDeadlockTimer.enabled) { + if (!this.blockLockedByTime) { + if (this.blockExistsTick > world.plazmaConfig().entity.spawnDeadlockTimer.timerTimeout) @@ -33,7 +33,7 @@ index ac6bdf21d5ff8ba563f8c9187f6a8dcc823587aa..94d79eb70ffdeaa41dce4ec7873fb688 + + if (blockLockedByTime && world.getBestNeighborSignal(pos) > 0) return; + } -+ // Plazma end ++ // Plazma end - Add entity spawn deadlock timer if (spawnCount <= 0 || maxNearbyEntities <= 0) return; // Paper - Ignore impossible spawn tick // Paper start - Configurable mob spawner tick rate if (spawnDelay > 0 && --tickDelay > 0) return; @@ -41,12 +41,12 @@ index ac6bdf21d5ff8ba563f8c9187f6a8dcc823587aa..94d79eb70ffdeaa41dce4ec7873fb688 if (nbt.contains("SpawnRange", 99)) { this.spawnRange = nbt.getShort("SpawnRange"); } -+ // Plazma start - Implement FixMySpawnR ++ // Plazma start - Add entity spawn deadlock timer + if (nbt.contains("Plazma.SpawnerTicks", 99)) { + this.blockExistsTick = nbt.getInt("Plazma.SpawnerTicks"); + this.blockLockedByTime = nbt.getBoolean("Plazma.SpawnerLocked"); + } -+ // Plazma end ++ // Plazma end - Add entity spawn deadlock timer this.displayEntity = null; } @@ -54,8 +54,8 @@ index ac6bdf21d5ff8ba563f8c9187f6a8dcc823587aa..94d79eb70ffdeaa41dce4ec7873fb688 })); } -+ nbt.putInt("Plazma.SpawnerTicks", this.blockExistsTick); // Plazma - Implement FixMySpawnR -+ nbt.putBoolean("Plazma.SpawnerLocked", this.blockLockedByTime); // Plazma - Implement FixMySpawnR ++ nbt.putInt("Plazma.SpawnerTicks", this.blockExistsTick); // Plazma - Add entity spawn deadlock timer ++ nbt.putBoolean("Plazma.SpawnerLocked", this.blockLockedByTime); // Plazma - Add entity spawn deadlock timer nbt.put("SpawnPotentials", (Tag) SpawnData.LIST_CODEC.encodeStart(NbtOps.INSTANCE, this.spawnPotentials).result().orElseThrow()); return nbt; } diff --git a/patches/server/0034-Reduce-allocations.patch b/patches/server/0034-Reduce-allocations.patch index 918d48d..01e500f 100644 --- a/patches/server/0034-Reduce-allocations.patch +++ b/patches/server/0034-Reduce-allocations.patch @@ -180,7 +180,7 @@ index 7e8dc9e8f381abfdcce2746edc93122d623622d1..bf882040399015b38b917c7982f01e74 protected E[] storage; diff --git a/src/main/java/net/minecraft/CrashReport.java b/src/main/java/net/minecraft/CrashReport.java -index e3b131d054079fe9bde6ef79ac29ca0dae0033a3..3dda82c9c73e0d1b8a14a7c7d3ac87d568fa4edd 100644 +index 315ac3baecf1e29fd49c4c52e2d914d9a726540f..7259d86b568b38112ab420ea2b28f29e4ffcae71 100644 --- a/src/main/java/net/minecraft/CrashReport.java +++ b/src/main/java/net/minecraft/CrashReport.java @@ -30,7 +30,7 @@ public class CrashReport { @@ -206,10 +206,10 @@ index b54ddd0ba0b001fbcb1838a838ca4890df936f1b..2bfe33ed7e602ada8638d71ed8e91125 public CrashReportCategory(String title) { this.title = title; diff --git a/src/main/java/net/minecraft/Util.java b/src/main/java/net/minecraft/Util.java -index 22dfe70df68b35e313f94b17a87e4121392b17b4..4cba85293577616ebbc228e7290338524f0759c0 100644 +index b40864e41e1506884fdefefbf3cf4833a8f706c3..b8e3b6b69955ea81862f0297a5be6209088cd1f0 100644 --- a/src/main/java/net/minecraft/Util.java +++ b/src/main/java/net/minecraft/Util.java -@@ -411,7 +411,7 @@ public class Util { +@@ -408,7 +408,7 @@ public class Util { } else if (futures.size() == 1) { return futures.get(0).thenApply(List::of); } else { @@ -232,7 +232,7 @@ index 06648f9751fd8a322d0809ffebf6a544596ee1a4..b0ea87e2ed8f9bf04b33c2ff8a827d4f @Override diff --git a/src/main/java/net/minecraft/nbt/CompoundTag.java b/src/main/java/net/minecraft/nbt/CompoundTag.java -index 4c8f2dbdd6e384be026ae1c890096f89fd744eb0..66ebefcca4846491cc32f3be9bef899bf9bb3ba5 100644 +index eea9866aecb7189455319d83561fcef35a777d7a..56cff647c4e89a12b116426ebf84df6675601a01 100644 --- a/src/main/java/net/minecraft/nbt/CompoundTag.java +++ b/src/main/java/net/minecraft/nbt/CompoundTag.java @@ -420,7 +420,7 @@ public class CompoundTag implements Tag { @@ -339,7 +339,7 @@ index a2920b8a9eff77d9c5d1d7f70ad3abdacba8f0fa..70d776d5cfdb0612f65d92333d6f872a protected CipherBase(Cipher cipher) { this.cipher = cipher; diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index b7a6c7e737e7aba0324a5c3c61bbfbcc3b39ac43..725f67a0ed2294ef0b8bf05635bb4c82608df503 100644 +index 57d0fbca001da7cace3eeb69526e28e8a2ef5ac5..9f4cbb0164fffe6b69af36ddce6b9727a6f0f6da 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -321,7 +321,7 @@ public class Connection extends SimpleChannelInboundHandler> { @@ -398,7 +398,7 @@ index d45e39bc009281c298f3dfae113dc87f2b3b1fbd..d9deb14896c62c35ccc5758df1419e53 private static TranslatableContents create(String key, Optional fallback, Optional> args) { diff --git a/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java b/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java -index e3f355c85eb7cc8c1683e3009502c10a5ed32daa..838f07692c8e34c21c5a93611ab0f01b5059ab5e 100644 +index ccdc2345465313991f065e1176b58fb7d5e8722f..bb50e69a4d84e4753db77be071cc6fc73b08a981 100644 --- a/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java +++ b/src/main/java/net/minecraft/network/protocol/game/ClientboundSectionBlocksUpdatePacket.java @@ -63,7 +63,7 @@ public class ClientboundSectionBlocksUpdatePacket implements Packet loadStatusIcon() { -- Optional optional = Optional.of(this.getFile("server-icon.png").toPath()).filter((path) -> { + Optional optional = Optional.of(this.getFile("server-icon.png").toPath()).filter((path) -> { - return Files.isRegularFile(path, new LinkOption[0]); -- }).or(() -> { -- return this.storageSource.getIconFile().filter((path) -> { ++ return Files.isRegularFile(path/*, new LinkOption[0]*/); // Plazma - Reduce allocations + }).or(() -> { + return this.storageSource.getIconFile().filter((path) -> { - return Files.isRegularFile(path, new LinkOption[0]); -- }); -- }); -+ // Plazma start - Reduce allocations -+ Optional optional = Optional.of(this.getFile("server-icon.png").toPath()).filter(Files::isRegularFile) -+ .or(() -> this.storageSource.getIconFile().filter(Files::isRegularFile)); -+ // Plazma end ++ return Files.isRegularFile(path, /*new LinkOption[0]*/); // Plazma - Reduce allocations + }); + }); - return optional.flatMap((path) -> { - try { diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java index 9abce8a22246f449e1e508dc9972d14cfb8c7c6f..c77d87b0909d3f905882efb0d49f8b5d03020cc0 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java @@ -465,7 +460,7 @@ index 0f52e8a61ca7e57e9f52473dceb9cc3464c0c86d..f54bde32760541a653460682e5a3ddd0 } } diff --git a/src/main/java/net/minecraft/server/ServerFunctionLibrary.java b/src/main/java/net/minecraft/server/ServerFunctionLibrary.java -index 0a4caef179e1cbb280381a495dea4e922e4aafe8..d8afb01007e302312108720c6e4364bed3b96bb1 100644 +index f65d6dc2b1596232707be402cf0377b5ab90cc01..6735382b229bf6ab66f1ccdf6122215e51d8b10e 100644 --- a/src/main/java/net/minecraft/server/ServerFunctionLibrary.java +++ b/src/main/java/net/minecraft/server/ServerFunctionLibrary.java @@ -81,7 +81,7 @@ public class ServerFunctionLibrary implements PreparableReloadListener { @@ -478,18 +473,18 @@ index 0a4caef179e1cbb280381a495dea4e922e4aafe8..d8afb01007e302312108720c6e4364be return map; }); diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index 5a8b27dc3c82396123f681dbf466cab3527055bf..d377a7bb17dffff3941b84445ca722e2d11c9e9f 100644 +index 14813ee7f00b082707539b6754b703375adf3c61..ff8c7b60836ef532c7bd5d41f6a83a4a9d8c9b06 100644 --- a/src/main/java/net/minecraft/server/level/ChunkMap.java +++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -143,6 +143,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - private final Long2LongMap chunkSaveCooldowns; - private final Queue unloadQueue; - public int serverViewDistance; -+ private static final ServerPlayerConnection[] EMPTY_CONNECTION = new ServerPlayerConnection[0]; // Plazma - Reduce allocations +@@ -109,6 +109,7 @@ import org.bukkit.craftbukkit.generator.CustomChunkGenerator; - // Paper start - distance maps - private final com.destroystokyo.paper.util.misc.PooledLinkedHashSets pooledLinkedPlayerHashSets = new com.destroystokyo.paper.util.misc.PooledLinkedHashSets<>(); -@@ -1361,7 +1362,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider + public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider { + ++ private static final ServerPlayerConnection[] EMPTY_CONNECTION = new ServerPlayerConnection[0]; // Plazma - Reduce allocations + private static final byte CHUNK_TYPE_REPLACEABLE = -1; + private static final byte CHUNK_TYPE_UNKNOWN = 0; + private static final byte CHUNK_TYPE_FULL = 1; +@@ -1357,7 +1358,7 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider // stuff could have been removed, so we need to check the trackedPlayers set // for players that were removed @@ -499,10 +494,10 @@ index 5a8b27dc3c82396123f681dbf466cab3527055bf..d377a7bb17dffff3941b84445ca722e2 this.updatePlayer(conn.getPlayer()); } diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 3902656486aa4fffc448a0f513b5e6564a20d3ad..61bae80e4f69e9c6210c591cd10eb1b9ba53c468 100644 +index 4f1d092d9bb41c87aa2db9d5b2ffc98907515e53..ed2eb73580b9f0dd0bb2e8de6fa86d7d1e9be59b 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -1454,7 +1454,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1449,7 +1449,7 @@ public class ServerLevel extends Level implements WorldGenLevel { public static List getCurrentlyTickingEntities() { Entity ticking = currentlyTickingEntity.get(); @@ -512,13 +507,13 @@ index 3902656486aa4fffc448a0f513b5e6564a20d3ad..61bae80e4f69e9c6210c591cd10eb1b9 return ret; } diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index f9b21e850251172851a434261a6e0b20efb46042..2ce7a7657f9bc5d93699429efb7f832dce451efd 100644 +index 3a30fee71f0874f352690ed57ddf1bad069f3db1..5a49594e9deaa5fe4ddefc9919396f207dcae79e 100644 --- a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -@@ -795,13 +795,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl +@@ -792,13 +792,13 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl // PacketUtils.ensureRunningOnSameThread(packet, this, this.player.serverLevel()); // Paper - run this async // CraftBukkit start - if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper start - split and make configurable + if (this.chatSpamTickCount.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.tabSpamLimit && !this.server.getPlayerList().isOp(this.player.getGameProfile())) { // Paper - configurable tab spam limits - server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause + server.scheduleOnMain(() -> this.disconnect(Component.translatable("disconnect.spam"/*, new Object[0]*/), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause // Plazma - Reduce allocations return; @@ -531,8 +526,8 @@ index f9b21e850251172851a434261a6e0b20efb46042..2ce7a7657f9bc5d93699429efb7f832d return; } // Paper end -@@ -3284,7 +3284,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl - // Paper start +@@ -3279,7 +3279,7 @@ public class ServerGamePacketListenerImpl extends ServerCommonPacketListenerImpl + // Paper start - auto recipe limit if (!org.bukkit.Bukkit.isPrimaryThread()) { if (this.recipeSpamPackets.addAndGet(io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamIncrement) > io.papermc.paper.configuration.GlobalConfiguration.get().spamLimiter.recipeSpamLimit) { - this.server.scheduleOnMain(() -> this.disconnect(net.minecraft.network.chat.Component.translatable("disconnect.spam", new Object[0]), org.bukkit.event.player.PlayerKickEvent.Cause.SPAM)); // Paper - kick event cause @@ -541,7 +536,7 @@ index f9b21e850251172851a434261a6e0b20efb46042..2ce7a7657f9bc5d93699429efb7f832d } } diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index c9dba75182bec18b775622ff188e222e383b2c66..84749f16f4b41d75f0b2075b1ffd093f1bbb5771 100644 +index 0f53f8da792812f9a324843959939bff7bbc78ed..5d4331fcded0788d2a38a64d49bdb8a26f2bdec9 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java @@ -138,8 +138,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, @@ -574,7 +569,7 @@ index c9dba75182bec18b775622ff188e222e383b2c66..84749f16f4b41d75f0b2075b1ffd093f ServerConfigurationPacketListenerImpl serverconfigurationpacketlistenerimpl = new ServerConfigurationPacketListenerImpl(this.server, this.connection, commonlistenercookie, this.player); // CraftBukkit diff --git a/src/main/java/net/minecraft/server/players/PlayerList.java b/src/main/java/net/minecraft/server/players/PlayerList.java -index 59afcfb957ea653e64b17385accf5c9449d33b2a..104eb183df2f44e5ff8658b8d07e4fc87ee845d2 100644 +index 56ee7057defed5c9281aa557d20608c275fac9d6..670519845bc4dc8c59f1fb48a4c7e35d0f986567 100644 --- a/src/main/java/net/minecraft/server/players/PlayerList.java +++ b/src/main/java/net/minecraft/server/players/PlayerList.java @@ -716,7 +716,7 @@ public abstract class PlayerList { @@ -587,10 +582,10 @@ index 59afcfb957ea653e64b17385accf5c9449d33b2a..104eb183df2f44e5ff8658b8d07e4fc8 // Instead of kicking then returning, we need to store the kick reason diff --git a/src/main/java/net/minecraft/server/players/StoredUserList.java b/src/main/java/net/minecraft/server/players/StoredUserList.java -index 665120a62525f56912263a3e1b6f12f6c3e15dec..78d2298d8cb0b028dc777106115d425b10cfd599 100644 +index 35f973cc2c0989256fa21abaf0327c2f36dbe4c9..2e7ef69361ec8e5c2e9c03653beb945fbd5877a1 100644 --- a/src/main/java/net/minecraft/server/players/StoredUserList.java +++ b/src/main/java/net/minecraft/server/players/StoredUserList.java -@@ -79,7 +79,7 @@ public abstract class StoredUserList> { +@@ -77,7 +77,7 @@ public abstract class StoredUserList> { } public String[] getUserList() { @@ -625,7 +620,7 @@ index 311625277a26c9c187025a1036978229241b965f..33d70d547f614704e7ac36b9f49bbb7c public ZeroBitStorage(int size) { diff --git a/src/main/java/net/minecraft/world/entity/animal/Bee.java b/src/main/java/net/minecraft/world/entity/animal/Bee.java -index bdb78cc701543cfe91a6bafd1786fe2ea0bf1ddc..8f28c80cdb15005ddc0886581cd457e880f1f71c 100644 +index 997ab942be9f742804041b07d607e7dd6473ba96..14a61e58987464d7865caf98e6232fb1334c6d88 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Bee.java +++ b/src/main/java/net/minecraft/world/entity/animal/Bee.java @@ -251,7 +251,7 @@ public class Bee extends Animal implements NeutralMob, FlyingAnimal { @@ -638,7 +633,7 @@ index bdb78cc701543cfe91a6bafd1786fe2ea0bf1ddc..8f28c80cdb15005ddc0886581cd457e8 this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true)); } diff --git a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java -index 64aba511e615983988cdb6a0fd45b7d9d4f2f16d..e335c936f1f286c9bf8f19aff7202c5f7e413bbe 100644 +index 442eb602f5c82550a87e218e2013171b718abd62..b68f7d1fba18cf08a1844a179f07cb6d873c236b 100644 --- a/src/main/java/net/minecraft/world/entity/animal/IronGolem.java +++ b/src/main/java/net/minecraft/world/entity/animal/IronGolem.java @@ -122,7 +122,7 @@ public class IronGolem extends AbstractGolem implements NeutralMob { @@ -651,7 +646,7 @@ index 64aba511e615983988cdb6a0fd45b7d9d4f2f16d..e335c936f1f286c9bf8f19aff7202c5f this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Mob.class, 5, false, false, (entityliving) -> { return entityliving instanceof Enemy && !(entityliving instanceof Creeper); 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 db04b2919b811cddf4b92dafe621bb54cfe8516d..f64296ab9f13765f70e90c47d06d526602770cdc 100644 +index 588048ad83486adc7e798fba6dbbfe9f4926d7b0..8568ff3d5790ac47d7332b9f132af8839e7a2829 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Panda.java +++ b/src/main/java/net/minecraft/world/entity/animal/Panda.java @@ -339,7 +339,7 @@ public class Panda extends Animal { @@ -677,7 +672,7 @@ index eae2488f2a46e543b496b7a2919aabbb55dcb825..3383d61551f28b44943c0e935aedfa3c this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Wolf.class, true)); if (!this.hasCustomName()) { 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 5d49ed7ddf44a3d549b178ae548664194967776b..28131075d6cfd04e11a0ea24ac1466e34247b60e 100644 +index a90055fe8819a32180754b6060a0f88e81d1a3b6..68825a2ad5a6ea1b0784a935206bd150d29e25f9 100644 --- a/src/main/java/net/minecraft/world/entity/animal/Wolf.java +++ b/src/main/java/net/minecraft/world/entity/animal/Wolf.java @@ -241,7 +241,7 @@ public class Wolf extends TamableAnimal implements NeutralMob { @@ -685,12 +680,12 @@ index 5d49ed7ddf44a3d549b178ae548664194967776b..28131075d6cfd04e11a0ea24ac1466e3 this.targetSelector.addGoal(1, new OwnerHurtByTargetGoal(this)); this.targetSelector.addGoal(2, new OwnerHurtTargetGoal(this)); - this.targetSelector.addGoal(3, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); -+ this.targetSelector.addGoal(3, (new HurtByTargetGoal(this/*,new Class[0]*/)).setAlertOthers()); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(3, (new HurtByTargetGoal(this/*, new Class[0]*/)).setAlertOthers()); // Plazma - Reduce allocations this.targetSelector.addGoal(4, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); // this.targetSelector.addGoal(5, new NonTameRandomTargetGoal<>(this, Animal.class, false, Wolf.PREY_SELECTOR)); // Purpur - moved to updatePathfinders() this.targetSelector.addGoal(6, new NonTameRandomTargetGoal<>(this, Turtle.class, false, Turtle.BABY_ON_LAND_SELECTOR)); 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 3f36eedeae4b94ca684c57f4ec8d2d1ab5c51aae..b9650c83324165fa9c50f4f51bb889b165d4a260 100644 +index 8adcffc1e6434e06ca52d119a7326a1272897307..a6a697868b22224a26d6c39e594533c3b33e724b 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 @@ -84,7 +84,7 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS @@ -703,7 +698,7 @@ index 3f36eedeae4b94ca684c57f4ec8d2d1ab5c51aae..b9650c83324165fa9c50f4f51bb889b1 private final DynamicGameEventListener dynamicVibrationListener; private VibrationSystem.Data vibrationData; 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 d75f6032734ec76b498d32c952b15cb015f32674..2ffc0f90317399c24a3a6e635e6506852f48305a 100644 +index a8314521dd5d17fcf3ff1de4f6fc85804112d87c..7277022e1205185ad6b43e87820c733d9bb5c67d 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 @@ -254,7 +254,7 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob @@ -711,12 +706,12 @@ index d75f6032734ec76b498d32c952b15cb015f32674..2ffc0f90317399c24a3a6e635e650685 this.goalSelector.addGoal(7, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); -+ this.targetSelector.addGoal(1, new HurtByTargetGoal(this/*,new Class[0]*/)); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(1, new HurtByTargetGoal(this/*, new Class[0]*/)); // Plazma - Reduce allocations this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, LivingEntity.class, 0, false, false, WitherBoss.LIVING_ENTITY_SELECTOR)); } 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 68f45498405f5fd9a6f5525b9a59518a8b506aa8..f62cff35fce1288f6fb2a07cc2b9d812ad5dd239 100644 +index a00646bc8a9caefe56e48b7682e8fb0c464b81fa..a2b5d2f1be493148a0ed102f10fd8b762b8d3981 100644 --- a/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java +++ b/src/main/java/net/minecraft/world/entity/monster/AbstractSkeleton.java @@ -79,7 +79,7 @@ public abstract class AbstractSkeleton extends Monster implements RangedAttackMo @@ -724,12 +719,12 @@ index 68f45498405f5fd9a6f5525b9a59518a8b506aa8..f62cff35fce1288f6fb2a07cc2b9d812 this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); -+ this.targetSelector.addGoal(1, new HurtByTargetGoal(this/*,new Class[0]*/)); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(1, new HurtByTargetGoal(this/*, new Class[0]*/)); // Plazma - Reduce allocations this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, IronGolem.class, true)); this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Turtle.class, 10, true, false, Turtle.BABY_ON_LAND_SELECTOR)); diff --git a/src/main/java/net/minecraft/world/entity/monster/Creeper.java b/src/main/java/net/minecraft/world/entity/monster/Creeper.java -index 64f6b5f44db4fd90e789032e3833da60cfcfbef1..a95aaeed03e16f258c2a749e366232f0988d37d8 100644 +index c01f641a58de999ab0772efc24900308aad8f04a..03df741744e1f2062aed3acf7f58a37c8c99172b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Creeper.java +++ b/src/main/java/net/minecraft/world/entity/monster/Creeper.java @@ -153,7 +153,7 @@ public class Creeper extends Monster implements PowerableMob { @@ -737,12 +732,12 @@ index 64f6b5f44db4fd90e789032e3833da60cfcfbef1..a95aaeed03e16f258c2a749e366232f0 this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new NearestAttackableTargetGoal<>(this, Player.class, true)); - this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); -+ this.targetSelector.addGoal(2, new HurtByTargetGoal(this/*,new Class[0]*/)); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(2, new HurtByTargetGoal(this/*, new Class[0]*/)); // Plazma - Reduce allocations } public static AttributeSupplier.Builder createAttributes() { 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 a5fcc85334474b29c3575bccbaeceaadc06eea5c..fb452417325863ee4f2d02f716530111d1ba072f 100644 +index f0c3ab07e97ff79ca3d04260e10d069fe6c432d4..536f967ea4f17cba3c754f66a71df269a7d8290f 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java @@ -138,7 +138,7 @@ public class EnderMan extends Monster implements NeutralMob { @@ -750,7 +745,7 @@ index a5fcc85334474b29c3575bccbaeceaadc06eea5c..fb452417325863ee4f2d02f716530111 this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur this.targetSelector.addGoal(1, new EnderMan.EndermanLookForPlayerGoal(this, this::isAngryAt)); - this.targetSelector.addGoal(2, new HurtByTargetGoal(this, new Class[0])); -+ this.targetSelector.addGoal(2, new HurtByTargetGoal(this/*,new Class[0]*/)); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(2, new HurtByTargetGoal(this/*, new Class[0]*/)); // Plazma - Reduce allocations this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, Endermite.class, 10, true, false, (entityliving) -> entityliving.level().purpurConfig.endermanAggroEndermites && entityliving instanceof Endermite endermite && (!entityliving.level().purpurConfig.endermanAggroEndermitesOnlyIfPlayerSpawned || endermite.isPlayerSpawned()))); // Purpur this.targetSelector.addGoal(4, new ResetUniversalAngerTargetGoal<>(this, false)); } @@ -768,7 +763,7 @@ index dbc27afbccb027963ae3f035c268835adedbb933..320916acbf22cd5d9a7aff7d3550de75 } 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 7d72188bfa921280dc5a1aff09ee3838821d17b6..ef0aa1123aa13d7dfa010197f309a7e2a801df6f 100644 +index ad643331e0ea388dc28329828d2cb005d176eb9f..867b543f45ea7a865f5326fbcc3d3517b50be16a 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Spider.java +++ b/src/main/java/net/minecraft/world/entity/monster/Spider.java @@ -95,7 +95,7 @@ public class Spider extends Monster { @@ -776,12 +771,12 @@ index 7d72188bfa921280dc5a1aff09ee3838821d17b6..ef0aa1123aa13d7dfa010197f309a7e2 this.goalSelector.addGoal(6, new RandomLookAroundGoal(this)); this.targetSelector.addGoal(0, new org.purpurmc.purpur.entity.ai.HasRider(this)); // Purpur - this.targetSelector.addGoal(1, new HurtByTargetGoal(this, new Class[0])); -+ this.targetSelector.addGoal(1, new HurtByTargetGoal(this/*,new Class[0]*/)); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(1, new HurtByTargetGoal(this/*, new Class[0]*/)); // Plazma - Reduce allocations this.targetSelector.addGoal(2, new Spider.SpiderTargetGoal<>(this, Player.class)); this.targetSelector.addGoal(3, new Spider.SpiderTargetGoal<>(this, IronGolem.class)); } 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 f6dd5fd56926215830ccebbd46098d4bc08e17e4..d13ed2b539b90dfe977b887db9738ca7266cf6dd 100644 +index a161f8316dc38148a60ad3a661eb2d50a34ec068..d196a70e8d02772c7cdb89bd85aad28bf9f2260b 100644 --- a/src/main/java/net/minecraft/world/entity/monster/Zombie.java +++ b/src/main/java/net/minecraft/world/entity/monster/Zombie.java @@ -166,7 +166,7 @@ public class Zombie extends Monster { @@ -789,20 +784,20 @@ index f6dd5fd56926215830ccebbd46098d4bc08e17e4..d13ed2b539b90dfe977b887db9738ca7 this.goalSelector.addGoal(6, new MoveThroughVillageGoal(this, 1.0D, true, 4, this::canBreakDoors)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); - this.targetSelector.addGoal(1, (new HurtByTargetGoal(this, new Class[0])).setAlertOthers(ZombifiedPiglin.class)); -+ this.targetSelector.addGoal(1, (new HurtByTargetGoal(this/*,new Class[0]*/)).setAlertOthers(ZombifiedPiglin.class)); // Plazma - Reduce allocations ++ this.targetSelector.addGoal(1, (new HurtByTargetGoal(this/*, new Class[0]*/)).setAlertOthers(ZombifiedPiglin.class)); // Plazma - Reduce allocations this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, true)); // Purpur start if ( this.level().spigotConfig.zombieAggressiveTowardsVillager ) this.targetSelector.addGoal(3, new NearestAttackableTargetGoal<>(this, AbstractVillager.class, false) { // Spigot 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 df8c7a45eb49a8c667030eb67d6d49dcbaef4fcf..9aa3a54dcbcc2c62b3b816fbf6c0cbd62202cd57 100644 +index feba8a264bae656244f60296d0511a8046297f73..37dbf8ab18710fdd889073468c52cc0c6fc3ced2 100644 --- a/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java +++ b/src/main/java/net/minecraft/world/entity/monster/ZombifiedPiglin.java @@ -120,7 +120,7 @@ public class ZombifiedPiglin extends Zombie implements NeutralMob { protected void addBehaviourGoals() { this.goalSelector.addGoal(2, new ZombieAttackGoal(this, 1.0D, false)); this.goalSelector.addGoal(7, new WaterAvoidingRandomStrollGoal(this, 1.0D)); -- this.targetSelector.addGoal(1, pathfinderGoalHurtByTarget = (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); // Paper - assign field -+ this.targetSelector.addGoal(1, pathfinderGoalHurtByTarget = (new HurtByTargetGoal(this/*,new Class[0]*/)).setAlertOthers()); // Paper - assign field // Plazma - Reduce allocations +- this.targetSelector.addGoal(1, pathfinderGoalHurtByTarget = (new HurtByTargetGoal(this, new Class[0])).setAlertOthers()); // Paper - fix PigZombieAngerEvent cancellation ++ this.targetSelector.addGoal(1, pathfinderGoalHurtByTarget = (new HurtByTargetGoal(this/*, new Class[0]*/)).setAlertOthers()); // Paper - fix PigZombieAngerEvent cancellation // Plazma - Reduce allocations this.targetSelector.addGoal(2, new NearestAttackableTargetGoal<>(this, Player.class, 10, true, false, this::isAngryAt)); this.targetSelector.addGoal(3, new ResetUniversalAngerTargetGoal<>(this, true)); } @@ -880,7 +875,7 @@ index a907b79fd8291a0e92db138f37239d17424188a1..a402db6baa4b24b4c6750b01b8b2f56e int i = 0; diff --git a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java -index 9248769e6d357f6eec68945fd7700e79b2942c41..931806f365cf9a0587b18d115d98f5308a2f9407 100644 +index 0761096829e2afc5f8dd88b9a693874fc2f1bb8b..a65c350b2b0f662c3fd7d54465e7ff42d28715f2 100644 --- a/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java +++ b/src/main/java/net/minecraft/world/level/chunk/storage/RegionFile.java @@ -444,7 +444,7 @@ public class RegionFile implements AutoCloseable { @@ -991,7 +986,7 @@ index 399da9d43aefbb95897df4697860d5bce5317152..df7816c1c5f069d89a22dbd876a2d663 public void close() throws IOException { diff --git a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java -index eb1c8bb352bfcc81f61174fd65867390aa2cc2d2..e3e36d50a1ed2523c54213de060a58c6a751f9d0 100644 +index 3dca62446fbb7c92f5f2908b36926bbe5e905dbb..042617c7de30707f66e60536cebc31e210647b64 100644 --- a/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java +++ b/src/main/java/net/minecraft/world/level/storage/PlayerDataStorage.java @@ -125,7 +125,7 @@ public class PlayerDataStorage { @@ -1017,7 +1012,7 @@ index 16d2aa4556bc9f32a2def7f9ca282aa3fa23fb87..8514da343ce287298477f2c977e49491 @Nullable diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index f21e29d173b89d072c8422b80ae0132f67e74f6c..162e31eda71db81ad3d35fed658da283af622d0b 100644 +index 27f4ef85818f1735371a7aedd8ce311d65a3b406..b250e673213e1cd1215260db0f0cb360c62cb288 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java @@ -462,7 +462,7 @@ public class CraftPlayer extends CraftHumanEntity implements Player { diff --git a/patches/server/0035-Lithium-HashedList.patch b/patches/server/0035-Lithium-HashedList.patch index b91f19a..095ff2c 100644 --- a/patches/server/0035-Lithium-HashedList.patch +++ b/patches/server/0035-Lithium-HashedList.patch @@ -288,7 +288,7 @@ index 0000000000000000000000000000000000000000..d11579075e653868a43fe826bdf9b41d + +} diff --git a/src/main/java/net/minecraft/util/random/WeightedRandomList.java b/src/main/java/net/minecraft/util/random/WeightedRandomList.java -index 1bcb5a58b945cdb3dc94efb314d7ba41fbb38e07..34beb1b0af10877b3388e6f44913253eb51e7a51 100644 +index 1bcb5a58b945cdb3dc94efb314d7ba41fbb38e07..3bd989b2af76392a31d2aca23fdab20a79dc3933 100644 --- a/src/main/java/net/minecraft/util/random/WeightedRandomList.java +++ b/src/main/java/net/minecraft/util/random/WeightedRandomList.java @@ -8,10 +8,10 @@ import net.minecraft.util.RandomSource; @@ -300,7 +300,7 @@ index 1bcb5a58b945cdb3dc94efb314d7ba41fbb38e07..34beb1b0af10877b3388e6f44913253e WeightedRandomList(List entries) { - this.items = ImmutableList.copyOf(entries); -+ this.items = entries.size() > 4 ? ImmutableList.copyOf(entries) : java.util.Collections.unmodifiableList(new me.jellysquid.mods.lithium.common.util.collections.HashedReferenceList<>(entries));// Plazma - Lithium: collections.mob_spawning ++ this.items = entries.size() > 4 ? ImmutableList.copyOf(entries) : java.util.Collections.unmodifiableList(new me.jellysquid.mods.lithium.common.util.collections.HashedReferenceList<>(entries)); // Plazma - Lithium: collections.mob_spawning this.totalWeight = WeightedRandom.getTotalWeight(entries); } diff --git a/patches/server/0036-Improve-SwingTime-ticking.patch b/patches/server/0036-Improve-SwingTime-ticking.patch index 04e16c7..f49eb9c 100644 --- a/patches/server/0036-Improve-SwingTime-ticking.patch +++ b/patches/server/0036-Improve-SwingTime-ticking.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Improve SwingTime ticking diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 3b1c09f8afe1a008df4b75b605a796bfb1bf3899..339127ac7795b7647b2a3f6b2cdafff500b1d8d5 100644 +index d914eab93a1a282ce149e361015abd94269fa0be..cf848c35147a94d6dd07dfabb21703b06d3cffc7 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java @@ -2602,6 +2602,7 @@ public abstract class LivingEntity extends Entity implements Attackable { } protected void updateSwingTime() { -+ if (!this.swinging && this.swingTime == 0) return; // Plazma - de-sisyphus :skull: ++ if (!this.swinging && this.swingTime == 0) return; // Plazma - Improve SwingTime ticking int i = this.getCurrentSwingDuration(); if (this.swinging) { diff --git a/patches/server/0037-Save-Json-list-asynchronously.patch b/patches/server/0037-Save-Json-list-asynchronously.patch index 4f61ebf..572523c 100644 --- a/patches/server/0037-Save-Json-list-asynchronously.patch +++ b/patches/server/0037-Save-Json-list-asynchronously.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Save Json list asynchronously diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java b/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java -index 935dac757280731bfeb0a8f033cbe315ecac46da..038f370ac2cb768e14fe7605b32b2ac811c33b8f 100644 +index 1c9cf5e1c4ee05724ffcdbd77a19bca1ab2be4d3..bc3b251a3f8ad345bdaaf67be59ff2c143d4d130 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedPlayerList.java @@ -60,20 +60,20 @@ public class DedicatedPlayerList extends PlayerList { @@ -13,30 +13,30 @@ index 935dac757280731bfeb0a8f033cbe315ecac46da..038f370ac2cb768e14fe7605b32b2ac8 private void saveIpBanList() { - try { -+ //try { // Plazma - Build fix ++ //try { // Plazma - Save Json list asynchronously this.getIpBans().save(); - } catch (IOException var2) { -+ /*} catch (IOException var2) { // Plazma - Build fix ++ /*} catch (IOException var2) { // Plazma - Save Json list asynchronously LOGGER.warn("Failed to save ip banlist: ", (Throwable)var2); - } -+ }*/ // Plazma - Build fix ++ }*/ // Plazma - Save Json list asynchronously } private void saveUserBanList() { - try { -+ //try { // Plazma - Build fix ++ //try { // Plazma - Save Json list asynchronously this.getBans().save(); - } catch (IOException var2) { -+ /*} catch (IOException var2) { // Plazma - Build fix ++ /*} catch (IOException var2) { // Plazma - Save Json list asynchronously LOGGER.warn("Failed to save user banlist: ", (Throwable)var2); - } -+ }*/ // Plazma - Build fix ++ }*/ // Plazma - Save Json list asynchronously } diff --git a/src/main/java/net/minecraft/server/players/StoredUserList.java b/src/main/java/net/minecraft/server/players/StoredUserList.java -index 78d2298d8cb0b028dc777106115d425b10cfd599..cb5fbe78a4c3bffe91a579b9d8c24e35cd3d1021 100644 +index 2e7ef69361ec8e5c2e9c03653beb945fbd5877a1..43680e141f08ba8359401a17f2e2fe59fca12dfa 100644 --- a/src/main/java/net/minecraft/server/players/StoredUserList.java +++ b/src/main/java/net/minecraft/server/players/StoredUserList.java @@ -44,11 +44,11 @@ public abstract class StoredUserList> { @@ -44,32 +44,32 @@ index 78d2298d8cb0b028dc777106115d425b10cfd599..cb5fbe78a4c3bffe91a579b9d8c24e35 this.map.put(this.getKeyForUser(entry.getUser()), entry); - try { -+ //try { // Plazma - Fix build ++ //try { // Plazma - Save Json list asynchronously this.save(); - } catch (IOException ioexception) { -+ /*} catch (IOException ioexception) { // Plazma - Fix build ++ /*} catch (IOException ioexception) { // Plazma - Save Json list asynchronously StoredUserList.LOGGER.warn("Could not save the list after adding a user.", ioexception); - } -+ }*/ // Plazma - Fix build ++ }*/ // Plazma - Save Json list asynchronously } -@@ -66,11 +66,11 @@ public abstract class StoredUserList> { +@@ -64,11 +64,11 @@ public abstract class StoredUserList> { public void remove(K key) { this.map.remove(this.getKeyForUser(key)); - try { -+ //try { // Plazma - Fix build ++ //try { // Plazma - Save Json list asynchronously this.save(); - } catch (IOException ioexception) { -+ /*} catch (IOException ioexception) { // Plazma - Fix build ++ /*} catch (IOException ioexception) { // Plazma - Save Json list asynchronously StoredUserList.LOGGER.warn("Could not save the list after removing a user.", ioexception); - } -+ }*/ // Plazma - Fix build ++ }*/ // Plazma - Save Json list asynchronously } -@@ -125,7 +125,10 @@ public abstract class StoredUserList> { +@@ -102,7 +102,10 @@ public abstract class StoredUserList> { return this.map.values(); } @@ -81,7 +81,7 @@ index 78d2298d8cb0b028dc777106115d425b10cfd599..cb5fbe78a4c3bffe91a579b9d8c24e35 this.removeExpired(); // Paper - remove expired values before saving JsonArray jsonarray = new JsonArray(); Stream stream = this.map.values().stream().map((jsonlistentry) -> { // CraftBukkit - decompile error -@@ -137,27 +140,16 @@ public abstract class StoredUserList> { +@@ -114,27 +117,16 @@ public abstract class StoredUserList> { Objects.requireNonNull(jsonarray); stream.forEach(jsonarray::add); @@ -110,7 +110,7 @@ index 78d2298d8cb0b028dc777106115d425b10cfd599..cb5fbe78a4c3bffe91a579b9d8c24e35 + }); } -+ // Plazma end ++ // Plazma end - Save Json list asynchronously public void load() throws IOException { if (this.file.exists()) { diff --git a/patches/unapplied/0038-Async-PathProcessing.patch b/patches/unapplied/server/0038-Async-PathProcessing.patch similarity index 100% rename from patches/unapplied/0038-Async-PathProcessing.patch rename to patches/unapplied/server/0038-Async-PathProcessing.patch