From efe9a481333befd498bbb07cdf83bc82f22cd611 Mon Sep 17 00:00:00 2001 From: booky10 Date: Sat, 3 Feb 2024 18:21:29 +0100 Subject: [PATCH] Updated Upstream (Paper) Upstream has released updates that appear to apply and compile correctly Paper Changes: PaperMC/Paper@4fdda9e Keep newlines in outdated client/server message (#10042) PaperMC/Paper@f483b38 fix NPE on EntityTeleportEvent getTo (#10016) PaperMC/Paper@dc62150 Catch async usage of playsound (#10021) PaperMC/Paper@0d6a0c3 Fix command block async message (again) (#10082) PaperMC/Paper@d1f507f Don't fire 2 game events for certain cauldron interactions (#8904) PaperMC/Paper@a401585 Fix campfire recipes not always outputting full result (#8754) PaperMC/Paper@88d28d6 Fix long loading screen when refreshing skins (#10026) PaperMC/Paper@c081104 Add experience points api (#9688) PaperMC/Paper@8221b08 Fix global sound event gamerule not being respected (#8727) PaperMC/Paper@3c0d6aa Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10085) PaperMC/Paper@2c3ccb8 Add drops to shear events (#5678) PaperMC/Paper@b2ffb1b Add PlayerShieldDisableEvent (#9177) PaperMC/Paper@2951732 Add HiddenPotionEffect API (#9910) PaperMC/Paper@e4ab50d Properly disallow async Player#chat (#8123) PaperMC/Paper@5e978d3 Fix Folia scheduler tasks not canceling when plugin disable (#10091) PaperMC/Paper@e56e53f Fix some component bugs in login disconnect packet (#10090) PaperMC/Paper@3484ae9 Call entity_die game event after event cancel check (#10096) PaperMC/Paper@0ae58c0 cleanup player death event adventure logic (#10095) PaperMC/Paper@1281f4f Make region/lock shift accessors per world PaperMC/Paper@983377b Correctly check if bucket dispenses will succeed for event (#10109) PaperMC/Paper@58e120b [ci skip] Remove extraneous diff added in 1.20.3 update (#10101) PaperMC/Paper@816bacc Call EntityChangeBlockEvent for cake eating (#10105) PaperMC/Paper@692db0c fix CustomModelData being removed (#10113) PaperMC/Paper@509876d Keep fully frozen entities fully activated (#10103) PaperMC/Paper@1fa48d1 include relative flags in PlayerTeleportEvent (#8190) PaperMC/Paper@ae001ae Fix untrack event not being called for all 'untracks' (#10110) PaperMC/Paper@259bc76 Pass system properties to maven repo session (#10117) PaperMC/Paper@b2a6d57 Validate ResourceLocation in NBT reading PaperMC/Paper@7eaff48 [ci skip] Replace some magic values with constant references PaperMC/Paper@19a6202 Fix experience & improvements to block events (#8067) PaperMC/Paper@8379027 Fix cmd permission levels for command blocks (#7404) PaperMC/Paper@a93acc4 Fix EntityChangePoseEvent being called during worldgen (#10120) PaperMC/Paper@25a99b1 Fix BlockDestroyEvents effectBlock not being set (#10131) PaperMC/Paper@a58e29d Fix a borked update of 'Properly handle BlockBreakEvent#isDropItems' (#10134) PaperMC/Paper@570cfb4 Validate missed resource location parsing PaperMC/Paper@e46276e Fixup NamespacedKey parsing PaperMC/Paper@f1c5f01 [ci skip] Fix typo PaperMC/Paper@07b956e Fix tests by disabling them PaperMC/Paper@a80d31b Log command execution exceptions if debug=true (#10130) PaperMC/Paper@ec19620 Use a ConcurrentHashMap for enum mappings for BlockData (#10161) PaperMC/Paper@f28caff Limit ResourceLocation length to nbt string tag length PaperMC/Paper@a0ffb57 [ci skip] Small cleanup to mc utils patch PaperMC/Paper@8c8862f Also check for the actual character length in ResourceLocation validation PaperMC/Paper@e84621a [ci skip] Add more patch identifying comments PaperMC/Paper@c0e4697 [ci skip] Add more patch identifying comments PaperMC/Paper@17275ff [ci skip] add more comments & move 1 hunk to correct patch PaperMC/Paper@78fcb8e [ci skip] Update contributing guidelines to include identifying commit titles in comments (#10162) PaperMC/Paper@8657cd9 Updated Upstream (Bukkit/CraftBukkit/Spigot) (#10164) PaperMC/Paper@c151c95 Fixup AsyncPreLoginEvent patches PaperMC/Paper@93a848c Readd missed line PaperMC/Paper@f9fdedf [ci skip] Add more patch identifying comments, merge related patches PaperMC/Paper@0ef5984 [ci skip] Add more patch identifying comments, merge related patches PaperMC/Paper@848a396 Add mob goal generator (#9980) PaperMC/Paper@ebf97bd [ci skip] Add more patch identifying comments PaperMC/Paper@94807a1 [ci skip] Minor cleanup and patch merges PaperMC/Paper@5e73c55 [ci skip] Add more identifying patch comments PaperMC/Paper@3e20d3a [ci skip] Add more identifying patch comments PaperMC/Paper@f61ebdc Fix issue with kick event causes being passed improperly PaperMC/Paper@106c67a [ci skip] Add more identifying patch comments PaperMC/Paper@cc693ce [ci skip] Add more identifying patch comments, merge related patches PaperMC/Paper@eeb6afc [ci skip] Add more identifying patch comments, merge related patches PaperMC/Paper@1c956ab [ci skip] Add more identifying patch comments, merge related patches PaperMC/Paper@42e88a8 [ci skip] Add more identifying patch comments PaperMC/Paper@8e41ef4 Add visual blockdata api for primed tnt (#10146) PaperMC/Paper@68c3297 [ci skip] Add more identifying patch comments PaperMC/Paper@4a98986 Add back Reduce allocation of Vec3D by entity tracker patch (#10179) PaperMC/Paper@b48d737 Async world data IO saving (#10171) PaperMC/Paper@8d94596 [ci skip] Add more identifying patch comments PaperMC/Paper@f7dd304 [ci skip] Add more identifying patch comments PaperMC/Paper@98e6d20 [ci skip] Add more identifying patch comments PaperMC/Paper@e9e0bc1 [ci skip] Add more identifying patch comments PaperMC/Paper@d9df6bc [ci skip] Add more patch identifying comments, cleanup PaperMC/Paper@27cabc1 [ci skip] Add more patch identifying comments PaperMC/Paper@684319f [ci skip] Add more patch identifying comments PaperMC/Paper@9eb0b38 [ci skip] Add more patch identifying comments PaperMC/Paper@25013d9 [ci skip] Move some disruptive patches back PaperMC/Paper@484d6bf [ci skip] Move some disruptive patches back PaperMC/Paper@52619e7 [ci skip] Add more patch identifying comments PaperMC/Paper@e660379 [ci skip] Move some disruptive patches back PaperMC/Paper@c57d1aa Move diffs around to compile without later ones applied PaperMC/Paper@581b101 Add world to Entity AddTo/RemoveFrom Events (#10183) PaperMC/Paper@24dc2bf Add BlockStateMeta#clearBlockState (#10160) PaperMC/Paper@76da4bc Expose LootTable of DecoratedPot (#10023) PaperMC/Paper@11645e3 [ci skip] (Mostly) finish adding identifying patch comments PaperMC/Paper@51bef80 [ci skip] Remove removed patches PaperMC/Paper@ad2cf68 [ci skip] Move chunk system patch back a bit PaperMC/Paper@d405ff1 [ci skip] Fixup last commit PaperMC/Paper@a4a08b7 [ci skip] Move chunk system patch a bit back PaperMC/Paper@b700460 Convert average tick value in the GUI to the correct granularity PaperMC/Paper@1831240 [ci skip] Move chunk system patch back PaperMC/Paper@b03f255 Finish moving patches back and improving compilable state PaperMC/Paper@bd2fd61 [ci skip] Fixup a few bad comments PaperMC/Paper@fe53b0e Updated Upstream (Bukkit/CraftBukkit/Spigot) PaperMC/Paper@1ed50da Fix javadoc errors, remove unused classes PaperMC/Paper@7f7d05a [ci skip] Remove IRC link from the README (#10194) PaperMC/Paper@ed130f1 [ci skip] clarify javadocs for Block#getDrops (#10153) PaperMC/Paper@4643b0d Shulker duplicate event (#10135) PaperMC/Paper@b333831 Make spawn egg colours visible (#10158) PaperMC/Paper@0cc3a7e Disable memory reserve allocating (#10180) PaperMC/Paper@3841722 Properly check if a loot table exists (#10190) PaperMC/Paper@b3c8108 [ci skip] Fix incorrect documentation for BlockDropItemEvent (#10175) PaperMC/Paper@294347b [ci skip] Cleanup events (#10202) PaperMC/Paper@87ce7c7 Small refactor of Paper plugin context preparation PaperMC/Paper@7f856a1 Fix sleeping pos desync PaperMC/Paper@8bc5be8 Add missing catch PaperMC/Paper@c5d168c More provider source fixup --- gradle.properties | 2 +- ...1-Optimize-non-flush-packet-sending.patch} | 2 +- ...llocation-of-Vec3D-by-entity-tracker.patch | 59 -- ...h => 0002-Pufferfish-Server-Patches.patch} | 574 ++++++++---------- ...nding.patch => 0003-Change-branding.patch} | 22 +- ...> 0004-Add-CloudPlane-configuration.patch} | 45 +- ...patch => 0005-Add-allowPvP-gamerule.patch} | 8 +- ...ranslate-custom-item-names-and-lore.patch} | 6 +- ...> 0007-Add-more-detailed-brand-info.patch} | 4 +- ...t-for-changing-pufferfish-config-lo.patch} | 16 +- ...ckupArrowEvent-for-creative-players.patch} | 2 +- ...ent-healing-amplifier-from-breaking.patch} | 0 ...exceptions-caused-by-packet-sending.patch} | 4 +- ...-synced-opencount-for-shulker-boxes.patch} | 0 ...3-Resend-more-data-on-locale-change.patch} | 14 +- 15 files changed, 326 insertions(+), 432 deletions(-) rename patches/server/{0002-Optimize-non-flush-packet-sending.patch => 0001-Optimize-non-flush-packet-sending.patch} (97%) delete mode 100644 patches/server/0001-Reduce-allocation-of-Vec3D-by-entity-tracker.patch rename patches/server/{0003-Pufferfish-Server-Patches.patch => 0002-Pufferfish-Server-Patches.patch} (90%) rename patches/server/{0004-Change-branding.patch => 0003-Change-branding.patch} (91%) rename patches/server/{0005-Add-CloudPlane-configuration.patch => 0004-Add-CloudPlane-configuration.patch} (89%) rename patches/server/{0006-Add-allowPvP-gamerule.patch => 0005-Add-allowPvP-gamerule.patch} (86%) rename patches/server/{0007-Add-option-to-translate-custom-item-names-and-lore.patch => 0006-Add-option-to-translate-custom-item-names-and-lore.patch} (97%) rename patches/server/{0008-Add-more-detailed-brand-info.patch => 0007-Add-more-detailed-brand-info.patch} (94%) rename patches/server/{0009-Add-start-argument-for-changing-pufferfish-config-lo.patch => 0008-Add-start-argument-for-changing-pufferfish-config-lo.patch} (82%) rename patches/server/{0010-Fire-PlayerPickupArrowEvent-for-creative-players.patch => 0009-Fire-PlayerPickupArrowEvent-for-creative-players.patch} (94%) rename patches/server/{0011-Prevent-healing-amplifier-from-breaking.patch => 0010-Prevent-healing-amplifier-from-breaking.patch} (100%) rename patches/server/{0012-Log-exceptions-caused-by-packet-sending.patch => 0011-Log-exceptions-caused-by-packet-sending.patch} (93%) rename patches/server/{0013-Don-t-apply-de-synced-opencount-for-shulker-boxes.patch => 0012-Don-t-apply-de-synced-opencount-for-shulker-boxes.patch} (100%) rename patches/server/{0014-Resend-more-data-on-locale-change.patch => 0013-Resend-more-data-on-locale-change.patch} (92%) diff --git a/gradle.properties b/gradle.properties index ac301e2..2abb2ad 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,7 +3,7 @@ version = 1.20.4-R0.1-SNAPSHOT mcVersion = 1.20.4 packageVersion = 1_20_R3 -paperRef = c215ce185861af0fd123a91a79ad8907d9a7951a +paperRef = c5d168cef92148a6799141832fdb5f95732c1a38 org.gradle.jvmargs = -Xmx2G diff --git a/patches/server/0002-Optimize-non-flush-packet-sending.patch b/patches/server/0001-Optimize-non-flush-packet-sending.patch similarity index 97% rename from patches/server/0002-Optimize-non-flush-packet-sending.patch rename to patches/server/0001-Optimize-non-flush-packet-sending.patch index f8401d0..ca2f94a 100644 --- a/patches/server/0002-Optimize-non-flush-packet-sending.patch +++ b/patches/server/0001-Optimize-non-flush-packet-sending.patch @@ -27,7 +27,7 @@ runnables on the event loop. Co-authored-by: booky10 diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index c0ea20dcee8bb293df96bc6ee019e50ad6b383fd..11805569eefe100c2f469431d77a0d5a80c53244 100644 +index 4716f8bd8a64d4f20f0d5957c1e7fabf63020f43..8695b0f7b02c3001947c81b6f57680a3f7325787 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -60,6 +60,21 @@ import org.slf4j.MarkerFactory; diff --git a/patches/server/0001-Reduce-allocation-of-Vec3D-by-entity-tracker.patch b/patches/server/0001-Reduce-allocation-of-Vec3D-by-entity-tracker.patch deleted file mode 100644 index 686550e..0000000 --- a/patches/server/0001-Reduce-allocation-of-Vec3D-by-entity-tracker.patch +++ /dev/null @@ -1,59 +0,0 @@ -From 0000000000000000000000000000000000000000 Mon Sep 17 00:00:00 2001 -From: Spottedleaf -Date: Mon, 27 Apr 2020 00:04:16 -0700 -Subject: [PATCH] Reduce allocation of Vec3D by entity tracker - - -diff --git a/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java b/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java -index 33d9131e9c75ef23cd637f5d6c39a2704a0c92a5..4b6e0fe2fabcc55007fd8979e81f66df9c0278b7 100644 ---- a/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java -+++ b/src/main/java/net/minecraft/network/protocol/game/VecDeltaCodec.java -@@ -5,7 +5,7 @@ import org.jetbrains.annotations.VisibleForTesting; - - public class VecDeltaCodec { - private static final double TRUNCATION_STEPS = 4096.0D; -- private Vec3 base = Vec3.ZERO; -+ public Vec3 base = Vec3.ZERO; // Paper - - @VisibleForTesting - static long encode(double value) { -diff --git a/src/main/java/net/minecraft/server/level/ChunkMap.java b/src/main/java/net/minecraft/server/level/ChunkMap.java -index d9cd497bc1b654030ff1a597f038b6a881df9f6b..67d9be1e73ab877c8f04a13b8220cfafaf8d18f7 100644 ---- a/src/main/java/net/minecraft/server/level/ChunkMap.java -+++ b/src/main/java/net/minecraft/server/level/ChunkMap.java -@@ -1418,10 +1418,14 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider - public void updatePlayer(ServerPlayer player) { - org.spigotmc.AsyncCatcher.catchOp("player tracker update"); // Spigot - if (player != this.entity) { -- Vec3 vec3d = player.position().subtract(this.entity.position()); -+ // Paper start - remove allocation of Vec3D here -+ // Vec3 vec3d = player.position().subtract(this.entity.position()); -+ double vec3d_dx = player.getX() - this.entity.getX(); -+ double vec3d_dz = player.getZ() - this.entity.getZ(); -+ // Paper end - remove allocation of Vec3D here - int i = ChunkMap.this.getPlayerViewDistance(player); - double d0 = (double) Math.min(this.getEffectiveRange(), i * 16); -- double d1 = vec3d.x * vec3d.x + vec3d.z * vec3d.z; -+ double d1 = vec3d_dx * vec3d_dx + vec3d_dz * vec3d_dz; // Paper - double d2 = d0 * d0; - boolean flag = d1 <= d2 && this.entity.broadcastToPlayer(player) && ChunkMap.this.isChunkTracked(player, this.entity.chunkPosition().x, this.entity.chunkPosition().z); - // Paper start - check Y -diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index 35674f92a67f93382103c2766df4b678ba5c862f..fd75d4b04ca560a3c1c0035052ff0073b7081d71 100644 ---- a/src/main/java/net/minecraft/server/level/ServerEntity.java -+++ b/src/main/java/net/minecraft/server/level/ServerEntity.java -@@ -164,7 +164,13 @@ public class ServerEntity { - i = Mth.floor(this.entity.getYRot() * 256.0F / 360.0F); - j = Mth.floor(this.entity.getXRot() * 256.0F / 360.0F); - Vec3 vec3d = this.entity.trackingPosition(); -- boolean flag1 = this.positionCodec.delta(vec3d).lengthSqr() >= 7.62939453125E-6D; -+ // Paper start - reduce allocation of Vec3D here -+ Vec3 base = this.positionCodec.base; -+ double vec3d_dx = vec3d.x - base.x; -+ double vec3d_dy = vec3d.y - base.y; -+ double vec3d_dz = vec3d.z - base.z; -+ boolean flag1 = (vec3d_dx * vec3d_dx + vec3d_dy * vec3d_dy + vec3d_dz * vec3d_dz) >= 7.62939453125E-6D; -+ // Paper end - reduce allocation of Vec3D here - Packet packet1 = null; - boolean flag2 = flag1 || this.tickCount % 60 == 0; - boolean flag3 = Math.abs(i - this.yRotp) >= 1 || Math.abs(j - this.xRotp) >= 1; diff --git a/patches/server/0003-Pufferfish-Server-Patches.patch b/patches/server/0002-Pufferfish-Server-Patches.patch similarity index 90% rename from patches/server/0003-Pufferfish-Server-Patches.patch rename to patches/server/0002-Pufferfish-Server-Patches.patch index 41e5eb2..70edd25 100644 --- a/patches/server/0003-Pufferfish-Server-Patches.patch +++ b/patches/server/0002-Pufferfish-Server-Patches.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Pufferfish Server Patches diff --git a/build.gradle.kts b/build.gradle.kts -index 58da26ad2f128ba0b66f86820f60853f4be352f0..d36d53048aa7e254a19a567336e9daa2669935e3 100644 +index 376e8983fdfdbb6c3e5fd8ad0f6a05e655b622bf..6d54e1145ad71c0a66416f96ddd5c7c54374371b 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -51,6 +51,14 @@ dependencies { +@@ -50,6 +50,14 @@ dependencies { runtimeOnly("org.apache.maven.resolver:maven-resolver-connector-basic:1.9.18") runtimeOnly("org.apache.maven.resolver:maven-resolver-transport-http:1.9.18") @@ -23,7 +23,7 @@ index 58da26ad2f128ba0b66f86820f60853f4be352f0..d36d53048aa7e254a19a567336e9daa2 testImplementation("io.github.classgraph:classgraph:4.8.47") // Paper - mob goal test testImplementation("org.junit.jupiter:junit-jupiter:5.10.0") testImplementation("org.hamcrest:hamcrest:2.2") -@@ -58,6 +66,14 @@ dependencies { +@@ -57,6 +65,14 @@ dependencies { } val craftbukkitPackageVersion = "1_20_R3" // Paper @@ -39,10 +39,10 @@ index 58da26ad2f128ba0b66f86820f60853f4be352f0..d36d53048aa7e254a19a567336e9daa2 archiveClassifier.set("dev") diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index a2f71a6d1a9e98133dff6cd0f625da9435a8af14..ff940e43ca35094bbcae6c7d471d3c4aeb7c1727 100644 +index 7620c72a4c243cbeea245203ce03a97cbfa7d922..b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -242,7 +242,8 @@ public class TimingsExport extends Thread { +@@ -240,7 +240,8 @@ public class TimingsExport extends Thread { parent.put("config", createObject( pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), @@ -551,10 +551,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..13e6a1539360f48f8c8f63a9150a427de6027948 +index 0000000000000000000000000000000000000000..25c02b42b69c9497fdd9e35e1e72a57f542a06ce --- /dev/null +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -@@ -0,0 +1,315 @@ +@@ -0,0 +1,310 @@ +package gg.pufferfish.pufferfish; + +import gg.pufferfish.pufferfish.flare.FlareCommand; @@ -820,9 +820,9 @@ index 0000000000000000000000000000000000000000..13e6a1539360f48f8c8f63a9150a427d + } + } + -+ public static boolean throttleInactiveGoalSelectorTick; ++ public static boolean throttleInactiveGoalSelectorTick = true; + private static void inactiveGoalSelectorThrottle() { -+ getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", true, ++ throttleInactiveGoalSelectorTick = getBoolean("inactive-goal-selector-throttle", "inactive-goal-selector-disable", throttleInactiveGoalSelectorTick, + "Throttles the AI goal selector in entity inactive ticks.", + "This can improve performance by a few percent, but has minor gameplay implications."); + } @@ -839,11 +839,9 @@ index 0000000000000000000000000000000000000000..13e6a1539360f48f8c8f63a9150a427d + public static URI profileWebUrl; + private static void profilerOptions() { + profileWebUrl = URI.create(getString("flare.url", "https://flare.airplane.gg", "Sets the server to use for profiles.")); -+ + setComment("flare", "Configures Flare, the built-in profiler"); + } + -+ + public static String accessToken; + private static void airplaneWebServices() { + accessToken = getString("web-services.token", ""); @@ -857,18 +855,15 @@ index 0000000000000000000000000000000000000000..13e6a1539360f48f8c8f63a9150a427d + } + + setComment("web-services", "Options for connecting to Pufferfish/Airplane's online utilities"); -+ + } + -+ -+ public static boolean disableMethodProfiler; -+ public static boolean disableOutOfOrderChat; ++ public static boolean disableMethodProfiler = true; ++ public static boolean disableOutOfOrderChat = false; + 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"); ++ disableMethodProfiler = getBoolean("misc.disable-method-profiler", disableMethodProfiler); ++ disableOutOfOrderChat = getBoolean("misc.disable-out-of-order-chat", disableOutOfOrderChat); ++ 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 new file mode 100644 @@ -1960,50 +1955,35 @@ index 0000000000000000000000000000000000000000..facd55463d44cb7e3d2ca6892982f549 + } +} diff --git a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -index a6f58b3457b7477015c5c6d969e7d83017dd3fa1..a27ee205d13dda890646ebf451076f383de0728b 100644 +index a6f58b3457b7477015c5c6d969e7d83017dd3fa1..7793bd73042171a0aecbe3b51db293454452f832 100644 --- a/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java +++ b/src/main/java/io/papermc/paper/configuration/GlobalConfiguration.java -@@ -8,6 +8,7 @@ import net.kyori.adventure.text.Component; - import net.kyori.adventure.text.format.NamedTextColor; - import net.minecraft.network.protocol.Packet; - import net.minecraft.network.protocol.game.ServerboundPlaceRecipePacket; -+import org.bukkit.Bukkit; // Pufferfish - import org.checkerframework.checker.nullness.qual.Nullable; - import org.slf4j.Logger; - import org.spongepowered.configurate.objectmapping.ConfigSerializable; -@@ -19,6 +20,7 @@ import org.spongepowered.configurate.objectmapping.meta.Setting; - import java.util.List; - import java.util.Map; - import java.util.Objects; -+import java.util.logging.Level; // Pufferfish - - @SuppressWarnings({"CanBeFinal", "FieldCanBeLocal", "FieldMayBeFinal", "NotNullFieldNotInitialized", "InnerClassMayBeStatic"}) - public class GlobalConfiguration extends ConfigurationPart { -@@ -96,6 +98,7 @@ public class GlobalConfiguration extends ConfigurationPart { +@@ -96,6 +96,7 @@ public class GlobalConfiguration extends ConfigurationPart { @Deprecated(forRemoval = true) public class Timings extends ConfigurationPart { public boolean enabled = true; -+ public boolean reallyEnabled = false; ++ public boolean reallyEnabled = false; // Pufferfish public boolean verbose = true; public String url = "https://timings.aikar.co/"; public boolean serverNamePrivacy = false; -@@ -109,6 +112,14 @@ public class GlobalConfiguration extends ConfigurationPart { +@@ -109,6 +110,15 @@ public class GlobalConfiguration extends ConfigurationPart { @PostProcess private void postProcess() { + // Pufferfish start -+ if (enabled && !reallyEnabled) { -+ Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] To improve performance, timings have been disabled by default"); -+ Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] You can still use timings by using /timings on, but they will not start on server startup unless you set timings.really-enabled to true in paper.yml"); -+ Bukkit.getLogger().log(Level.WARNING, "[Pufferfish] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false."); ++ if (this.enabled && !this.reallyEnabled) { ++ org.bukkit.Bukkit.getLogger().warning("[Pufferfish] To improve performance, timings have been disabled by default"); ++ org.bukkit.Bukkit.getLogger().warning("[Pufferfish] You can still use timings by using /timings on, but they will not start on server startup unless you set timings.really-enabled to true in paper.yml"); ++ org.bukkit.Bukkit.getLogger().warning("[Pufferfish] If you would like to disable this message, either set timings.really-enabled to true or timings.enabled to false."); + } -+ enabled = reallyEnabled; ++ this.enabled = this.reallyEnabled; + // Pufferfish end ++ MinecraftTimings.processConfig(this); } } diff --git a/src/main/java/io/papermc/paper/util/MCUtil.java b/src/main/java/io/papermc/paper/util/MCUtil.java -index 200ed770b57e1a9240abf0473968d4b85cbefe3c..0acc7cfc0fb0264dd76a58f7582e79d83fa040eb 100644 +index 850f75172e9efa72cabb8e5bd124b96a0b1a945f..3db1de70c76e1427e257d988d1a7f26e986b5617 100644 --- a/src/main/java/io/papermc/paper/util/MCUtil.java +++ b/src/main/java/io/papermc/paper/util/MCUtil.java @@ -212,7 +212,7 @@ public final class MCUtil { @@ -2016,32 +1996,32 @@ 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 34f19ac897a30c0c4e3ab406013fcca1c8b7db93..c36fc4069f762e869aa1657dc93d781d7819b13f 100644 +index d06185566b447c432d4dc2e3ba04d121bcdbc71b..91eb7d831db2e6c2b7e259151503afbf3c8aa8e0 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -315,6 +315,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop S spin(Function serverFactory) { AtomicReference atomicreference = new AtomicReference(); Thread thread = new io.papermc.paper.util.TickThread(() -> { // Paper - rewrite chunk system -@@ -2453,6 +2455,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop mainThreadExecutor, LightChunkGetter chunkProvider, ChunkGenerator chunkGenerator, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory, int viewDistance, boolean dsync) { -@@ -1467,8 +1467,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1448,8 +1448,28 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider return ChunkMap.this.level.getServer().getScaledTrackingDistance(initialDistance); } @@ -2112,7 +2096,7 @@ index 67d9be1e73ab877c8f04a13b8220cfafaf8d18f7..af4fb896d44292fa4ee15275e547266a Iterator iterator = this.entity.getIndirectPassengers().iterator(); while (iterator.hasNext()) { -@@ -1480,6 +1500,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider +@@ -1461,6 +1481,9 @@ public class ChunkMap extends ChunkStorage implements ChunkHolder.PlayerProvider i = j; } } @@ -2123,44 +2107,44 @@ index 67d9be1e73ab877c8f04a13b8220cfafaf8d18f7..af4fb896d44292fa4ee15275e547266a return this.scaledRange(i); } diff --git a/src/main/java/net/minecraft/server/level/ServerChunkCache.java b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..a0388e25a2200ff224ca9250e561e44ad9cf8066 100644 +index 366c0c9b45a819f7f94ebe3e49b8ab7f9edf9ce7..85d35979a2c1972dc2714140b6c7fa7446b51cb3 100644 --- a/src/main/java/net/minecraft/server/level/ServerChunkCache.java +++ b/src/main/java/net/minecraft/server/level/ServerChunkCache.java -@@ -73,6 +73,9 @@ public class ServerChunkCache extends ChunkSource { - final it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap loadedChunkMap = new it.unimi.dsi.fastutil.longs.Long2ObjectOpenHashMap<>(8192, 0.5f); - +@@ -77,6 +77,9 @@ public class ServerChunkCache extends ChunkSource { private final LevelChunk[] lastLoadedChunks = new LevelChunk[4 * 4]; -+ -+ public boolean firstRunSpawnCounts = true; // Pufferfish -+ public final java.util.concurrent.atomic.AtomicBoolean _pufferfish_spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - optimize countmobs + // Paper end - private static int getChunkCacheKey(int x, int z) { - return x & 3 | ((z & 3) << 2); -@@ -529,6 +532,8 @@ public class ServerChunkCache extends ChunkSource { ++ public boolean firstRunSpawnCounts = true; // Pufferfish - async mob spawning ++ public final java.util.concurrent.atomic.AtomicBoolean spawnCountsReady = new java.util.concurrent.atomic.AtomicBoolean(false); // Pufferfish - async mob spawning ++ + public ServerChunkCache(ServerLevel world, LevelStorageSource.LevelStorageAccess session, DataFixer dataFixer, StructureTemplateManager structureTemplateManager, Executor workerExecutor, ChunkGenerator chunkGenerator, int viewDistance, int simulationDistance, boolean dsync, ChunkProgressListener worldGenerationProgressListener, ChunkStatusUpdateListener chunkStatusChangeListener, Supplier persistentStateManagerFactory) { + this.level = world; + this.mainThreadProcessor = new ServerChunkCache.MainThreadExecutor(world); +@@ -521,6 +524,8 @@ public class ServerChunkCache extends ChunkSource { int naturalSpawnChunkCount = k; NaturalSpawner.SpawnState spawnercreature_d; // moved down if ((this.spawnFriendlies || this.spawnEnemies) && this.level.paperConfig().entities.spawning.perPlayerMobSpawns) { // don't count mobs when animals and monsters are disabled -+ // Pufferfish start - moved down when async processing ++ // Pufferfish start - async mob spawning: moved down when async processing + if (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { // re-set mob counts for (ServerPlayer player : this.level.players) { // Paper start - per player mob spawning backoff -@@ -543,14 +548,19 @@ public class ServerChunkCache extends ChunkSource { +@@ -535,14 +540,19 @@ public class ServerChunkCache extends ChunkSource { } // Paper end - per player mob spawning backoff } - spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, null, true); + this.lastSpawnState = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, null, true); + } -+ // Pufferfish end ++ // Pufferfish end - async mob spawning } else { - spawnercreature_d = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); -+ // Pufferfish start - this is only implemented for per-player mob spawning so this makes everything work if this setting is disabled. ++ // Pufferfish start - async mob spawning: this is only implemented for per-player mob spawning so this makes everything work if this setting is disabled + this.lastSpawnState = NaturalSpawner.createState(naturalSpawnChunkCount, this.level.getAllEntities(), this::getFullChunk, !this.level.paperConfig().entities.spawning.perPlayerMobSpawns ? new LocalMobCapCalculator(this.chunkMap) : null, false); -+ this._pufferfish_spawnCountsReady.set(true); -+ // Pufferfish end ++ this.spawnCountsReady.set(true); ++ // Pufferfish end - async mob spawning } - // Paper end + // Paper end - Optional per player mob spawns this.level.timings.countNaturalMobs.stopTiming(); // Paper - timings - this.lastSpawnState = spawnercreature_d; @@ -2168,23 +2152,31 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..a0388e25a2200ff224ca9250e561e44a gameprofilerfiller.popPush("spawnAndTick"); boolean flag = this.level.getGameRules().getBoolean(GameRules.RULE_DOMOBSPAWNING) && !this.level.players().isEmpty(); // CraftBukkit -@@ -640,8 +650,8 @@ public class ServerChunkCache extends ChunkSource { +@@ -581,6 +591,7 @@ public class ServerChunkCache extends ChunkSource { + player.playerNaturallySpawnedEvent = event; + } + // Paper end - optimise chunk tick iteration ++ this.level.resetIceAndSnowTick(); // Pufferfish - reset ice & snow tick random + int l = this.level.getGameRules().getInt(GameRules.RULE_RANDOMTICKING); + boolean flag1 = this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) != 0L && this.level.getLevelData().getGameTime() % this.level.ticksPerSpawnCategory.getLong(org.bukkit.entity.SpawnCategory.ANIMAL) == 0L; // CraftBukkit + // Paper - optimise chunk tick iteration +@@ -632,8 +643,8 @@ public class ServerChunkCache extends ChunkSource { if (tick && chunk1.chunkStatus.isOrAfter(net.minecraft.server.level.FullChunkStatus.ENTITY_TICKING)) { // Paper end - optimise chunk tick iteration chunk1.incrementInhabitedTime(j); - if (spawn && flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration - NaturalSpawner.spawnForChunk(this.level, chunk1, spawnercreature_d, this.spawnFriendlies, this.spawnEnemies, flag1); -+ if (spawn && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || this._pufferfish_spawnCountsReady.get()) && flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration // Pufferfish ++ if (spawn && (!gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning || this.spawnCountsReady.get()) && flag && (this.spawnEnemies || this.spawnFriendlies) && this.level.getWorldBorder().isWithinBounds(chunkcoordintpair)) { // Spigot // Paper - optimise chunk tick iteration // Pufferfish - async mob spawning + NaturalSpawner.spawnForChunk(this.level, chunk1, this.lastSpawnState, this.spawnFriendlies, this.spawnEnemies, flag1); // Pufferfish } if (true || this.level.shouldTickBlocksAt(chunkcoordintpair.toLong())) { // Paper - optimise chunk tick iteration -@@ -688,6 +698,41 @@ public class ServerChunkCache extends ChunkSource { +@@ -680,6 +691,41 @@ public class ServerChunkCache extends ChunkSource { gameprofilerfiller.pop(); gameprofilerfiller.pop(); } + -+ // Pufferfish start - optimize mob spawning ++ // Pufferfish start - async mob spawning + if (gg.pufferfish.pufferfish.PufferfishConfig.enableAsyncMobSpawning) { + // re-set mob counts + for (ServerPlayer player : this.level.players) { @@ -2202,9 +2194,9 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..a0388e25a2200ff224ca9250e561e44a + } + if (this.firstRunSpawnCounts) { + this.firstRunSpawnCounts = false; -+ this._pufferfish_spawnCountsReady.set(true); ++ this.spawnCountsReady.set(true); + } -+ if (this.level.paperConfig().entities.spawning.perPlayerMobSpawns && this._pufferfish_spawnCountsReady.getAndSet(false)) { ++ if (this.level.paperConfig().entities.spawning.perPlayerMobSpawns && this.spawnCountsReady.getAndSet(false)) { + this.level.getServer().mobSpawnExecutor.submit(() -> { + int mapped = this.distanceManager.getNaturalSpawnChunkCount(); + io.papermc.paper.util.maplist.IteratorSafeOrderedReferenceSet.Iterator objectiterator = @@ -2213,16 +2205,16 @@ index 44ada45d9bf2d9b48e5de1c3cb1a855902f3884b..a0388e25a2200ff224ca9250e561e44a + new gg.pufferfish.pufferfish.util.IterableWrapper<>(objectiterator); + this.lastSpawnState = NaturalSpawner.createState(mapped, wrappedIterator, this::getFullChunk, null, true); + objectiterator.finishedIterating(); -+ this._pufferfish_spawnCountsReady.set(true); ++ this.spawnCountsReady.set(true); + }); + } + } -+ // Pufferfish end ++ // Pufferfish end - async mob spawning } private void getFullChunk(long pos, Consumer chunkConsumer) { diff --git a/src/main/java/net/minecraft/server/level/ServerEntity.java b/src/main/java/net/minecraft/server/level/ServerEntity.java -index fd75d4b04ca560a3c1c0035052ff0073b7081d71..0b8cdf9d8012e40872bc6b5cf55c5a0a54cb1248 100644 +index 529ab44baaf573b97cf7e89560c548642733188f..eea0f9e1634226877cb842beecb11806fcc49e7e 100644 --- a/src/main/java/net/minecraft/server/level/ServerEntity.java +++ b/src/main/java/net/minecraft/server/level/ServerEntity.java @@ -184,6 +184,7 @@ public class ServerEntity { @@ -2242,10 +2234,10 @@ index fd75d4b04ca560a3c1c0035052ff0073b7081d71..0b8cdf9d8012e40872bc6b5cf55c5a0a 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 b78a9628a88f2a495ef6de74446a02a14d41a1f6..53a48b74895db209927d870d0d25f205411b007b 100644 +index 6934e9dac0d69c043b73b7c46d59f2d39b37c67f..269cb7c54e2f22b0c05b9600162df9372aaf1aef 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -895,6 +895,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) -> { @@ -2253,7 +2245,7 @@ index b78a9628a88f2a495ef6de74446a02a14d41a1f6..53a48b74895db209927d870d0d25f205 if (!entity.isRemoved()) { if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); -@@ -914,7 +915,20 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -913,7 +914,20 @@ public class ServerLevel extends Level implements WorldGenLevel { } gameprofilerfiller.push("tick"); @@ -2275,7 +2267,7 @@ index b78a9628a88f2a495ef6de74446a02a14d41a1f6..53a48b74895db209927d870d0d25f205 gameprofilerfiller.pop(); } } -@@ -979,9 +993,17 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -978,9 +992,17 @@ public class ServerLevel extends Level implements WorldGenLevel { } // Paper start - optimise random block ticking private final BlockPos.MutableBlockPos chunkTickMutablePosition = new BlockPos.MutableBlockPos(); @@ -2294,18 +2286,18 @@ index b78a9628a88f2a495ef6de74446a02a14d41a1f6..53a48b74895db209927d870d0d25f205 public void tickChunk(LevelChunk chunk, int randomTickSpeed) { ChunkPos chunkcoordintpair = chunk.getPos(); boolean flag = this.isRaining(); -@@ -992,7 +1014,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -991,7 +1013,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 -- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - disable thunder -+ 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 +- if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && this.random.nextInt(this.spigotConfig.thunderChance) == 0) { // Spigot // Paper - Option to disable thunder ++ if (!this.paperConfig().environment.disableThunder && flag && this.isThundering() && this.spigotConfig.thunderChance > 0 && chunk.shouldDoLightning(this.random)) { // Spigot // Paper - Option to disable thunder // Pufferfish - replace random with shouldDoLightning blockposition.set(this.findLightningTargetAround(this.getBlockRandomPos(j, 0, k, 15))); // Paper if (this.isRainingAt(blockposition)) { -@@ -1024,7 +1046,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -1023,7 +1045,7 @@ public class ServerLevel extends Level implements WorldGenLevel { - if (!this.paperConfig().environment.disableIceAndSnow) { // Paper + if (!this.paperConfig().environment.disableIceAndSnow) { // Paper - Option to disable ice and snow for (int l = 0; l < randomTickSpeed; ++l) { - if (this.random.nextInt(48) == 0) { + if ((this.currentIceAndSnowTick++ & 47) == 0) { // Pufferfish - optimize further random ticking @@ -2313,10 +2305,10 @@ index b78a9628a88f2a495ef6de74446a02a14d41a1f6..53a48b74895db209927d870d0d25f205 this.getRandomBlockPosition(j, 0, k, 15, blockposition); this.tickPrecipitation(blockposition, chunk); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 0eb3384df396508c3d26d1e155cd0e6d64251346..1d6e1c1b7cd3488031529142394f756eafd8b2c2 100644 +index 0dba30c41affafe7b1d585b515925043b37712fa..e9adae2f97ce6e6296c0cda99399ee0170514de3 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1252,6 +1252,7 @@ public class ServerPlayer extends Player { +@@ -1253,6 +1253,7 @@ public class ServerPlayer extends Player { this.setServerLevel(worldserver); this.connection.teleport(exit); // CraftBukkit - use internal teleport without event this.connection.resetPosition(); @@ -2324,7 +2316,7 @@ index 0eb3384df396508c3d26d1e155cd0e6d64251346..1d6e1c1b7cd3488031529142394f756e worldserver.addDuringPortalTeleport(this); worldserver1.getProfiler().pop(); this.triggerDimensionChangeTriggers(worldserver1); -@@ -2016,6 +2017,7 @@ public class ServerPlayer extends Player { +@@ -2017,6 +2018,7 @@ public class ServerPlayer extends Player { public void moveTo(double x, double y, double z) { super.moveTo(x, y, z); this.connection.resetPosition(); @@ -2332,7 +2324,7 @@ index 0eb3384df396508c3d26d1e155cd0e6d64251346..1d6e1c1b7cd3488031529142394f756e } @Override -@@ -2262,6 +2264,7 @@ public class ServerPlayer extends Player { +@@ -2263,6 +2265,7 @@ public class ServerPlayer extends Player { this.connection.send(new ClientboundSetCameraPacket(this.camera)); this.connection.resetPosition(); @@ -2340,7 +2332,7 @@ index 0eb3384df396508c3d26d1e155cd0e6d64251346..1d6e1c1b7cd3488031529142394f756e } } -@@ -2701,6 +2704,7 @@ public class ServerPlayer extends Player { +@@ -2702,6 +2705,7 @@ public class ServerPlayer extends Player { public void forceSetPositionRotation(double x, double y, double z, float yaw, float pitch) { this.moveTo(x, y, z, yaw, pitch); this.connection.resetPosition(); @@ -2349,45 +2341,44 @@ index 0eb3384df396508c3d26d1e155cd0e6d64251346..1d6e1c1b7cd3488031529142394f756e @Override diff --git a/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerGamePacketListenerImpl.java -index 30ccbab1586a656e0ae41d7406525fb02d9e025b..20cd751a602593740e87eb79d5059b5fc7856cb5 100644 +index 2562ea3b63b055319a775c12ff327d127f8039c3..29d0dd89ae19799d76ac95128ae19387ef640d56 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 +@@ -1120,6 +1120,13 @@ 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 ++ // Pufferfish start - disable books ++ if (!gg.pufferfish.pufferfish.PufferfishConfig.enableBooks ++ && !this.player.getBukkitEntity().hasPermission("pufferfish.usebooks")) { ++ return; ++ } ++ // Pufferfish end - disable books ++ + // Paper start - Book size limits if (!this.cserver.isPrimaryThread()) { List pageList = packet.getPages(); diff --git a/src/main/java/net/minecraft/world/CompoundContainer.java b/src/main/java/net/minecraft/world/CompoundContainer.java -index 241fec02e6869c638d3a160819b32173a081467b..6a8f9e8f5bf108674c47018def28906e2d0a729c 100644 +index 241fec02e6869c638d3a160819b32173a081467b..af8739c1349161f3620ea37b2f6caf3e4f43a092 100644 --- a/src/main/java/net/minecraft/world/CompoundContainer.java +++ b/src/main/java/net/minecraft/world/CompoundContainer.java -@@ -1,5 +1,6 @@ - package net.minecraft.world; - -+import net.minecraft.core.Direction; // Pufferfish - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.item.ItemStack; - -@@ -64,6 +65,23 @@ public class CompoundContainer implements Container { +@@ -64,6 +64,23 @@ public class CompoundContainer implements Container { this.container2 = second; } + // Pufferfish start + @Override -+ public boolean hasEmptySlot(Direction enumdirection) { ++ public boolean hasEmptySlot(net.minecraft.core.Direction enumdirection) { + return this.container1.hasEmptySlot(null) || this.container2.hasEmptySlot(null); + } + + @Override -+ public boolean isCompletelyFull(Direction enumdirection) { ++ public boolean isCompletelyFull(net.minecraft.core.Direction enumdirection) { + return this.container1.isCompletelyFull(null) && this.container2.isCompletelyFull(null); + } + + @Override -+ public boolean isCompletelyEmpty(Direction enumdirection) { ++ public boolean isCompletelyEmpty(net.minecraft.core.Direction enumdirection) { + return this.container1.isCompletelyEmpty(null) && this.container2.isCompletelyEmpty(null); + } + // Pufferfish end @@ -2465,10 +2456,10 @@ index d6cbe98e67fdbf8db46338a88ab1356dd63b50a3..49c1d677db8fcf53b39bd9673259b88d 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 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e0846713a 100644 +index 9ee1e3da1cb16291ff3e37829e25227a6b97a177..0aab277908d1b885916fb2276dc3aa3f332d51cf 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -307,7 +307,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; @@ -2477,25 +2468,11 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e private ChunkPos chunkPosition; private Vec3 deltaMovement; private float yRot; -@@ -438,6 +438,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S - return this.originWorld; - } - // Paper end -+ -+ // Pufferfish start -+ public boolean activatedPriorityReset = false; // DAB -+ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // golf score -+ public final BlockPos.MutableBlockPos cachedBlockPos = new BlockPos.MutableBlockPos(); // used where needed -+ // Pufferfish end -+ - public float getBukkitYaw() { - return this.yRot; - } -@@ -542,25 +549,45 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -478,29 +478,42 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S this.isLegacyTrackingEntity = isLegacyTrackingEntity; } -+ // Pufferfish start ++ // Pufferfish start - use getFurthestEntity to skip getIndirectPassengers + private org.spigotmc.TrackingRange.TrackingRangeType getFurthestEntity(Entity entity, net.minecraft.server.level.ChunkMap chunkMap, org.spigotmc.TrackingRange.TrackingRangeType type, int range) { + List passengers = entity.getPassengers(); + for (int i = 0, size = passengers.size(); i < size; i++) { @@ -2510,7 +2487,7 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e + } + return type; + } -+ // Pufferfish end ++ // Pufferfish end - use getFurthestEntity to skip getIndirectPassengers + public final com.destroystokyo.paper.util.misc.PooledLinkedHashSets.PooledObjectLinkedOpenHashSet getPlayersInTrackRange() { // determine highest range of passengers @@ -2519,11 +2496,11 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e .getObjectsInRange(MCUtil.getCoordinateKey(this)); } - Iterable passengers = this.getIndirectPassengers(); -+ // Iterable passengers = this.getIndirectPassengers(); // Pufferfish ++ // Iterable passengers = this.getIndirectPassengers(); // Pufferfish - use getFurthestEntity to skip getIndirectPassengers net.minecraft.server.level.ChunkMap chunkMap = ((ServerLevel)this.level).getChunkSource().chunkMap; org.spigotmc.TrackingRange.TrackingRangeType type = this.trackingRangeType; int range = chunkMap.getEntityTrackerRange(type.ordinal()); - +- - for (Entity passenger : passengers) { - org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType; - int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal()); @@ -2532,21 +2509,19 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e - range = passengerRange; - } - } -+ // Pufferfish start - use getFurthestEntity to skip getIndirecetPassengers -+ // for (Entity passenger : passengers) { -+ // org.spigotmc.TrackingRange.TrackingRangeType passengerType = passenger.trackingRangeType; -+ // int passengerRange = chunkMap.getEntityTrackerRange(passengerType.ordinal()); -+ // if (passengerRange > range) { -+ // type = passengerType; -+ // range = passengerRange; -+ // } -+ // } -+ type = this.getFurthestEntity(this, chunkMap, type, range); -+ // Pufferfish end ++ type = this.getFurthestEntity(this, chunkMap, type, range); // Pufferfish - use getFurthestEntity to skip getIndirectPassengers return chunkMap.playerEntityTrackerTrackMaps[type.ordinal()].getObjectsInRange(MCUtil.getCoordinateKey(this)); } -@@ -802,6 +829,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S + // Paper end - optimise entity tracking ++ ++ public boolean activatedPriorityReset = false; // Pufferfish - DAB ++ public int activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; // Pufferfish - DAB: golf score ++ + public float getBukkitYaw() { + return this.yRot; + } +@@ -807,6 +820,13 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public void tick() { @@ -2560,7 +2535,7 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e this.baseTick(); } -@@ -4399,16 +4433,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4402,16 +4422,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -2586,7 +2561,7 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -4416,14 +4452,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4419,14 +4441,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -2654,7 +2629,7 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -4445,9 +4528,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4448,9 +4517,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S // CraftBukkit end } } @@ -2668,7 +2643,7 @@ index 0c46a4aeafd03fbbfd590b0362d41bf2b1d5ca74..a186be351ba73a74a9aef887d3a69b5e 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 940b8d0b89d7e55c938aefbe80ee71b0db3dacb8..3acb31479d91ddbf906d05d06c438a1e979e5882 100644 +index 09e8445a3f8c6b3ebc852a75a9a25b41a51ba659..8e52c29fa25f5ce6734682a95c6134201f5c2692 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java @@ -314,6 +314,9 @@ public class EntityType implements FeatureElement, EntityTypeT @@ -2682,10 +2657,10 @@ index 940b8d0b89d7e55c938aefbe80ee71b0db3dacb8..3acb31479d91ddbf906d05d06c438a1e return (EntityType) Registry.register(BuiltInRegistries.ENTITY_TYPE, id, (EntityType) type.build(id)); // CraftBukkit - decompile error } diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index 96885946be3b8e129984353f3dfe4330e73ad84a..7d2d3ca0fb2fdd05c731f6b8d84494b9ecc69d2a 100644 +index 6523795e715e5d472739e9bc6433143115c3de8f..6727252aa32597ceba5f59d45d8bbe643e919024 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -413,7 +413,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -412,7 +412,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this instanceof net.minecraft.world.entity.player.Player; if (!this.level().isClientSide) { @@ -2694,7 +2669,7 @@ index 96885946be3b8e129984353f3dfe4330e73ad84a..7d2d3ca0fb2fdd05c731f6b8d84494b9 this.hurt(this.damageSources().inWall(), 1.0F); } else if (flag && !this.level().getWorldBorder().isWithinBounds(this.getBoundingBox())) { double d0 = this.level().getWorldBorder().getDistanceToBorder(this) + this.level().getWorldBorder().getDamageSafeZone(); -@@ -1408,6 +1408,16 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1409,6 +1409,16 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.getHealth() <= 0.0F; } @@ -2711,7 +2686,7 @@ index 96885946be3b8e129984353f3dfe4330e73ad84a..7d2d3ca0fb2fdd05c731f6b8d84494b9 @Override public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { -@@ -2001,6 +2011,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2003,6 +2013,20 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.lastClimbablePos; } @@ -2733,18 +2708,10 @@ index 96885946be3b8e129984353f3dfe4330e73ad84a..7d2d3ca0fb2fdd05c731f6b8d84494b9 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 5af48151159135b869ec4753bbcf79dd257c1570..a2f18d6efa61cd89900245dda7f46ab5e8b9c285 100644 +index 24629412d2b4acaa81788ce70412b03387cc777c..13016a98c2e449811664d13abae8e944a2537349 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -47,6 +47,7 @@ import net.minecraft.world.entity.ai.goal.GoalSelector; - import net.minecraft.world.entity.ai.navigation.GroundPathNavigation; - import net.minecraft.world.entity.ai.navigation.PathNavigation; - import net.minecraft.world.entity.ai.sensing.Sensing; -+import net.minecraft.world.entity.animal.Pufferfish; - import net.minecraft.world.entity.decoration.HangingEntity; - import net.minecraft.world.entity.decoration.LeashFenceKnotEntity; - import net.minecraft.world.entity.item.ItemEntity; -@@ -221,14 +222,17 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -221,14 +221,17 @@ public abstract class Mob extends LivingEntity implements Targeting { return this.lookControl; } @@ -2764,7 +2731,7 @@ index 5af48151159135b869ec4753bbcf79dd257c1570..a2f18d6efa61cd89900245dda7f46ab5 this.targetSelector.tick(); } } -@@ -912,16 +916,20 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -912,16 +915,20 @@ public abstract class Mob extends LivingEntity implements Targeting { if (i % 2 != 0 && this.tickCount > 1) { this.level().getProfiler().push("targetSelector"); @@ -2786,7 +2753,7 @@ index 5af48151159135b869ec4753bbcf79dd257c1570..a2f18d6efa61cd89900245dda7f46ab5 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 { @@ -2833,7 +2800,7 @@ index 646d9a121d908a2fc3e4e302484dd5cd1bfc6804..e546ecdccde352502e26a8668eaaafe0 } 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 b738ee2d3801fadfd09313f05ae24593e56b0ec6..1635818fc4b1788c0d397085239df6dd75b210ab 100644 +index 676f5485a4ca9252e911213dcda8d51776b637b6..2d63ee8fef87264d4b61290effa6ba86a787aa61 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 @@ -53,9 +53,12 @@ public class GoalSelector { @@ -2852,10 +2819,10 @@ 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..a7b9442a2f0bcbee34f1f9b0bb7bdff62d92c727 100644 +index 07519c817cc6de04a98198c43a0c2b02ba3141eb..bda574dc53d02feafa045f20b85b8b97c0b450ae 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,13 @@ public abstract class MoveToBlockGoal extends Goal { +@@ -120,6 +120,13 @@ 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); @@ -2868,9 +2835,9 @@ index 4bbc36404b396500df0d9db380cf223b5897662e..a7b9442a2f0bcbee34f1f9b0bb7bdff6 + 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..a62e5c1d2582d431c5110412edefb464c7764ed3 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 { @@ -2878,11 +2845,11 @@ 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()); -+ double followRangeRaw = this.useFollowRange ? this.getFollowRange(baseEntity) : this.range; ++ double followRangeRaw = this.useFollowRange ? this.getFollowRange(baseEntity) : this.range; // Paper - Fix MC-145656 + + if (f > followRangeRaw * followRangeRaw) { // the actual follow range will always be this value or smaller, so if the distance is larger then it never will return true after getting invis + return false; @@ -2895,7 +2862,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 { @@ -2940,7 +2907,7 @@ index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..0673be3d653c5d68923e1a26e64edf53 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..b734fcd721b0e105302a380c85fb11ecf830b3f0 100644 +index b21e180641d17438997a80e5bcb0ec7998d24a2e..8db589a4cc9984f13f4636fe3c8f300197e35a15 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,12 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder this.level().getMinBuildHeight() && !this.level().getBlockState(blockposition_mutableblockposition).blocksMotion()) { blockposition_mutableblockposition.move(Direction.DOWN); } +diff --git a/src/main/java/net/minecraft/world/entity/monster/breeze/Breeze.java b/src/main/java/net/minecraft/world/entity/monster/breeze/Breeze.java +index 0b8992a9aea781470ab3b1880cf041972a20089d..5a04b2c874b7f897cb89bd2de2e2e0a2286d4d14 100644 +--- a/src/main/java/net/minecraft/world/entity/monster/breeze/Breeze.java ++++ b/src/main/java/net/minecraft/world/entity/monster/breeze/Breeze.java +@@ -59,7 +59,7 @@ public class Breeze extends Monster { + + @Override + public Brain getBrain() { +- return super.getBrain(); ++ return (Brain) super.getBrain(); // Pufferfish - decompile fix + } + + @Override +@@ -198,9 +198,12 @@ public class Breeze extends Monster { + return pos.closerThan(vec3, 4.0D, 10.0D); + } + ++ private int behaviorTick = 0; // Pufferfish - DAB ++ + @Override + protected void customServerAiStep() { + this.level().getProfiler().push("breezeBrain"); ++ if (this.behaviorTick++ % this.activatedPriority == 0) // Pufferfish - DAB + this.getBrain().tick((ServerLevel)this.level(), this); + this.level().getProfiler().popPush("breezeActivityUpdate"); + this.level().getProfiler().pop(); 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 4257f2282152aee09533c9a2e53018d3e49effa4..ee7e61d59ba39de13e468561a0e4f25244bdf1a8 100644 +index 01a2016ac82807d28ffe407b7dbb74bdbcde503e..3716f293917ae72735344b191a11bf1e258a8931 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 @@ -128,9 +128,12 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { @@ -3096,7 +3089,7 @@ index 4257f2282152aee09533c9a2e53018d3e49effa4..ee7e61d59ba39de13e468561a0e4f252 this.level().getProfiler().pop(); HoglinAi.updateActivity(this); diff --git a/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java b/src/main/java/net/minecraft/world/entity/monster/piglin/Piglin.java -index 6407ddef8442fce4f310ac4babf3e3de0dd5fc9a..ca5cc10a5ac753f0062da3de328786ad5203ed83 100644 +index a9813da7f2b248f98f22e0ad2e7842915025ec12..0f583e54b23a01eba3d8476f48586216814cf259 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 @@ -300,9 +300,12 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento @@ -3113,7 +3106,7 @@ index 6407ddef8442fce4f310ac4babf3e3de0dd5fc9a..ca5cc10a5ac753f0062da3de328786ad this.level().getProfiler().pop(); PiglinAi.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 9f1b7c629644931074293151ed58a523ca6d488c..58a7e61e02b7d72326ed4d57ee514adb63b3873c 100644 +index 937f81a859953498abe73bea560c86e6560e1c33..0a151c679b0dc943598180942d6d4b3886211688 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 @@ -273,11 +273,13 @@ public class Warden extends Monster implements VibrationSystem { @@ -3131,7 +3124,7 @@ index 9f1b7c629644931074293151ed58a523ca6d488c..58a7e61e02b7d72326ed4d57ee514adb this.level().getProfiler().pop(); super.customServerAiStep(); 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 11935e5b16324af572b07c5b173708f5a91f8289..e79b93a6878c48e63009bec564f37f58f73d21ff 100644 +index 1aae466e3e334d7f4bbb3ea9365a255afcc3dd3a..c8cf20f4f660fc90dc0f95ed9105b4a8628a8057 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -142,6 +142,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler @@ -3168,7 +3161,7 @@ index 11935e5b16324af572b07c5b173708f5a91f8289..e79b93a6878c48e63009bec564f37f58 if (this.assignProfessionWhenSpawned) { this.assignProfessionWhenSpawned = false; diff --git a/src/main/java/net/minecraft/world/entity/player/Inventory.java b/src/main/java/net/minecraft/world/entity/player/Inventory.java -index 96d664c28738d6090f7067761c2978dd1aa0fd0e..67210316b2ea366138925e9165f484656437c9a8 100644 +index 309acf7bd07e38043aa81e0e686edba1136bd04c..fce486bdff21955d45cc43268cbd0f7d1b6352af 100644 --- a/src/main/java/net/minecraft/world/entity/player/Inventory.java +++ b/src/main/java/net/minecraft/world/entity/player/Inventory.java @@ -687,6 +687,8 @@ public class Inventory implements Container, Nameable { @@ -3200,7 +3193,7 @@ index 96d664c28738d6090f7067761c2978dd1aa0fd0e..67210316b2ea366138925e9165f48465 return false; } 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 2f058cec80c6ef7a5a5ca065dc6c9fe353c521de..351c234bb0db424a305547f7f098f80e8fd5e84e 100644 +index 156809090f1f83ad68e7e2477a3cfddac5757a8e..8347108c64c7a003fb68637d3f120fc7c888219e 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/Projectile.java +++ b/src/main/java/net/minecraft/world/entity/projectile/Projectile.java @@ -45,6 +45,36 @@ public abstract class Projectile extends Entity implements TraceableEntity { @@ -3288,7 +3281,7 @@ index 6d23c39e4eadf23616080d6d08672e13b5d3c37d..e7115f1635821e0aab32e8aeea691438 } diff --git a/src/main/java/net/minecraft/world/item/EndCrystalItem.java b/src/main/java/net/minecraft/world/item/EndCrystalItem.java -index 5a19875cbc603acea95193d969d2e1dc1e0bfd78..3688e9f8c6c6d1239095e3a87060ccca90386d0c 100644 +index e1696f6b77df4c8fceaece64701d4db78b0a4c42..faa3f62d22266a3c32d6c95c3ffebd4aa3880739 100644 --- a/src/main/java/net/minecraft/world/item/EndCrystalItem.java +++ b/src/main/java/net/minecraft/world/item/EndCrystalItem.java @@ -55,7 +55,7 @@ public class EndCrystalItem extends Item { @@ -3297,22 +3290,14 @@ index 5a19875cbc603acea95193d969d2e1dc1e0bfd78..3688e9f8c6c6d1239095e3a87060ccca - if (enderdragonbattle != null) { + if (enderdragonbattle != null && gg.pufferfish.pufferfish.PufferfishConfig.allowEndCrystalRespawn) { // Pufferfish - enderdragonbattle.tryRespawn(aboveBlockPosition); // Paper - pass placed end crystal position to pre-check proximity to portal + enderdragonbattle.tryRespawn(aboveBlockPosition); // Paper - Perf: Do crystal-portal proximity check before entity lookup } } diff --git a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java -index 27b0a79f7a7c47047216aae42944bac2a2151181..50f8ab0b370daf26f231fb30b864bb603c770aed 100644 +index 27b0a79f7a7c47047216aae42944bac2a2151181..6a38b5df9f64d00d3fd78fb18deaf2d59ecf68fc 100644 --- a/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java +++ b/src/main/java/net/minecraft/world/item/crafting/ShapelessRecipe.java -@@ -9,6 +9,7 @@ import net.minecraft.core.NonNullList; - import net.minecraft.core.RegistryAccess; - import net.minecraft.network.FriendlyByteBuf; - import net.minecraft.util.ExtraCodecs; -+import net.minecraft.world.entity.animal.Pufferfish; - import net.minecraft.world.entity.player.StackedContents; - import net.minecraft.world.inventory.CraftingContainer; - import net.minecraft.world.item.ItemStack; -@@ -26,13 +27,21 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo +@@ -26,13 +26,21 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo final CraftingBookCategory category; final ItemStack result; final NonNullList ingredients; @@ -3334,7 +3319,7 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..50f8ab0b370daf26f231fb30b864bb60 } // CraftBukkit start -@@ -77,6 +86,28 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo +@@ -77,6 +85,28 @@ public class ShapelessRecipe extends io.papermc.paper.inventory.recipe.RecipeBoo } public boolean matches(CraftingContainer inventory, Level world) { @@ -3364,14 +3349,20 @@ index 27b0a79f7a7c47047216aae42944bac2a2151181..50f8ab0b370daf26f231fb30b864bb60 autorecipestackmanager.initialize(this); // Paper - better exact choice recipes int i = 0; diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index f8e519684d02dff0e26734eb89eca54ae1d9b1ee..868132f2c3f5afe704b762cd173334e98911ba71 100644 +index 19f23a6c8fb5c02843c27fb8a242ec9d0d1b538b..fa3ca8d83c247d6023736721e2632cca2702b99f 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -213,6 +213,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -207,6 +207,20 @@ public abstract class Level implements LevelAccessor, AutoCloseable { public abstract ResourceKey getTypeKey(); -+ 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 ++ // Pufferfish start - move thread unsafe random initialization ++ 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 end + + // Pufferfish start - ensure these get inlined + private final int minBuildHeight; @@ -3379,10 +3370,10 @@ index f8e519684d02dff0e26734eb89eca54ae1d9b1ee..868132f2c3f5afe704b762cd173334e9 + private final int maxBuildHeight; + // Pufferfish end + - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor + 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 - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper -@@ -235,6 +243,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config +@@ -229,6 +243,14 @@ public abstract class Level implements LevelAccessor, AutoCloseable { }); final DimensionType dimensionmanager = (DimensionType) holder.value(); @@ -3397,7 +3388,7 @@ index f8e519684d02dff0e26734eb89eca54ae1d9b1ee..868132f2c3f5afe704b762cd173334e9 this.dimension = resourcekey; this.isClientSide = flag; if (dimensionmanager.coordinateScale() != 1.0D) { -@@ -301,8 +317,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -295,8 +317,8 @@ public abstract class Level implements LevelAccessor, AutoCloseable { this.tileLimiter = new org.spigotmc.TickLimiter(this.spigotConfig.tileMaxTickTime); this.chunkPacketBlockController = this.paperConfig().anticheat.antiXray.enabled ? new com.destroystokyo.paper.antixray.ChunkPacketBlockControllerAntiXray(this, executor) : com.destroystokyo.paper.antixray.ChunkPacketBlockController.NO_OPERATION_INSTANCE; // Paper - Anti-Xray // Paper start - optimise collisions @@ -3408,7 +3399,7 @@ index f8e519684d02dff0e26734eb89eca54ae1d9b1ee..868132f2c3f5afe704b762cd173334e9 // Paper end - optimise collisions } -@@ -720,6 +736,33 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -710,6 +732,33 @@ public abstract class Level implements LevelAccessor, AutoCloseable { return null; } @@ -3440,37 +3431,41 @@ index f8e519684d02dff0e26734eb89eca54ae1d9b1ee..868132f2c3f5afe704b762cd173334e9 + // Pufferfish end + // Paper start - Broken down method of raytracing for EntityLiving#hasLineOfSight, replaces BlockGetter#clip(CollisionContext) - public net.minecraft.world.phys.BlockHitResult.Type clipDirect(Vec3 start, Vec3 end, net.minecraft.world.phys.shapes.CollisionContext collisionContext) { + public net.minecraft.world.phys.BlockHitResult.Type clipDirect(Vec3 start, Vec3 end, net.minecraft.world.phys.shapes.CollisionContext context) { // most of this code comes from BlockGetter#clip(CollisionContext, BiFunction, Function), but removes the needless functions -@@ -1313,13 +1356,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1308,13 +1357,13 @@ public abstract class Level implements LevelAccessor, AutoCloseable { try { tickConsumer.accept(entity); MinecraftServer.getServer().executeMidTickTasks(); // Paper - execute chunk tasks mid tick - } catch (Throwable throwable) { + } catch (Throwable throwable) { // Pufferfish - diff on change ServerLevel.tick if (throwable instanceof ThreadDeath) throw throwable; // Paper - // Paper start - Prevent tile entity and entity crashes + // Paper start - Prevent block entity and entity crashes final String msg = String.format("Entity threw exception at %s:%s,%s,%s", entity.level().getWorld().getName(), entity.getX(), entity.getY(), entity.getZ()); MinecraftServer.LOGGER.error(msg, throwable); - getCraftServer().getPluginManager().callEvent(new ServerExceptionEvent(new ServerInternalException(msg, throwable))); + getCraftServer().getPluginManager().callEvent(new com.destroystokyo.paper.event.server.ServerExceptionEvent(new com.destroystokyo.paper.exception.ServerInternalException(msg, throwable))); // Paper - ServerExceptionEvent - entity.discard(); + entity.discard(); // Pufferfish - diff on change ServerLevel.tick - // Paper end + // Paper end - Prevent block entity and entity crashes } } -@@ -1793,6 +1836,7 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -1788,6 +1837,11 @@ public abstract class Level implements LevelAccessor, AutoCloseable { } public ProfilerFiller getProfiler() { -+ if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; // Pufferfish ++ // Pufferfish start ++ if (gg.pufferfish.pufferfish.PufferfishConfig.disableMethodProfiler) { ++ return net.minecraft.util.profiling.InactiveProfiler.INSTANCE; ++ } ++ // Pufferfish end return (ProfilerFiller) this.profiler.get(); } diff --git a/src/main/java/net/minecraft/world/level/NaturalSpawner.java b/src/main/java/net/minecraft/world/level/NaturalSpawner.java -index 3cdddda9c0618e95288b81b975d499c8dd30c05f..9c2d62feff1816f5729060c6192269a5b2d34153 100644 +index da7489986848316fed029b71d1bc4e1248c9c9a8..661acdf4b1f33d150b0caf179e925d3162d7be35 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 { +@@ -425,12 +425,12 @@ public final class NaturalSpawner { } } @@ -3488,39 +3483,34 @@ index 3cdddda9c0618e95288b81b975d499c8dd30c05f..9c2d62feff1816f5729060c6192269a5 return new BlockPos(i, l, j); } 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 4f9187d9d640618c40a2fa528f36b845017b4777..efca73d4de33028cf9df944f36e51b7b50f7a4c5 100644 +index 4f9187d9d640618c40a2fa528f36b845017b4777..74cab3a9f012650363e9f22d4c5b90398867ec22 100644 --- a/src/main/java/net/minecraft/world/level/biome/Biome.java +++ b/src/main/java/net/minecraft/world/level/biome/Biome.java -@@ -66,14 +66,20 @@ public final class Biome { +@@ -66,14 +66,9 @@ public final class Biome { private final BiomeGenerationSettings generationSettings; private final MobSpawnSettings mobSettings; private final BiomeSpecialEffects specialEffects; - private final ThreadLocal temperatureCache = ThreadLocal.withInitial(() -> { -+ // Pufferfish start - use our cache -+ private final ThreadLocal temperatureCache = ThreadLocal.withInitial(() -> { ++ private static final ThreadLocal TEMPERATURE_CACHE = ThreadLocal.withInitial(() -> { // Pufferfish - improved temperature caching return Util.make(() -> { -+ /* - Long2FloatLinkedOpenHashMap long2FloatLinkedOpenHashMap = new Long2FloatLinkedOpenHashMap(1024, 0.25F) { - protected void rehash(int i) { - } - }; - long2FloatLinkedOpenHashMap.defaultReturnValue(Float.NaN); - return long2FloatLinkedOpenHashMap; -+ -+ */ -+ return new gg.airplane.structs.Long2FloatAgingCache(TEMPERATURE_CACHE_SIZE); -+ // Pufferfish end +- Long2FloatLinkedOpenHashMap long2FloatLinkedOpenHashMap = new Long2FloatLinkedOpenHashMap(1024, 0.25F) { +- protected void rehash(int i) { +- } +- }; +- long2FloatLinkedOpenHashMap.defaultReturnValue(Float.NaN); +- return long2FloatLinkedOpenHashMap; ++ return new gg.airplane.structs.Long2FloatAgingCache(TEMPERATURE_CACHE_SIZE); // Pufferfish - improved temperature caching }); }); -@@ -118,17 +124,15 @@ public final class Biome { +@@ -118,17 +113,15 @@ public final class Biome { @Deprecated public float getTemperature(BlockPos blockPos) { long l = blockPos.asLong(); - Long2FloatLinkedOpenHashMap long2FloatLinkedOpenHashMap = this.temperatureCache.get(); - float f = long2FloatLinkedOpenHashMap.get(l); -+ // Pufferfish start -+ gg.airplane.structs.Long2FloatAgingCache cache = this.temperatureCache.get(); ++ // Pufferfish start - improved temperature caching ++ gg.airplane.structs.Long2FloatAgingCache cache = TEMPERATURE_CACHE.get(); + float f = cache.getValue(l); if (!Float.isNaN(f)) { return f; @@ -3532,12 +3522,12 @@ index 4f9187d9d640618c40a2fa528f36b845017b4777..efca73d4de33028cf9df944f36e51b7b - - long2FloatLinkedOpenHashMap.put(l, g); + cache.putValue(l, g); -+ // Pufferfish end ++ // Pufferfish end - improved temperature caching return g; } } 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; @@ -3615,29 +3605,18 @@ 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 d4dcf7fe26474ae07374e7761d823bc5c8b54f97..b5efac7243a081a1211c8dc4fceb8a208ee90e58 100644 +index a61d7cd2b078fe511ff00344197b6ea11feebfb2..2a856159096b354e8219483f3ad2b1b00eb97592 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 -@@ -18,6 +18,7 @@ import net.minecraft.world.WorldlyContainer; - import net.minecraft.world.WorldlyContainerHolder; - import net.minecraft.world.entity.Entity; - import net.minecraft.world.entity.EntitySelector; -+import net.minecraft.world.entity.animal.Pufferfish; - import net.minecraft.world.entity.item.ItemEntity; - import net.minecraft.world.entity.player.Player; - import net.minecraft.world.inventory.AbstractContainerMenu; -@@ -47,7 +48,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen - +@@ -48,6 +48,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public static final int MOVE_ITEM_SPEED = 8; public static final int HOPPER_CONTAINER_SIZE = 5; -+ // Pufferfish start private NonNullList items; + private gg.airplane.structs.ItemListWithBitset optimizedItems; // Pufferfish -+ // Pufferfish end private int cooldownTime; private long tickedGameTime; -@@ -83,14 +87,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -83,14 +84,37 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen public HopperBlockEntity(BlockPos pos, BlockState state) { super(BlockEntityType.HOPPER, pos, state); @@ -3677,16 +3656,16 @@ index d4dcf7fe26474ae07374e7761d823bc5c8b54f97..b5efac7243a081a1211c8dc4fceb8a20 if (!this.tryLoadLootTable(nbt)) { ContainerHelper.loadAllItems(nbt, this.items); } -@@ -513,7 +540,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -513,7 +537,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen } private static boolean isEmptyContainer(Container inv, Direction facing) { -- return allMatch(inv, facing, IS_EMPTY_TEST); +- return allMatch(inv, facing, IS_EMPTY_TEST); // Paper - Perf: Optimize Hoppers + return inv.isCompletelyEmpty(facing); // Pufferfish - use bitsets } public static boolean suckInItems(Level world, Hopper hopper) { -@@ -713,7 +740,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -713,7 +737,7 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen if (HopperBlockEntity.canPlaceItemInContainer(to, stack, slot, side)) { boolean flag = false; @@ -3695,7 +3674,7 @@ index d4dcf7fe26474ae07374e7761d823bc5c8b54f97..b5efac7243a081a1211c8dc4fceb8a20 if (itemstack1.isEmpty()) { // Spigot start - SPIGOT-6693, InventorySubcontainer#setItem -@@ -908,7 +935,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen +@@ -908,7 +932,10 @@ public class HopperBlockEntity extends RandomizableContainerBlockEntity implemen @Override protected void setItems(NonNullList list) { @@ -3708,27 +3687,27 @@ index d4dcf7fe26474ae07374e7761d823bc5c8b54f97..b5efac7243a081a1211c8dc4fceb8a20 public static void entityInside(Level world, BlockPos pos, BlockState state, Entity entity, HopperBlockEntity blockEntity) { 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 64875525df244db838560f5fefb7b1b07b0f1f51..a298c6ce7322b53bc25083dedd68f495a093b10f 100644 +index a94300a457b25f0e33a8eeabba6dd5720ca9ab1e..3bb1bfa29ebbfc3ba15193dee6fb40cef179bb0c 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 @@ -93,14 +93,7 @@ public abstract class RandomizableContainerBlockEntity extends BaseContainerBloc @Override public boolean isEmpty() { this.unpackLootTable((Player)null); -- // Paper start +- // Paper start - Perf: Optimize Hoppers - for (final ItemStack itemStack : this.getItems()) { - if (!itemStack.isEmpty()) { - return false; - } - } - return true; -- // Paper end +- // Paper end - Perf: Optimize Hoppers + return this.isCompletelyEmpty(null); // Pufferfish - use super } @Override 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 fa170cc1ce7011d201295b89718292d696c7fc24..7fd68d4aba72b15b2e21e5c88b44e677b794fe57 100644 +index 6ec3fc801453fd54c25b642e6fa71c19b463311d..922191159fadf8e89646d7299aadee4aa851f71a 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 { @@ -3760,7 +3739,7 @@ index fa170cc1ce7011d201295b89718292d696c7fc24..7fd68d4aba72b15b2e21e5c88b44e677 // 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 f0de72afad4bb571153436399386a6a8a70582a6..45b7527341fcb6d24f35318cedb522646b5ee1c2 100644 +index 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..bdfd9d95730c3ae9cbb4d5772eea8d2689f984ad 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 { @@ -3787,14 +3766,14 @@ index f0de72afad4bb571153436399386a6a8a70582a6..45b7527341fcb6d24f35318cedb52264 } this.updateBlockCallback(x, y, z, iblockdata1, state); // Paper - optimise collisions -@@ -161,6 +164,7 @@ public class LevelChunkSection { - if (fluid.isRandomlyTicking()) { - this.tickingFluidCount = (short) (this.tickingFluidCount + 1); +@@ -162,6 +165,7 @@ public class LevelChunkSection { + if (fluid.isRandomlyTicking()) { + this.tickingFluidCount = (short) (this.tickingFluidCount + 1); + } ++ this.fluidStateCount++; // Pufferfish } -+ this.fluidStateCount++; // Pufferfish - } - // Paper start - optimise collisions + // Paper start - optimise collisions diff --git a/src/main/java/net/minecraft/world/level/entity/EntityTickList.java b/src/main/java/net/minecraft/world/level/entity/EntityTickList.java index 4cdfc433df67afcd455422e9baf56f167dd712ae..57fcf3910f45ce371ac2e237b277b1034caaac4e 100644 --- a/src/main/java/net/minecraft/world/level/entity/EntityTickList.java @@ -3809,7 +3788,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..28d08d14acd0ec2409e49148f2fe386f3eac1991 100644 +index 6d8ff6c06af5545634f255ed17dc1e489ece2548..9ef88aef5ede13e0771215a603e054d89bf70483 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 { @@ -3836,7 +3815,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..28d08d14acd0ec2409e49148f2fe386f private final Map shapes = Maps.newIdentityHashMap(); public FlowingFluid() {} -@@ -252,6 +262,9 @@ public abstract class FlowingFluid extends Fluid { +@@ -251,6 +261,9 @@ public abstract class FlowingFluid extends Fluid { return false; } // Paper end - optimise collisions @@ -3846,7 +3825,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..28d08d14acd0ec2409e49148f2fe386f Object2ByteLinkedOpenHashMap object2bytelinkedopenhashmap; if (!state.getBlock().hasDynamicShape() && !fromState.getBlock().hasDynamicShape()) { -@@ -259,9 +272,16 @@ public abstract class FlowingFluid extends Fluid { +@@ -258,9 +271,16 @@ public abstract class FlowingFluid extends Fluid { } else { object2bytelinkedopenhashmap = null; } @@ -3863,7 +3842,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..28d08d14acd0ec2409e49148f2fe386f if (object2bytelinkedopenhashmap != null) { block_a = new Block.BlockStatePairKey(state, fromState, face); byte b0 = object2bytelinkedopenhashmap.getAndMoveToFirst(block_a); -@@ -272,11 +292,22 @@ public abstract class FlowingFluid extends Fluid { +@@ -271,11 +291,22 @@ public abstract class FlowingFluid extends Fluid { } else { block_a = null; } @@ -3886,7 +3865,7 @@ index e21f4c5aff3a8e97101f6efc1349fbecf326b5ea..28d08d14acd0ec2409e49148f2fe386f if (object2bytelinkedopenhashmap != null) { if (object2bytelinkedopenhashmap.size() == 200) { object2bytelinkedopenhashmap.removeLastByte(); -@@ -284,6 +315,11 @@ public abstract class FlowingFluid extends Fluid { +@@ -283,6 +314,11 @@ public abstract class FlowingFluid extends Fluid { object2bytelinkedopenhashmap.putAndMoveToFirst(block_a, (byte) (flag ? 1 : 0)); } @@ -3985,7 +3964,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 e011cfcdda2e0a609d4158b0454bdf046b04c9d9..cfd5d98195cb07302c2f4d56c27b81e06448604a 100644 +index 4df3b94c8126f00188f5e125757411a0359728fa..a60edc00952185bc38019372005657cdd21a35ed 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1120,6 +1120,11 @@ public final class CraftServer implements Server { @@ -3999,20 +3978,12 @@ index e011cfcdda2e0a609d4158b0454bdf046b04c9d9..cfd5d98195cb07302c2f4d56c27b81e0 + } } } - // 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..b5c31e0c2b10eaa64658df009c7f2c1e536aa725 100644 +index 96d772eb02f79f8c478f5e6f065e387aa7665b18..c5ce412f321b8b4f31cc042893659e213b081f29 100644 --- a/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java +++ b/src/main/java/org/bukkit/craftbukkit/inventory/CraftShapelessRecipe.java -@@ -3,6 +3,7 @@ package org.bukkit.craftbukkit.inventory; - import java.util.List; - import net.minecraft.core.NonNullList; - import net.minecraft.server.MinecraftServer; -+import net.minecraft.world.entity.animal.Pufferfish; - import net.minecraft.world.item.crafting.Ingredient; - import net.minecraft.world.item.crafting.RecipeHolder; - import org.bukkit.NamespacedKey; -@@ -45,6 +46,6 @@ public class CraftShapelessRecipe extends ShapelessRecipe implements CraftRecipe +@@ -45,6 +45,6 @@ public class CraftShapelessRecipe extends ShapelessRecipe implements CraftRecipe data.set(i, this.toNMS(ingred.get(i), true)); } @@ -4070,23 +4041,12 @@ index e8e93538dfd71de86515d9405f728db1631e949a..3dff02fd97f001508e2f81192817bf1b // Paper start - try to shutdown on main server.safeShutdown(false, false); diff --git a/src/main/java/org/spigotmc/ActivationRange.java b/src/main/java/org/spigotmc/ActivationRange.java -index 59103744ac6beeb12719fdefcda54eeff498229e..c0333ba8e57cd284bb8ab15181da6b39d55872f9 100644 +index c39894e824334f1dc52e0466cf9d84f7e219be70..08b5067600bb5099b6436bd1a0fd08ddf2d83705 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; - import net.minecraft.world.entity.schedule.Activity; - import net.minecraft.world.level.Level; - import net.minecraft.world.phys.AABB; -+// Pufferfish start -+import net.minecraft.world.phys.Vec3; -+import java.util.List; -+// Pufferfish end - - public class ActivationRange - { -@@ -222,6 +226,25 @@ public class ActivationRange +@@ -221,6 +221,25 @@ public class ActivationRange } - // Paper end - configurable marker ticking + // Paper end - Configurable marker ticking ActivationRange.activateEntity(entity); + + // Pufferfish start @@ -4095,8 +4055,8 @@ index 59103744ac6beeb12719fdefcda54eeff498229e..c0333ba8e57cd284bb8ab15181da6b39 + entity.activatedPriorityReset = true; + entity.activatedPriority = gg.pufferfish.pufferfish.PufferfishConfig.maximumActivationPrio; + } -+ Vec3 playerVec = player.position(); -+ Vec3 entityVec = entity.position(); ++ net.minecraft.world.phys.Vec3 playerVec = player.position(); ++ net.minecraft.world.phys.Vec3 entityVec = entity.position(); + double diffX = playerVec.x - entityVec.x, diffY = playerVec.y - entityVec.y, diffZ = playerVec.z - entityVec.z; + int squaredDistance = (int) (diffX * diffX + diffY * diffY + diffZ * diffZ); + entity.activatedPriority = squaredDistance > gg.pufferfish.pufferfish.PufferfishConfig.startDistanceSquared ? @@ -4110,7 +4070,7 @@ index 59103744ac6beeb12719fdefcda54eeff498229e..c0333ba8e57cd284bb8ab15181da6b39 } // Paper end } -@@ -238,12 +261,12 @@ public class ActivationRange +@@ -237,12 +256,12 @@ public class ActivationRange if ( MinecraftServer.currentTick > entity.activatedTick ) { if ( entity.defaultActivationState ) @@ -4125,12 +4085,12 @@ index 59103744ac6beeb12719fdefcda54eeff498229e..c0333ba8e57cd284bb8ab15181da6b39 entity.activatedTick = MinecraftServer.currentTick; } } -@@ -297,7 +320,7 @@ public class ActivationRange +@@ -296,7 +315,7 @@ public class ActivationRange if ( entity instanceof LivingEntity ) { LivingEntity living = (LivingEntity) entity; -- if ( living.onClimbable() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 ) // Paper -+ if ( living.onClimableCached() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 ) // Paper // Pufferfish - use cached +- if ( living.onClimbable() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 || living.isFreezing()) // Paper ++ if ( living.onClimableCached() || living.jumping || living.hurtTime > 0 || living.activeEffects.size() > 0 || living.isFreezing()) // Paper // Pufferfish - use cached { return 1; // Paper } diff --git a/patches/server/0004-Change-branding.patch b/patches/server/0003-Change-branding.patch similarity index 91% rename from patches/server/0004-Change-branding.patch rename to patches/server/0003-Change-branding.patch index b22512d..fb61ad0 100644 --- a/patches/server/0004-Change-branding.patch +++ b/patches/server/0003-Change-branding.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Change branding diff --git a/build.gradle.kts b/build.gradle.kts -index d36d53048aa7e254a19a567336e9daa2669935e3..d0a30af7fb6ac1eacfc9bb082f67037178b40251 100644 +index 6d54e1145ad71c0a66416f96ddd5c7c54374371b..1253a3baa15a1943c85f41111d1bfdd33a233769 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -13,8 +13,10 @@ configurations.named(log4jPlugins.compileClasspathConfigurationName) { @@ -21,7 +21,7 @@ index d36d53048aa7e254a19a567336e9daa2669935e3..d0a30af7fb6ac1eacfc9bb082f670371 // Paper start implementation("org.jline:jline-terminal-jansi:3.21.0") implementation("net.minecrell:terminalconsoleappender:1.3.0") -@@ -86,7 +88,7 @@ tasks.jar { +@@ -85,7 +87,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", @@ -31,10 +31,10 @@ index d36d53048aa7e254a19a567336e9daa2669935e3..d0a30af7fb6ac1eacfc9bb082f670371 "Specification-Title" to "Bukkit", "Specification-Version" to project.version, diff --git a/src/main/java/co/aikar/timings/TimingsExport.java b/src/main/java/co/aikar/timings/TimingsExport.java -index ff940e43ca35094bbcae6c7d471d3c4aeb7c1727..c763cee00b02b885864471fda978e28943e5269e 100644 +index b35a9f4c5f8960864c402ede8a51fb5ab9c4fcc0..577b5f42ca47763c2604795724f906e00e1ddc7e 100644 --- a/src/main/java/co/aikar/timings/TimingsExport.java +++ b/src/main/java/co/aikar/timings/TimingsExport.java -@@ -243,7 +243,8 @@ public class TimingsExport extends Thread { +@@ -241,7 +241,8 @@ public class TimingsExport extends Thread { pair("spigot", mapAsJSON(Bukkit.spigot().getSpigotConfig(), null)), pair("bukkit", mapAsJSON(Bukkit.spigot().getBukkitConfig(), null)), pair("paper", mapAsJSON(Bukkit.spigot().getPaperConfig(), null)), // Pufferfish @@ -105,20 +105,20 @@ index 9d687da5bdf398bb3f6c84cdf1249a7213d09f2e..b650f1f7390374dd50b0a281441d0ddb org.bukkit.Bukkit.getLogger().warning("Version: " + org.bukkit.Bukkit.getBukkitVersion()); } diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index c36fc4069f762e869aa1657dc93d781d7819b13f..05848fb7369078003562da124b146b67b8b52bfe 100644 +index 91eb7d831db2e6c2b7e259151503afbf3c8aa8e0..6018901e7ac605dfc088df55ab9ca38bdb654f01 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1868,7 +1868,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop // Spigot - Spigot > // CraftBukkit - cb > vanilla! -+ return "CloudPlane"; // CloudPlane - CloudPlane > // Paper - Paper > // Spigot - Spigot > // CraftBukkit - cb > vanilla! +- return "Paper"; // Paper ++ return "CloudPlane"; // Paper // CloudPlane } public SystemReport fillSystemReport(SystemReport details) { diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index cfd5d98195cb07302c2f4d56c27b81e06448604a..d7ae9ffdd6f744f72deedea9e060ddeed1e3f4d3 100644 +index a60edc00952185bc38019372005657cdd21a35ed..d003ce61fdf7750ae1597699bea74dc0ffb0fdb8 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 @@ -131,7 +131,7 @@ index cfd5d98195cb07302c2f4d56c27b81e06448604a..d7ae9ffdd6f744f72deedea9e060ddee private final String bukkitVersion = Versioning.getBukkitVersion(); private final Logger logger = Logger.getLogger("Minecraft"); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index a74a8a027c99eef199c1a6a54232ac2c8ffb9d08..26474176e590b0a7d2f32088835534a64686a2f4 100644 +index ce341f42b3a5e17fb6d1f7de8057e73137ae2a6e..2440847cc6e7a05d2438f51557a71a2fcd4b24e2 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -301,7 +301,7 @@ public class Main { @@ -142,7 +142,7 @@ index a74a8a027c99eef199c1a6a54232ac2c8ffb9d08..26474176e590b0a7d2f32088835534a6 + System.err.println("*** Please download a new build as per instructions from https://nightly.link/CloudCraftProjects/CloudPlane/workflows/build/master/CloudPlane-Artifacts.zip ***"); // Paper // CloudPlane //System.err.println("*** Server will start in 20 seconds ***"); //Thread.sleep(TimeUnit.SECONDS.toMillis(20)); - // Paper End + // Paper end diff --git a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java b/src/main/java/org/bukkit/craftbukkit/util/Versioning.java index 774556a62eb240da42e84db4502e2ed43495be17..45502cf7a124fe189fd28d0e320dd8dbcd200ddb 100644 --- a/src/main/java/org/bukkit/craftbukkit/util/Versioning.java diff --git a/patches/server/0005-Add-CloudPlane-configuration.patch b/patches/server/0004-Add-CloudPlane-configuration.patch similarity index 89% rename from patches/server/0005-Add-CloudPlane-configuration.patch rename to patches/server/0004-Add-CloudPlane-configuration.patch index 35a57a4..02a6f2d 100644 --- a/patches/server/0005-Add-CloudPlane-configuration.patch +++ b/patches/server/0004-Add-CloudPlane-configuration.patch @@ -213,43 +213,36 @@ index 0000000000000000000000000000000000000000..3d12a4fb9e6acb412d80bff777d08771 + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 3b8c810a228a59bf02a8557b229e5eca56c16562..b83a07e263fdef784d5990fcc670165e70d5ee81 100644 +index 85f1811c572b86ac43cc90db8f4d93bbd7efde51..701bfdeae23715d6891772062263b8dd137bfd2c 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -218,6 +218,14 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - thread.start(); // Paper - start console thread after MinecraftServer.console & PaperConfig are initialized - io.papermc.paper.command.PaperCommands.registerCommands(this); - com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); -+ // CloudPlane start -+ try { -+ dev.booky.cloudplane.CloudPlaneConfig.init((java.io.File) options.valueOf("cloudplane-settings")); -+ } catch (Exception e) { -+ DedicatedServer.LOGGER.error("Unable to load server configuration", e); -+ return false; -+ } -+ // CloudPlane end - com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now - io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider - // Paper end +@@ -223,6 +223,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // Paper - init PaperBrigadierProvider + gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish + gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish ++ dev.booky.cloudplane.CloudPlaneConfig.init((java.io.File) this.options.valueOf("cloudplane-settings")); // CloudPlane - load configuration + + this.setPvpAllowed(dedicatedserverproperties.pvp); + this.setFlightAllowed(dedicatedserverproperties.allowFlight); diff --git a/src/main/java/net/minecraft/world/level/Level.java b/src/main/java/net/minecraft/world/level/Level.java -index 868132f2c3f5afe704b762cd173334e98911ba71..8b9858d674d3fd7e7819e0373b3ff03631d19547 100644 +index fa3ca8d83c247d6023736721e2632cca2702b99f..d31e41127959e448f2f3c735673f02863d7b9cab 100644 --- a/src/main/java/net/minecraft/world/level/Level.java +++ b/src/main/java/net/minecraft/world/level/Level.java -@@ -221,9 +221,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { +@@ -220,10 +220,12 @@ public abstract class Level implements LevelAccessor, AutoCloseable { + private final int height; private final int maxBuildHeight; // Pufferfish end ++ public final dev.booky.cloudplane.CloudPlaneWorldConfig cloudplaneConfig; // CloudPlane - world configuration -+ public final dev.booky.cloudplane.CloudPlaneWorldConfig cloudplaneConfig; // CloudPlane -+ - protected Level(WritableLevelData worlddatamutable, ResourceKey resourcekey, RegistryAccess iregistrycustom, Holder holder, Supplier supplier, boolean flag, boolean flag1, long i, int j, org.bukkit.generator.ChunkGenerator gen, org.bukkit.generator.BiomeProvider biomeProvider, org.bukkit.World.Environment env, java.util.function.Function paperWorldConfigCreator, java.util.concurrent.Executor executor) { // Paper - Async-Anti-Xray - Pass executor + 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 - this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper -+ this.cloudplaneConfig = new dev.booky.cloudplane.CloudPlaneWorldConfig((((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()), env); // CloudPlane + this.paperConfig = paperWorldConfigCreator.apply(this.spigotConfig); // Paper - create paper world config ++ this.cloudplaneConfig = new dev.booky.cloudplane.CloudPlaneWorldConfig((((net.minecraft.world.level.storage.PrimaryLevelData) worlddatamutable).getLevelName()), env); // CloudPlane - load world configuration this.generator = gen; this.world = new CraftWorld((ServerLevel) this, gen, biomeProvider, env); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index d7ae9ffdd6f744f72deedea9e060ddeed1e3f4d3..58b1b8849e9806832b15f2f4ed065d54f102afb0 100644 +index d003ce61fdf7750ae1597699bea74dc0ffb0fdb8..651b5d45aa84f854edd6767dd3a4e4bd6510b149 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -1037,6 +1037,7 @@ public final class CraftServer implements Server { @@ -260,7 +253,7 @@ index d7ae9ffdd6f744f72deedea9e060ddeed1e3f4d3..58b1b8849e9806832b15f2f4ed065d54 for (ServerLevel world : this.console.getAllLevels()) { // world.serverLevelData.setDifficulty(config.difficulty); // Paper - per level difficulty world.setSpawnSettings(world.serverLevelData.getDifficulty() != Difficulty.PEACEFUL && config.spawnMonsters, config.spawnAnimals); // Paper - per level difficulty (from MinecraftServer#setDifficulty(ServerLevel, Difficulty, boolean)) -@@ -3016,6 +3017,13 @@ public final class CraftServer implements Server { +@@ -3001,6 +3002,13 @@ public final class CraftServer implements Server { return CraftServer.this.console.paperConfigurations.createLegacyObject(CraftServer.this.console); } @@ -275,7 +268,7 @@ index d7ae9ffdd6f744f72deedea9e060ddeed1e3f4d3..58b1b8849e9806832b15f2f4ed065d54 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 26474176e590b0a7d2f32088835534a64686a2f4..945f72953f068a172bb4281f1ac72a1596545266 100644 +index 2440847cc6e7a05d2438f51557a71a2fcd4b24e2..0130571c45f072dcb3100ae6992e3ed0ed754cf3 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -174,6 +174,14 @@ public class Main { diff --git a/patches/server/0006-Add-allowPvP-gamerule.patch b/patches/server/0005-Add-allowPvP-gamerule.patch similarity index 86% rename from patches/server/0006-Add-allowPvP-gamerule.patch rename to patches/server/0005-Add-allowPvP-gamerule.patch index 1aa5c12..b0d6127 100644 --- a/patches/server/0006-Add-allowPvP-gamerule.patch +++ b/patches/server/0005-Add-allowPvP-gamerule.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Add allowPvP gamerule diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 1d6e1c1b7cd3488031529142394f756eafd8b2c2..fa40d709c43bb5a17960f8812419e17e2efa64f0 100644 +index e9adae2f97ce6e6296c0cda99399ee0170514de3..9f9624e2cb98ae72bbb81377617cdc775ff88363 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -1516,7 +1516,7 @@ public class ServerPlayer extends Player { +@@ -1517,7 +1517,7 @@ public class ServerPlayer extends Player { @Override public boolean isInvulnerableTo(DamageSource damageSource) { @@ -18,7 +18,7 @@ index 1d6e1c1b7cd3488031529142394f756eafd8b2c2..fa40d709c43bb5a17960f8812419e17e @Override diff --git a/src/main/java/net/minecraft/world/level/GameRules.java b/src/main/java/net/minecraft/world/level/GameRules.java -index 4f2fa47d094348bb8f86a86e808019ddba56e187..d04956fd67eb1a376e046e01562b48fb160dec57 100644 +index c246981987017a2f86c5d632929356855e2b5714..76664730a3d1605a0b0568e2151e261635ecf8a5 100644 --- a/src/main/java/net/minecraft/world/level/GameRules.java +++ b/src/main/java/net/minecraft/world/level/GameRules.java @@ -113,6 +113,8 @@ public class GameRules { @@ -28,5 +28,5 @@ index 4f2fa47d094348bb8f86a86e808019ddba56e187..d04956fd67eb1a376e046e01562b48fb + public static final GameRules.Key RULE_ALLOW_PVP = GameRules.register("allowPvP", Category.PLAYER, GameRules.BooleanValue.create(true)); // CloudPlane - allowPvP gamerule + private final Map, GameRules.Value> rules; - private final GameRules.Value[] gameruleArray; // Paper + private final GameRules.Value[] gameruleArray; // Paper - Perf: Use array for gamerule storage diff --git a/patches/server/0007-Add-option-to-translate-custom-item-names-and-lore.patch b/patches/server/0006-Add-option-to-translate-custom-item-names-and-lore.patch similarity index 97% rename from patches/server/0007-Add-option-to-translate-custom-item-names-and-lore.patch rename to patches/server/0006-Add-option-to-translate-custom-item-names-and-lore.patch index c11231a..84b9ac2 100644 --- a/patches/server/0007-Add-option-to-translate-custom-item-names-and-lore.patch +++ b/patches/server/0006-Add-option-to-translate-custom-item-names-and-lore.patch @@ -119,10 +119,10 @@ index ca80cbe422d766b3d044a5b53ce40bb7f92558e4..d490531bcb91904b64329c55071ff47f return GlobalTranslator.render( component, diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -index b13bc90b28b02f5e80d935bfcba727f92c5e4c4f..b6174d68808de124859f342153cf8a212e5ac716 100644 +index b863249ff7e13cf4939c8961601f0564c62fd661..4ee4c481d45db484d82e434fa95eeb9a15ba312a 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -@@ -647,6 +647,56 @@ public class FriendlyByteBuf extends ByteBuf { +@@ -652,6 +652,56 @@ public class FriendlyByteBuf extends ByteBuf { // CraftItemStack.setItemMeta(stack, CraftItemStack.getItemMeta(stack)); // Paper - This is no longer with raw NBT being handled in metadata // Spigot end nbttagcompound = stack.getTag(); @@ -179,7 +179,7 @@ index b13bc90b28b02f5e80d935bfcba727f92c5e4c4f..b6174d68808de124859f342153cf8a21 } this.writeNbt(nbttagcompound); -@@ -663,7 +713,22 @@ public class FriendlyByteBuf extends ByteBuf { +@@ -668,7 +718,22 @@ public class FriendlyByteBuf extends ByteBuf { byte b0 = this.readByte(); ItemStack itemstack = new ItemStack(item, b0); diff --git a/patches/server/0008-Add-more-detailed-brand-info.patch b/patches/server/0007-Add-more-detailed-brand-info.patch similarity index 94% rename from patches/server/0008-Add-more-detailed-brand-info.patch rename to patches/server/0007-Add-more-detailed-brand-info.patch index 0533fbd..0c8417b 100644 --- a/patches/server/0008-Add-more-detailed-brand-info.patch +++ b/patches/server/0007-Add-more-detailed-brand-info.patch @@ -25,7 +25,7 @@ index b21f7a41581ddf36d61e206366c6398738a47813..9d3dafc4989b9fbaa32a337df9b3c56e + } } diff --git a/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java -index cae10b963d153fb1777b18054796a45b2809342b..b9f10d60713cc7f16bee32fa545022c7f6d185b9 100644 +index 76f31845fe50200d09e5ab6a6c08da00444414ad..9e0388a6fc638db8be3f6fed73bbbf84a045b813 100644 --- a/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerConfigurationPacketListenerImpl.java @@ -67,7 +67,12 @@ public class ServerConfigurationPacketListenerImpl extends ServerCommonPacketLis @@ -43,7 +43,7 @@ index cae10b963d153fb1777b18054796a45b2809342b..b9f10d60713cc7f16bee32fa545022c7 this.send(new ClientboundUpdateEnabledFeaturesPacket(FeatureFlags.REGISTRY.toNames(this.server.getWorldData().enabledFeatures()))); diff --git a/src/main/java/org/bukkit/craftbukkit/CraftServer.java b/src/main/java/org/bukkit/craftbukkit/CraftServer.java -index 58b1b8849e9806832b15f2f4ed065d54f102afb0..871d5a32a1952f892cc2ef2477431e644d030b8c 100644 +index 651b5d45aa84f854edd6767dd3a4e4bd6510b149..24db3835d919dacf614bd52eea365f0757c280ca 100644 --- a/src/main/java/org/bukkit/craftbukkit/CraftServer.java +++ b/src/main/java/org/bukkit/craftbukkit/CraftServer.java @@ -265,7 +265,7 @@ import javax.annotation.Nonnull; // Paper diff --git a/patches/server/0009-Add-start-argument-for-changing-pufferfish-config-lo.patch b/patches/server/0008-Add-start-argument-for-changing-pufferfish-config-lo.patch similarity index 82% rename from patches/server/0009-Add-start-argument-for-changing-pufferfish-config-lo.patch rename to patches/server/0008-Add-start-argument-for-changing-pufferfish-config-lo.patch index 9f7494b..097aec3 100644 --- a/patches/server/0009-Add-start-argument-for-changing-pufferfish-config-lo.patch +++ b/patches/server/0008-Add-start-argument-for-changing-pufferfish-config-lo.patch @@ -18,7 +18,7 @@ index 020368da69b9a492155f6de6297f74732f4ab6ea..4a5ad92c7989d4f85eea3f2908732fb5 sender.sendMessage(Component.text("Failed to reload.", NamedTextColor.RED)); e.printStackTrace(); diff --git a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java -index 13e6a1539360f48f8c8f63a9150a427de6027948..5ca225ff196958f764f2918cbd327293e91eecfa 100644 +index bc6bf6bd8c01a200d395399f6687dbfa0da4e6d5..1f940f6735dc76ff15910808549f015796c50fe6 100644 --- a/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java +++ b/src/main/java/gg/pufferfish/pufferfish/PufferfishConfig.java @@ -48,8 +48,8 @@ public class PufferfishConfig { @@ -33,20 +33,20 @@ index 13e6a1539360f48f8c8f63a9150a427de6027948..5ca225ff196958f764f2918cbd327293 if (configFile.exists()) { try { diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 219f91409f7e4624abcba6c9c70ee8c0fa9fc89c..720db1c8e1fb66ceb157a3a29c932d8e00417e53 100644 +index 701bfdeae23715d6891772062263b8dd137bfd2c..24e10809c72051cf330fbc8b0687703e9af3bef4 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -229,7 +229,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface - com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // load version history now - io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // init PaperBrigadierProvider - // Paper end +@@ -221,7 +221,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface + com.destroystokyo.paper.Metrics.PaperMetrics.startMetrics(); // Paper - start metrics + com.destroystokyo.paper.VersionHistoryManager.INSTANCE.getClass(); // Paper - load version history now + io.papermc.paper.brigadier.PaperBrigadierProviderImpl.INSTANCE.getClass(); // Paper - init PaperBrigadierProvider - gg.pufferfish.pufferfish.PufferfishConfig.load(); // Pufferfish + gg.pufferfish.pufferfish.PufferfishConfig.load((java.io.File) options.valueOf("pufferfish-settings")); // Pufferfish // CloudPlane gg.pufferfish.pufferfish.PufferfishCommand.init(); // Pufferfish + dev.booky.cloudplane.CloudPlaneConfig.init((java.io.File) this.options.valueOf("cloudplane-settings")); // CloudPlane - load configuration - this.setPvpAllowed(dedicatedserverproperties.pvp); diff --git a/src/main/java/org/bukkit/craftbukkit/Main.java b/src/main/java/org/bukkit/craftbukkit/Main.java -index eb8f24293bbdec7c0ccb479cae7b41e4ac12302f..2b8bad2139b0d10cfdc6fcf931dd504608858010 100644 +index 0130571c45f072dcb3100ae6992e3ed0ed754cf3..f3d860488ff47f7e19028362dd302ed52e7981c3 100644 --- a/src/main/java/org/bukkit/craftbukkit/Main.java +++ b/src/main/java/org/bukkit/craftbukkit/Main.java @@ -180,6 +180,12 @@ public class Main { diff --git a/patches/server/0010-Fire-PlayerPickupArrowEvent-for-creative-players.patch b/patches/server/0009-Fire-PlayerPickupArrowEvent-for-creative-players.patch similarity index 94% rename from patches/server/0010-Fire-PlayerPickupArrowEvent-for-creative-players.patch rename to patches/server/0009-Fire-PlayerPickupArrowEvent-for-creative-players.patch index 228974f..3cfba11 100644 --- a/patches/server/0010-Fire-PlayerPickupArrowEvent-for-creative-players.patch +++ b/patches/server/0009-Fire-PlayerPickupArrowEvent-for-creative-players.patch @@ -5,7 +5,7 @@ Subject: [PATCH] Fire PlayerPickupArrowEvent for creative players 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 42ebd91196ae420eee57f4380abc558555457163..b7f087ae17aa8330c0a23556a7d03a9ad435ed13 100644 +index d14eab0d83d629a4522bf3f7d789d2853eb84f06..645ce347af20aa970d11cb61bbfbdd8a31e6b055 100644 --- a/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java +++ b/src/main/java/net/minecraft/world/entity/projectile/AbstractArrow.java @@ -584,7 +584,7 @@ public abstract class AbstractArrow extends Projectile { diff --git a/patches/server/0011-Prevent-healing-amplifier-from-breaking.patch b/patches/server/0010-Prevent-healing-amplifier-from-breaking.patch similarity index 100% rename from patches/server/0011-Prevent-healing-amplifier-from-breaking.patch rename to patches/server/0010-Prevent-healing-amplifier-from-breaking.patch diff --git a/patches/server/0012-Log-exceptions-caused-by-packet-sending.patch b/patches/server/0011-Log-exceptions-caused-by-packet-sending.patch similarity index 93% rename from patches/server/0012-Log-exceptions-caused-by-packet-sending.patch rename to patches/server/0011-Log-exceptions-caused-by-packet-sending.patch index aea5ede..d00d4a9 100644 --- a/patches/server/0012-Log-exceptions-caused-by-packet-sending.patch +++ b/patches/server/0011-Log-exceptions-caused-by-packet-sending.patch @@ -5,12 +5,12 @@ Subject: [PATCH] Log exceptions caused by packet sending diff --git a/src/main/java/net/minecraft/network/Connection.java b/src/main/java/net/minecraft/network/Connection.java -index 11805569eefe100c2f469431d77a0d5a80c53244..7b13453068100a62ee9650686cf81a8eefb041ec 100644 +index 8695b0f7b02c3001947c81b6f57680a3f7325787..7fcf8158125207b178f71cd3a0c67916f4a66f65 100644 --- a/src/main/java/net/minecraft/network/Connection.java +++ b/src/main/java/net/minecraft/network/Connection.java @@ -224,7 +224,7 @@ public class Connection extends SimpleChannelInboundHandler> { - if (player != null) player.quitReason = org.bukkit.event.player.PlayerQuitEvent.QuitReason.ERRONEOUS_STATE; // Paper + if (player != null) player.quitReason = org.bukkit.event.player.PlayerQuitEvent.QuitReason.ERRONEOUS_STATE; // Paper - Add API for quit reason if (flag) { - Connection.LOGGER.debug("Failed to sent packet", throwable); + Connection.LOGGER.error("Failed to sent packet", throwable); // CloudPlane diff --git a/patches/server/0013-Don-t-apply-de-synced-opencount-for-shulker-boxes.patch b/patches/server/0012-Don-t-apply-de-synced-opencount-for-shulker-boxes.patch similarity index 100% rename from patches/server/0013-Don-t-apply-de-synced-opencount-for-shulker-boxes.patch rename to patches/server/0012-Don-t-apply-de-synced-opencount-for-shulker-boxes.patch diff --git a/patches/server/0014-Resend-more-data-on-locale-change.patch b/patches/server/0013-Resend-more-data-on-locale-change.patch similarity index 92% rename from patches/server/0014-Resend-more-data-on-locale-change.patch rename to patches/server/0013-Resend-more-data-on-locale-change.patch index 406c721..8f4e107 100644 --- a/patches/server/0014-Resend-more-data-on-locale-change.patch +++ b/patches/server/0013-Resend-more-data-on-locale-change.patch @@ -6,7 +6,7 @@ Subject: [PATCH] Resend more data on locale change Includes advancements, inventories, entity custom names, text display texts and item frame items diff --git a/src/main/java/net/minecraft/server/PlayerAdvancements.java b/src/main/java/net/minecraft/server/PlayerAdvancements.java -index f655e0ae4a287886d0291cd0089bad2000249d0f..f7bdbd0c9c3008b58235df018d34ae4c8c2a2b43 100644 +index 24e5993b281448734eb67c7a8439a349bbf9fd72..1e3864d864dc2e10e3c19ea1aae6d0e32fdaab25 100644 --- a/src/main/java/net/minecraft/server/PlayerAdvancements.java +++ b/src/main/java/net/minecraft/server/PlayerAdvancements.java @@ -76,6 +76,16 @@ public class PlayerAdvancements { @@ -27,7 +27,7 @@ index f655e0ae4a287886d0291cd0089bad2000249d0f..f7bdbd0c9c3008b58235df018d34ae4c this.player = owner; } diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index fa40d709c43bb5a17960f8812419e17e2efa64f0..2b33942867666ed463e71cdc50e39131a5b56bc7 100644 +index 9f9624e2cb98ae72bbb81377617cdc775ff88363..64cf742dcb5139f07ec0b0cc1bd31cccbc076c8a 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java @@ -329,6 +329,10 @@ public class ServerPlayer extends Player { @@ -41,7 +41,7 @@ index fa40d709c43bb5a17960f8812419e17e2efa64f0..2b33942867666ed463e71cdc50e39131 public ServerPlayer(MinecraftServer server, ServerLevel world, GameProfile profile, ClientInformation clientOptions) { super(world, world.getSharedSpawnPos(), world.getSharedSpawnAngle(), profile); this.chatVisibility = ChatVisiblity.FULL; -@@ -2145,10 +2149,39 @@ public class ServerPlayer extends Player { +@@ -2146,10 +2150,39 @@ public class ServerPlayer extends Player { PlayerChangedMainHandEvent event = new PlayerChangedMainHandEvent(this.getBukkitEntity(), this.getMainArm() == HumanoidArm.LEFT ? MainHand.LEFT : MainHand.RIGHT); this.server.server.getPluginManager().callEvent(event); } @@ -81,7 +81,7 @@ index fa40d709c43bb5a17960f8812419e17e2efa64f0..2b33942867666ed463e71cdc50e39131 } // CraftBukkit end // Paper start - don't call options events on login -@@ -2157,7 +2190,7 @@ public class ServerPlayer extends Player { +@@ -2158,7 +2191,7 @@ public class ServerPlayer extends Player { public void updateOptionsNoEvents(ClientInformation clientOptions) { // Paper end this.language = clientOptions.language(); @@ -91,7 +91,7 @@ index fa40d709c43bb5a17960f8812419e17e2efa64f0..2b33942867666ed463e71cdc50e39131 this.chatVisibility = clientOptions.chatVisibility(); this.canChatColor = clientOptions.chatColors(); diff --git a/src/main/java/net/minecraft/world/entity/Display.java b/src/main/java/net/minecraft/world/entity/Display.java -index 58de4a3ff0b5494fa576a902f33de4cd38b9c7be..a17b24fdb21672c2d47309018cec73ed0021f90f 100644 +index 2ecd3ed5b36475125c6f63af2612011fc8fba8a5..1cb2532bad5b30366a743000318bcbafb23e9e87 100644 --- a/src/main/java/net/minecraft/world/entity/Display.java +++ b/src/main/java/net/minecraft/world/entity/Display.java @@ -768,7 +768,7 @@ public abstract class Display extends Entity { @@ -104,10 +104,10 @@ index 58de4a3ff0b5494fa576a902f33de4cd38b9c7be..a17b24fdb21672c2d47309018cec73ed public static final EntityDataAccessor DATA_BACKGROUND_COLOR_ID = SynchedEntityData.defineId(Display.TextDisplay.class, EntityDataSerializers.INT); private static final EntityDataAccessor DATA_TEXT_OPACITY_ID = SynchedEntityData.defineId(Display.TextDisplay.class, EntityDataSerializers.BYTE); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index a186be351ba73a74a9aef887d3a69b5e0846713a..fa20553a80cce087c07ddb3bd8cb8cb76bd16e82 100644 +index 0aab277908d1b885916fb2276dc3aa3f332d51cf..65e0700570970862d24224d68ba9444e70a49f76 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -356,7 +356,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -357,7 +357,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S protected static final int FLAG_GLOWING = 6; protected static final int FLAG_FALL_FLYING = 7; private static final EntityDataAccessor DATA_AIR_SUPPLY_ID = SynchedEntityData.defineId(Entity.class, EntityDataSerializers.INT);