From 45e119a5adbfa06ab65578b302743e60d7b91ff2 Mon Sep 17 00:00:00 2001 From: Dreeam <61569423+Dreeam-qwq@users.noreply.github.com> Date: Thu, 9 May 2024 18:36:58 -0400 Subject: [PATCH] Some 1.20.6 work --- .../{build_1.20.4.yml => build_1.20.6.yml} | 12 +-- README.md | 6 +- README_EN.md | 6 +- build.gradle.kts | 9 +-- gradle.properties | 6 +- patches/api/0002-Leaves-Replay-Mod-API.patch | 8 +- patches/api/0003-KioCG-Chunk-API.patch | 4 +- patches/server/0001-Fix-build.patch | 6 +- patches/server/0002-Rebrand-to-Luminol.patch | 10 +-- .../server/0003-Empty-config-file-base.patch | 8 +- .../0004-Add-config-for-server-mod-name.patch | 4 +- ...-Add-config-for-unsafe-teleportation.patch | 6 +- .../0006-Add-config-for-void-trading.patch | 4 +- .../0007-Add-config-for-vanilla-random.patch | 4 +- .../0008-Add-config-for-chat-sign.patch | 19 +++-- patches/server/0009-Add-a-simple-tpsbar.patch | 14 ++-- .../0010-Add-config-for-username-check.patch | 17 ++-- ...-Add-config-for-offline-mode-warning.patch | 4 +- ...-config-for-out-of-order-chat-checks.patch | 20 ++--- ...d-a-simple-watchdog-for-tick-regions.patch | 4 +- ...y-fixing-folia-spector-teleportation.patch | 4 +- ...f-entity-was-moving-to-another-regio.patch | 4 +- ...Async-calling-during-moving-event-be.patch | 22 ++--- ...iju-Vanilla-end-portal-teleportation.patch | 8 +- .../0019-Petal-Reduce-sensor-work.patch | 19 ++--- ...-Cache-climbing-check-for-activation.patch | 10 +-- ...0023-Pufferfish-Optimize-suffocation.patch | 10 +-- ...ferfish-Reduce-chunk-loading-lookups.patch | 4 +- ...ce-entity-fluid-lookups-if-no-fluids.patch | 10 +-- ...check-for-spooky-season-once-an-hour.patch | 8 +- .../server/0029-Pufferfish-Entity-TTL.patch | 10 +-- ...fish-Reduce-projectile-chunk-loading.patch | 4 +- ...fferfish-Dynamic-Activation-of-Brain.patch | 81 ++++++++++--------- ...tle-goal-selector-during-inactive-ti.patch | 4 +- ...Pufferfish-Reduce-entity-allocations.patch | 19 ++--- 35 files changed, 193 insertions(+), 195 deletions(-) rename .github/workflows/{build_1.20.4.yml => build_1.20.6.yml} (92%) diff --git a/.github/workflows/build_1.20.4.yml b/.github/workflows/build_1.20.6.yml similarity index 92% rename from .github/workflows/build_1.20.4.yml rename to .github/workflows/build_1.20.6.yml index ee623a0..901e735 100644 --- a/.github/workflows/build_1.20.4.yml +++ b/.github/workflows/build_1.20.6.yml @@ -1,10 +1,10 @@ -name: Luminol CI - ver/1.20.4 +name: Luminol CI - ver/1.20.6 on: push: - branches: [ "ver/1.20.4" ] + branches: [ "ver/1.20.6" ] pull_request: - branches: [ "ver/1.20.4" ] + branches: [ "ver/1.20.6" ] permissions: write-all @@ -20,12 +20,12 @@ jobs: - name: Setup Gradle uses: gradle/actions/setup-gradle@v3 with: - gradle-version: 8.4 + gradle-version: 8.7 - name: Set up JDK uses: actions/setup-java@v4 with: - distribution: 'temurin' - java-version: '17' + distribution: 'zulu' + java-version: '21' - name: Configure Git User Details run: git config --global user.email "ci@luminolmc.com" && git config --global user.name "LuminolMC CI" - name: Apply Patches diff --git a/README.md b/README.md index a2af4b0..cbf361b 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,7 @@ 任何版本都可以在 [Release](https://github.com/LuminolMC/Luminol/releases) 中找到,你也可以通过[以下步骤](./README.md#构建)自己构建。 ## 构建 -要构建一个paperclip jar,你需要运行以下命令。你可以在build/libs中找到jar(注意:需要`JDK17`) +要构建一个paperclip jar,你需要运行以下命令。你可以在build/libs中找到jar(注意:需要`JDK21`) ```shell ./gradlew applyPatches && ./gradlew createMojmapPaperclipJar @@ -33,7 +33,7 @@ ```kotlin dependencies { - compileOnly("me.earthme.luminol:luminol-api:1.20.4-R0.1-SNAPSHOT") + compileOnly("me.earthme.luminol:luminol-api:1.20.6-R0.1-SNAPSHOT") } ``` @@ -43,7 +43,7 @@ dependencies { me.earthme.luminol luminol-api - 1.20.4-R0.1-SNAPSHOT + 1.20.6-R0.1-SNAPSHOT ``` diff --git a/README_EN.md b/README_EN.md index 8ce5c87..da7f01b 100644 --- a/README_EN.md +++ b/README_EN.md @@ -22,7 +22,7 @@ Any versions are available in the [release](https://github.com/LuminolMC/Luminol/releases), also you can build it by yourself through [the following steps](./README_EN.md#build). ## Build -To build a paperclip jar, you need to run the following command. You can find the jar in build/libs(Note: JDK17 is needed) +To build a paperclip jar, you need to run the following command. You can find the jar in build/libs(Note: JDK21 is needed) ```shell ./gradlew applyPatches && ./gradlew createMojmapPaperclipJar @@ -33,7 +33,7 @@ For gradle: ```kotlin dependencies { - compileOnly("me.earthme.luminol:luminol-api:1.20.4-R0.1-SNAPSHOT") + compileOnly("me.earthme.luminol:luminol-api:1.20.6-R0.1-SNAPSHOT") } ``` @@ -43,7 +43,7 @@ For maven me.earthme.luminol luminol-api - 1.20.4-R0.1-SNAPSHOT + 1.20.6-R0.1-SNAPSHOT ``` diff --git a/build.gradle.kts b/build.gradle.kts index 4ed9779..7563f69 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,8 +1,7 @@ plugins { java `maven-publish` - id("com.github.johnrengelman.shadow") version "8.1.1" apply false - id("io.papermc.paperweight.patcher") version "1.5.15" + id("io.papermc.paperweight.patcher") version "1.6.3" } val paperMavenPublicUrl = "https://repo.papermc.io/repository/maven-public/" @@ -26,13 +25,13 @@ subprojects { java { toolchain { - languageVersion.set(JavaLanguageVersion.of(17)) + languageVersion.set(JavaLanguageVersion.of(21)) } } tasks.withType { options.encoding = Charsets.UTF_8.name() - options.release.set(17) + options.release.set(21) } tasks.withType { @@ -75,7 +74,7 @@ paperweight { decompileRepo.set("https://maven.quiltmc.org/") useStandardUpstream("folia") { - url.set(github("Dreeam-qwq", "Folia")) + url.set(github("ColdeZhang", "Folia")) ref.set(providers.gradleProperty("foliaCommit")) withStandardPatcher { diff --git a/gradle.properties b/gradle.properties index b6387d3..ec2b657 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,13 +1,13 @@ group = me.earthme.luminol -version = 1.20.4-R0.1-SNAPSHOT +version = 1.20.6-R0.1-SNAPSHOT -foliaCommit = 6dba62e72c05cd71da3a99da09f3d8879a508ac3 +foliaCommit = e11a709b335774e10fade0ade952a73d7dd577a7 org.gradle.caching = true org.gradle.parallel = true org.gradle.vfs.watch = false org.gradle.jvmargs = -Xmx3G -mcVersion = 1.20.4 +mcVersion = 1.20.6 GroupMCV = 1.20 preVersion = false \ No newline at end of file diff --git a/patches/api/0002-Leaves-Replay-Mod-API.patch b/patches/api/0002-Leaves-Replay-Mod-API.patch index aec3d41..497b7e8 100644 --- a/patches/api/0002-Leaves-Replay-Mod-API.patch +++ b/patches/api/0002-Leaves-Replay-Mod-API.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Leaves Replay Mod API diff --git a/src/main/java/org/bukkit/Bukkit.java b/src/main/java/org/bukkit/Bukkit.java -index c37904d1aae749030620e1bbdb955e25c91ab1f8..84df970635f25239ba1e67fd3dcb4401d14be862 100644 +index b4327a55c422380ca6b3a1dc47c3adbe76de4655..8645a137c6beb5fe9bbb30159317a35a4cd96a50 100644 --- a/src/main/java/org/bukkit/Bukkit.java +++ b/src/main/java/org/bukkit/Bukkit.java -@@ -2892,4 +2892,10 @@ public final class Bukkit { +@@ -2918,4 +2918,10 @@ public final class Bukkit { public static Server.Spigot spigot() { return server.spigot(); } @@ -20,10 +20,10 @@ index c37904d1aae749030620e1bbdb955e25c91ab1f8..84df970635f25239ba1e67fd3dcb4401 + // Leaves end - Photographer API } diff --git a/src/main/java/org/bukkit/Server.java b/src/main/java/org/bukkit/Server.java -index 15395ef52505087e7eef3b1a5981e787dcc16508..7c7b350f1bbcd1585d175cf9c6b0a938ae5ad759 100644 +index 2a888d33eff4487f23463c565c9f75c40fba7d94..3a78bcb6f681b44594c4f5f35120b67adbe6aeb5 100644 --- a/src/main/java/org/bukkit/Server.java +++ b/src/main/java/org/bukkit/Server.java -@@ -2524,4 +2524,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi +@@ -2546,4 +2546,8 @@ public interface Server extends PluginMessageRecipient, net.kyori.adventure.audi */ public boolean isGlobalTickThread(); // Folia end - region threading API diff --git a/patches/api/0003-KioCG-Chunk-API.patch b/patches/api/0003-KioCG-Chunk-API.patch index a0f8cda..6ee6033 100644 --- a/patches/api/0003-KioCG-Chunk-API.patch +++ b/patches/api/0003-KioCG-Chunk-API.patch @@ -16,10 +16,10 @@ index d547ae2b20c58bc703de4532b3b591dd34ddb1c6..8721954514f813d0a1200935e27a3ac0 + long getChunkHotAvg(); // KioCG } diff --git a/src/main/java/org/bukkit/entity/Player.java b/src/main/java/org/bukkit/entity/Player.java -index d048ae07cc33fd77d128cc1ebf88b0804969fa3c..7e633b448327ee01533a00bc278367c47951d3e2 100644 +index 6c327a07bf8a6aa11a2d7dad12b2830acc539484..d66a165ca910bf47da837fb166e5c295325ef9a8 100644 --- a/src/main/java/org/bukkit/entity/Player.java +++ b/src/main/java/org/bukkit/entity/Player.java -@@ -3752,4 +3752,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM +@@ -3806,4 +3806,6 @@ public interface Player extends HumanEntity, Conversable, OfflinePlayer, PluginM @Override Spigot spigot(); // Spigot end diff --git a/patches/server/0001-Fix-build.patch b/patches/server/0001-Fix-build.patch index 425686b..9925338 100644 --- a/patches/server/0001-Fix-build.patch +++ b/patches/server/0001-Fix-build.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Fix build diff --git a/build.gradle.kts b/build.gradle.kts -index 905262067dabc7cbe5b08639fcefd3a996a937e0..c0608731dd7a352628a1e31997d0658dfa9f2ea8 100644 +index b1d621ed91c74790fd5b66339c044ec444de62ef..fee54ed7abfc93f8fd911aea6831988e3699f762 100644 --- a/build.gradle.kts +++ b/build.gradle.kts -@@ -14,7 +14,7 @@ val alsoShade: Configuration by configurations.creating +@@ -13,7 +13,7 @@ val alsoShade: Configuration by configurations.creating dependencies { // Folia start @@ -17,7 +17,7 @@ index 905262067dabc7cbe5b08639fcefd3a996a937e0..c0608731dd7a352628a1e31997d0658d implementation("io.papermc.paper:paper-mojangapi:${project.version}") { exclude("io.papermc.paper", "paper-api") } -@@ -75,7 +75,7 @@ tasks.jar { +@@ -83,7 +83,7 @@ tasks.jar { attributes( "Main-Class" to "org.bukkit.craftbukkit.Main", "Implementation-Title" to "CraftBukkit", diff --git a/patches/server/0002-Rebrand-to-Luminol.patch b/patches/server/0002-Rebrand-to-Luminol.patch index be8d1ea..6f52a83 100644 --- a/patches/server/0002-Rebrand-to-Luminol.patch +++ b/patches/server/0002-Rebrand-to-Luminol.patch @@ -27,7 +27,7 @@ index cb60d58d4a7556dd896f31d0cd249f860bb3ef84..b52a805150e95d7d27403d3c18088b33 metrics.addCustomChart(new Metrics.DrilldownPie("java_version", () -> { Map> map = new HashMap<>(); diff --git a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java -index e2f704c115fd6e00960bb56bb0779f1100c89c17..72b9343979de5aa8bb399cbe7cb8a795df9830ab 100644 +index e2f704c115fd6e00960bb56bb0779f1100c89c17..7707908064a75ecf02677a0110207e194c3eefd1 100644 --- a/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java +++ b/src/main/java/com/destroystokyo/paper/PaperVersionFetcher.java @@ -20,7 +20,7 @@ import java.util.stream.StreamSupport; @@ -51,10 +51,10 @@ index e2f704c115fd6e00960bb56bb0779f1100c89c17..72b9343979de5aa8bb399cbe7cb8a795 return history != null ? TextComponent.ofChildren(updateMessage, Component.newline(), history) : updateMessage; diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index d6a7188227cee9072976db98613324ee2d3dcdc8..8c9a80197247a384dd80747bf23fdd809d08b341 100644 +index 5702ab6f4a3f02ce791a7bdbc2a9487fc318a611..f456ff479ee40fc318efa526dd02a21a2bc131ab 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1963,7 +1963,7 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop entries) { +@@ -14,9 +14,16 @@ public record ArgumentSignatures(List entries) { private static final int MAX_ARGUMENT_NAME_LENGTH = 16; public ArgumentSignatures(FriendlyByteBuf buf) { @@ -49,15 +49,14 @@ index 4abd7babc3aa7268975386e7c2319f7961b0c3aa..d209466866c30b3f15b8c40934ea6470 + } + //Luminol end + -+ - @Nullable - public MessageSignature get(String argumentName) { - for (ArgumentSignatures.Entry entry : this.entries) { + public void write(FriendlyByteBuf buf) { + buf.writeCollection(this.entries, (buf2, entry) -> entry.write(buf2)); + } diff --git a/src/main/java/net/minecraft/network/FriendlyByteBuf.java b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -index b863249ff7e13cf4939c8961601f0564c62fd661..6ab73b0568c3f9df8090be992736a14d49e0286c 100644 +index aafeb9c61ddba6a8671f0238eda47b227619f1af..6ba184b38864ac64ec94a8bb326d91495a56c945 100644 --- a/src/main/java/net/minecraft/network/FriendlyByteBuf.java +++ b/src/main/java/net/minecraft/network/FriendlyByteBuf.java -@@ -143,6 +143,16 @@ public class FriendlyByteBuf extends ByteBuf { +@@ -129,6 +129,16 @@ public class FriendlyByteBuf extends ByteBuf { // Paper end - Adventure; add max length parameter DataResult dataresult = codec.encodeStart(JsonOps.INSTANCE, value); @@ -71,6 +70,6 @@ index b863249ff7e13cf4939c8961601f0564c62fd661..6ab73b0568c3f9df8090be992736a14d + } + //Luminol end + - this.writeUtf(FriendlyByteBuf.GSON.toJson((JsonElement) Util.getOrThrow(dataresult, (s) -> { - return new EncoderException("Failed to encode: " + s + " " + value); + this.writeUtf(FriendlyByteBuf.GSON.toJson((JsonElement) dataresult.getOrThrow((s) -> { + return new EncoderException("Failed to encode: " + s + " " + String.valueOf(value)); })), maxLength); // Paper - Adventure; add max length parameter diff --git a/patches/server/0009-Add-a-simple-tpsbar.patch b/patches/server/0009-Add-a-simple-tpsbar.patch index 1e09045..88d5963 100644 --- a/patches/server/0009-Add-a-simple-tpsbar.patch +++ b/patches/server/0009-Add-a-simple-tpsbar.patch @@ -347,10 +347,10 @@ index 0000000000000000000000000000000000000000..3f1478dde900d671c4bfa43df80f6295 + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index 68355b9a0a88c871e18031d04581c9ef53313f48..c626018d786fe231cd74a28c83515715d896f214 100644 +index e032f454fe8b274ed70f750ada4b3f375fda33da..af3eedca870fdf01e9ff82e6b6595ef9b3a9a0a8 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -830,6 +830,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -851,6 +851,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface @Override public void stopServer() { @@ -359,10 +359,10 @@ index 68355b9a0a88c871e18031d04581c9ef53313f48..c626018d786fe231cd74a28c83515715 //Util.shutdownExecutors(); // Paper - moved into super SkullBlockEntity.clear(); diff --git a/src/main/java/net/minecraft/server/level/ServerPlayer.java b/src/main/java/net/minecraft/server/level/ServerPlayer.java -index 9d7837f90340a96edbd544826ae2241c61ae72c4..c8701a2a0a3cbd60e263fe5c069b5993b36842a6 100644 +index da87c4825c67e62ae238877f1fb3220f4c57f553..11b5155820d38a42e62f68fe0f70fe4daf80f5d1 100644 --- a/src/main/java/net/minecraft/server/level/ServerPlayer.java +++ b/src/main/java/net/minecraft/server/level/ServerPlayer.java -@@ -285,6 +285,7 @@ public class ServerPlayer extends Player { +@@ -302,6 +302,7 @@ public class ServerPlayer extends Player { // Paper start - replace player chunk loader private final java.util.concurrent.atomic.AtomicReference viewDistances = new java.util.concurrent.atomic.AtomicReference<>(new io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances(-1, -1, -1)); public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.PlayerChunkLoaderData chunkLoader; @@ -371,10 +371,10 @@ index 9d7837f90340a96edbd544826ae2241c61ae72c4..c8701a2a0a3cbd60e263fe5c069b5993 public io.papermc.paper.chunk.system.RegionizedPlayerChunkLoader.ViewDistances getViewDistances() { return this.viewDistances.get(); diff --git a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -index 0ece776a1e281a328e28dc07fb4dc882b19d029c..b57980d4fa445f2aa71e4477459da833eade50e8 100644 +index 92f08b13da2e13cf375d8794e54f7292140545d7..14dca1757d518814890d9866182b50e7e22ebf58 100644 --- a/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java +++ b/src/main/java/org/bukkit/craftbukkit/entity/CraftPlayer.java -@@ -2287,6 +2287,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2372,6 +2372,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { handle.expToDrop = data.getInt("expToDrop"); handle.keepLevel = data.getBoolean("keepLevel"); } @@ -384,7 +384,7 @@ index 0ece776a1e281a328e28dc07fb4dc882b19d029c..b57980d4fa445f2aa71e4477459da833 } } -@@ -2308,6 +2311,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { +@@ -2393,6 +2396,9 @@ public class CraftPlayer extends CraftHumanEntity implements Player { data.putLong("lastPlayed", System.currentTimeMillis()); data.putString("lastKnownName", handle.getScoreboardName()); diff --git a/patches/server/0010-Add-config-for-username-check.patch b/patches/server/0010-Add-config-for-username-check.patch index 406e2b8..0544f93 100644 --- a/patches/server/0010-Add-config-for-username-check.patch +++ b/patches/server/0010-Add-config-for-username-check.patch @@ -31,15 +31,16 @@ index 0000000000000000000000000000000000000000..c7e4724cc4ab8d911bcaf0106c098b26 + } +} diff --git a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -index aa4b461bbb2c8c4753f7c9057bab1740de2c0284..1ff6c82925417932df856bf1e5866519327f018e 100644 +index 83b09feec13a00c35e6f8d4f0ccdae1c8da9c0e5..d946a08f7a7532079eab83a7d4affc89e6e6ac1e 100644 --- a/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java +++ b/src/main/java/net/minecraft/server/network/ServerLoginPacketListenerImpl.java -@@ -143,7 +143,7 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, - @Override +@@ -171,7 +171,8 @@ public class ServerLoginPacketListenerImpl implements ServerLoginPacketListener, public void handleHello(ServerboundHelloPacket packet) { Validate.validState(this.state == ServerLoginPacketListenerImpl.State.HELLO, "Unexpected hello packet", new Object[0]); -- if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation) Validate.validState(Player.isValidUsername(packet.name()), "Invalid characters in username", new Object[0]); // Paper - config username validation -+ if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation && me.earthme.luminol.config.modules.misc.UsernameCheckConfig.enabled) Validate.validState(Player.isValidUsername(packet.name()), "Invalid characters in username", new Object[0]); // Paper - config username validation //Luminol - Add config for username check - this.requestedUsername = packet.name(); - GameProfile gameprofile = this.server.getSingleplayerProfile(); - + // Paper start - Validate usernames +- if (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() ++ if (me.earthme.luminol.config.modules.misc.UsernameCheckConfig.enabled //Luminol - Add config for username check ++ && io.papermc.paper.configuration.GlobalConfiguration.get().proxies.isProxyOnlineMode() + && io.papermc.paper.configuration.GlobalConfiguration.get().unsupportedSettings.performUsernameValidation + && !this.iKnowThisMayNotBeTheBestIdeaButPleaseDisableUsernameValidation) { + Validate.validState(StringUtil.isReasonablePlayerName(packet.name()), "Invalid characters in username", new Object[0]); diff --git a/patches/server/0011-Add-config-for-offline-mode-warning.patch b/patches/server/0011-Add-config-for-offline-mode-warning.patch index 4247a54..5dd8a71 100644 --- a/patches/server/0011-Add-config-for-offline-mode-warning.patch +++ b/patches/server/0011-Add-config-for-offline-mode-warning.patch @@ -31,10 +31,10 @@ index 0000000000000000000000000000000000000000..502b93c7bda9e8577a1901a8777b7cf9 + } +} diff --git a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -index c626018d786fe231cd74a28c83515715d896f214..49555381641e9cf9a5c3f00db1e193c9d992637b 100644 +index af3eedca870fdf01e9ff82e6b6595ef9b3a9a0a8..fd00ae1315bafeb24247943e5c84b107a783eea3 100644 --- a/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java +++ b/src/main/java/net/minecraft/server/dedicated/DedicatedServer.java -@@ -282,7 +282,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface +@@ -295,7 +295,7 @@ public class DedicatedServer extends MinecraftServer implements ServerInterface String proxyFlavor = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "Velocity" : "BungeeCord"; String proxyLink = (io.papermc.paper.configuration.GlobalConfiguration.get().proxies.velocity.enabled) ? "https://docs.papermc.io/velocity/security" : "http://www.spigotmc.org/wiki/firewall-guide/"; // Paper end - Add Velocity IP Forwarding Support diff --git a/patches/server/0012-Add-config-for-out-of-order-chat-checks.patch b/patches/server/0012-Add-config-for-out-of-order-chat-checks.patch index 0b1475e..4e8dcce 100644 --- a/patches/server/0012-Add-config-for-out-of-order-chat-checks.patch +++ b/patches/server/0012-Add-config-for-out-of-order-chat-checks.patch @@ -31,15 +31,15 @@ index 0000000000000000000000000000000000000000..83176a8a7e993b51a0663b0f76161884 + } +} diff --git a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java -index 0af9ed92824ccf30814eceb6a2c2e5c12661c991..7c42f0ca1f3abe38dcd97b0985c72332b45761f7 100644 +index 300929a406905f5ff1ede664d5b99fb0938d4d2e..7c82730e9a66f9b44dd559d7b8da511f9c5f8ca8 100644 --- a/src/main/java/net/minecraft/network/chat/SignedMessageChain.java +++ b/src/main/java/net/minecraft/network/chat/SignedMessageChain.java -@@ -37,7 +37,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"), false, org.bukkit.event.player.PlayerKickEvent.Cause.EXPIRED_PROFILE_PUBLIC_KEY); // Paper - kick event causes -- } else if (body.timeStamp().isBefore(this.lastTimeStamp)) { -+ } else if (me.earthme.luminol.config.modules.misc.InorderChatConfig.enabled && body.timeStamp().isBefore(this.lastTimeStamp)) { // Luminol - Add config for out-of-order chat checks - 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(); +@@ -45,7 +45,7 @@ public class SignedMessageChain { + SignedMessageLink signedMessageLink = SignedMessageChain.this.nextLink; + if (signedMessageLink == null) { + throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.CHAIN_BROKEN); +- } else if (body.timeStamp().isBefore(SignedMessageChain.this.lastTimeStamp)) { ++ } else if (me.earthme.luminol.config.modules.misc.InorderChatConfig.enabled && body.timeStamp().isBefore(SignedMessageChain.this.lastTimeStamp)) { // Luminol - Add config for out-of-order chat checks + this.setChainBroken(); + throw new SignedMessageChain.DecodeException(SignedMessageChain.DecodeException.OUT_OF_ORDER_CHAT, org.bukkit.event.player.PlayerKickEvent.Cause.OUT_OF_ORDER_CHAT); // Paper - kick event causes + } else { diff --git a/patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch b/patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch index fbd8a7c..1517f1d 100644 --- a/patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch +++ b/patches/server/0013-Add-a-simple-watchdog-for-tick-regions.patch @@ -243,10 +243,10 @@ index 0000000000000000000000000000000000000000..6b4368cdf9762ad981345fef0f26cd00 +} \ No newline at end of file diff --git a/src/main/java/net/minecraft/server/MinecraftServer.java b/src/main/java/net/minecraft/server/MinecraftServer.java -index 0d756dd5181a2444175184227bef648d07c17236..59b1da130e519cbe06ed5eedf9e4dc881e45ba36 100644 +index d5487dbe3cb9c6fcdec0e6bf02d030d666e81858..bf488b466a9901f0311bacf774ad046a18f2426b 100644 --- a/src/main/java/net/minecraft/server/MinecraftServer.java +++ b/src/main/java/net/minecraft/server/MinecraftServer.java -@@ -1222,6 +1222,8 @@ public abstract class MinecraftServer extends ReentrantBlockableEventLoop teleportComplete) { io.papermc.paper.util.TickThread.ensureTickThread(this, "Cannot teleport entity async"); @@ -95,10 +95,10 @@ index 36f0175228f4ab80ebc67082e7c9bbbc2c14e147..ad15df5dfe34e20a6b5dafaf01e8a730 return false; } diff --git a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java -index d514ec1e4cbdc579c3a61533998437903afdc8b6..ed4cbc459bf5f4b7615c6e2ab0d99728d18f2598 100644 +index 4d7454e5a64fc18e63793a221daa94617f17c666..a1dc46ec6d53389eb7c801a7a14c4169406de580 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/AbstractMinecart.java -@@ -378,7 +378,21 @@ public abstract class AbstractMinecart extends VehicleEntity { +@@ -375,7 +375,21 @@ public abstract class AbstractMinecart extends VehicleEntity { this.level().getCraftServer().getPluginManager().callEvent(new org.bukkit.event.vehicle.VehicleUpdateEvent(vehicle)); if (!from.equals(to)) { @@ -121,10 +121,10 @@ index d514ec1e4cbdc579c3a61533998437903afdc8b6..ed4cbc459bf5f4b7615c6e2ab0d99728 // CraftBukkit end if (this.getMinecartType() == AbstractMinecart.Type.RIDEABLE && this.getDeltaMovement().horizontalDistanceSqr() > 0.01D) { diff --git a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -index db6aa75d642f4a7258f197933671907faf79c8f2..065d4c06e3fd93fb46595b9864b150ea2480f5fc 100644 +index b068cff9b5aa457d65b679529956e8210296d799..d002519a356072284faa5f879e188f3e3062939f 100644 --- a/src/main/java/net/minecraft/world/entity/vehicle/Boat.java +++ b/src/main/java/net/minecraft/world/entity/vehicle/Boat.java -@@ -377,8 +377,22 @@ public class Boat extends VehicleEntity implements VariantHolder { +@@ -370,8 +370,22 @@ public class Boat extends VehicleEntity implements VariantHolder { server.getPluginManager().callEvent(new org.bukkit.event.vehicle.VehicleUpdateEvent(vehicle)); if (this.lastLocation != null && !this.lastLocation.equals(to)) { diff --git a/patches/server/0018-Kaiiju-Vanilla-end-portal-teleportation.patch b/patches/server/0018-Kaiiju-Vanilla-end-portal-teleportation.patch index 3df4eb3..fec0756 100644 --- a/patches/server/0018-Kaiiju-Vanilla-end-portal-teleportation.patch +++ b/patches/server/0018-Kaiiju-Vanilla-end-portal-teleportation.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Kaiiju Vanilla end portal teleportation diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 8749e1d7109b751ec69e771b43014c085c0802cd..b676200cb54afa7aebe23eee4e7aef7c9a6e0712 100644 +index 7112c529a652b6ab6a418b3a44fc1f075061cc74..643631e11c88285f33d050bf7b4b1e2f63b5c992 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -4193,12 +4193,17 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4240,12 +4240,17 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess targetPos, 16, // load 16 blocks to be safe from block physics ca.spottedleaf.concurrentutil.executor.standard.PrioritisedExecutor.Priority.HIGH, (chunks) -> { @@ -28,7 +28,7 @@ index 8749e1d7109b751ec69e771b43014c085c0802cd..b676200cb54afa7aebe23eee4e7aef7c ); } ); -@@ -4385,6 +4390,10 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4432,6 +4437,10 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess if (!this.canPortalAsync(takePassengers)) { return false; } @@ -39,7 +39,7 @@ index 8749e1d7109b751ec69e771b43014c085c0802cd..b676200cb54afa7aebe23eee4e7aef7c Vec3 initialPosition = this.position(); ChunkPos initialPositionChunk = new ChunkPos( -@@ -4443,7 +4452,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -4490,7 +4499,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // place passengerTree.root.placeInAsync( originWorld, destination, Entity.TELEPORT_FLAG_LOAD_CHUNK | (takePassengers ? Entity.TELEPORT_FLAG_TELEPORT_PASSENGERS : 0L), diff --git a/patches/server/0019-Petal-Reduce-sensor-work.patch b/patches/server/0019-Petal-Reduce-sensor-work.patch index 863d5e1..5fefee4 100644 --- a/patches/server/0019-Petal-Reduce-sensor-work.patch +++ b/patches/server/0019-Petal-Reduce-sensor-work.patch @@ -33,20 +33,21 @@ index 0000000000000000000000000000000000000000..dd45cf1fde5ee4cf8347064f106c64b8 + } +} diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 54297b9dde40fe853d873d60373cd8c0a3c9466b..7369d608c26e46e9d3a881ac14efe1d0f075b1cb 100644 +index ef5cd008de4d145b67c70e48ae21ea969aedb1f0..8345d8431e1c05639f14919b9bad1029249a5f50 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -926,10 +926,11 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -983,12 +983,12 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti return; } // Paper end - Allow nerfed mobs to jump and float -+ int i = this.tickCount + this.getId(); // Folia - region threading //Luminol - Petal - Move up -+ - this.level().getProfiler().push("sensing"); ++ int i = this.tickCount + this.getId(); //Luminol - Petal - Move up + ProfilerFiller gameprofilerfiller = this.level().getProfiler(); + + gameprofilerfiller.push("sensing"); - this.sensing.tick(); -+ if (i % me.earthme.luminol.config.modules.optimizations.PetalReduceSensorWorkConfig.delayTicks == 0 || !me.earthme.luminol.config.modules.optimizations.PetalReduceSensorWorkConfig.enabled)this.sensing.tick(); //Luminol - Petal - Reduce sensor work - this.level().getProfiler().pop(); -- int i = this.tickCount + this.getId(); // Folia - region threading ++ if (i % me.earthme.luminol.config.modules.optimizations.PetalReduceSensorWorkConfig.delayTicks == 0 || !me.earthme.luminol.config.modules.optimizations.PetalReduceSensorWorkConfig.enabled) this.sensing.tick(); // Luminol - Petal - Reduce sensor work + gameprofilerfiller.pop(); +- int i = this.tickCount + this.getId(); if (i % 2 != 0 && this.tickCount > 1) { - this.level().getProfiler().push("targetSelector"); + gameprofilerfiller.push("targetSelector"); diff --git a/patches/server/0021-Pufferfish-Cache-climbing-check-for-activation.patch b/patches/server/0021-Pufferfish-Cache-climbing-check-for-activation.patch index a2f9c0e..7e67add 100644 --- a/patches/server/0021-Pufferfish-Cache-climbing-check-for-activation.patch +++ b/patches/server/0021-Pufferfish-Cache-climbing-check-for-activation.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Pufferfish Cache climbing check for activation diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index b676200cb54afa7aebe23eee4e7aef7c9a6e0712..2fb2df4922a1b5b3acf732e68d8db7bb15ecc789 100644 +index 643631e11c88285f33d050bf7b4b1e2f63b5c992..94c9f407f526b2d43cf61725b414b113de03c67d 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -309,7 +309,7 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -312,7 +312,7 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess public double yo; public double zo; private Vec3 position; @@ -18,10 +18,10 @@ index b676200cb54afa7aebe23eee4e7aef7c9a6e0712..2fb2df4922a1b5b3acf732e68d8db7bb private Vec3 deltaMovement; private float yRot; diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index b9f6e599afd4bdfb97e7f1b1881730cbed781bba..ff7b0d6a22a0858d4e4348d4f3c0c55bcb3f0084 100644 +index ae5c7f39581bf389c5a89ad914d0d7092ad3dcdd..03226f99cbf67a77b4ffcd3accbe23298a0bcecd 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -143,7 +143,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; +@@ -150,7 +150,6 @@ import org.bukkit.event.entity.EntityTeleportEvent; import org.bukkit.event.player.PlayerItemConsumeEvent; // CraftBukkit end @@ -29,7 +29,7 @@ index b9f6e599afd4bdfb97e7f1b1881730cbed781bba..ff7b0d6a22a0858d4e4348d4f3c0c55b public abstract class LivingEntity extends Entity implements Attackable { -@@ -2043,6 +2042,20 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -2070,6 +2069,20 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.lastClimbablePos; } diff --git a/patches/server/0023-Pufferfish-Optimize-suffocation.patch b/patches/server/0023-Pufferfish-Optimize-suffocation.patch index f792cdd..7c3d861 100644 --- a/patches/server/0023-Pufferfish-Optimize-suffocation.patch +++ b/patches/server/0023-Pufferfish-Optimize-suffocation.patch @@ -31,10 +31,10 @@ index 0000000000000000000000000000000000000000..3e48cd297b4869e5c89b6abc43c726d3 + } +} diff --git a/src/main/java/net/minecraft/world/entity/LivingEntity.java b/src/main/java/net/minecraft/world/entity/LivingEntity.java -index ff7b0d6a22a0858d4e4348d4f3c0c55bcb3f0084..96039cd1c01cf6ea384f63bf5623de75e5def41f 100644 +index 03226f99cbf67a77b4ffcd3accbe23298a0bcecd..0e53ec3e67820b86ceb3680f3b743632489600d2 100644 --- a/src/main/java/net/minecraft/world/entity/LivingEntity.java +++ b/src/main/java/net/minecraft/world/entity/LivingEntity.java -@@ -428,7 +428,7 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -441,7 +441,7 @@ public abstract class LivingEntity extends Entity implements Attackable { boolean flag = this instanceof net.minecraft.world.entity.player.Player; if (!this.level().isClientSide) { @@ -43,7 +43,7 @@ index ff7b0d6a22a0858d4e4348d4f3c0c55bcb3f0084..96039cd1c01cf6ea384f63bf5623de75 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(); -@@ -1436,6 +1436,19 @@ public abstract class LivingEntity extends Entity implements Attackable { +@@ -1450,6 +1450,19 @@ public abstract class LivingEntity extends Entity implements Attackable { return this.getHealth() <= 0.0F; } @@ -64,10 +64,10 @@ index ff7b0d6a22a0858d4e4348d4f3c0c55bcb3f0084..96039cd1c01cf6ea384f63bf5623de75 public boolean hurt(DamageSource source, float amount) { if (this.isInvulnerableTo(source)) { diff --git a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -index 12440ee2dccc0a697fb403765f2e1b987ccc0283..de2471cfa96a23944f229f33ffdff88b6b7756e4 100644 +index 7ddca52f7fe3f289b4b867e134326b1ead1a2aee..5040b1a7125dd9647a98fd812f558ec3a2171092 100644 --- a/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java +++ b/src/main/java/net/minecraft/world/entity/boss/wither/WitherBoss.java -@@ -151,6 +151,13 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob +@@ -154,6 +154,13 @@ public class WitherBoss extends Monster implements PowerableMob, RangedAttackMob this.bossEvent.setName(this.getDisplayName()); } diff --git a/patches/server/0025-Pufferfish-Reduce-chunk-loading-lookups.patch b/patches/server/0025-Pufferfish-Reduce-chunk-loading-lookups.patch index f8acd09..85e5aa5 100644 --- a/patches/server/0025-Pufferfish-Reduce-chunk-loading-lookups.patch +++ b/patches/server/0025-Pufferfish-Reduce-chunk-loading-lookups.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Pufferfish Reduce chunk loading & lookups diff --git a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -index f33c03e81b7ff643741f56eea055e6af260de618..6563e625ebae47fc68e5010d36bd4b4d327c07b7 100644 +index 260202fab3ac300552c557b44dcf251f083c6a78..9cf4e2f309e182c69e9592ac606c0ae85a1200b6 100644 --- a/src/main/java/net/minecraft/world/entity/monster/EnderMan.java +++ b/src/main/java/net/minecraft/world/entity/monster/EnderMan.java -@@ -333,11 +333,17 @@ public class EnderMan extends Monster implements NeutralMob { +@@ -318,11 +318,17 @@ public class EnderMan extends Monster implements NeutralMob { private boolean teleport(double x, double y, double z) { BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(x, y, z); diff --git a/patches/server/0027-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch b/patches/server/0027-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch index 903ef93..3eccaba 100644 --- a/patches/server/0027-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch +++ b/patches/server/0027-Pufferfish-Reduce-entity-fluid-lookups-if-no-fluids.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Pufferfish Reduce entity fluid lookups if no fluids diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 2fb2df4922a1b5b3acf732e68d8db7bb15ecc789..9b4a9025f9b30834a07a83cc02e7ee7f665dcbd9 100644 +index 94c9f407f526b2d43cf61725b414b113de03c67d..94bac805d032015587e88b4de3cf7064a534e736 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -5260,16 +5260,18 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -5317,16 +5317,18 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public boolean updateFluidHeightAndDoFluidPushing(TagKey tag, double speed) { @@ -34,7 +34,7 @@ index 2fb2df4922a1b5b3acf732e68d8db7bb15ecc789..9b4a9025f9b30834a07a83cc02e7ee7f double d1 = 0.0D; boolean flag = this.isPushedByFluid(); boolean flag1 = false; -@@ -5277,14 +5279,61 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -5334,14 +5336,61 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess int k1 = 0; BlockPos.MutableBlockPos blockposition_mutableblockposition = new BlockPos.MutableBlockPos(); @@ -102,7 +102,7 @@ index 2fb2df4922a1b5b3acf732e68d8db7bb15ecc789..9b4a9025f9b30834a07a83cc02e7ee7f if (d2 >= axisalignedbb.minY) { flag1 = true; -@@ -5306,9 +5355,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -5363,9 +5412,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // CraftBukkit end } } @@ -116,7 +116,7 @@ index 2fb2df4922a1b5b3acf732e68d8db7bb15ecc789..9b4a9025f9b30834a07a83cc02e7ee7f if (vec3d.length() > 0.0D) { if (k1 > 0) { 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 796bbef3544e06b8e7aac7e8ac5f740a2613f4bd..2422ca3ffc6ab7178cacf933b8013f85e7de4bd9 100644 +index a2a5aef769ee8bb638a5a9f3da9812fa4a85dda5..7288261b8924d08e93abecb664e2273c624a325b 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 { diff --git a/patches/server/0028-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch b/patches/server/0028-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch index 3fab086..5e1d8ad 100644 --- a/patches/server/0028-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch +++ b/patches/server/0028-Pufferfish-Only-check-for-spooky-season-once-an-hour.patch @@ -5,10 +5,10 @@ Subject: [PATCH] Pufferfish Only check for spooky season once an hour 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 44fa2d4f90389f5526746bd94a2450c03340bd0b..3bbeb33eb51b6aea96e926af6715980e207b815e 100644 +index dc27ddf5131e7398a5390a5187261d4c7fb6ccaa..39cc49b746b0a775fde5d173dd4f712ab4a84a97 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,25 @@ public class Bat extends AmbientCreature { +@@ -239,13 +239,25 @@ public class Bat extends AmbientCreature { } } @@ -33,5 +33,5 @@ index 44fa2d4f90389f5526746bd94a2450c03340bd0b..3bbeb33eb51b6aea96e926af6715980e } + // Pufferfish end - @Override - protected float getStandingEyeHeight(Pose pose, EntityDimensions dimensions) { + private void setupAnimationStates() { + if (this.isResting()) { diff --git a/patches/server/0029-Pufferfish-Entity-TTL.patch b/patches/server/0029-Pufferfish-Entity-TTL.patch index cbadd13..5f935b9 100644 --- a/patches/server/0029-Pufferfish-Entity-TTL.patch +++ b/patches/server/0029-Pufferfish-Entity-TTL.patch @@ -49,10 +49,10 @@ index 0000000000000000000000000000000000000000..15697d69659b6e1e776acf5094684b5f + } +} diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 9b4a9025f9b30834a07a83cc02e7ee7f665dcbd9..835a6e73a340375e30e4822df45a1c99d36ac009 100644 +index 94bac805d032015587e88b4de3cf7064a534e736..5caa390a167c770f657f142fe3355d127fc95cce 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -812,6 +812,12 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -856,6 +856,12 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess } public void tick() { @@ -66,12 +66,12 @@ index 9b4a9025f9b30834a07a83cc02e7ee7f665dcbd9..835a6e73a340375e30e4822df45a1c99 } diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index f921c159c4f7556daf3c8405241de3607ba251ad..8deae3e95a26f4b42b2c2134e22f9649bd7a5391 100644 +index a2f0fb8b4057bd3a84d18298e49c4d02955240d3..aa2bb97ef305ed234a11b05e665ac1062b571591 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -313,6 +313,7 @@ public class EntityType implements FeatureElement, EntityTypeT - private ResourceLocation lootTable; +@@ -325,6 +325,7 @@ public class EntityType implements FeatureElement, EntityTypeT private final EntityDimensions dimensions; + private final float spawnDimensionsScale; private final FeatureFlagSet requiredFeatures; + public int ttl = -1; // Pufferfish diff --git a/patches/server/0030-Pufferfish-Reduce-projectile-chunk-loading.patch b/patches/server/0030-Pufferfish-Reduce-projectile-chunk-loading.patch index c8a637b..19944d0 100644 --- a/patches/server/0030-Pufferfish-Reduce-projectile-chunk-loading.patch +++ b/patches/server/0030-Pufferfish-Reduce-projectile-chunk-loading.patch @@ -33,10 +33,10 @@ index 0000000000000000000000000000000000000000..12683ec5a5102e45b6171fea0b833ba5 + } +} 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 10d7c64fb3a9bafdcdae99f8dc87017722341337..11dfac223d36b0a8cbd865b3a29de15b4268eeb0 100644 +index a8d2f7a9d0bcb6db0b38ac30b098d59951053b47..77eee09a301a838f21834319d4962eba1c8dcbed 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 { +@@ -46,6 +46,36 @@ public abstract class Projectile extends Entity implements TraceableEntity { super(type, world); } diff --git a/patches/server/0031-Pufferfish-Dynamic-Activation-of-Brain.patch b/patches/server/0031-Pufferfish-Dynamic-Activation-of-Brain.patch index 6a7070f..6679c8f 100644 --- a/patches/server/0031-Pufferfish-Dynamic-Activation-of-Brain.patch +++ b/patches/server/0031-Pufferfish-Dynamic-Activation-of-Brain.patch @@ -71,10 +71,10 @@ index 0000000000000000000000000000000000000000..af5893ba1f738ec9827d7b714682c314 + } +} diff --git a/src/main/java/net/minecraft/server/level/ServerLevel.java b/src/main/java/net/minecraft/server/level/ServerLevel.java -index 43b8f64d7c14e6dd0975b24a3205806c4433f26f..3f394934e64df09e65b86d61a1dcabd3c6031a38 100644 +index 3cf345900624cb00e371a980a9828f94b8f9c674..01ff844462226b262d307204acff116844c09584 100644 --- a/src/main/java/net/minecraft/server/level/ServerLevel.java +++ b/src/main/java/net/minecraft/server/level/ServerLevel.java -@@ -987,6 +987,7 @@ public class ServerLevel extends Level implements WorldGenLevel { +@@ -993,6 +993,7 @@ public class ServerLevel extends Level implements WorldGenLevel { this.timings.entityTick.startTiming(); // Spigot profiler.startTimer(ca.spottedleaf.leafprofiler.LProfilerRegistry.ENTITY_TICK); try { // Folia - profiler regionizedWorldData.forEachTickingEntity((entity) -> { // Folia - regionised ticking @@ -83,10 +83,10 @@ index 43b8f64d7c14e6dd0975b24a3205806c4433f26f..3f394934e64df09e65b86d61a1dcabd3 if (false && this.shouldDiscardEntity(entity)) { // CraftBukkit - We prevent spawning in general, so this butchering is not needed entity.discard(); diff --git a/src/main/java/net/minecraft/world/entity/Entity.java b/src/main/java/net/minecraft/world/entity/Entity.java -index 5c36b3c6bf38acfa3f38dcca4b666aca9665e7d4..5b76c645214852f172c2a498751438090cc970ec 100644 +index 5caa390a167c770f657f142fe3355d127fc95cce..18c6fe66fa944f5e5b7892df4d8fef4c7346d3bc 100644 --- a/src/main/java/net/minecraft/world/entity/Entity.java +++ b/src/main/java/net/minecraft/world/entity/Entity.java -@@ -481,6 +481,11 @@ public abstract class Entity implements Nameable, EntityAccess, CommandSource, S +@@ -483,6 +483,11 @@ public abstract class Entity implements SyncedDataHolder, Nameable, EntityAccess // Folia - region ticking // Paper end - optimise entity tracking @@ -99,10 +99,10 @@ index 5c36b3c6bf38acfa3f38dcca4b666aca9665e7d4..5b76c645214852f172c2a49875143809 return this.yRot; } diff --git a/src/main/java/net/minecraft/world/entity/EntityType.java b/src/main/java/net/minecraft/world/entity/EntityType.java -index 8deae3e95a26f4b42b2c2134e22f9649bd7a5391..c09357c1ef84a29d972119cb496b0ae97f98e4f4 100644 +index aa2bb97ef305ed234a11b05e665ac1062b571591..29699e51b3e791a1a82a19c95fd6a3f30bac75d5 100644 --- a/src/main/java/net/minecraft/world/entity/EntityType.java +++ b/src/main/java/net/minecraft/world/entity/EntityType.java -@@ -305,6 +305,7 @@ public class EntityType implements FeatureElement, EntityTypeT +@@ -316,6 +316,7 @@ public class EntityType implements FeatureElement, EntityTypeT private final boolean canSpawnFarFromPlayer; private final int clientTrackingRange; private final int updateInterval; @@ -111,10 +111,10 @@ index 8deae3e95a26f4b42b2c2134e22f9649bd7a5391..c09357c1ef84a29d972119cb496b0ae9 private String descriptionId; @Nullable diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 7433a29577ecb36e847bd610059c0c83702d01f6..397c8ef1c83f0bf3c03d31ee19dbf1533dba9e48 100644 +index 8345d8431e1c05639f14919b9bad1029249a5f50..208f0995479df5741ff780df607451f27c6f91af 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -234,10 +234,10 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -249,10 +249,10 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti @Override public void inactiveTick() { super.inactiveTick(); @@ -127,51 +127,52 @@ index 7433a29577ecb36e847bd610059c0c83702d01f6..397c8ef1c83f0bf3c03d31ee19dbf153 this.targetSelector.tick(); } } -@@ -934,16 +934,20 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -992,16 +992,20 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti if (i % 2 != 0 && this.tickCount > 1) { - this.level().getProfiler().push("targetSelector"); + gameprofilerfiller.push("targetSelector"); + if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.targetSelector.tickRunningGoals(false); - this.level().getProfiler().pop(); - this.level().getProfiler().push("goalSelector"); + gameprofilerfiller.pop(); + gameprofilerfiller.push("goalSelector"); + if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.goalSelector.tickRunningGoals(false); - this.level().getProfiler().pop(); + gameprofilerfiller.pop(); } else { - this.level().getProfiler().push("targetSelector"); + gameprofilerfiller.push("targetSelector"); + if (this.targetSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.targetSelector.tick(); - this.level().getProfiler().pop(); - this.level().getProfiler().push("goalSelector"); + gameprofilerfiller.pop(); + gameprofilerfiller.push("goalSelector"); + if (this.goalSelector.inactiveTick(this.activatedPriority, false)) // Pufferfish - use this to alternate ticking this.goalSelector.tick(); - this.level().getProfiler().pop(); + gameprofilerfiller.pop(); } 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 38af5c7280366fd6ec077f3d914ea5f3ee77451a..f97b41422949bc6521b289daa6ca2861f25885a0 100644 +index 74d4f653d5c7f1923c59019effd78337402f7025..73f2a527d18f61db97d5b5050ebe67822771cf58 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 -@@ -52,9 +52,12 @@ public class GoalSelector { +@@ -43,9 +43,13 @@ public class GoalSelector { } // Paper start - public boolean inactiveTick() { + public boolean inactiveTick(int tickRate, boolean inactive) { // Pufferfish start + if (inactive && !me.earthme.luminol.config.modules.optimizations.EntityDABConfig.dearEnabled) tickRate = 4; // reset to Paper's -+ tickRate = Math.min(tickRate, this.newGoalRate); ++ tickRate = Math.min(tickRate, 3); this.curRate++; -- return this.curRate % this.newGoalRate == 0; -+ return this.curRate % tickRate == 0; +- return this.curRate % 3 == 0; // TODO newGoalRate was already unused in 1.20.4, check if this is correct ++ //return this.curRate % 3 == 0; // TODO newGoalRate was already unused in 1.20.4, check if this is correct ++ return this.curRate % tickRate == 0; // Luminol - Waiting Paper + // Pufferfish end } public boolean hasTasks() { for (WrappedGoal task : this.availableGoals) { diff --git a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..d241ca4d0295f9fce39c11197bd435cfac7f6e54 100644 +index 991e3274091c4e25eebc6debd44653e5b566eedb..789d3469ce4983868e4b880b6053bd2d8c33a10a 100644 --- a/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java +++ b/src/main/java/net/minecraft/world/entity/animal/allay/Allay.java -@@ -221,9 +221,11 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS +@@ -215,9 +215,11 @@ public class Allay extends PathfinderMob implements InventoryCarrier, VibrationS return 0.4F; } @@ -184,10 +185,10 @@ index 5ad5f22e5aa26445e5eb229958e7bf356bdd460e..d241ca4d0295f9fce39c11197bd435cf this.level().getProfiler().pop(); this.level().getProfiler().push("allayActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -index b21e180641d17438997a80e5bcb0ec7998d24a2e..33c160994f70f71446d665e7487913437c9f9db4 100644 +index a8cc6ddbf45370fe632e5c5fb7ceef3d299e62a4..98766696556b520cf565ccadc8dba207832b4ae3 100644 --- a/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java +++ b/src/main/java/net/minecraft/world/entity/animal/axolotl/Axolotl.java -@@ -275,9 +275,11 @@ public class Axolotl extends Animal implements LerpingModel, VariantHolder { - } +@@ -181,9 +181,11 @@ public class Frog extends Animal implements VariantHolder> { + .ifPresent(this::setVariant); } + private int behaviorTick = 0; // Pufferfish @@ -216,10 +217,10 @@ index a03fb7aa9f4528f4885db88eaf480202d5f54750..1767fd2df8cb37e9c36fa3008b5131ff this.level().getProfiler().pop(); this.level().getProfiler().push("frogActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -index 958816ce2166248b542c96c10c398a52d769b4db..415afe3473d9f8a50b1edab8cfda6158e59836e6 100644 +index 290d41136f5ec7671bc4990dfe50da0a770c124d..0d34e9e0f7ce35c3c28a9216cf3cdd5eddfe90f6 100644 --- a/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java +++ b/src/main/java/net/minecraft/world/entity/animal/frog/Tadpole.java -@@ -80,9 +80,11 @@ public class Tadpole extends AbstractFish { +@@ -83,9 +83,11 @@ public class Tadpole extends AbstractFish { return SoundEvents.TADPOLE_FLOP; } @@ -232,10 +233,10 @@ index 958816ce2166248b542c96c10c398a52d769b4db..415afe3473d9f8a50b1edab8cfda6158 this.level().getProfiler().pop(); this.level().getProfiler().push("tadpoleActivityUpdate"); diff --git a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -index 5d247ac38fe8a61603b3d934f3000bcda773142b..2e4177cfb02616ef6fa689f6d378976e39484cfb 100644 +index 02e49c7ae5e120302b6479cf3e3934b9217eebf0..81c9f1c2895adedec246732df9f9dadddfa5f345 100644 --- a/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java +++ b/src/main/java/net/minecraft/world/entity/animal/goat/Goat.java -@@ -191,9 +191,11 @@ public class Goat extends Animal { +@@ -190,9 +190,11 @@ public class Goat extends Animal { return (Brain) super.getBrain(); // CraftBukkit - decompile error } @@ -248,10 +249,10 @@ index 5d247ac38fe8a61603b3d934f3000bcda773142b..2e4177cfb02616ef6fa689f6d378976e this.level().getProfiler().pop(); this.level().getProfiler().push("goatActivityUpdate"); 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 050ffa4a23feba29fdf4c6a175cdff4e5009027d..1299f93d4f983e6715e447add65df91ef9e9090a 100644 +index c583d883118ded5e1884c757427dc5e73c10dd27..6f8a22c51ba5e2713dcdfc61c61b35123f9bf326 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 -@@ -155,9 +155,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { +@@ -153,9 +153,11 @@ public class Hoglin extends Animal implements Enemy, HoglinBase { return (Brain)super.getBrain(); } @@ -264,10 +265,10 @@ index 050ffa4a23feba29fdf4c6a175cdff4e5009027d..1299f93d4f983e6715e447add65df91e 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 a9813da7f2b248f98f22e0ad2e7842915025ec12..83d83e3f84bb6bd58761671c6cd4c8683545ff4c 100644 +index a8ab486c7e11ec137da48174af6f1030dfd48056..5878a6ecadc2b9f7ac9f70622a8c85e2940e139a 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,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento +@@ -294,9 +294,11 @@ public class Piglin extends AbstractPiglin implements CrossbowAttackMob, Invento return !this.cannotHunt; } @@ -280,10 +281,10 @@ index a9813da7f2b248f98f22e0ad2e7842915025ec12..83d83e3f84bb6bd58761671c6cd4c868 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 937f81a859953498abe73bea560c86e6560e1c33..0a151c679b0dc943598180942d6d4b3886211688 100644 +index ddd60be52dce5773c80934be5aa5705db239e3dd..9cf56f2ada025aae0710099bcc3b5c62fd7bbb9e 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 { +@@ -271,11 +271,13 @@ public class Warden extends Monster implements VibrationSystem { } @@ -298,7 +299,7 @@ index 937f81a859953498abe73bea560c86e6560e1c33..0a151c679b0dc943598180942d6d4b38 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 3eeff0cd8563939c656b5ded8470cab016903f25..90d8cd94d987416a3e9f6e6d47a5b366d4687fe0 100644 +index 6339967b154af1ca9632c7b8b315d612f4b80ea2..c4b7fd6c9d0f26361295a70d63f6fc080063d129 100644 --- a/src/main/java/net/minecraft/world/entity/npc/Villager.java +++ b/src/main/java/net/minecraft/world/entity/npc/Villager.java @@ -143,6 +143,8 @@ public class Villager extends AbstractVillager implements ReputationEventHandler diff --git a/patches/server/0032-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch b/patches/server/0032-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch index a1c58ce..5785127 100644 --- a/patches/server/0032-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch +++ b/patches/server/0032-Pufferfish-Throttle-goal-selector-during-inactive-ti.patch @@ -31,10 +31,10 @@ index 0000000000000000000000000000000000000000..acc032f727e605e79b688efb4873ff47 + } +} diff --git a/src/main/java/net/minecraft/world/entity/Mob.java b/src/main/java/net/minecraft/world/entity/Mob.java -index 7f6b810f175e21dbbc85d17fefbba2a7c638144d..a892ff1b3bc11df5f46269c5ae8838c4a7f91ea9 100644 +index 208f0995479df5741ff780df607451f27c6f91af..78619c2ce66c34c4866755aa8c6c9ae18d594498 100644 --- a/src/main/java/net/minecraft/world/entity/Mob.java +++ b/src/main/java/net/minecraft/world/entity/Mob.java -@@ -230,11 +230,13 @@ public abstract class Mob extends LivingEntity implements Targeting { +@@ -245,11 +245,13 @@ public abstract class Mob extends LivingEntity implements EquipmentUser, Targeti return this.lookControl; } diff --git a/patches/server/0033-Pufferfish-Reduce-entity-allocations.patch b/patches/server/0033-Pufferfish-Reduce-entity-allocations.patch index cb2e698..9c41730 100644 --- a/patches/server/0033-Pufferfish-Reduce-entity-allocations.patch +++ b/patches/server/0033-Pufferfish-Reduce-entity-allocations.patch @@ -5,14 +5,14 @@ Subject: [PATCH] Pufferfish Reduce entity allocations 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 b99a080ab27e24d8131fda931ca70d6d271bb01c..8d6954d05d2bf6d6c1c4953db3127b011a858cec 100644 +index 9ef8f014af332da129bfcd3370da983ec035ecc6..bc178967affd21ad04b83ea26639a2dd9b497454 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 { - private final Map attributes = Maps.newHashMap(); - private final Set dirtyAttributes = Sets.newHashSet(); +@@ -22,9 +22,11 @@ public class AttributeMap { + private final Map, AttributeInstance> attributes = new Object2ObjectOpenHashMap<>(); + private final Set dirtyAttributes = new ObjectOpenHashSet<>(); private final AttributeSupplier supplier; -+ private final java.util.function.Function createInstance; // Pufferfish ++ private final java.util.function.Function, AttributeInstance> createInstance; // Pufferfish public AttributeMap(AttributeSupplier defaultAttributes) { this.supplier = defaultAttributes; @@ -20,15 +20,12 @@ index b99a080ab27e24d8131fda931ca70d6d271bb01c..8d6954d05d2bf6d6c1c4953db3127b01 } private void onAttributeModified(AttributeInstance instance) { -@@ -42,9 +44,10 @@ public class AttributeMap { - return this.attributes.values().stream().filter(attribute -> attribute.getAttribute().isClientSyncable()).collect(Collectors.toList()); - } +@@ -43,7 +45,7 @@ public class AttributeMap { -+ @Nullable - public AttributeInstance getInstance(Attribute attribute) { + public AttributeInstance getInstance(Holder attribute) { - return this.attributes.computeIfAbsent(attribute, attributex -> this.supplier.createInstance(this::onAttributeModified, attributex)); + return this.attributes.computeIfAbsent(attribute, this.createInstance); // Pufferfish - cache lambda, as for some reason java allocates it anyways } - @Nullable + public boolean hasAttribute(Holder attribute) {